]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: ccs: Use read_poll_timeout() in reset polling
authorSakari Ailus <sakari.ailus@linux.intel.com>
Tue, 15 Oct 2024 07:07:02 +0000 (10:07 +0300)
committerHans Verkuil <hverkuil@xs4all.nl>
Fri, 25 Apr 2025 08:15:33 +0000 (10:15 +0200)
Use read_poll_timeout() in polling the device after a reset, either hard
or soft. While at it, improve the related error message.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/i2c/ccs/ccs-core.c

index a47c56d9779ff6ccb7f9d70c27811b20ee635986..01744ebd3e061537602c9e34bbf6126889069898 100644 (file)
@@ -1588,7 +1588,6 @@ static int ccs_power_on(struct device *dev)
         * an error.
         */
        if (!sensor->reset && !sensor->xshutdown) {
-               u8 retry = 100;
                u32 reset;
 
                rval = read_poll_timeout(ccs_write, rval, !rval,
@@ -1601,18 +1600,15 @@ static int ccs_power_on(struct device *dev)
                        goto out_cci_addr_fail;
                }
 
-               do {
-                       rval = ccs_read(sensor, SOFTWARE_RESET, &reset);
-                       reset = !rval && reset == CCS_SOFTWARE_RESET_OFF;
-                       if (reset)
-                               break;
-
-                       usleep_range(1000, 2000);
-               } while (--retry);
-
-               if (!reset) {
-                       dev_err(dev, "software reset failed\n");
-                       rval = -EIO;
+               rval = read_poll_timeout(ccs_read, rval,
+                                        !rval &&
+                                               reset == CCS_SOFTWARE_RESET_OFF,
+                                        CCS_RESET_DELAY_US,
+                                        CCS_RESET_TIMEOUT_US, false, sensor,
+                                        SOFTWARE_RESET, &reset);
+               if (rval < 0) {
+                       dev_err_probe(dev, rval,
+                                     "failed to respond after reset\n");
                        goto out_cci_addr_fail;
                }
        }