Hi Paul, On Thu, 27 Aug 2020 at 09:04, Paul Cercueil <paul@xxxxxxxxxxxxxxx> wrote: > > Even if support for the IPU was compiled in, we may run on a device > (e.g. the Qi LB60) where the IPU is not available, or simply with an old > devicetree without the IPU node. In that case the ingenic-drm refused to > probe. > > Fix the driver so that it will probe even if the IPU node is not present > in devicetree (but then IPU support is disabled of course). > > v2: Take a different approach > > Fixes: fc1acf317b01 ("drm/ingenic: Add support for the IPU") > Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > index c1bcb93aed2d..b7074161ccf0 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -673,7 +673,7 @@ static void ingenic_drm_unbind_all(void *d) > component_unbind_all(priv->dev, &priv->drm); > } > > -static int ingenic_drm_bind(struct device *dev) > +static int ingenic_drm_bind(struct device *dev, bool has_components) > { > struct platform_device *pdev = to_platform_device(dev); > const struct jz_soc_info *soc_info; > @@ -808,7 +808,7 @@ static int ingenic_drm_bind(struct device *dev) > return ret; > } > > - if (IS_ENABLED(CONFIG_DRM_INGENIC_IPU)) { > + if (IS_ENABLED(CONFIG_DRM_INGENIC_IPU) && has_components) { > ret = component_bind_all(dev, drm); > if (ret) { > if (ret != -EPROBE_DEFER) > @@ -939,6 +939,11 @@ static int ingenic_drm_bind(struct device *dev) > return ret; > } > > +static int ingenic_drm_bind_with_components(struct device *dev) > +{ > + return ingenic_drm_bind(dev, true); > +} > + > static int compare_of(struct device *dev, void *data) > { > return dev->of_node == data; > @@ -957,7 +962,7 @@ static void ingenic_drm_unbind(struct device *dev) > } > > static const struct component_master_ops ingenic_master_ops = { > - .bind = ingenic_drm_bind, > + .bind = ingenic_drm_bind_with_components, > .unbind = ingenic_drm_unbind, > }; > > @@ -968,14 +973,12 @@ static int ingenic_drm_probe(struct platform_device *pdev) > struct device_node *np; > > if (!IS_ENABLED(CONFIG_DRM_INGENIC_IPU)) > - return ingenic_drm_bind(dev); > + return ingenic_drm_bind(dev, false); > > /* IPU is at port address 8 */ > np = of_graph_get_remote_node(dev->of_node, 8, 0); How about we get rid of this (seems a bit odd to rely on port address) ? Rockchip-drm driver has a nice approach, and I think we might need something like that going forward, to support dw-hdmi. Thanks, Ezequiel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel