From: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>,
Bingbu Cao <bingbu.cao@intel.com>,
Tianshu Qiu <tian.shu.qiu@intel.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernel.org
Subject: Re: [PATCH] media: ov2740: Ensure proper reset sequence on probe()
Date: Thu, 9 May 2024 13:42:10 +0200 [thread overview]
Message-ID: <Zjy2ksnLCvKuWv4u@linux.intel.com> (raw)
In-Reply-To: <20240506132438.278920-1-hdegoede@redhat.com>
On Mon, May 06, 2024 at 03:24:38PM +0200, Hans de Goede wrote:
> Before this commit on probe() the driver would do:
>
> reset=1 // from probe() calling gpiod_get(GPIOD_OUT_HIGH)
> reset=0 // from resume()
> msleep(20) // from resume()
>
> So if reset was 0 before getting the GPIO the reset line would only be
> driven high for a very short time and sometimes there would be errors
> reading the id register afterwards.
>
> Add a msleep(20) after getting the reset line to ensure the sensor is
> properly reset:
>
> reset=1 // from probe() calling gpiod_get(GPIOD_OUT_HIGH)
> msleep(20) // from probe()
> reset=0 // from resume()
> msleep(20) // from resume()
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
This fixes this issue:
[ 7.742633] ov2740 i2c-INT3474:01: chip id mismatch: 2740 != 0
[ 7.742638] ov2740 i2c-INT3474:01: error -ENXIO: failed to find sensor
for me as well.
Thanks!
Stanislaw
> ---
> drivers/media/i2c/ov2740.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c
> index 57906df7be4e..c48dbcde9877 100644
> --- a/drivers/media/i2c/ov2740.c
> +++ b/drivers/media/i2c/ov2740.c
> @@ -1333,9 +1333,16 @@ static int ov2740_probe(struct i2c_client *client)
> return dev_err_probe(dev, ret, "failed to check HW configuration\n");
>
> ov2740->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> - if (IS_ERR(ov2740->reset_gpio))
> + if (IS_ERR(ov2740->reset_gpio)) {
> return dev_err_probe(dev, PTR_ERR(ov2740->reset_gpio),
> "failed to get reset GPIO\n");
> + } else if (ov2740->reset_gpio) {
> + /*
> + * Ensure reset is asserted for at least 20 ms before
> + * ov2740_resume() deasserts it.
> + */
> + msleep(20);
> + }
>
> ov2740->clk = devm_clk_get_optional(dev, "clk");
> if (IS_ERR(ov2740->clk))
> --
> 2.44.0
>
next prev parent reply other threads:[~2024-05-09 11:42 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-06 13:24 [PATCH] media: ov2740: Ensure proper reset sequence on probe() Hans de Goede
2024-05-09 11:42 ` Stanislaw Gruszka [this message]
2024-05-09 13:42 ` Hans de Goede
2024-05-13 10:07 ` Stanislaw Gruszka
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=Zjy2ksnLCvKuWv4u@linux.intel.com \
--to=stanislaw.gruszka@linux.intel.com \
--cc=bingbu.cao@intel.com \
--cc=hdegoede@redhat.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=tian.shu.qiu@intel.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.