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@xxxxxxxxxx> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> 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);