serdev: Replace poll loop by readx_poll_timeout() macro
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 14 Nov 2022 15:18:13 +0000 (17:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Nov 2022 16:53:10 +0000 (17:53 +0100)
The readx_poll_timeout() consolidates the necessary code under
macro. Replace current code with it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20221114151813.37294-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/serdev.h

index 66f624fc618ca3bb4d216a8dba8615af84c911d1..5f6bfe4f6d9551ffd3dfe1bf364dcbd7d6f92b0d 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <linux/types.h>
 #include <linux/device.h>
+#include <linux/iopoll.h>
 #include <linux/uaccess.h>
 #include <linux/termios.h>
 #include <linux/delay.h>
@@ -279,18 +280,10 @@ static inline bool serdev_device_get_cts(struct serdev_device *serdev)
 
 static inline int serdev_device_wait_for_cts(struct serdev_device *serdev, bool state, int timeout_ms)
 {
-       unsigned long timeout;
        bool signal;
 
-       timeout = jiffies + msecs_to_jiffies(timeout_ms);
-       while (time_is_after_jiffies(timeout)) {
-               signal = serdev_device_get_cts(serdev);
-               if (signal == state)
-                       return 0;
-               usleep_range(1000, 2000);
-       }
-
-       return -ETIMEDOUT;
+       return readx_poll_timeout(serdev_device_get_cts, serdev, signal, signal == state,
+                                 2000, timeout_ms * 1000);
 }
 
 static inline int serdev_device_set_rts(struct serdev_device *serdev, bool enable)