Lines Matching +full:rcar +full:- +full:gen2 +full:- +full:usbhs
1 // SPDX-License-Identifier: GPL-2.0
3 * Renesas RCar Gen2 USB PHY driver
13 #include <generic-phy.h>
53 struct rcar_gen2_phy *priv = dev_get_priv(phy->dev); in rcar_gen2_phy_phy_init()
54 u16 chan = phy->id & 0xffff; in rcar_gen2_phy_phy_init()
55 u16 mode = (phy->id >> 16) & 0xffff; in rcar_gen2_phy_phy_init()
67 clrsetbits_le32(priv->regs + USBHS_UGCTRL2, clrmask, setmask); in rcar_gen2_phy_phy_init()
74 struct rcar_gen2_phy *priv = dev_get_priv(phy->dev); in rcar_gen2_phy_phy_power_on()
78 /* Power on USBHS PHY */ in rcar_gen2_phy_phy_power_on()
79 clrbits_le32(priv->regs + USBHS_UGCTRL, USBHS_UGCTRL_PLLRESET); in rcar_gen2_phy_phy_power_on()
81 setbits_le16(priv->regs + USBHS_LPSTS, USBHS_LPSTS_SUSPM); in rcar_gen2_phy_phy_power_on()
84 value = readl(priv->regs + USBHS_UGSTS); in rcar_gen2_phy_phy_power_on()
86 setbits_le32(priv->regs + USBHS_UGCTRL, in rcar_gen2_phy_phy_power_on()
93 return -ETIMEDOUT; in rcar_gen2_phy_phy_power_on()
98 struct rcar_gen2_phy *priv = dev_get_priv(phy->dev); in rcar_gen2_phy_phy_power_off()
100 /* Power off USBHS PHY */ in rcar_gen2_phy_phy_power_off()
101 clrbits_le32(priv->regs + USBHS_UGCTRL, USBHS_UGCTRL_CONNECT); in rcar_gen2_phy_phy_power_off()
103 clrbits_le16(priv->regs + USBHS_LPSTS, USBHS_LPSTS_SUSPM); in rcar_gen2_phy_phy_power_off()
105 setbits_le32(priv->regs + USBHS_UGCTRL, USBHS_UGCTRL_PLLRESET); in rcar_gen2_phy_phy_power_off()
113 if (args->args_count != 2) { in rcar_gen2_phy_of_xlate()
114 dev_err(phy->dev, "Invalid DT PHY argument count: %d\n", in rcar_gen2_phy_of_xlate()
115 args->args_count); in rcar_gen2_phy_of_xlate()
116 return -EINVAL; in rcar_gen2_phy_of_xlate()
119 if (args->args[0] != 0 && args->args[0] != 2) { in rcar_gen2_phy_of_xlate()
120 dev_err(phy->dev, "Invalid DT PHY channel: %d\n", in rcar_gen2_phy_of_xlate()
121 args->args[0]); in rcar_gen2_phy_of_xlate()
122 return -EINVAL; in rcar_gen2_phy_of_xlate()
125 if (args->args[1] != 0 && args->args[1] != 1) { in rcar_gen2_phy_of_xlate()
126 dev_err(phy->dev, "Invalid DT PHY mode: %d\n", in rcar_gen2_phy_of_xlate()
127 args->args[1]); in rcar_gen2_phy_of_xlate()
128 return -EINVAL; in rcar_gen2_phy_of_xlate()
131 if (args->args_count) in rcar_gen2_phy_of_xlate()
132 phy->id = args->args[0] | (args->args[1] << 16); in rcar_gen2_phy_of_xlate()
134 phy->id = 0; in rcar_gen2_phy_of_xlate()
151 priv->regs = dev_read_addr(dev); in rcar_gen2_phy_probe()
152 if (priv->regs == FDT_ADDR_T_NONE) in rcar_gen2_phy_probe()
153 return -EINVAL; in rcar_gen2_phy_probe()
156 ret = clk_get_by_index(dev, 0, &priv->clk); in rcar_gen2_phy_probe()
160 ret = clk_enable(&priv->clk); in rcar_gen2_phy_probe()
171 clk_disable(&priv->clk); in rcar_gen2_phy_remove()
172 clk_free(&priv->clk); in rcar_gen2_phy_remove()
178 { .compatible = "renesas,rcar-gen2-usb-phy", },
183 .name = "rcar-gen2-phy",