summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Tretter <m.tretter@pengutronix.de>2019-11-05 16:25:26 +0100
committerMichael Tretter <m.tretter@pengutronix.de>2020-03-03 17:47:05 +0100
commitca01323e91c8842ee54890841745335b1b0cebf9 (patch)
treed8de3999a1b662ad8c946f0d2f9399d83282725a
parent99cef4bcf3fa592469151558a34e2a56fb4e2388 (diff)
downloadlinux-0-day-ca01323e91c8842ee54890841745335b1b0cebf9.tar.gz
linux-0-day-ca01323e91c8842ee54890841745335b1b0cebf9.tar.xz
media: allegro: fix reset if WAKEUP has not been set properly
The Zynq UltraScale+ Devices Register Reference states that the WAKEUP bit "should be set to 0 after the MCU sleep status bit gets back to 0." If this is not done, the mcu is not going to sleep on reset and fail the reset. Set WAKEUP to 0 before triggering a reset to make sure that the reset is successful. Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
-rw-r--r--drivers/staging/media/allegro-dvt/allegro-core.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/staging/media/allegro-dvt/allegro-core.c b/drivers/staging/media/allegro-dvt/allegro-core.c
index 87592419ec842..de50405ba907a 100644
--- a/drivers/staging/media/allegro-dvt/allegro-core.c
+++ b/drivers/staging/media/allegro-dvt/allegro-core.c
@@ -1990,6 +1990,14 @@ static int allegro_mcu_reset(struct allegro_dev *dev)
{
int err;
+ /*
+ * Ensure that the AL5_MCU_WAKEUP bit is set to 0 otherwise the mcu
+ * does not go to sleep after the reset.
+ */
+ err = regmap_write(dev->regmap, AL5_MCU_WAKEUP, 0);
+ if (err)
+ return err;
+
err = regmap_write(dev->regmap,
AL5_MCU_RESET_MODE, AL5_MCU_RESET_MODE_SLEEP);
if (err < 0)