This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: ccs: Hardware requires a delay after starting the clock of 
lifting reset
Author:  Sakari Ailus <[email protected]>
Date:    Thu Oct 8 18:24:39 2020 +0200

A CCS compliant device requires a delay before the first I²C transaction
after pulling xshutdown up or starting the external clock. This is what
the driver does. However, if neither is actually there, there's no need
for the delay.

This also has the effect of removing an unnecessary delay on ACPI systems
where ACPI is responsible for the power-up sequence.

Signed-off-by: Sakari Ailus <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/i2c/ccs/ccs-core.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

---

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index e1b3c5693e01..fae8ceded861 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -1515,7 +1515,6 @@ static int ccs_power_on(struct device *dev)
        struct ccs_sensor *sensor =
                container_of(ssd, struct ccs_sensor, ssds[0]);
        const struct ccs_device *ccsdev = device_get_match_data(dev);
-       unsigned int sleep;
        int rval;
 
        rval = regulator_bulk_enable(ARRAY_SIZE(ccs_regulators),
@@ -1525,21 +1524,25 @@ static int ccs_power_on(struct device *dev)
                return rval;
        }
 
-       rval = clk_prepare_enable(sensor->ext_clk);
-       if (rval < 0) {
-               dev_dbg(dev, "failed to enable xclk\n");
-               goto out_xclk_fail;
-       }
+       if (sensor->reset || sensor->xshutdown || sensor->ext_clk) {
+               unsigned int sleep;
+
+               rval = clk_prepare_enable(sensor->ext_clk);
+               if (rval < 0) {
+                       dev_dbg(dev, "failed to enable xclk\n");
+                       goto out_xclk_fail;
+               }
 
-       gpiod_set_value(sensor->reset, 0);
-       gpiod_set_value(sensor->xshutdown, 1);
+               gpiod_set_value(sensor->reset, 0);
+               gpiod_set_value(sensor->xshutdown, 1);
 
-       if (ccsdev->flags & CCS_DEVICE_FLAG_IS_SMIA)
-               sleep = SMIAPP_RESET_DELAY(sensor->hwcfg.ext_clk);
-       else
-               sleep = 5000;
+               if (ccsdev->flags & CCS_DEVICE_FLAG_IS_SMIA)
+                       sleep = SMIAPP_RESET_DELAY(sensor->hwcfg.ext_clk);
+               else
+                       sleep = 5000;
 
-       usleep_range(sleep, sleep);
+               usleep_range(sleep, sleep);
+       }
 
        /*
         * Failures to respond to the address change command have been noticed.

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to