Sachin Kamat wrote: > > From: Pankaj Dubey <pankaj.dubey@xxxxxxxxxxx> > > This patch removes the intermediate exynos4_usb_phy1_init and > exynos4_usb_phy1_exit function calls. > > Signed-off-by: Pankaj Dubey <pankaj.dubey@xxxxxxxxxxx> > Signed-off-by: Sachin Kamat <sachin.kamat@xxxxxxxxxx> > --- > arch/arm/mach-exynos4/setup-usb-phy.c | 166 +++++++++++++++------------- ---- > 1 files changed, 78 insertions(+), 88 deletions(-) > > diff --git a/arch/arm/mach-exynos4/setup-usb-phy.c b/arch/arm/mach- > exynos4/setup-usb-phy.c > index 39aca04..f4c944a 100644 > --- a/arch/arm/mach-exynos4/setup-usb-phy.c > +++ b/arch/arm/mach-exynos4/setup-usb-phy.c > @@ -19,118 +19,108 @@ > #include <plat/cpu.h> > #include <plat/usb-phy.h> > > -static int exynos4_usb_phy1_init(struct platform_device *pdev) > +int s5p_usb_phy_init(struct platform_device *pdev, int type) > { > - struct clk *otg_clk; > - struct clk *xusbxti_clk; > - u32 phyclk; > - u32 rstcon; > - int err; > - > - otg_clk = clk_get(&pdev->dev, "otg"); > - if (IS_ERR(otg_clk)) { > - dev_err(&pdev->dev, "Failed to get otg clock\n"); > - return PTR_ERR(otg_clk); > - } > + if (type == S5P_USB_PHY_HOST) { > + struct clk *otg_clk; > + struct clk *xusbxti_clk; > + u32 phyclk; > + u32 rstcon; > + int err; > + > + otg_clk = clk_get(&pdev->dev, "otg"); > + if (IS_ERR(otg_clk)) { > + dev_err(&pdev->dev, "Failed to get otg clock\n"); > + return PTR_ERR(otg_clk); > + } > > - err = clk_enable(otg_clk); > - if (err) { > - clk_put(otg_clk); > - return err; > - } > + err = clk_enable(otg_clk); > + if (err) { > + clk_put(otg_clk); > + return err; > + } > > - writel(readl(S5P_USBHOST_PHY_CONTROL) | > S5P_USBHOST_PHY_ENABLE, > + writel(readl(S5P_USBHOST_PHY_CONTROL) | > S5P_USBHOST_PHY_ENABLE, > S5P_USBHOST_PHY_CONTROL); > > - /* set clock frequency for PLL */ > - phyclk = readl(EXYNOS4_PHYCLK) & ~CLKSEL_MASK; > - > - xusbxti_clk = clk_get(&pdev->dev, "xusbxti"); > - if (xusbxti_clk && !IS_ERR(xusbxti_clk)) { > - switch (clk_get_rate(xusbxti_clk)) { > - case 12 * MHZ: > - phyclk |= CLKSEL_12M; > - break; > - case 24 * MHZ: > - phyclk |= CLKSEL_24M; > - break; > - default: > - case 48 * MHZ: > - /* default reference clock */ > - break; > - } > + /* set clock frequency for PLL */ > + phyclk = readl(EXYNOS4_PHYCLK) & ~CLKSEL_MASK; > + > + xusbxti_clk = clk_get(&pdev->dev, "xusbxti"); > + if (xusbxti_clk && !IS_ERR(xusbxti_clk)) { > + switch (clk_get_rate(xusbxti_clk)) { > + case 12 * MHZ: > + phyclk |= CLKSEL_12M; > + break; > + case 24 * MHZ: > + phyclk |= CLKSEL_24M; > + break; > + default: > + case 48 * MHZ: > + /* default reference clock */ > + break; > + } > clk_put(xusbxti_clk); > - } > + } > > - writel(phyclk, EXYNOS4_PHYCLK); > + writel(phyclk, EXYNOS4_PHYCLK); > > - /* floating prevention logic: disable */ > - writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), > EXYNOS4_PHY1CON); > + /* floating prevention logic: disable */ > + writel((readl(EXYNOS4_PHY1CON) | FPENABLEN), > EXYNOS4_PHY1CON); > > - /* set to normal HSIC 0 and 1 of PHY1 */ > - writel((readl(EXYNOS4_PHYPWR) & ~PHY1_HSIC_NORMAL_MASK), > + /* set to normal HSIC 0 and 1 of PHY1 */ > + writel((readl(EXYNOS4_PHYPWR) & > ~PHY1_HSIC_NORMAL_MASK), > EXYNOS4_PHYPWR); > > - /* set to normal standard USB of PHY1 */ > - writel((readl(EXYNOS4_PHYPWR) & ~PHY1_STD_NORMAL_MASK), > EXYNOS4_PHYPWR); > + /* set to normal standard USB of PHY1 */ > + writel((readl(EXYNOS4_PHYPWR) & > ~PHY1_STD_NORMAL_MASK), > + EXYNOS4_PHYPWR); > > - /* reset all ports of both PHY and Link */ > - rstcon = readl(EXYNOS4_RSTCON) | HOST_LINK_PORT_SWRST_MASK | > - PHY1_SWRST_MASK; > - writel(rstcon, EXYNOS4_RSTCON); > - udelay(10); > + /* reset all ports of both PHY and Link */ > + rstcon = readl(EXYNOS4_RSTCON) | > HOST_LINK_PORT_SWRST_MASK | > + PHY1_SWRST_MASK; > + writel(rstcon, EXYNOS4_RSTCON); > + udelay(10); > > - rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | PHY1_SWRST_MASK); > - writel(rstcon, EXYNOS4_RSTCON); > - udelay(80); > + rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | > PHY1_SWRST_MASK); > + writel(rstcon, EXYNOS4_RSTCON); > + udelay(80); > > - clk_disable(otg_clk); > - clk_put(otg_clk); > + clk_disable(otg_clk); > + clk_put(otg_clk); > > - return 0; > + return 0; > + } > + return -EINVAL; > } > > -static int exynos4_usb_phy1_exit(struct platform_device *pdev) > +int s5p_usb_phy_exit(struct platform_device *pdev, int type) > { > - struct clk *otg_clk; > - int err; > - > - otg_clk = clk_get(&pdev->dev, "otg"); > - if (IS_ERR(otg_clk)) { > - dev_err(&pdev->dev, "Failed to get otg clock\n"); > - return PTR_ERR(otg_clk); > - } > + if (type == S5P_USB_PHY_HOST) { > + struct clk *otg_clk; > + int err; > + otg_clk = clk_get(&pdev->dev, "otg"); > + if (IS_ERR(otg_clk)) { > + dev_err(&pdev->dev, "Failed to get otg clock\n"); > + return PTR_ERR(otg_clk); > + } > > - err = clk_enable(otg_clk); > - if (err) { > - clk_put(otg_clk); > - return err; > - } > + err = clk_enable(otg_clk); > + if (err) { > + clk_put(otg_clk); > + return err; > + } > > - writel((readl(EXYNOS4_PHYPWR) | > PHY1_STD_ANALOG_POWERDOWN), > + writel((readl(EXYNOS4_PHYPWR) | > PHY1_STD_ANALOG_POWERDOWN), > EXYNOS4_PHYPWR); > > - writel(readl(S5P_USBHOST_PHY_CONTROL) & > ~S5P_USBHOST_PHY_ENABLE, > + writel(readl(S5P_USBHOST_PHY_CONTROL) & > ~S5P_USBHOST_PHY_ENABLE, > S5P_USBHOST_PHY_CONTROL); > > - clk_disable(otg_clk); > - clk_put(otg_clk); > - > - return 0; > -} > - > -int s5p_usb_phy_init(struct platform_device *pdev, int type) > -{ > - if (type == S5P_USB_PHY_HOST) > - return exynos4_usb_phy1_init(pdev); > - > - return -EINVAL; > -} > - > -int s5p_usb_phy_exit(struct platform_device *pdev, int type) > -{ > - if (type == S5P_USB_PHY_HOST) > - return exynos4_usb_phy1_exit(pdev); > + clk_disable(otg_clk); > + clk_put(otg_clk); > > + return 0; > + } > return -EINVAL; > } > -- > 1.7.4.1 (Cc'ed Yulgon Kim and Kyoungil Kim) Hi Sachin, I don't know why this is required on usb-phy control for EXYNOS4 now. Actually, other upcoming EXYNOS SoCs have more usb phys than EXYNOS4210, so this can make it more difficult to control. Thanks. Best regards, Kgene. -- Kukjin Kim <kgene.kim@xxxxxxxxxxx>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html