User readl_poll_timeout function instead of open
coded handling in crport_handshake function.

Signed-off-by: Anand Moon <linux.am...@gmail.com>
---
 drivers/phy/samsung/phy-exynos5-usbdrd.c | 37 +++++++++---------------
 1 file changed, 13 insertions(+), 24 deletions(-)

diff --git a/drivers/phy/samsung/phy-exynos5-usbdrd.c 
b/drivers/phy/samsung/phy-exynos5-usbdrd.c
index e510732afb8b..83274c5e3820 100644
--- a/drivers/phy/samsung/phy-exynos5-usbdrd.c
+++ b/drivers/phy/samsung/phy-exynos5-usbdrd.c
@@ -16,6 +16,7 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
+#include <linux/iopoll.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
 #include <linux/mutex.h>
@@ -556,40 +557,28 @@ static int exynos5_usbdrd_phy_power_off(struct phy *phy)
 static int crport_handshake(struct exynos5_usbdrd_phy *phy_drd,
                            u32 val, u32 cmd)
 {
-       u32 usec = 100;
+       u32 timeout_us = 1000, sleep_us = 10;
        unsigned int result;
+       int err;
 
        writel(val | cmd, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
 
-       do {
-               result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
-               if (result & PHYREG1_CR_ACK)
-                       break;
-
-               udelay(1);
-       } while (usec-- > 0);
-
-       if (!usec) {
-               dev_err(phy_drd->dev,
-                       "CRPORT handshake timeout1 (0x%08x)\n", val);
+       err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1,
+                       result, (result & PHYREG1_CR_ACK), sleep_us, 
timeout_us);
+       if (err) {
+               dev_err(phy_drd->dev, "CRPORT handshake timeout1 (0x%08x)\n", 
val);
                return -ETIME;
        }
 
-       usec = 100;
+       timeout_us = 1000;
+       sleep_us = 10;
 
        writel(val, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
 
-       do {
-               result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
-               if (!(result & PHYREG1_CR_ACK))
-                       break;
-
-               udelay(1);
-       } while (usec-- > 0);
-
-       if (!usec) {
-               dev_err(phy_drd->dev,
-                       "CRPORT handshake timeout2 (0x%08x)\n", val);
+       err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1,
+                       result, !(result & PHYREG1_CR_ACK), sleep_us, 
timeout_us);
+       if (err) {
+               dev_err(phy_drd->dev, "CRPORT handshake timeout2 (0x%08x)\n", 
val);
                return -ETIME;
        }
 
-- 
2.27.0

Reply via email to