drivers/phy/broadcom/phy-brcm-usb-init.c

Source file repositories/reference/linux-study-clean/drivers/phy/broadcom/phy-brcm-usb-init.c

File Facts

System
Linux kernel
Corpus path
drivers/phy/broadcom/phy-brcm-usb-init.c
Extension
.c
Size
35992 bytes
Lines
1087
Domain
Driver Families
Bucket
drivers/phy
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct id_to_type {
	u32 id;
	int type;
};

static const struct id_to_type id_to_type_table[] = {
	{ 0x33900000, BRCM_FAMILY_3390A0 },
	{ 0x72500010, BRCM_FAMILY_7250B0 },
	{ 0x72600000, BRCM_FAMILY_7260A0 },
	{ 0x72550000, BRCM_FAMILY_7260A0 },
	{ 0x72680000, BRCM_FAMILY_7271A0 },
	{ 0x72710000, BRCM_FAMILY_7271A0 },
	{ 0x73640000, BRCM_FAMILY_7364A0 },
	{ 0x73660020, BRCM_FAMILY_7366C0 },
	{ 0x07437100, BRCM_FAMILY_74371A0 },
	{ 0x74390010, BRCM_FAMILY_7439B0 },
	{ 0x74450030, BRCM_FAMILY_7445D0 },
	{ 0x72780000, BRCM_FAMILY_7278A0 },
	{ 0, BRCM_FAMILY_7271A0 }, /* default */
};

static const u32
usb_reg_bits_map_table[BRCM_FAMILY_COUNT][USB_CTRL_SELECTOR_COUNT] = {
	/* 3390B0 */
	[BRCM_FAMILY_3390A0] = {
		[USB_CTRL_SETUP_SCB1_EN_SELECTOR] =
			USB_CTRL_SETUP_SCB1_EN_MASK,
		[USB_CTRL_SETUP_SCB2_EN_SELECTOR] =
			USB_CTRL_SETUP_SCB2_EN_MASK,
		[USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] =
			USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK,
		[USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] =
			USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_MASK,
		[USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] =
			USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
		[USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] =
			USB_CTRL_USB_PM_USB_PWRDN_MASK,
		[USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_SELECTOR] =
			USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK,
		[USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] =
			USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK,
		[USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS,
	},
	/* 4908 */
	[BRCM_FAMILY_4908] = {
		[USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] =
			USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK,
		[USB_CTRL_USB_PM_USB_PWRDN_SELECTOR] =
			USB_CTRL_USB_PM_USB_PWRDN_MASK,
	},
	/* 7250b0 */
	[BRCM_FAMILY_7250B0] = {
		[USB_CTRL_SETUP_SCB1_EN_SELECTOR] =
			USB_CTRL_SETUP_SCB1_EN_MASK,
		[USB_CTRL_SETUP_SCB2_EN_SELECTOR] =
			USB_CTRL_SETUP_SCB2_EN_MASK,
		[USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] =
			USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_MASK,
		[USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR] =
			USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK,
		[USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR] =
			USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK,
		[USB_CTRL_USB_PM_USB20_HC_RESETB_SELECTOR] =
			USB_CTRL_USB_PM_USB20_HC_RESETB_MASK,
		[USB_CTRL_SETUP_ENDIAN_SELECTOR] = ENDIAN_SETTINGS,
	},
	/* 7271a0 */
	[BRCM_FAMILY_7271A0] = {
		[USB_CTRL_SETUP_SS_EHCI64BIT_EN_SELECTOR] =
			USB_CTRL_SETUP_SS_EHCI64BIT_EN_MASK,
		[USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR] =
			USB_CTRL_SETUP_STRAP_IPP_SEL_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT0_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT0_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_PORT1_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_PORT1_MASK,
		[USB_CTRL_SETUP_OC3_DISABLE_SELECTOR] =
			USB_CTRL_SETUP_OC3_DISABLE_MASK,

Annotation

Implementation Notes