Lines Matching +full:phy +full:- +full:ref +full:- +full:clk

1 // SPDX-License-Identifier: GPL-2.0+
5 #include <linux/clk.h>
10 #include <linux/phy/phy.h>
35 struct phy *phy; member
36 struct clk *clk; member
41 static int imx8mq_usb_phy_init(struct phy *phy) in imx8mq_usb_phy_init() argument
43 struct imx8mq_usb_phy *imx_phy = phy_get_drvdata(phy); in imx8mq_usb_phy_init()
46 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
50 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
52 value = readl(imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
54 writel(value, imx_phy->base + PHY_CTRL0); in imx8mq_usb_phy_init()
56 value = readl(imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
58 writel(value, imx_phy->base + PHY_CTRL2); in imx8mq_usb_phy_init()
60 value = readl(imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
62 writel(value, imx_phy->base + PHY_CTRL1); in imx8mq_usb_phy_init()
67 static int imx8mp_usb_phy_init(struct phy *phy) in imx8mp_usb_phy_init() argument
69 struct imx8mq_usb_phy *imx_phy = phy_get_drvdata(phy); in imx8mp_usb_phy_init()
72 /* USB3.0 PHY signal fsel for 24M ref */ in imx8mp_usb_phy_init()
73 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
76 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
79 value = readl(imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
81 writel(value, imx_phy->base + PHY_CTRL6); in imx8mp_usb_phy_init()
83 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
86 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
88 value = readl(imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
90 writel(value, imx_phy->base + PHY_CTRL0); in imx8mp_usb_phy_init()
92 value = readl(imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
94 writel(value, imx_phy->base + PHY_CTRL2); in imx8mp_usb_phy_init()
98 value = readl(imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
100 writel(value, imx_phy->base + PHY_CTRL1); in imx8mp_usb_phy_init()
105 static int imx8mq_phy_power_on(struct phy *phy) in imx8mq_phy_power_on() argument
107 struct imx8mq_usb_phy *imx_phy = phy_get_drvdata(phy); in imx8mq_phy_power_on()
110 ret = regulator_enable(imx_phy->vbus); in imx8mq_phy_power_on()
114 return clk_prepare_enable(imx_phy->clk); in imx8mq_phy_power_on()
117 static int imx8mq_phy_power_off(struct phy *phy) in imx8mq_phy_power_off() argument
119 struct imx8mq_usb_phy *imx_phy = phy_get_drvdata(phy); in imx8mq_phy_power_off()
121 clk_disable_unprepare(imx_phy->clk); in imx8mq_phy_power_off()
122 regulator_disable(imx_phy->vbus); in imx8mq_phy_power_off()
142 {.compatible = "fsl,imx8mq-usb-phy",
144 {.compatible = "fsl,imx8mp-usb-phy",
153 struct device *dev = &pdev->dev; in imx8mq_usb_phy_probe()
159 return -ENOMEM; in imx8mq_usb_phy_probe()
161 imx_phy->clk = devm_clk_get(dev, "phy"); in imx8mq_usb_phy_probe()
162 if (IS_ERR(imx_phy->clk)) { in imx8mq_usb_phy_probe()
163 dev_err(dev, "failed to get imx8mq usb phy clock\n"); in imx8mq_usb_phy_probe()
164 return PTR_ERR(imx_phy->clk); in imx8mq_usb_phy_probe()
167 imx_phy->base = devm_platform_ioremap_resource(pdev, 0); in imx8mq_usb_phy_probe()
168 if (IS_ERR(imx_phy->base)) in imx8mq_usb_phy_probe()
169 return PTR_ERR(imx_phy->base); in imx8mq_usb_phy_probe()
173 return -EINVAL; in imx8mq_usb_phy_probe()
175 imx_phy->phy = devm_phy_create(dev, NULL, phy_ops); in imx8mq_usb_phy_probe()
176 if (IS_ERR(imx_phy->phy)) in imx8mq_usb_phy_probe()
177 return PTR_ERR(imx_phy->phy); in imx8mq_usb_phy_probe()
179 imx_phy->vbus = devm_regulator_get(dev, "vbus"); in imx8mq_usb_phy_probe()
180 if (IS_ERR(imx_phy->vbus)) in imx8mq_usb_phy_probe()
181 return PTR_ERR(imx_phy->vbus); in imx8mq_usb_phy_probe()
183 phy_set_drvdata(imx_phy->phy, imx_phy); in imx8mq_usb_phy_probe()
193 .name = "imx8mq-usb-phy",
199 MODULE_DESCRIPTION("FSL IMX8MQ USB PHY driver");