[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240430131931.166012-6-julien.massot@collabora.com>
Date: Tue, 30 Apr 2024 15:19:31 +0200
From: Julien Massot <julien.massot@...labora.com>
To: linux-media@...r.kernel.org,
sakari.ailus@....fi
Cc: devicetree@...r.kernel.org,
kernel@...labora.com,
linux-kernel@...r.kernel.org,
mchehab@...nel.org,
robh+dt@...nel.org,
krzysztof.kozlowski+dt@...aro.org,
conor+dt@...nel.org,
Julien Massot <julien.massot@...labora.com>
Subject: [PATCH v7 5/5] drivers: media: max96717: stop the csi receiver before the source
Stopping the CSI source before stopping the serializer
CSI port may make the serializer not respond.
Then all the next writes to the device will fail.
max96717 1-0040: Error writing reg 0x0308: -121
max96717 1-0040: Error writing reg 0x0006: -121
Fix that by stopping the CSI receiver first and then CSI source.
Seen on max96717f revision 4.
Signed-off-by: Julien Massot <julien.massot@...labora.com>
---
drivers/media/i2c/max96717.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/drivers/media/i2c/max96717.c b/drivers/media/i2c/max96717.c
index 1ea76f922bdb..499408837aef 100644
--- a/drivers/media/i2c/max96717.c
+++ b/drivers/media/i2c/max96717.c
@@ -384,24 +384,23 @@ static int max96717_disable_streams(struct v4l2_subdev *sd,
{
struct max96717_priv *priv = sd_to_max96717(sd);
u64 sink_streams;
- int ret;
+
+ /*
+ * Stop the CSI receiver first then the source,
+ * otherwise the device may become unresponsive
+ * while holding the I2C bus low.
+ */
+ priv->enabled_source_streams &= ~streams_mask;
+ if (!priv->enabled_source_streams)
+ max96717_start_csi(priv, false);
sink_streams = v4l2_subdev_state_xlate_streams(state,
MAX96717_PAD_SOURCE,
MAX96717_PAD_SINK,
&streams_mask);
- ret = v4l2_subdev_disable_streams(priv->source_sd, priv->source_sd_pad,
- sink_streams);
- if (ret)
- return ret;
-
- priv->enabled_source_streams &= ~streams_mask;
-
- if (!priv->enabled_source_streams)
- max96717_start_csi(priv, false);
-
- return 0;
+ return v4l2_subdev_disable_streams(priv->source_sd, priv->source_sd_pad,
+ sink_streams);
}
static const struct v4l2_subdev_pad_ops max96717_pad_ops = {
--
2.44.0
Powered by blists - more mailing lists