Message ID | 20230613045543.1535492-1-bingbu.cao@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: ov13b10: Defer probe if no endpoint found | expand |
Hi, On Tue, Jun 13, 2023 at 12:55:43PM +0800, bingbu.cao@intel.com wrote: > From: Bingbu Cao <bingbu.cao@intel.com> > > 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> > --- > drivers/media/i2c/ov13b10.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/media/i2c/ov13b10.c b/drivers/media/i2c/ov13b10.c > index c1430044fb1e..96d3bd6ab3bd 100644 > --- a/drivers/media/i2c/ov13b10.c > +++ b/drivers/media/i2c/ov13b10.c > @@ -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) > -- > 2.40.1 > Looks good to me. I see that also some others ov driver are using this solution (ov5693, ov7251) Reviewed-by: Tommaso Merciai <tomm.merciai@gmail.com> Thanks, Tommaso
diff --git a/drivers/media/i2c/ov13b10.c b/drivers/media/i2c/ov13b10.c index c1430044fb1e..96d3bd6ab3bd 100644 --- a/drivers/media/i2c/ov13b10.c +++ b/drivers/media/i2c/ov13b10.c @@ -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)