[PATCH v5 2/3] phy: cix: Add CIX Sky1 USB3 PHY driver
Philipp Zabel
p.zabel at pengutronix.de
Tue Nov 3 00:44:51 PST 2026
On Di, 2026-11-03 at 07:49 +0000, Hongliang Yang (杨宏亮) wrote:
> Add PHY driver for the USB3 PHY found on CIX Sky1 SoCs. The driver
> handles initialization, reset, and clock management for the
> multi-port USB3 PHY.
>
> Signed-off-by: Hongliang Yang <hongliang.yang at cixtech.com>
> Reviewed-by: Conor Dooley <conor at kernel.org>
> ---
> v4 -> v5:
> - Documented the origin of the PHY initialization sequence.
> - Return -ENODEV instead of -EINVAL when the OF match data is missing.
> - Use dev_err_probe() when creating the child PHYs.
> - Dropped the unused dev_set_drvdata() call.
> - Guarded against underflow in sky1_u3phy_exit().
> drivers/phy/Kconfig | 1 +
> drivers/phy/Makefile | 1 +
> drivers/phy/cix/Kconfig | 20 ++
> drivers/phy/cix/Makefile | 6 +
> drivers/phy/cix/phy-cix-usb3.c | 418 ++++++++++++++++++++++++++++++++
> drivers/phy/cix/phy-cix-usbdp.h | 289 ++++++++++++++++++++++
> 6 files changed, 735 insertions(+)
> create mode 100644 drivers/phy/cix/Kconfig
> create mode 100644 drivers/phy/cix/Makefile
> create mode 100644 drivers/phy/cix/phy-cix-usb3.c
> create mode 100644 drivers/phy/cix/phy-cix-usbdp.h
>
[...]
> diff --git a/drivers/phy/cix/phy-cix-usb3.c b/drivers/phy/cix/phy-cix-usb3.c
> new file mode 100644
> index 000000000000..4417506d4f6c
> --- /dev/null
> +++ b/drivers/phy/cix/phy-cix-usb3.c
> @@ -0,0 +1,418 @@
[...]
> +static int cix_u3phy_probe(struct platform_device *pdev)
> +{
> + struct cix_u3phy *u3phy;
> + struct device *dev = &pdev->dev;
> + struct phy_provider *phy_provider;
> + struct device_node *np = dev->of_node;
> + struct device_node *child_np;
> + struct phy *phy;
> + int ret;
> +
> + u3phy = devm_kzalloc(dev, sizeof(*u3phy), GFP_KERNEL);
> + if (!u3phy)
> + return -ENOMEM;
> + u3phy->dev = dev;
> + u3phy->cfg = device_get_match_data(dev);
> + if (!u3phy->cfg) {
> + dev_err(dev, "no OF data can be matched with %pOF node\n", np);
> + return -ENODEV;
> + }
> + u3phy->reset = devm_reset_control_get_exclusive(dev, "core");
> + if (IS_ERR(u3phy->reset)) {
> + dev_err(dev, "failed to get reset\n");
> + return PTR_ERR(u3phy->reset);
return dev_err_probe(dev, PTR_ERR(u3phy->reset), "...");
regards
Philipp
More information about the linux-arm-kernel
mailing list