media: ov8856: ignore gpio and regulator for ov8856 with ACPI
authorBingbu Cao <bingbu.cao@intel.com>
Tue, 6 Jul 2021 09:18:49 +0000 (11:18 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 4 Aug 2021 12:43:51 +0000 (14:43 +0200)
For ov8856 working with ACPI, it does not depend on the reset gpio
and regulator to do reset and power control, so should get the gpio
and regulator for non-ACPI cases only, otherwise it will break ov8856
with ACPI.

[Sakari Ailus: Wrap a line over 80 chars.]

Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Tianshu Qiu <tian.shu.qiu@intel.com>
Cc: Robert Foss <robert.foss@linaro.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ov8856.c

index 88e19f3..aa74744 100644 (file)
@@ -2304,25 +2304,26 @@ static int ov8856_get_hwcfg(struct ov8856 *ov8856, struct device *dev)
 
                clk_set_rate(ov8856->xvclk, xvclk_rate);
                xvclk_rate = clk_get_rate(ov8856->xvclk);
+
+               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];
+
+               ret = devm_regulator_bulk_get(dev,
+                                             ARRAY_SIZE(ov8856_supply_names),
+                                             ov8856->supplies);
+               if (ret)
+                       return ret;
        }
 
        if (xvclk_rate != OV8856_XVCLK_19_2)
                dev_warn(dev, "external clock rate %u is unsupported",
                         xvclk_rate);
 
-       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];
-
-       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)
                return -ENXIO;