DRM_MODE_CONNECTOR_PANEL? [Was: drm/panel: Add and fill drm_panel type field]

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Aug 24 14:02:34 UTC 2019


Hi Sam,

On Sat, Aug 24, 2019 at 11:54:21AM +0200, Sam Ravnborg wrote:
> On Fri, Aug 23, 2019 at 10:32:44PM +0300, Laurent Pinchart wrote:
> > Add a type field to the drm_panel structure to report the panel type,
> > using DRM_MODE_CONNECTOR_* macros (the values that make sense are LVDS,
> > eDP, DSI and DPI). This will be used to initialise the corresponding
> > connector type.
> 
> As discussed on irc before applying this we should evaluate the
> idea to introduce DRM_MODE_CONNECTOR_PANEL

Thank you for bringing it up.

> Today we have:
>     DRM_MODE_CONNECTOR_DPI
>     DRM_MODE_CONNECTOR_DBI
>     DRM_MODE_CONNECTOR_SPI
>     DRM_MODE_CONNECTOR_LVDS
> 
> The question if what benefit ig gives to distingush between the
> different ways panels are connected.
> 
> For example for VGA and HDMI there is a physical connector involved so
> here it make good sense.
> But why should userspace care if the panel is connected via DPI or LVDS?
> 
> The more generic DRM_MODE_CONNECTOR_PANEL would be equally descriptive.
> 
> We will also start to see new drivers where there will be support
> for more than one type of connector interface.
> 
> Like for example ili9322:
>  - 8-bit serial RGB interface
>  - 24-bit parallel RGB interface
>  - 8-bit ITU-R BT.601 interface
>  - 8-bit ITU-R BT.656 interface
> 
> Adding DRM_MODE_CONNECTOR_PANEL may create an xkcd 927 situation.
> But we should then deprecate _DPI, _DBI, _SPI, _LVDS.

_DBI doesn't exist, but we also have _eDP.

The discussions originated from the fact that a number of drivers
incorrectly report their connector type for panels today (including
reporting DRM_MODE_CONNECTOR_Unknown), and they can't be fixed without a
risk or breaking userspace, especially as the connector type is also
used to name the connector (it would at least break command line mode
setting as reported by Nicolas Ferre). It also makes it difficult for a
driver to exhibit the right behaviour on new systems (that don't need to
care about backward compatibility) without breaking the already
supported systems.

There were also recent discussions about adding a _DBI connector type,
which will increase this mess. I pointed out in a few IRC discussions
that I think the different connector types for panels were a mistake,
and that we should have gone for DRM_MODE_CONNECTOR_PANEL in the first
place. It's of course too late to fix this, but going forward, instead
of introducing a _DBI connector type, I think we'd be much better off
with _PANEL.

> > Update all panel drivers accordingly. The panel-simple driver only
> > specifies the type for the known to be LVDS panels, while all other
> > panels are left as unknown and will be converted on a case-by-case
> > basis as they all need to be carefully reviewed.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > Changes since v1:
> > 
> > - Rename the type field to connector_type
> > - Pass the type to the drm_panel_init() function
> > - Keep connector type as unknown for non-LVDS panels in panel-simple
> > - Flag the toshiba_lt089ac29000 panel as LVDS as reported by Boris
> > ---
> >  drivers/gpu/drm/drm_panel.c                   |  5 +++-
> >  drivers/gpu/drm/panel/panel-arm-versatile.c   |  3 ++-
> >  .../drm/panel/panel-feiyang-fy07024di26a30d.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-ilitek-ili9322.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-ilitek-ili9881c.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-innolux-p079zca.c |  3 ++-
> >  .../gpu/drm/panel/panel-jdi-lt070me05000.c    |  3 ++-
> >  .../drm/panel/panel-kingdisplay-kd097d04.c    |  2 +-
> >  drivers/gpu/drm/panel/panel-lg-lb035q02.c     |  3 ++-
> >  drivers/gpu/drm/panel/panel-lg-lg4573.c       |  3 ++-
> >  drivers/gpu/drm/panel/panel-lvds.c            |  3 ++-
> >  drivers/gpu/drm/panel/panel-nec-nl8048hl11.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-novatek-nt39016.c |  3 ++-
> >  .../drm/panel/panel-olimex-lcd-olinuxino.c    |  3 ++-
> >  .../gpu/drm/panel/panel-orisetech-otm8009a.c  |  3 ++-
> >  .../drm/panel/panel-osd-osd101t2587-53ts.c    |  2 +-
> >  .../drm/panel/panel-panasonic-vvx10f034n00.c  |  2 +-
> >  .../drm/panel/panel-raspberrypi-touchscreen.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-raydium-rm67191.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-raydium-rm68200.c |  3 ++-
> >  .../drm/panel/panel-rocktech-jh057n00900.c    |  3 ++-
> >  drivers/gpu/drm/panel/panel-ronbo-rb070d30.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-samsung-ld9040.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-samsung-s6d16d0.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c |  3 ++-
> >  .../gpu/drm/panel/panel-samsung-s6e63j0x03.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-samsung-s6e63m0.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c |  3 ++-
> >  drivers/gpu/drm/panel/panel-seiko-43wvf1g.c   |  3 ++-
> >  .../gpu/drm/panel/panel-sharp-lq101r1sx01.c   |  3 ++-
> >  .../gpu/drm/panel/panel-sharp-ls037v7dw01.c   |  3 ++-
> >  .../gpu/drm/panel/panel-sharp-ls043t1le01.c   |  2 +-
> >  drivers/gpu/drm/panel/panel-simple.c          | 26 ++++++++++++++++++-
> >  drivers/gpu/drm/panel/panel-sitronix-st7701.c |  3 ++-
> >  .../gpu/drm/panel/panel-sitronix-st7789v.c    |  3 ++-
> >  drivers/gpu/drm/panel/panel-sony-acx565akm.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-tpo-td028ttec1.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-tpo-td043mtea1.c  |  3 ++-
> >  drivers/gpu/drm/panel/panel-tpo-tpg110.c      |  3 ++-
> >  drivers/gpu/drm/panel/panel-truly-nt35597.c   |  3 ++-
> >  include/drm/drm_panel.h                       | 12 ++++++++-
> >  41 files changed, 112 insertions(+), 41 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
> > index ba2fad4c9648..ed7985c0535a 100644
> > --- a/drivers/gpu/drm/drm_panel.c
> > +++ b/drivers/gpu/drm/drm_panel.c
> > @@ -46,16 +46,19 @@ static LIST_HEAD(panel_list);
> >   * @panel: DRM panel
> >   * @dev: parent device of the panel
> >   * @funcs: panel operations
> > + * @connector_type: the connector type (DRM_MODE_CONNECTOR_*) corresponding to
> > + *	the panel interface
> >   *
> >   * Initialize the panel structure for subsequent registration with
> >   * drm_panel_add().
> >   */
> >  void drm_panel_init(struct drm_panel *panel, struct device *dev,
> > -		    const struct drm_panel_funcs *funcs)
> > +		    const struct drm_panel_funcs *funcs, int connector_type)
> >  {
> >  	INIT_LIST_HEAD(&panel->list);
> >  	panel->dev = dev;
> >  	panel->funcs = funcs;
> > +	panel->connector_type = connector_type;
> >  }
> >  EXPORT_SYMBOL(drm_panel_init);
> >  
> > diff --git a/drivers/gpu/drm/panel/panel-arm-versatile.c b/drivers/gpu/drm/panel/panel-arm-versatile.c
> > index a4333ed0f20c..a0574dc03e16 100644
> > --- a/drivers/gpu/drm/panel/panel-arm-versatile.c
> > +++ b/drivers/gpu/drm/panel/panel-arm-versatile.c
> > @@ -350,7 +350,8 @@ static int versatile_panel_probe(struct platform_device *pdev)
> >  			dev_info(dev, "panel mounted on IB2 daughterboard\n");
> >  	}
> >  
> > -	drm_panel_init(&vpanel->panel, dev, &versatile_panel_drm_funcs);
> > +	drm_panel_init(&vpanel->panel, dev, &versatile_panel_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&vpanel->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c b/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
> > index 7d5d7455bc01..98f184b81187 100644
> > --- a/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
> > +++ b/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
> > @@ -204,7 +204,8 @@ static int feiyang_dsi_probe(struct mipi_dsi_device *dsi)
> >  	mipi_dsi_set_drvdata(dsi, ctx);
> >  	ctx->dsi = dsi;
> >  
> > -	drm_panel_init(&ctx->panel, &dsi->dev, &feiyang_funcs);
> > +	drm_panel_init(&ctx->panel, &dsi->dev, &feiyang_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ctx->dvdd = devm_regulator_get(&dsi->dev, "dvdd");
> >  	if (IS_ERR(ctx->dvdd)) {
> > diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9322.c b/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> > index ad2405baa0ac..24955bec1958 100644
> > --- a/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> > +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> > @@ -895,7 +895,8 @@ static int ili9322_probe(struct spi_device *spi)
> >  		ili->input = ili->conf->input;
> >  	}
> >  
> > -	drm_panel_init(&ili->panel, dev, &ili9322_drm_funcs);
> > +	drm_panel_init(&ili->panel, dev, &ili9322_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&ili->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> > index 1d714f961c00..e8789e460a16 100644
> > --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> > +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> > @@ -433,7 +433,8 @@ static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi)
> >  	mipi_dsi_set_drvdata(dsi, ctx);
> >  	ctx->dsi = dsi;
> >  
> > -	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs);
> > +	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ctx->power = devm_regulator_get(&dsi->dev, "power");
> >  	if (IS_ERR(ctx->power)) {
> > diff --git a/drivers/gpu/drm/panel/panel-innolux-p079zca.c b/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> > index 2054afc31f20..46bfeb982b06 100644
> > --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> > +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c
> > @@ -487,7 +487,8 @@ static int innolux_panel_add(struct mipi_dsi_device *dsi,
> >  	if (IS_ERR(innolux->backlight))
> >  		return PTR_ERR(innolux->backlight);
> >  
> > -	drm_panel_init(&innolux->base, dev, &innolux_panel_funcs);
> > +	drm_panel_init(&innolux->base, dev, &innolux_panel_funcs
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	err = drm_panel_add(&innolux->base);
> >  	if (err < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> > index 7bfdbfbc868e..56364a93f0b8 100644
> > --- a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> > +++ b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c
> > @@ -437,7 +437,8 @@ static int jdi_panel_add(struct jdi_panel *jdi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&jdi->base, &jdi->dsi->dev, &jdi_panel_funcs);
> > +	drm_panel_init(&jdi->base, &jdi->dsi->dev, &jdi_panel_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ret = drm_panel_add(&jdi->base);
> >  
> > diff --git a/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c b/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
> > index a47885a1a8aa..45f96556ec8c 100644
> > --- a/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
> > +++ b/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c
> > @@ -392,7 +392,7 @@ static int kingdisplay_panel_add(struct kingdisplay_panel *kingdisplay)
> >  		return PTR_ERR(kingdisplay->backlight);
> >  
> >  	drm_panel_init(&kingdisplay->base, &kingdisplay->link->dev,
> > -		       &kingdisplay_panel_funcs);
> > +		       &kingdisplay_panel_funcs, DRM_MODE_CONNECTOR_DSI);
> >  
> >  	return drm_panel_add(&kingdisplay->base);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-lg-lb035q02.c b/drivers/gpu/drm/panel/panel-lg-lb035q02.c
> > index 28c3205df482..f984a5189fbf 100644
> > --- a/drivers/gpu/drm/panel/panel-lg-lb035q02.c
> > +++ b/drivers/gpu/drm/panel/panel-lg-lb035q02.c
> > @@ -196,7 +196,8 @@ static int lb035q02_probe(struct spi_device *spi)
> >  	if (ret < 0)
> >  		return ret;
> >  
> > -	drm_panel_init(&lcd->panel, &lcd->spi->dev, &lb035q02_funcs);
> > +	drm_panel_init(&lcd->panel, &lcd->spi->dev, &lb035q02_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&lcd->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-lg-lg4573.c b/drivers/gpu/drm/panel/panel-lg-lg4573.c
> > index 608f2de91662..db4865a4c2b9 100644
> > --- a/drivers/gpu/drm/panel/panel-lg-lg4573.c
> > +++ b/drivers/gpu/drm/panel/panel-lg-lg4573.c
> > @@ -259,7 +259,8 @@ static int lg4573_probe(struct spi_device *spi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&ctx->panel, &spi->dev, &lg4573_drm_funcs);
> > +	drm_panel_init(&ctx->panel, &spi->dev, &lg4573_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&ctx->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-lvds.c b/drivers/gpu/drm/panel/panel-lvds.c
> > index 3dc1ac2a6b03..cab3fb4177e3 100644
> > --- a/drivers/gpu/drm/panel/panel-lvds.c
> > +++ b/drivers/gpu/drm/panel/panel-lvds.c
> > @@ -260,7 +260,8 @@ static int panel_lvds_probe(struct platform_device *pdev)
> >  	 */
> >  
> >  	/* Register the panel. */
> > -	drm_panel_init(&lvds->panel, lvds->dev, &panel_lvds_funcs);
> > +	drm_panel_init(&lvds->panel, lvds->dev, &panel_lvds_funcs,
> > +		       DRM_MODE_CONNECTOR_LVDS);
> >  
> >  	ret = drm_panel_add(&lvds->panel);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c b/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c
> > index b67636fdbc21..c4bc7fa85fad 100644
> > --- a/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c
> > +++ b/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c
> > @@ -205,7 +205,8 @@ static int nl8048_probe(struct spi_device *spi)
> >  	if (ret < 0)
> >  		return ret;
> >  
> > -	drm_panel_init(&lcd->panel, &lcd->spi->dev, &nl8048_funcs);
> > +	drm_panel_init(&lcd->panel, &lcd->spi->dev, &nl8048_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&lcd->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt39016.c b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
> > index 64cfe111aaad..60ccedce530c 100644
> > --- a/drivers/gpu/drm/panel/panel-novatek-nt39016.c
> > +++ b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
> > @@ -292,7 +292,8 @@ static int nt39016_probe(struct spi_device *spi)
> >  		return err;
> >  	}
> >  
> > -	drm_panel_init(&panel->drm_panel, dev, &nt39016_funcs);
> > +	drm_panel_init(&panel->drm_panel, dev, &nt39016_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	err = drm_panel_add(&panel->drm_panel);
> >  	if (err < 0) {
> > diff --git a/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c b/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
> > index f2d6a4ec0046..f2a72ee6ee07 100644
> > --- a/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
> > +++ b/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
> > @@ -288,7 +288,8 @@ static int lcd_olinuxino_probe(struct i2c_client *client,
> >  	if (IS_ERR(lcd->backlight))
> >  		return PTR_ERR(lcd->backlight);
> >  
> > -	drm_panel_init(&lcd->panel, dev, &lcd_olinuxino_funcs);
> > +	drm_panel_init(&lcd->panel, dev, &lcd_olinuxino_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&lcd->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
> > index 8b60d5e4d775..bf1f928b215f 100644
> > --- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
> > +++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
> > @@ -455,7 +455,8 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
> >  	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> >  			  MIPI_DSI_MODE_LPM;
> >  
> > -	drm_panel_init(&ctx->panel, dev, &otm8009a_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &otm8009a_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ctx->bl_dev = devm_backlight_device_register(dev, dev_name(dev),
> >  						     dsi->host->dev, ctx,
> > diff --git a/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c b/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c
> > index 38f114b03b89..2b40913899d8 100644
> > --- a/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c
> > +++ b/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c
> > @@ -167,7 +167,7 @@ static int osd101t2587_panel_add(struct osd101t2587_panel *osd101t2587)
> >  		return PTR_ERR(osd101t2587->backlight);
> >  
> >  	drm_panel_init(&osd101t2587->base, &osd101t2587->dsi->dev,
> > -		       &osd101t2587_panel_funcs);
> > +		       &osd101t2587_panel_funcs, DRM_MODE_CONNECTOR_DSI);
> >  
> >  	return drm_panel_add(&osd101t2587->base);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c b/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> > index 6035bf458074..664605071d34 100644
> > --- a/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> > +++ b/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c
> > @@ -224,7 +224,7 @@ static int wuxga_nt_panel_add(struct wuxga_nt_panel *wuxga_nt)
> >  	}
> >  
> >  	drm_panel_init(&wuxga_nt->base, &wuxga_nt->dsi->dev,
> > -		       &wuxga_nt_panel_funcs);
> > +		       &wuxga_nt_panel_funcs, DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ret = drm_panel_add(&wuxga_nt->base);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
> > index 23a801427e42..09824e92fc78 100644
> > --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
> > +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
> > @@ -426,7 +426,8 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
> >  		return PTR_ERR(ts->dsi);
> >  	}
> >  
> > -	drm_panel_init(&ts->base, dev, &rpi_touchscreen_funcs);
> > +	drm_panel_init(&ts->base, dev, &rpi_touchscreen_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	/* This appears last, as it's what will unblock the DSI host
> >  	 * driver's component bind function.
> > diff --git a/drivers/gpu/drm/panel/panel-raydium-rm67191.c b/drivers/gpu/drm/panel/panel-raydium-rm67191.c
> > index f82a1f69f13b..fd67fc6185c4 100644
> > --- a/drivers/gpu/drm/panel/panel-raydium-rm67191.c
> > +++ b/drivers/gpu/drm/panel/panel-raydium-rm67191.c
> > @@ -606,7 +606,8 @@ static int rad_panel_probe(struct mipi_dsi_device *dsi)
> >  	if (ret)
> >  		return ret;
> >  
> > -	drm_panel_init(&panel->panel, dev, &rad_panel_funcs);
> > +	drm_panel_init(&panel->panel, dev, &rad_panel_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  	dev_set_drvdata(dev, panel);
> >  
> >  	ret = drm_panel_add(&panel->panel);
> > diff --git a/drivers/gpu/drm/panel/panel-raydium-rm68200.c b/drivers/gpu/drm/panel/panel-raydium-rm68200.c
> > index f004b78fb8bc..994e855721f4 100644
> > --- a/drivers/gpu/drm/panel/panel-raydium-rm68200.c
> > +++ b/drivers/gpu/drm/panel/panel-raydium-rm68200.c
> > @@ -404,7 +404,8 @@ static int rm68200_probe(struct mipi_dsi_device *dsi)
> >  	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> >  			  MIPI_DSI_MODE_LPM;
> >  
> > -	drm_panel_init(&ctx->panel, dev, &rm68200_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &rm68200_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	drm_panel_add(&ctx->panel);
> >  
> > diff --git a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c
> > index d7f56374f2f1..31234b79d3b1 100644
> > --- a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c
> > +++ b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c
> > @@ -343,7 +343,8 @@ static int jh057n_probe(struct mipi_dsi_device *dsi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&ctx->panel, dev, &jh057n_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &jh057n_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	drm_panel_add(&ctx->panel);
> >  
> > diff --git a/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c b/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c
> > index 8708fbbe7637..170a5cda21b9 100644
> > --- a/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c
> > +++ b/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c
> > @@ -173,7 +173,8 @@ static int rb070d30_panel_dsi_probe(struct mipi_dsi_device *dsi)
> >  	mipi_dsi_set_drvdata(dsi, ctx);
> >  	ctx->dsi = dsi;
> >  
> > -	drm_panel_init(&ctx->panel, &dsi->dev, &rb070d30_panel_funcs);
> > +	drm_panel_init(&ctx->panel, &dsi->dev, &rb070d30_panel_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ctx->gpios.reset = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW);
> >  	if (IS_ERR(ctx->gpios.reset)) {
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-ld9040.c b/drivers/gpu/drm/panel/panel-samsung-ld9040.c
> > index 71a292dbec47..250809ba37c7 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-ld9040.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-ld9040.c
> > @@ -351,7 +351,8 @@ static int ld9040_probe(struct spi_device *spi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&ctx->panel, dev, &ld9040_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &ld9040_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&ctx->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> > index 4d25c96e842c..e3a0397e953e 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> > @@ -215,7 +215,8 @@ static int s6d16d0_probe(struct mipi_dsi_device *dsi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&s6->panel, dev, &s6d16d0_drm_funcs);
> > +	drm_panel_init(&s6->panel, dev, &s6d16d0_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ret = drm_panel_add(&s6->panel);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c b/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c
> > index 42a3aaab49eb..938ab72c5540 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c
> > @@ -732,7 +732,8 @@ static int s6e3ha2_probe(struct mipi_dsi_device *dsi)
> >  	ctx->bl_dev->props.brightness = S6E3HA2_DEFAULT_BRIGHTNESS;
> >  	ctx->bl_dev->props.power = FB_BLANK_POWERDOWN;
> >  
> > -	drm_panel_init(&ctx->panel, dev, &s6e3ha2_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &s6e3ha2_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ret = drm_panel_add(&ctx->panel);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c b/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c
> > index b4d879bf4d03..a60635e9226d 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c
> > @@ -466,7 +466,8 @@ static int s6e63j0x03_probe(struct mipi_dsi_device *dsi)
> >  		return PTR_ERR(ctx->reset_gpio);
> >  	}
> >  
> > -	drm_panel_init(&ctx->panel, dev, &s6e63j0x03_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &s6e63j0x03_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ctx->bl_dev = backlight_device_register("s6e63j0x03", dev, ctx,
> >  						&s6e63j0x03_bl_ops, NULL);
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c b/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
> > index 61259c2833ab..ba01af0b14fd 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c
> > @@ -473,7 +473,8 @@ static int s6e63m0_probe(struct spi_device *spi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&ctx->panel, dev, &s6e63m0_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &s6e63m0_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	ret = s6e63m0_backlight_register(ctx);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
> > index 35dbffabd526..dbced6501204 100644
> > --- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
> > +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
> > @@ -1017,7 +1017,8 @@ static int s6e8aa0_probe(struct mipi_dsi_device *dsi)
> >  
> >  	ctx->brightness = GAMMA_LEVEL_NUM - 1;
> >  
> > -	drm_panel_init(&ctx->panel, dev, &s6e8aa0_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &s6e8aa0_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	ret = drm_panel_add(&ctx->panel);
> >  	if (ret < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> > index 0833d0c03adc..b3619ba443bd 100644
> > --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> > +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> > @@ -274,7 +274,8 @@ static int seiko_panel_probe(struct device *dev,
> >  			return -EPROBE_DEFER;
> >  	}
> >  
> > -	drm_panel_init(&panel->base, dev, &seiko_panel_funcs);
> > +	drm_panel_init(&panel->base, dev, &seiko_panel_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	err = drm_panel_add(&panel->base);
> >  	if (err < 0)
> > diff --git a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> > index 87a58cb4d945..5e136c3ba185 100644
> > --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> > +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c
> > @@ -329,7 +329,8 @@ static int sharp_panel_add(struct sharp_panel *sharp)
> >  	if (IS_ERR(sharp->backlight))
> >  		return PTR_ERR(sharp->backlight);
> >  
> > -	drm_panel_init(&sharp->base, &sharp->link1->dev, &sharp_panel_funcs);
> > +	drm_panel_init(&sharp->base, &sharp->link1->dev, &sharp_panel_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	return drm_panel_add(&sharp->base);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c
> > index 96e3deb0e305..eeab7998c7de 100644
> > --- a/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c
> > +++ b/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c
> > @@ -185,7 +185,8 @@ static int ls037v7dw01_probe(struct platform_device *pdev)
> >  		return PTR_ERR(lcd->ud_gpio);
> >  	}
> >  
> > -	drm_panel_init(&lcd->panel, &pdev->dev, &ls037v7dw01_funcs);
> > +	drm_panel_init(&lcd->panel, &pdev->dev, &ls037v7dw01_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&lcd->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> > index ffa844ee82ad..b963ba4ab589 100644
> > --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> > +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c
> > @@ -265,7 +265,7 @@ static int sharp_nt_panel_add(struct sharp_nt_panel *sharp_nt)
> >  		return PTR_ERR(sharp_nt->backlight);
> >  
> >  	drm_panel_init(&sharp_nt->base, &sharp_nt->dsi->dev,
> > -		       &sharp_nt_panel_funcs);
> > +		       &sharp_nt_panel_funcs, DRM_MODE_CONNECTOR_DSI);
> >  
> >  	return drm_panel_add(&sharp_nt->base);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> > index b36c130d5cf0..4b92b27eba86 100644
> > --- a/drivers/gpu/drm/panel/panel-simple.c
> > +++ b/drivers/gpu/drm/panel/panel-simple.c
> > @@ -94,6 +94,7 @@ struct panel_desc {
> >  
> >  	u32 bus_format;
> >  	u32 bus_flags;
> > +	int connector_type;
> >  };
> >  
> >  struct panel_simple {
> > @@ -464,7 +465,8 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
> >  	if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
> >  		panel_simple_parse_panel_timing_node(dev, panel, &dt);
> >  
> > -	drm_panel_init(&panel->base, dev, &panel_simple_funcs);
> > +	drm_panel_init(&panel->base, dev, &panel_simple_funcs,
> > +		       desc->connector_type);
> >  
> >  	err = drm_panel_add(&panel->base);
> >  	if (err < 0)
> > @@ -831,6 +833,7 @@ static const struct panel_desc auo_g133han01 = {
> >  		.unprepare = 1000,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing auo_g185han01_timings = {
> > @@ -860,6 +863,7 @@ static const struct panel_desc auo_g185han01 = {
> >  		.unprepare = 1000,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing auo_p320hvn03_timings = {
> > @@ -888,6 +892,7 @@ static const struct panel_desc auo_p320hvn03 = {
> >  		.unprepare = 500,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode auo_t215hvn01_mode = {
> > @@ -1203,6 +1208,7 @@ static const struct panel_desc dlc_dlc0700yzg_1 = {
> >  		.disable = 200,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing dlc_dlc1010gig_timing = {
> > @@ -1233,6 +1239,7 @@ static const struct panel_desc dlc_dlc1010gig = {
> >  		.unprepare = 60,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode edt_et035012dm6_mode = {
> > @@ -1499,6 +1506,7 @@ static const struct panel_desc hannstar_hsd070pww1 = {
> >  		.height = 94,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing hannstar_hsd100pxn1_timing = {
> > @@ -1523,6 +1531,7 @@ static const struct panel_desc hannstar_hsd100pxn1 = {
> >  		.height = 152,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = {
> > @@ -1629,6 +1638,7 @@ static const struct panel_desc innolux_g070y2_l01 = {
> >  		.unprepare = 800,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing innolux_g101ice_l01_timing = {
> > @@ -1657,6 +1667,7 @@ static const struct panel_desc innolux_g101ice_l01 = {
> >  		.disable = 200,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing innolux_g121i1_l01_timing = {
> > @@ -1684,6 +1695,7 @@ static const struct panel_desc innolux_g121i1_l01 = {
> >  		.disable = 20,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode innolux_g121x1_l03_mode = {
> > @@ -1867,6 +1879,7 @@ static const struct panel_desc koe_tx31d200vm0baa = {
> >  		.height = 109,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing kyo_tcg121xglp_timing = {
> > @@ -1891,6 +1904,7 @@ static const struct panel_desc kyo_tcg121xglp = {
> >  		.height = 184,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode lemaker_bl035_rgb_002_mode = {
> > @@ -1939,6 +1953,7 @@ static const struct panel_desc lg_lb070wv8 = {
> >  		.height = 91,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode lg_lp079qx1_sp0v_mode = {
> > @@ -2061,6 +2076,7 @@ static const struct panel_desc mitsubishi_aa070mc01 = {
> >  		.disable = 400,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
> >  };
> >  
> > @@ -2089,6 +2105,7 @@ static const struct panel_desc nec_nl12880bc20_05 = {
> >  		.disable = 50,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode nec_nl4827hc19_05b_mode = {
> > @@ -2191,6 +2208,7 @@ static const struct panel_desc nlt_nl192108ac18_02d = {
> >  		.unprepare = 500,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode nvd_9128_mode = {
> > @@ -2214,6 +2232,7 @@ static const struct panel_desc nvd_9128 = {
> >  		.height = 88,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing okaya_rs800480t_7x0gp_timing = {
> > @@ -2626,6 +2645,7 @@ static const struct panel_desc sharp_lq101k1ly04 = {
> >  		.height = 136,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing sharp_lq123p1jx31_timing = {
> > @@ -2805,6 +2825,7 @@ static const struct panel_desc tianma_tm070jdhg30 = {
> >  		.height = 95,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct display_timing tianma_tm070rvhg71_timing = {
> > @@ -2829,6 +2850,7 @@ static const struct panel_desc tianma_tm070rvhg71 = {
> >  		.height = 86,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = {
> > @@ -2911,6 +2933,7 @@ static const struct panel_desc toshiba_lt089ac29000 = {
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> >  	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct drm_display_mode tpk_f07a_0102_mode = {
> > @@ -2981,6 +3004,7 @@ static const struct panel_desc urt_umsh_8596md_lvds = {
> >  		.height = 91,
> >  	},
> >  	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
> > +	.connector_type = DRM_MODE_CONNECTOR_LVDS,
> >  };
> >  
> >  static const struct panel_desc urt_umsh_8596md_parallel = {
> > diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7701.c b/drivers/gpu/drm/panel/panel-sitronix-st7701.c
> > index 3f7bcd24aa81..ee3f23f45755 100644
> > --- a/drivers/gpu/drm/panel/panel-sitronix-st7701.c
> > +++ b/drivers/gpu/drm/panel/panel-sitronix-st7701.c
> > @@ -369,7 +369,8 @@ static int st7701_dsi_probe(struct mipi_dsi_device *dsi)
> >  	if (IS_ERR(st7701->backlight))
> >  		return PTR_ERR(st7701->backlight);
> >  
> > -	drm_panel_init(&st7701->panel, &dsi->dev, &st7701_funcs);
> > +	drm_panel_init(&st7701->panel, &dsi->dev, &st7701_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  
> >  	/**
> >  	 * Once sleep out has been issued, ST7701 IC required to wait 120ms
> > diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> > index 2eeaeee0dd7f..108a85bb6667 100644
> > --- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> > +++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c
> > @@ -381,7 +381,8 @@ static int st7789v_probe(struct spi_device *spi)
> >  	spi_set_drvdata(spi, ctx);
> >  	ctx->spi = spi;
> >  
> > -	drm_panel_init(&ctx->panel, &spi->dev, &st7789v_drm_funcs);
> > +	drm_panel_init(&ctx->panel, &spi->dev, &st7789v_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	ctx->power = devm_regulator_get(&spi->dev, "power");
> >  	if (IS_ERR(ctx->power))
> > diff --git a/drivers/gpu/drm/panel/panel-sony-acx565akm.c b/drivers/gpu/drm/panel/panel-sony-acx565akm.c
> > index 5a2772b04b75..6f5ce5867ff9 100644
> > --- a/drivers/gpu/drm/panel/panel-sony-acx565akm.c
> > +++ b/drivers/gpu/drm/panel/panel-sony-acx565akm.c
> > @@ -648,7 +648,8 @@ static int acx565akm_probe(struct spi_device *spi)
> >  			return ret;
> >  	}
> >  
> > -	drm_panel_init(&lcd->panel, &lcd->spi->dev, &acx565akm_funcs);
> > +	drm_panel_init(&lcd->panel, &lcd->spi->dev, &acx565akm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	ret = drm_panel_add(&lcd->panel);
> >  	if (ret < 0) {
> > diff --git a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> > index 8b1148d74e7b..1d08d03f509d 100644
> > --- a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> > +++ b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c
> > @@ -347,7 +347,8 @@ static int td028ttec1_probe(struct spi_device *spi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&lcd->panel, &lcd->spi->dev, &td028ttec1_funcs);
> > +	drm_panel_init(&lcd->panel, &lcd->spi->dev, &td028ttec1_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	return drm_panel_add(&lcd->panel);
> >  }
> > diff --git a/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c b/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c
> > index bbf0c2e1c90f..416aebd23b6a 100644
> > --- a/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c
> > +++ b/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c
> > @@ -458,7 +458,8 @@ static int td043mtea1_probe(struct spi_device *spi)
> >  		return ret;
> >  	}
> >  
> > -	drm_panel_init(&lcd->panel, &lcd->spi->dev, &td043mtea1_funcs);
> > +	drm_panel_init(&lcd->panel, &lcd->spi->dev, &td043mtea1_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  
> >  	ret = drm_panel_add(&lcd->panel);
> >  	if (ret < 0) {
> > diff --git a/drivers/gpu/drm/panel/panel-tpo-tpg110.c b/drivers/gpu/drm/panel/panel-tpo-tpg110.c
> > index 25524c26b241..1a5418ae2ccf 100644
> > --- a/drivers/gpu/drm/panel/panel-tpo-tpg110.c
> > +++ b/drivers/gpu/drm/panel/panel-tpo-tpg110.c
> > @@ -457,7 +457,8 @@ static int tpg110_probe(struct spi_device *spi)
> >  	if (ret)
> >  		return ret;
> >  
> > -	drm_panel_init(&tpg->panel, dev, &tpg110_drm_funcs);
> > +	drm_panel_init(&tpg->panel, dev, &tpg110_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DPI);
> >  	spi_set_drvdata(spi, tpg);
> >  
> >  	return drm_panel_add(&tpg->panel);
> > diff --git a/drivers/gpu/drm/panel/panel-truly-nt35597.c b/drivers/gpu/drm/panel/panel-truly-nt35597.c
> > index c3714be78837..0feea2456e14 100644
> > --- a/drivers/gpu/drm/panel/panel-truly-nt35597.c
> > +++ b/drivers/gpu/drm/panel/panel-truly-nt35597.c
> > @@ -518,7 +518,8 @@ static int truly_nt35597_panel_add(struct truly_nt35597 *ctx)
> >  	/* dual port */
> >  	gpiod_set_value(ctx->mode_gpio, 0);
> >  
> > -	drm_panel_init(&ctx->panel, dev, &truly_nt35597_drm_funcs);
> > +	drm_panel_init(&ctx->panel, dev, &truly_nt35597_drm_funcs,
> > +		       DRM_MODE_CONNECTOR_DSI);
> >  	drm_panel_add(&ctx->panel);
> >  
> >  	return 0;
> > diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
> > index 4b9c656dc15e..ce8da64022b4 100644
> > --- a/include/drm/drm_panel.h
> > +++ b/include/drm/drm_panel.h
> > @@ -139,6 +139,15 @@ struct drm_panel {
> >  	 */
> >  	const struct drm_panel_funcs *funcs;
> >  
> > +	/**
> > +	 * @connector_type:
> > +	 *
> > +	 * Type of the panel as a DRM_MODE_CONNECTOR_* value. This is used to
> > +	 * initialise the drm_connector corresponding to the panel with the
> > +	 * correct connector type.
> > +	 */
> > +	int connector_type;
> > +
> >  	/**
> >  	 * @list:
> >  	 *
> > @@ -148,7 +157,8 @@ struct drm_panel {
> >  };
> >  
> >  void drm_panel_init(struct drm_panel *panel, struct device *dev,
> > -		    const struct drm_panel_funcs *funcs);
> > +		    const struct drm_panel_funcs *funcs,
> > +		    int connector_type);
> >  
> >  int drm_panel_add(struct drm_panel *panel);
> >  void drm_panel_remove(struct drm_panel *panel);

-- 
Regards,

Laurent Pinchart


More information about the dri-devel mailing list