lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ