Linux-Media Archive on lore.kernel.org
 help / color / Atom feed
From: Jacopo Mondi <jacopo+renesas@jmondi.org>
To: kieran.bingham+renesas@ideasonboard.com,
	laurent.pinchart+renesas@ideasonboard.com,
	niklas.soderlund+renesas@ragnatech.se, geert@linux-m68k.org
Cc: Jacopo Mondi <jacopo+renesas@jmondi.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Subject: [PATCH v2 08/18] media: i2c: rdacm20: Re-work ov10635 reset
Date: Mon, 15 Mar 2021 14:15:02 +0100
Message-ID: <20210315131512.133720-9-jacopo+renesas@jmondi.org> (raw)
In-Reply-To: <20210315131512.133720-1-jacopo+renesas@jmondi.org>

The OV10635 image sensor embedded in the camera module is currently
reset after the MAX9271 initialization with two long delays that were
most probably not correctly characterized.

Re-work the image sensor reset procedure by holding the chip in reset
during the MAX9271 configuration, removing the long sleep delays and
only wait after the chip exits from reset for 350-500 microseconds
interval, which is larger than the minimum (2048 * (1 / XVCLK)) timeout
characterized in the chip manual.

Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
---
 drivers/media/i2c/rdacm20.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/media/i2c/rdacm20.c b/drivers/media/i2c/rdacm20.c
index 312450db958d..b9aaa0f7db42 100644
--- a/drivers/media/i2c/rdacm20.c
+++ b/drivers/media/i2c/rdacm20.c
@@ -477,6 +477,19 @@ static int rdacm20_initialize(struct rdacm20_device *dev)
 	if (ret)
 		return ret;
 
+	/*
+	 * Hold OV10635 in reset during max9271 configuration. The reset signal
+	 * has to be asserted for at least 200 microseconds.
+	 */
+	ret = max9271_enable_gpios(&dev->serializer, MAX9271_GPIO1OUT);
+	if (ret)
+		return ret;
+
+	ret = max9271_clear_gpios(&dev->serializer, MAX9271_GPIO1OUT);
+	if (ret)
+		return ret;
+	usleep_range(200, 500);
+
 	ret = max9271_configure_gmsl_link(&dev->serializer);
 	if (ret)
 		return ret;
@@ -491,22 +504,14 @@ static int rdacm20_initialize(struct rdacm20_device *dev)
 	dev->serializer.client->addr = dev->addrs[0];
 
 	/*
-	 * Reset the sensor by cycling the OV10635 reset signal connected to the
-	 * MAX9271 GPIO1 and verify communication with the OV10635.
+	 * Release ov10635 from reset and initialize it. The image sensor
+	 * requires at least 2048 XVCLK cycles (85 micro-seconds at 24MHz)
+	 * before being available. Stay safe and wait up to 500 micro-seconds.
 	 */
-	ret = max9271_enable_gpios(&dev->serializer, MAX9271_GPIO1OUT);
-	if (ret)
-		return ret;
-
-	ret = max9271_clear_gpios(&dev->serializer, MAX9271_GPIO1OUT);
-	if (ret)
-		return ret;
-	usleep_range(10000, 15000);
-
 	ret = max9271_set_gpios(&dev->serializer, MAX9271_GPIO1OUT);
 	if (ret)
 		return ret;
-	usleep_range(10000, 15000);
+	usleep_range(100, 500);
 
 	for (i = 0; i < OV10635_PID_TIMEOUT; ++i) {
 		ret = ov10635_read16(dev, OV10635_PID);
-- 
2.30.0


  parent reply index

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-15 13:14 [PATCH v2 00/18] media: gmsl: Reliability improvement Jacopo Mondi
2021-03-15 13:14 ` [PATCH v2 01/18] media: i2c: rdamc21: Fix warning on u8 cast Jacopo Mondi
2021-03-15 15:27   ` Kieran Bingham
2021-03-15 21:35   ` Laurent Pinchart
2021-03-15 13:14 ` [PATCH v2 02/18] media: i2c: rdacm20: Enable noise immunity Jacopo Mondi
2021-03-15 21:37   ` Laurent Pinchart
2021-03-16 12:56     ` Jacopo Mondi
2021-03-16 19:24       ` Laurent Pinchart
2021-03-15 13:14 ` [PATCH v2 03/18] media: i2c: rdacm20: Embedded 'serializer' field Jacopo Mondi
2021-03-15 15:29   ` Kieran Bingham
2021-03-15 13:14 ` [PATCH v2 04/18] media: i2c: rdacm20: Replace goto with a loop Jacopo Mondi
2021-03-15 15:36   ` Kieran Bingham
2021-03-15 13:14 ` [PATCH v2 05/18] media: i2c: rdacm20: Report camera module name Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 06/18] media: i2c: max9271: Check max9271_write() return Jacopo Mondi
2021-03-15 15:46   ` Kieran Bingham
2021-03-15 21:38   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 07/18] media: i2c: rdacm20: Check return values Jacopo Mondi
2021-03-15 13:15 ` Jacopo Mondi [this message]
2021-03-15 13:15 ` [PATCH v2 09/18] media: i2c: max9271: Introduce wake_up() function Jacopo Mondi
2021-03-15 17:14   ` Kieran Bingham
2021-03-15 21:43   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 10/18] media: i2c: max9286: Adjust parameters indent Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 11/18] media: i2c: rdacm21: Fix OV10640 powerdown Jacopo Mondi
2021-03-15 17:20   ` Kieran Bingham
2021-03-15 21:45   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 12/18] media: i2c: rdacm21: Give more time to OV490 to boot Jacopo Mondi
2021-03-15 17:22   ` Kieran Bingham
2021-03-17 10:04     ` Jacopo Mondi
2021-03-19  0:29       ` Laurent Pinchart
2021-03-19 14:53         ` Jacopo Mondi
2021-03-15 21:52   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 13/18] media: i2c: max9286: Rename reverse_channel_mv Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 14/18] media: i2c: max9286: Cache channel amplitude Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 15/18] media: i2c: max9286: Define high " Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 16/18] media: v4l2-subdev: De-deprecate init() subdev op Jacopo Mondi
2021-03-15 21:56   ` Laurent Pinchart
2021-03-15 13:15 ` [PATCH v2 17/18] media: gmsl: Reimplement initialization sequence Jacopo Mondi
2021-03-15 13:15 ` [PATCH v2 18/18] media: i2c: max9286: Rework comments in .bound() Jacopo Mondi
2021-03-15 17:28   ` Kieran Bingham
2021-03-15 21:57   ` Laurent Pinchart

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210315131512.133720-9-jacopo+renesas@jmondi.org \
    --to=jacopo+renesas@jmondi.org \
    --cc=geert@linux-m68k.org \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=niklas.soderlund+renesas@ragnatech.se \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Media Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-media/0 linux-media/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-media linux-media/ https://lore.kernel.org/linux-media \
		linux-media@vger.kernel.org
	public-inbox-index linux-media

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-media


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git