OSDN Git Service

platform/x86: intel_atomisp2_pm: Refactor timeout loop
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 9 Jan 2020 14:08:25 +0000 (16:08 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 10 Jan 2020 09:57:22 +0000 (11:57 +0200)
The timeout loop look more naturally when done like

unsigned long timeout = ...;
...
do {
...
if (cond)
return %OK;

sleep(...);
} while (time_before(timeout));

...print timeout error...
return %ERROR;

It also saves LOCs. Convert the driver to this format of timeout loop.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/platform/x86/intel_atomisp2_pm.c

index b0f421f..6c42003 100644 (file)
@@ -50,24 +50,20 @@ static int isp_set_power(struct pci_dev *dev, bool enable)
         * And we do the same for power on.
         */
        timeout = jiffies + msecs_to_jiffies(50);
-       while (1) {
+       do {
                u32 tmp;
 
                /* Wait until ISPSSPM0 bit[25:24] shows the right value */
                iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ, ISPSSPM0, &tmp);
                tmp = (tmp & ISPSSPM0_ISPSSS_MASK) >> ISPSSPM0_ISPSSS_OFFSET;
                if (tmp == val)
-                       break;
+                       return 0;
 
-               if (time_after(jiffies, timeout)) {
-                       dev_err(&dev->dev, "IUNIT power-%s timeout.\n",
-                               enable ? "on" : "off");
-                       return -EBUSY;
-               }
                usleep_range(1000, 2000);
-       }
+       } while (time_before(jiffies, timeout));
 
-       return 0;
+       dev_err(&dev->dev, "IUNIT power-%s timeout.\n", enable ? "on" : "off");
+       return -EBUSY;
 }
 
 static int isp_probe(struct pci_dev *dev, const struct pci_device_id *id)