drivers/phy/rockchip/phy-rockchip-usbdp.c

Source file repositories/reference/linux-study-clean/drivers/phy/rockchip/phy-rockchip-usbdp.c

File Facts

System
Linux kernel
Corpus path
drivers/phy/rockchip/phy-rockchip-usbdp.c
Extension
.c
Size
43197 bytes
Lines
1667
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 rk_udphy_grf_reg {
	unsigned int	offset;
	unsigned int	disable;
	unsigned int	enable;
};

#define _RK_UDPHY_GEN_GRF_REG(offset, mask, disable, enable) \
{\
	offset, \
	FIELD_PREP_CONST(mask, disable) | (mask << BIT_WRITEABLE_SHIFT), \
	FIELD_PREP_CONST(mask, enable) | (mask << BIT_WRITEABLE_SHIFT), \
}

#define RK_UDPHY_GEN_GRF_REG(offset, bitend, bitstart, disable, enable) \
	_RK_UDPHY_GEN_GRF_REG(offset, GENMASK(bitend, bitstart), disable, enable)

struct rk_udphy_grf_cfg {
	/* u2phy-grf */
	struct rk_udphy_grf_reg	bvalid_phy_con;
	struct rk_udphy_grf_reg	bvalid_grf_con;

	/* usb-grf */
	struct rk_udphy_grf_reg	usb3otg0_cfg;
	struct rk_udphy_grf_reg	usb3otg1_cfg;

	/* usbdpphy-grf */
	struct rk_udphy_grf_reg	low_pwrn;
	struct rk_udphy_grf_reg	rx_lfps;
};

struct rk_udphy_vogrf_cfg {
	/* vo-grf */
	struct rk_udphy_grf_reg hpd_trigger;
	u32 dp_lane_reg;
};

struct rk_udphy_dp_tx_drv_ctrl {
	u32 trsv_reg0204;
	u32 trsv_reg0205;
	u32 trsv_reg0206;
	u32 trsv_reg0207;
};

struct rk_udphy_cfg {
	unsigned int num_phys;
	unsigned int phy_ids[2];
	/* resets to be requested */
	const char * const *rst_list;
	int num_rsts;

	struct rk_udphy_grf_cfg grfcfg;
	struct rk_udphy_vogrf_cfg vogrfcfg[2];
	const struct rk_udphy_dp_tx_drv_ctrl (*dp_tx_ctrl_cfg[4])[4];
	const struct rk_udphy_dp_tx_drv_ctrl (*dp_tx_ctrl_cfg_typec[4])[4];
};

struct rk_udphy {
	struct device *dev;
	struct regmap *pma_regmap;
	struct regmap *u2phygrf;
	struct regmap *udphygrf;
	struct regmap *usbgrf;
	struct regmap *vogrf;
	struct typec_switch_dev *sw;
	struct typec_mux_dev *mux;
	struct mutex mutex; /* mutex to protect access to individual PHYs */

	/* clocks and rests */
	int num_clks;
	struct clk_bulk_data *clks;
	struct clk *refclk;
	int num_rsts;
	struct reset_control_bulk_data *rsts;

	/* PHY status management */
	bool flip;
	bool mode_change;
	u8 mode;
	u8 status;

	/* utilized for USB */
	bool hs; /* flag for high-speed */

	/* utilized for DP */
	struct gpio_desc *sbu1_dc_gpio;
	struct gpio_desc *sbu2_dc_gpio;
	u32 lane_mux_sel[4];
	u32 dp_lane_sel[4];
	u32 dp_aux_dout_sel;
	u32 dp_aux_din_sel;

Annotation

Implementation Notes