#include <linux/delay.h>
#include <linux/io.h>
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
enum bcm_usb_phy_version { … };
enum bcm_usb_phy_reg { … };
static const u8 bcm_usb_combo_phy_ss[] = …;
static const u8 bcm_usb_combo_phy_hs[] = …;
static const u8 bcm_usb_hs_phy[] = …;
enum pll_ctrl_bits { … };
static const u8 u3pll_ctrl[] = …;
#define HSPLL_PDIV_MASK …
#define HSPLL_PDIV_VAL …
static const u8 u2pll_ctrl[] = …;
enum bcm_usb_phy_ctrl_bits { … };
#define PHY_PCTL_MASK …
#define SSPHY_PCTL_VAL …
static const u8 u3phy_ctrl[] = …;
static const u8 u2phy_ctrl[] = …;
struct bcm_usb_phy_cfg { … };
#define PLL_LOCK_RETRY_COUNT …
enum bcm_usb_phy_type { … };
#define NUM_BCM_SR_USB_COMBO_PHYS …
static inline void bcm_usb_reg32_clrbits(void __iomem *addr, uint32_t clear)
{ … }
static inline void bcm_usb_reg32_setbits(void __iomem *addr, uint32_t set)
{ … }
static int bcm_usb_pll_lock_check(void __iomem *addr, u32 bit)
{ … }
static int bcm_usb_ss_phy_init(struct bcm_usb_phy_cfg *phy_cfg)
{ … }
static int bcm_usb_hs_phy_init(struct bcm_usb_phy_cfg *phy_cfg)
{ … }
static int bcm_usb_phy_reset(struct phy *phy)
{ … }
static int bcm_usb_phy_init(struct phy *phy)
{ … }
static const struct phy_ops sr_phy_ops = …;
static struct phy *bcm_usb_phy_xlate(struct device *dev,
const struct of_phandle_args *args)
{ … }
static int bcm_usb_phy_create(struct device *dev, struct device_node *node,
void __iomem *regs, uint32_t version)
{ … }
static const struct of_device_id bcm_usb_phy_of_match[] = …;
MODULE_DEVICE_TABLE(of, bcm_usb_phy_of_match);
static int bcm_usb_phy_probe(struct platform_device *pdev)
{ … }
static struct platform_driver bcm_usb_phy_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;