media: ov13b10: Defer probe if no endpoint found
authorBingbu Cao <bingbu.cao@intel.com>
Tue, 13 Jun 2023 04:55:43 +0000 (06:55 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 14 Jul 2023 11:05:50 +0000 (13:05 +0200)
The ov13b10 need be connected to a CIO2 or IPU device by bridge, sometimes
the bridge driver was not probed before ov13b10 driver, then the absence
of the fwnode endpoint for this device is expected, so driver return
-EPROBE_DEFER in this case to let the probe occur after bridge driver.

Signed-off-by: Hao Yao <hao.yao@intel.com>
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Reviewed-by: Tommaso Merciai <tomm.merciai@gmail.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/i2c/ov13b10.c

index 6110fb1e6bc68656aea07d9a2e62bd6e9923c880..13d18192235ba72e79055f556bb81724a5b12c7e 100644 (file)
@@ -1331,6 +1331,10 @@ static int ov13b10_check_hwcfg(struct device *dev)
        if (!fwnode)
                return -ENXIO;
 
+       ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
+       if (!ep)
+               return -EPROBE_DEFER;
+
        ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency",
                                       &ext_clk);
        if (ret) {
@@ -1344,10 +1348,6 @@ static int ov13b10_check_hwcfg(struct device *dev)
                return -EINVAL;
        }
 
-       ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
-       if (!ep)
-               return -ENXIO;
-
        ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
        fwnode_handle_put(ep);
        if (ret)