usb: phy: ab8500-usb: split ab8500_usb_phy_ctrl
authorFabio Baltieri <fabio.baltieri@linaro.org>
Wed, 3 Apr 2013 08:45:07 +0000 (10:45 +0200)
committerFelipe Balbi <balbi@ti.com>
Wed, 3 Apr 2013 09:01:45 +0000 (12:01 +0300)
Split ab8500_usb_phy_ctrl into separate enable/disable functions to make
the code more linear and readable.

Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Fabio Baltieri <fabio.baltieri@linaro.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/phy/phy-ab8500-usb.c

index 1bc24d4c25e73bcabd214bb829dbdb16712f28cf..58b194b7243229b0ddd95747a3f907c8e54f01c5 100644 (file)
@@ -172,40 +172,37 @@ static void ab8500_usb_wd_linkstatus(struct ab8500_usb *ab, u8 bit)
        }
 }
 
-static void ab8500_usb_phy_ctrl(struct ab8500_usb *ab, bool sel_host,
-                                       bool enable)
+static void ab8500_usb_phy_enable(struct ab8500_usb *ab, bool sel_host)
 {
-       u8 ctrl_reg;
-       abx500_get_register_interruptible(ab->dev,
-                               AB8500_USB,
-                               AB8500_USB_PHY_CTRL_REG,
-                               &ctrl_reg);
-       if (sel_host) {
-               if (enable)
-                       ctrl_reg |= AB8500_BIT_PHY_CTRL_HOST_EN;
-               else
-                       ctrl_reg &= ~AB8500_BIT_PHY_CTRL_HOST_EN;
-       } else {
-               if (enable)
-                       ctrl_reg |= AB8500_BIT_PHY_CTRL_DEVICE_EN;
-               else
-                       ctrl_reg &= ~AB8500_BIT_PHY_CTRL_DEVICE_EN;
-       }
+       u8 bit;
+       bit = sel_host ? AB8500_BIT_PHY_CTRL_HOST_EN :
+               AB8500_BIT_PHY_CTRL_DEVICE_EN;
 
-       abx500_set_register_interruptible(ab->dev,
-                               AB8500_USB,
-                               AB8500_USB_PHY_CTRL_REG,
-                               ctrl_reg);
+       abx500_mask_and_set_register_interruptible(ab->dev,
+                       AB8500_USB, AB8500_USB_PHY_CTRL_REG,
+                       bit, bit);
+}
 
-       /* Needed to enable the phy.*/
-       if (enable)
-               ab8500_usb_wd_workaround(ab);
+static void ab8500_usb_phy_disable(struct ab8500_usb *ab, bool sel_host)
+{
+       u8 bit;
+       bit = sel_host ? AB8500_BIT_PHY_CTRL_HOST_EN :
+               AB8500_BIT_PHY_CTRL_DEVICE_EN;
+
+       ab8500_usb_wd_linkstatus(ab, bit);
+
+       abx500_mask_and_set_register_interruptible(ab->dev,
+                       AB8500_USB, AB8500_USB_PHY_CTRL_REG,
+                       bit, 0);
+
+       /* Needed to disable the phy.*/
+       ab8500_usb_wd_workaround(ab);
 }
 
-#define ab8500_usb_host_phy_en(ab)     ab8500_usb_phy_ctrl(ab, true, true)
-#define ab8500_usb_host_phy_dis(ab)    ab8500_usb_phy_ctrl(ab, true, false)
-#define ab8500_usb_peri_phy_en(ab)     ab8500_usb_phy_ctrl(ab, false, true)
-#define ab8500_usb_peri_phy_dis(ab)    ab8500_usb_phy_ctrl(ab, false, false)
+#define ab8500_usb_host_phy_en(ab)     ab8500_usb_phy_enable(ab, true)
+#define ab8500_usb_host_phy_dis(ab)    ab8500_usb_phy_disable(ab, true)
+#define ab8500_usb_peri_phy_en(ab)     ab8500_usb_phy_enable(ab, false)
+#define ab8500_usb_peri_phy_dis(ab)    ab8500_usb_phy_disable(ab, false)
 
 static int ab8505_usb_link_status_update(struct ab8500_usb *ab,
                enum ab8505_usb_link_status lsts)