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

Subject: media: ov5640: Fix initial RESETB state and annotate timings
Author:  Marek Vasut <ma...@denx.de>
Date:    Tue Jul 25 00:21:16 2023 +0200

The initial state of RESETB input signal of OV5640 should be
asserted, i.e. the sensor should be in reset. This is not the
case, make it so.

Since the subsequent assertion of RESETB signal is no longer
necessary and the timing of the power sequencing could be
slightly adjusted, add annotations to the delays which match
OV5640 datasheet rev. 2.03, both:
  figure 2-3 power up timing with internal DVDD
  figure 2-4 power up timing with external DVDD source

The 5..10ms delay between PWDN assertion and RESETB assertion
is not even documented in the power sequencing diagram, and
with this reset fix, it is no longer even necessary.

Fixes: 19a81c1426c1 ("[media] add Omnivision OV5640 sensor driver")
Reported-by: Jacopo Mondi <jacopo.mo...@ideasonboard.com>
Signed-off-by: Marek Vasut <ma...@denx.de>
Reviewed-by: Jacopo Mondi <jacopo.mo...@ideasonboard.com>
Tested-by: Jai Luthra <j-lut...@ti.com>
Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mche...@kernel.org>

 drivers/media/i2c/ov5640.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

---

diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
index 434d8c99e23d..5fe85aa2d2ec 100644
--- a/drivers/media/i2c/ov5640.c
+++ b/drivers/media/i2c/ov5640.c
@@ -2452,16 +2452,13 @@ static void ov5640_power(struct ov5640_dev *sensor, 
bool enable)
 static void ov5640_powerup_sequence(struct ov5640_dev *sensor)
 {
        if (sensor->pwdn_gpio) {
-               gpiod_set_value_cansleep(sensor->reset_gpio, 0);
+               gpiod_set_value_cansleep(sensor->reset_gpio, 1);
 
                /* camera power cycle */
                ov5640_power(sensor, false);
-               usleep_range(5000, 10000);
+               usleep_range(5000, 10000);      /* t2 */
                ov5640_power(sensor, true);
-               usleep_range(5000, 10000);
-
-               gpiod_set_value_cansleep(sensor->reset_gpio, 1);
-               usleep_range(1000, 2000);
+               usleep_range(1000, 2000);       /* t3 */
 
                gpiod_set_value_cansleep(sensor->reset_gpio, 0);
        } else {
@@ -2469,7 +2466,7 @@ static void ov5640_powerup_sequence(struct ov5640_dev 
*sensor)
                ov5640_write_reg(sensor, OV5640_REG_SYS_CTRL0,
                                 OV5640_REG_SYS_CTRL0_SW_RST);
        }
-       usleep_range(20000, 25000);
+       usleep_range(20000, 25000);     /* t4 */
 
        /*
         * software standby: allows registers programming;

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to