[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <51e77fdd-7d37-4748-a416-2f204a707f95@redhat.com>
Date: Fri, 8 Nov 2024 15:57:54 +0100
From: Hans de Goede <hdegoede@...hat.com>
To: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
linux-media@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Sakari Ailus <sakari.ailus@...ux.intel.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>
Subject: Re: [PATCH v1 1/1] media: ov7251: Remap "reset" to "enable" for
OV7251
Hi,
On 8-Nov-24 3:50 PM, Andy Shevchenko wrote:
> The driver of OmniVision OV7251 expects "enable" pin instead of "reset".
> Remap "reset" to "enable" and update polarity.
>
> In particular, the Linux kernel can't load the camera sensor
> driver on Microsoft Surface Book without this change:
>
> ov7251 i2c-INT347E:00: supply vdddo not found, using dummy regulator
> ov7251 i2c-INT347E:00: supply vddd not found, using dummy regulator
> ov7251 i2c-INT347E:00: supply vdda not found, using dummy regulator
> ov7251 i2c-INT347E:00: cannot get enable gpio
> ov7251 i2c-INT347E:00: probe with driver ov7251 failed with error -2
>
> Suggested-by: Hans de Goede <hdegoede@...hat.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
Thanks, patch looks good to me:
Reviewed-by: Hans de Goede <hdegoede@...hat.com>
Regards,
Hans
> ---
> drivers/media/i2c/ov7251.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c
> index 30f61e04ecaf..7b35add1e0ed 100644
> --- a/drivers/media/i2c/ov7251.c
> +++ b/drivers/media/i2c/ov7251.c
> @@ -1696,7 +1696,21 @@ static int ov7251_probe(struct i2c_client *client)
> return PTR_ERR(ov7251->analog_regulator);
> }
>
> + /*
> + * The device-tree bindings call this pin "enable", but the
> + * datasheet describes the pin as "reset (active low with internal
> + * pull down resistor)". The ACPI tables describing this sensor
> + * on, e.g., the Microsoft Surface Book use the ACPI equivalent of
> + * "reset" as pin name, which ACPI glue code then maps to "reset".
> + * Check for a "reset" pin if there is no "enable" pin.
> + */
> ov7251->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_HIGH);
> + if (IS_ERR(ov7251->enable_gpio) &&
> + PTR_ERR(ov7251->enable_gpio) != -EPROBE_DEFER) {
> + ov7251->enable_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> + if (!IS_ERR(ov7251->enable_gpio))
> + gpiod_toggle_active_low(ov7251->enable_gpio);
> + }
> if (IS_ERR(ov7251->enable_gpio)) {
> dev_err(dev, "cannot get enable gpio\n");
> return PTR_ERR(ov7251->enable_gpio);
Powered by blists - more mailing lists