Lines Matching +full:hsic +full:- +full:phy
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Samsung SoC USB 1.1/2.0 PHY driver - Exynos 5250 support
11 #include <linux/phy/phy.h>
13 #include "phy-samsung-usb2.h"
15 /* Exynos USB PHY registers */
140 * can be written to the phy register.
169 return -EINVAL; in exynos5250_rate_to_clk()
177 struct samsung_usb2_phy_driver *drv = inst->drv; in exynos5250_isol()
181 switch (inst->cfg->id) { in exynos5250_isol()
194 regmap_update_bits(drv->reg_pmu, offset, mask, on ? 0 : mask); in exynos5250_isol()
199 struct samsung_usb2_phy_driver *drv = inst->drv; in exynos5250_power_on()
204 u32 hsic; in exynos5250_power_on() local
206 switch (inst->cfg->id) { in exynos5250_power_on()
208 regmap_update_bits(drv->reg_sys, in exynos5250_power_on()
214 otg = readl(drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_on()
217 otg |= drv->ref_reg_val << EXYNOS_5250_USBOTGSYS_FSEL_SHIFT; in exynos5250_power_on()
230 writel(otg, drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_on()
236 writel(otg, drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_on()
244 ctrl0 = readl(drv->reg_phy + EXYNOS_5250_HOSTPHYCTRL0); in exynos5250_power_on()
247 ctrl0 |= drv->ref_reg_val << in exynos5250_power_on()
259 writel(ctrl0, drv->reg_phy + EXYNOS_5250_HOSTPHYCTRL0); in exynos5250_power_on()
263 writel(ctrl0, drv->reg_phy + EXYNOS_5250_HOSTPHYCTRL0); in exynos5250_power_on()
266 otg = readl(drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_on()
269 otg |= drv->ref_reg_val << EXYNOS_5250_USBOTGSYS_FSEL_SHIFT; in exynos5250_power_on()
282 writel(otg, drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_on()
288 /* HSIC phy configuration */ in exynos5250_power_on()
289 hsic = (EXYNOS_5250_HSICPHYCTRLX_REFCLKDIV_12 | in exynos5250_power_on()
292 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL1); in exynos5250_power_on()
293 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL2); in exynos5250_power_on()
295 hsic &= ~EXYNOS_5250_HSICPHYCTRLX_PHYSWRST; in exynos5250_power_on()
296 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL1); in exynos5250_power_on()
297 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL2); in exynos5250_power_on()
303 ehci = readl(drv->reg_phy + EXYNOS_5250_HOSTEHCICTRL); in exynos5250_power_on()
308 writel(ehci, drv->reg_phy + EXYNOS_5250_HOSTEHCICTRL); in exynos5250_power_on()
311 ohci = readl(drv->reg_phy + EXYNOS_5250_HOSTOHCICTRL); in exynos5250_power_on()
314 writel(ohci, drv->reg_phy + EXYNOS_5250_HOSTOHCICTRL); in exynos5250_power_on()
325 struct samsung_usb2_phy_driver *drv = inst->drv; in exynos5250_power_off()
328 u32 hsic; in exynos5250_power_off() local
332 switch (inst->cfg->id) { in exynos5250_power_off()
334 otg = readl(drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_off()
338 writel(otg, drv->reg_phy + EXYNOS_5250_USBOTGSYS); in exynos5250_power_off()
341 ctrl0 = readl(drv->reg_phy + EXYNOS_5250_HOSTPHYCTRL0); in exynos5250_power_off()
347 writel(ctrl0, drv->reg_phy + EXYNOS_5250_HOSTPHYCTRL0); in exynos5250_power_off()
351 hsic = (EXYNOS_5250_HSICPHYCTRLX_REFCLKDIV_12 | in exynos5250_power_off()
357 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL1); in exynos5250_power_off()
358 writel(hsic, drv->reg_phy + EXYNOS_5250_HSICPHYCTRL2); in exynos5250_power_off()