On Thu Aug 6 14:18:04 2026 +0800, Serin Yeh wrote:
> On Intel platforms the sensor is enumerated via ACPI, and an INT3472
> "discrete" companion device (the power-logic-control driver under
> drivers/platform/x86/intel/int3472) registers the sensor's
> reset/powerdown GPIOs and the regulator supply. These resources are
> therefore discoverable and usable through the standard gpiod/regulator
> lookups at probe time.
> 
> However, the driver guarded both the GPIO/regulator acquisition in
> ov8856_get_hwcfg() and the whole power-on/off sequence with
> is_acpi_node() and skipped them on ACPI. As a result the sensor was
> never powered or reset by the driver, and probe failed when reading the
> chip ID in ov8856_identify_module().
> 
> Remove the is_acpi_node() checks so the GPIO/regulator resources are
> acquired and the full power sequence runs regardless of the firmware
> interface. The driver now behaves consistently across DT and ACPI
> platforms and initialises the hardware correctly.
> 
> Tested on Intel platforms with kernel 6.17 and 7.0.
> 
> Fixes: d2fa1134a48b ("media: i2c: ov8856: Use V4L2 legacy sensor clock 
> helper")
> Cc: [email protected]
> Signed-off-by: Serin Yeh <[email protected]>
> Reviewed-by: Bryan O'Donoghue <[email protected]>
> Reviewed-by: Kieran Bingham <[email protected]>
> Signed-off-by: Sakari Ailus <[email protected]>

Patch committed.

Thanks,
Sakari Ailus

 drivers/media/i2c/ov8856.c | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)

---

diff --git a/drivers/media/i2c/ov8856.c b/drivers/media/i2c/ov8856.c
index 8bedb47cd7cf..9d2b0469a576 100644
--- a/drivers/media/i2c/ov8856.c
+++ b/drivers/media/i2c/ov8856.c
@@ -2082,9 +2082,6 @@ static int ov8856_power_on(struct device *dev)
        struct ov8856 *ov8856 = to_ov8856(sd);
        int ret;
 
-       if (is_acpi_node(dev_fwnode(dev)))
-               return 0;
-
        ret = clk_prepare_enable(ov8856->xvclk);
        if (ret < 0) {
                dev_err(dev, "failed to enable xvclk\n");
@@ -2120,9 +2117,6 @@ static int ov8856_power_off(struct device *dev)
        struct v4l2_subdev *sd = dev_get_drvdata(dev);
        struct ov8856 *ov8856 = to_ov8856(sd);
 
-       if (is_acpi_node(dev_fwnode(dev)))
-               return 0;
-
        gpiod_set_value_cansleep(ov8856->reset_gpio, 1);
        regulator_bulk_disable(ARRAY_SIZE(ov8856_supply_names),
                               ov8856->supplies);
@@ -2293,21 +2287,18 @@ static int ov8856_get_hwcfg(struct ov8856 *ov8856)
                dev_warn(dev, "external clock rate %u is unsupported",
                         xvclk_rate);
 
-       if (!is_acpi_node(fwnode)) {
-               ov8856->reset_gpio = devm_gpiod_get_optional(dev, "reset",
-                                                            GPIOD_OUT_LOW);
-               if (IS_ERR(ov8856->reset_gpio))
-                       return PTR_ERR(ov8856->reset_gpio);
+       ov8856->reset_gpio = devm_gpiod_get_optional(dev, "reset",
+                                                    GPIOD_OUT_LOW);
+       if (IS_ERR(ov8856->reset_gpio))
+               return PTR_ERR(ov8856->reset_gpio);
 
-               for (i = 0; i < ARRAY_SIZE(ov8856_supply_names); i++)
-                       ov8856->supplies[i].supply = ov8856_supply_names[i];
+       for (i = 0; i < ARRAY_SIZE(ov8856_supply_names); i++)
+               ov8856->supplies[i].supply = ov8856_supply_names[i];
 
-               ret = devm_regulator_bulk_get(dev,
-                                             ARRAY_SIZE(ov8856_supply_names),
-                                             ov8856->supplies);
-               if (ret)
-                       return ret;
-       }
+       ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ov8856_supply_names),
+                                     ov8856->supplies);
+       if (ret)
+               return ret;
 
        ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
        if (!ep)
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to