Hi Jernej, Thanks a lot for all your reviews! On Wed 27 Apr 22, 22:07, Jernej Škrabec wrote: > Dne petek, 15. april 2022 ob 17:28:09 CEST je Paul Kocialkowski napisal(a): > > Add a helper to detect whether the ISP is available and connected > > and store the indication in a driver-wide variable. > > > > Signed-off-by: Paul Kocialkowski > > --- > > .../platform/sunxi/sun6i-csi/sun6i_csi.c | 33 +++++++++++++++++++ > > .../platform/sunxi/sun6i-csi/sun6i_csi.h | 3 ++ > > 2 files changed, 36 insertions(+) > > > > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c index > > a88deb8ba1e7..f185cbd113c7 100644 > > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > > @@ -25,6 +25,35 @@ > > #include "sun6i_csi_capture.h" > > #include "sun6i_csi_reg.h" > > > > +/* ISP */ > > + > > +static bool sun6i_csi_isp_detect(struct sun6i_csi_device *csi_dev) > > +{ > > + struct device *dev = csi_dev->dev; > > + struct fwnode_handle *handle = NULL; > > + > > + /* ISP is not available if disabled in kernel config. */ > > + if (!IS_ENABLED(CONFIG_VIDEO_SUN6I_ISP)) > > Where is this symbol defined? That is defined through Kconfig's auto-generated header, from the associated option for the ISP driver. It is defined in the ISP support series so this will effectively always be false for now. > Best regards, > Jernej > > > + return 0; > > + > > + /* > > + * ISP is not available if not connected via fwnode graph. > > + * This weill also check that the remote parent node is available. > > + */ > > + handle = fwnode_graph_get_endpoint_by_id(dev_fwnode(dev), > > + > SUN6I_CSI_PORT_ISP, 0, > > + > FWNODE_GRAPH_ENDPOINT_NEXT); > > + if (!handle) > > + return 0; > > + > > + fwnode_handle_put(handle); > > + > > + dev_info(dev, "ISP link is available\n"); > > + csi_dev->isp_available = true; > > + > > + return 0; > > +} > > + > > /* Media */ > > > > static const struct media_device_ops sun6i_csi_media_ops = { > > @@ -306,6 +335,10 @@ static int sun6i_csi_probe(struct platform_device > > *platform_dev) if (ret) > > return ret; > > > > + ret = sun6i_csi_isp_detect(csi_dev); > > + if (ret) > > + goto error_resources; > > + > > ret = sun6i_csi_v4l2_setup(csi_dev); > > if (ret) > > goto error_resources; > > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h index > > 6aa83dd11684..9b105c341047 100644 > > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > > @@ -22,6 +22,7 @@ > > enum sun6i_csi_port { > > SUN6I_CSI_PORT_PARALLEL = 0, > > SUN6I_CSI_PORT_MIPI_CSI2 = 1, > > + SUN6I_CSI_PORT_ISP = 2, > > }; > > > > struct sun6i_csi_buffer { > > @@ -46,6 +47,8 @@ struct sun6i_csi_device { > > struct clk *clock_mod; > > struct clk *clock_ram; > > struct reset_control *reset; > > + > > + bool isp_available; > > }; > > > > struct sun6i_csi_variant { > > > > -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com