Skip to content

Commit 99f2211

Browse files
jwrdegoedehverkuil
authored andcommitted
media: hi556: Fix reset GPIO timings
probe() requests the reset GPIO to be set to high when getting it. Immeditately after this hi556_resume() is called and sets the GPIO low. If the GPIO was low before requesting it this will result in the GPIO only very briefly spiking high and the sensor not being properly reset. The same problem also happens on back to back runtime suspend + resume. Fix this by adding a sleep of 2 ms in hi556_resume() before setting the GPIO low (if there is a reset GPIO). The final sleep is kept unconditional, because if there is e.g. no reset GPIO but a controllable clock then the sensor also needs some time after enabling the clock. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
1 parent 00e0b94 commit 99f2211

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

drivers/media/i2c/hi556.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1321,7 +1321,12 @@ static int hi556_resume(struct device *dev)
13211321
return ret;
13221322
}
13231323

1324-
gpiod_set_value_cansleep(hi556->reset_gpio, 0);
1324+
if (hi556->reset_gpio) {
1325+
/* Assert reset for at least 2ms on back to back off-on */
1326+
usleep_range(2000, 2200);
1327+
gpiod_set_value_cansleep(hi556->reset_gpio, 0);
1328+
}
1329+
13251330
usleep_range(5000, 5500);
13261331
return 0;
13271332
}

0 commit comments

Comments
 (0)