Sachin Kamat wrote:
From: Pankaj Dubey pankaj.dubey@samsung.com
This patch removes the intermediate exynos4_usb_phy1_init and exynos4_usb_phy1_exit function calls.
Signed-off-by: Pankaj Dubey pankaj.dubey@samsung.com Signed-off-by: Sachin Kamat sachin.kamat@linaro.org
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@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.