usb: phy: samsung: Pass enable/disable callbacks through driver data
authorTomasz Figa <t.figa@samsung.com>
Thu, 16 May 2013 09:57:10 +0000 (11:57 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 28 May 2013 17:07:15 +0000 (20:07 +0300)
To remove unnecessary if statements, this patch introduces phy_enable
and phy_disable callbacks in driver data structure that implement
SoC-specific PHY initialization and deinitialization.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/phy/phy-samsung-usb.h
drivers/usb/phy/phy-samsung-usb2.c
drivers/usb/phy/phy-samsung-usb3.c

index 52037841ff2e79a9fd713a6da07555b7c454711f..31e2ec3b2eb9a5f015256b0e3c330cd081b719bc 100644 (file)
@@ -272,6 +272,8 @@ struct samsung_usbphy_drvdata {
        u32 hostphy_reg_offset;
        int (*rate_to_clksel)(struct samsung_usbphy *, unsigned long);
        void (*set_isolation)(struct samsung_usbphy *, bool);
+       void (*phy_enable)(struct samsung_usbphy *);
+       void (*phy_disable)(struct samsung_usbphy *);
 };
 
 /*
index a01247e03e58193fd0b4e4654438f442461d56c3..1c3abd434b854772cb085a1b6a8b2accc3626fe0 100644 (file)
@@ -291,10 +291,7 @@ static int samsung_usb2phy_init(struct usb_phy *phy)
        samsung_usbphy_cfg_sel(sphy);
 
        /* Initialize usb phy registers */
-       if (sphy->drv_data->cpu_type == TYPE_EXYNOS5250)
-               samsung_exynos5_usb2phy_enable(sphy);
-       else
-               samsung_usb2phy_enable(sphy);
+       sphy->drv_data->phy_enable(sphy);
 
        spin_unlock_irqrestore(&sphy->lock, flags);
 
@@ -334,10 +331,7 @@ static void samsung_usb2phy_shutdown(struct usb_phy *phy)
        }
 
        /* De-initialize usb phy registers */
-       if (sphy->drv_data->cpu_type == TYPE_EXYNOS5250)
-               samsung_exynos5_usb2phy_disable(sphy);
-       else
-               samsung_usb2phy_disable(sphy);
+       sphy->drv_data->phy_disable(sphy);
 
        /* Enable phy isolation */
        if (sphy->plat && sphy->plat->pmu_isolation)
@@ -443,6 +437,8 @@ static const struct samsung_usbphy_drvdata usb2phy_s3c64xx = {
        .devphy_en_mask         = S3C64XX_USBPHY_ENABLE,
        .rate_to_clksel         = samsung_usbphy_rate_to_clksel_64xx,
        .set_isolation          = NULL, /* TODO */
+       .phy_enable             = samsung_usb2phy_enable,
+       .phy_disable            = samsung_usb2phy_disable,
 };
 
 static const struct samsung_usbphy_drvdata usb2phy_exynos4 = {
@@ -451,6 +447,8 @@ static const struct samsung_usbphy_drvdata usb2phy_exynos4 = {
        .hostphy_en_mask        = EXYNOS_USBPHY_ENABLE,
        .rate_to_clksel         = samsung_usbphy_rate_to_clksel_64xx,
        .set_isolation          = samsung_usbphy_set_isolation_4210,
+       .phy_enable             = samsung_usb2phy_enable,
+       .phy_disable            = samsung_usb2phy_disable,
 };
 
 static struct samsung_usbphy_drvdata usb2phy_exynos5 = {
@@ -459,6 +457,8 @@ static struct samsung_usbphy_drvdata usb2phy_exynos5 = {
        .hostphy_reg_offset     = EXYNOS_USBHOST_PHY_CTRL_OFFSET,
        .rate_to_clksel         = samsung_usbphy_rate_to_clksel_4x12,
        .set_isolation          = samsung_usbphy_set_isolation_4210,
+       .phy_enable             = samsung_exynos5_usb2phy_enable,
+       .phy_disable            = samsung_exynos5_usb2phy_disable,
 };
 
 #ifdef CONFIG_OF
index 3a30a5edde98847db403d3e20e3fed9dc4cd9ca6..300e0cf5e31f4fdb7ada4034237750293335589d 100644 (file)
@@ -65,7 +65,7 @@ static u32 samsung_usb3phy_set_refclk(struct samsung_usbphy *sphy)
        return reg;
 }
 
-static int samsung_exynos5_usb3phy_enable(struct samsung_usbphy *sphy)
+static void samsung_exynos5_usb3phy_enable(struct samsung_usbphy *sphy)
 {
        void __iomem *regs = sphy->regs;
        u32 phyparam0;
@@ -133,8 +133,6 @@ static int samsung_exynos5_usb3phy_enable(struct samsung_usbphy *sphy)
 
        phyclkrst &= ~(PHYCLKRST_PORTRESET);
        writel(phyclkrst, regs + EXYNOS5_DRD_PHYCLKRST);
-
-       return 0;
 }
 
 static void samsung_exynos5_usb3phy_disable(struct samsung_usbphy *sphy)
@@ -188,7 +186,7 @@ static int samsung_usb3phy_init(struct usb_phy *phy)
                sphy->drv_data->set_isolation(sphy, false);
 
        /* Initialize usb phy registers */
-       samsung_exynos5_usb3phy_enable(sphy);
+       sphy->drv_data->phy_enable(sphy);
 
        spin_unlock_irqrestore(&sphy->lock, flags);
 
@@ -219,7 +217,7 @@ static void samsung_usb3phy_shutdown(struct usb_phy *phy)
        samsung_usbphy_set_type(&sphy->phy, USB_PHY_TYPE_DEVICE);
 
        /* De-initialize usb phy registers */
-       samsung_exynos5_usb3phy_disable(sphy);
+       sphy->drv_data->phy_disable(sphy);
 
        /* Enable phy isolation */
        if (sphy->drv_data->set_isolation)
@@ -307,6 +305,8 @@ static struct samsung_usbphy_drvdata usb3phy_exynos5 = {
        .devphy_en_mask         = EXYNOS_USBPHY_ENABLE,
        .rate_to_clksel         = samsung_usbphy_rate_to_clksel_4x12,
        .set_isolation          = samsung_usbphy_set_isolation_4210,
+       .phy_enable             = samsung_exynos5_usb3phy_enable,
+       .phy_disable            = samsung_exynos5_usb3phy_disable,
 };
 
 #ifdef CONFIG_OF