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.
Update all panel drivers to fill the new field.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/panel/panel-arm-versatile.c | 1 + .../drm/panel/panel-feiyang-fy07024di26a30d.c | 1 + drivers/gpu/drm/panel/panel-ilitek-ili9322.c | 1 + drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 1 + drivers/gpu/drm/panel/panel-innolux-p079zca.c | 1 + .../gpu/drm/panel/panel-jdi-lt070me05000.c | 1 + .../drm/panel/panel-kingdisplay-kd097d04.c | 1 + drivers/gpu/drm/panel/panel-lg-lb035q02.c | 1 + drivers/gpu/drm/panel/panel-lg-lg4573.c | 1 + drivers/gpu/drm/panel/panel-lvds.c | 1 + drivers/gpu/drm/panel/panel-nec-nl8048hl11.c | 1 + drivers/gpu/drm/panel/panel-novatek-nt39016.c | 1 + .../drm/panel/panel-olimex-lcd-olinuxino.c | 1 + .../gpu/drm/panel/panel-orisetech-otm8009a.c | 1 + .../drm/panel/panel-osd-osd101t2587-53ts.c | 1 + .../drm/panel/panel-panasonic-vvx10f034n00.c | 1 + .../drm/panel/panel-raspberrypi-touchscreen.c | 1 + drivers/gpu/drm/panel/panel-raydium-rm67191.c | 1 + drivers/gpu/drm/panel/panel-raydium-rm68200.c | 1 + .../drm/panel/panel-rocktech-jh057n00900.c | 1 + drivers/gpu/drm/panel/panel-ronbo-rb070d30.c | 1 + drivers/gpu/drm/panel/panel-samsung-ld9040.c | 1 + drivers/gpu/drm/panel/panel-samsung-s6d16d0.c | 1 + drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c | 1 + .../gpu/drm/panel/panel-samsung-s6e63j0x03.c | 1 + drivers/gpu/drm/panel/panel-samsung-s6e63m0.c | 1 + drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c | 1 + drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 1 + .../gpu/drm/panel/panel-sharp-lq101r1sx01.c | 1 + .../gpu/drm/panel/panel-sharp-ls037v7dw01.c | 1 + .../gpu/drm/panel/panel-sharp-ls043t1le01.c | 1 + drivers/gpu/drm/panel/panel-simple.c | 23 +++++++++++++++++++ drivers/gpu/drm/panel/panel-sitronix-st7701.c | 1 + .../gpu/drm/panel/panel-sitronix-st7789v.c | 1 + drivers/gpu/drm/panel/panel-sony-acx565akm.c | 1 + drivers/gpu/drm/panel/panel-tpo-td028ttec1.c | 1 + drivers/gpu/drm/panel/panel-tpo-td043mtea1.c | 1 + drivers/gpu/drm/panel/panel-tpo-tpg110.c | 1 + drivers/gpu/drm/panel/panel-truly-nt35597.c | 1 + include/drm/drm_panel.h | 7 ++++++ 40 files changed, 68 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-arm-versatile.c b/drivers/gpu/drm/panel/panel-arm-versatile.c index 5f72c922a04b..5c335fc1632b 100644 --- a/drivers/gpu/drm/panel/panel-arm-versatile.c +++ b/drivers/gpu/drm/panel/panel-arm-versatile.c @@ -353,6 +353,7 @@ static int versatile_panel_probe(struct platform_device *pdev) drm_panel_init(&vpanel->panel); vpanel->panel.dev = dev; vpanel->panel.funcs = &versatile_panel_drm_funcs; + vpanel->panel.type = 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 dabf59e0f56f..58894a4bf02c 100644 --- a/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c +++ b/drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c @@ -207,6 +207,7 @@ static int feiyang_dsi_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = &dsi->dev; ctx->panel.funcs = &feiyang_funcs; + ctx->panel.type = 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 3c58f63adbf7..10a6f4ab53e2 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9322.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9322.c @@ -898,6 +898,7 @@ static int ili9322_probe(struct spi_device *spi) drm_panel_init(&ili->panel); ili->panel.dev = dev; ili->panel.funcs = &ili9322_drm_funcs; + ili->panel.type = 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 3ad4a46c4e94..360b87ff62a1 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c @@ -436,6 +436,7 @@ static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = &dsi->dev; ctx->panel.funcs = &ili9881c_funcs; + ctx->panel.type = 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 d92d1c98878c..00b24662ebb5 100644 --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c @@ -490,6 +490,7 @@ static int innolux_panel_add(struct mipi_dsi_device *dsi, drm_panel_init(&innolux->base); innolux->base.funcs = &innolux_panel_funcs; innolux->base.dev = dev; + innolux->base.type = 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 ff3e89e61e3f..8e6035557297 100644 --- a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c +++ b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c @@ -440,6 +440,7 @@ static int jdi_panel_add(struct jdi_panel *jdi) drm_panel_init(&jdi->base); jdi->base.funcs = &jdi_panel_funcs; jdi->base.dev = &jdi->dsi->dev; + jdi->base.type = 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 3ac04eb8d0fe..930e72bffc8c 100644 --- a/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c +++ b/drivers/gpu/drm/panel/panel-kingdisplay-kd097d04.c @@ -394,6 +394,7 @@ static int kingdisplay_panel_add(struct kingdisplay_panel *kingdisplay) drm_panel_init(&kingdisplay->base); kingdisplay->base.funcs = &kingdisplay_panel_funcs; kingdisplay->base.dev = &kingdisplay->link->dev; + kingdisplay->base.type = 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 fc82a525b071..790d44794a10 100644 --- a/drivers/gpu/drm/panel/panel-lg-lb035q02.c +++ b/drivers/gpu/drm/panel/panel-lg-lb035q02.c @@ -199,6 +199,7 @@ static int lb035q02_probe(struct spi_device *spi) drm_panel_init(&lcd->panel); lcd->panel.dev = &lcd->spi->dev; lcd->panel.funcs = &lb035q02_funcs; + lcd->panel.type = 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 41bf02d122a1..376d38bf3670 100644 --- a/drivers/gpu/drm/panel/panel-lg-lg4573.c +++ b/drivers/gpu/drm/panel/panel-lg-lg4573.c @@ -262,6 +262,7 @@ static int lg4573_probe(struct spi_device *spi) drm_panel_init(&ctx->panel); ctx->panel.dev = &spi->dev; ctx->panel.funcs = &lg4573_drm_funcs; + ctx->panel.type = 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 ad47cc95459e..311ce5067fd7 100644 --- a/drivers/gpu/drm/panel/panel-lvds.c +++ b/drivers/gpu/drm/panel/panel-lvds.c @@ -263,6 +263,7 @@ static int panel_lvds_probe(struct platform_device *pdev) drm_panel_init(&lvds->panel); lvds->panel.dev = lvds->dev; lvds->panel.funcs = &panel_lvds_funcs; + lvds->panel.type = 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 299b217c83e1..d7d07677879b 100644 --- a/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c +++ b/drivers/gpu/drm/panel/panel-nec-nl8048hl11.c @@ -208,6 +208,7 @@ static int nl8048_probe(struct spi_device *spi) drm_panel_init(&lcd->panel); lcd->panel.dev = &lcd->spi->dev; lcd->panel.funcs = &nl8048_funcs; + lcd->panel.type = 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 2ad1063b068d..fbe549fb1f06 100644 --- a/drivers/gpu/drm/panel/panel-novatek-nt39016.c +++ b/drivers/gpu/drm/panel/panel-novatek-nt39016.c @@ -295,6 +295,7 @@ static int nt39016_probe(struct spi_device *spi) drm_panel_init(&panel->drm_panel); panel->drm_panel.dev = dev; panel->drm_panel.funcs = &nt39016_funcs; + panel->drm_panel.type = 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 2bae1db3ff34..469b99e547f6 100644 --- a/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c +++ b/drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c @@ -291,6 +291,7 @@ static int lcd_olinuxino_probe(struct i2c_client *client, drm_panel_init(&lcd->panel); lcd->panel.dev = dev; lcd->panel.funcs = &lcd_olinuxino_funcs; + lcd->panel.type = 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 c7b48df8869a..9a19dd5f70ca 100644 --- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c +++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c @@ -458,6 +458,7 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &otm8009a_drm_funcs; + ctx->panel.type = 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 e0e20ecff916..f68e40ecef6e 100644 --- a/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c +++ b/drivers/gpu/drm/panel/panel-osd-osd101t2587-53ts.c @@ -169,6 +169,7 @@ static int osd101t2587_panel_add(struct osd101t2587_panel *osd101t2587) drm_panel_init(&osd101t2587->base); osd101t2587->base.funcs = &osd101t2587_panel_funcs; osd101t2587->base.dev = &osd101t2587->dsi->dev; + osd101t2587->base.type = 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 3dff0b3f73c2..5e04bb6d89ce 100644 --- a/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c +++ b/drivers/gpu/drm/panel/panel-panasonic-vvx10f034n00.c @@ -226,6 +226,7 @@ static int wuxga_nt_panel_add(struct wuxga_nt_panel *wuxga_nt) drm_panel_init(&wuxga_nt->base); wuxga_nt->base.funcs = &wuxga_nt_panel_funcs; wuxga_nt->base.dev = &wuxga_nt->dsi->dev; + wuxga_nt->base.type = 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 b5b14aa059ea..cac074939e2c 100644 --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c @@ -428,6 +428,7 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
ts->base.dev = dev; ts->base.funcs = &rpi_touchscreen_funcs; + ts->base.type = 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 6a5d37006103..458b8826fe85 100644 --- a/drivers/gpu/drm/panel/panel-raydium-rm67191.c +++ b/drivers/gpu/drm/panel/panel-raydium-rm67191.c @@ -609,6 +609,7 @@ static int rad_panel_probe(struct mipi_dsi_device *dsi) drm_panel_init(&panel->panel); panel->panel.funcs = &rad_panel_funcs; panel->panel.dev = dev; + panel->panel.type = 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 ba889625ad43..ebb6af1ea331 100644 --- a/drivers/gpu/drm/panel/panel-raydium-rm68200.c +++ b/drivers/gpu/drm/panel/panel-raydium-rm68200.c @@ -407,6 +407,7 @@ static int rm68200_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &rm68200_drm_funcs; + ctx->panel.type = 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 b9109922397f..b959d0581c95 100644 --- a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c +++ b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c @@ -346,6 +346,7 @@ static int jh057n_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &jh057n_drm_funcs; + ctx->panel.type = 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 3c15764f0c03..c0f1262e080c 100644 --- a/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c +++ b/drivers/gpu/drm/panel/panel-ronbo-rb070d30.c @@ -176,6 +176,7 @@ static int rb070d30_panel_dsi_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = &dsi->dev; ctx->panel.funcs = &rb070d30_panel_funcs; + ctx->panel.type = 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 3be902dcedc0..78e484727661 100644 --- a/drivers/gpu/drm/panel/panel-samsung-ld9040.c +++ b/drivers/gpu/drm/panel/panel-samsung-ld9040.c @@ -354,6 +354,7 @@ static int ld9040_probe(struct spi_device *spi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &ld9040_drm_funcs; + ctx->panel.type = 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 f75bef24e050..4430c730026c 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c @@ -218,6 +218,7 @@ static int s6d16d0_probe(struct mipi_dsi_device *dsi) drm_panel_init(&s6->panel); s6->panel.dev = dev; s6->panel.funcs = &s6d16d0_drm_funcs; + s6->panel.type = 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 b923de23ed65..8b65ee4dabc7 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c @@ -735,6 +735,7 @@ static int s6e3ha2_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e3ha2_drm_funcs; + ctx->panel.type = 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 cd90fa700c49..f0dbcd9eddf6 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c @@ -469,6 +469,7 @@ static int s6e63j0x03_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e63j0x03_funcs; + ctx->panel.type = 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 142d395ea512..2a41ff055244 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6e63m0.c @@ -476,6 +476,7 @@ static int s6e63m0_probe(struct spi_device *spi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e63m0_drm_funcs; + ctx->panel.type = 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 81858267723a..c1d723296d33 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c @@ -1020,6 +1020,7 @@ static int s6e8aa0_probe(struct mipi_dsi_device *dsi) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e8aa0_drm_funcs; + ctx->panel.type = 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 18b22b1294fb..0951b9b84dc1 100644 --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c @@ -277,6 +277,7 @@ static int seiko_panel_probe(struct device *dev, drm_panel_init(&panel->base); panel->base.dev = dev; panel->base.funcs = &seiko_panel_funcs; + panel->base.type = 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 e910b4ad1310..3dbbd3f9ba1a 100644 --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c @@ -332,6 +332,7 @@ static int sharp_panel_add(struct sharp_panel *sharp) drm_panel_init(&sharp->base); sharp->base.funcs = &sharp_panel_funcs; sharp->base.dev = &sharp->link1->dev; + sharp->base.type = 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 46cd9a250129..099a29da7998 100644 --- a/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c +++ b/drivers/gpu/drm/panel/panel-sharp-ls037v7dw01.c @@ -188,6 +188,7 @@ static int ls037v7dw01_probe(struct platform_device *pdev) drm_panel_init(&lcd->panel); lcd->panel.dev = &pdev->dev; lcd->panel.funcs = &ls037v7dw01_funcs; + lcd->panel.type = 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 c39abde9f9f1..1764e4cadea4 100644 --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c @@ -267,6 +267,7 @@ static int sharp_nt_panel_add(struct sharp_nt_panel *sharp_nt) drm_panel_init(&sharp_nt->base); sharp_nt->base.funcs = &sharp_nt_panel_funcs; sharp_nt->base.dev = &sharp_nt->dsi->dev; + sharp_nt->base.type = 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 28fa6ba7b767..6d5d0c51e97e 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; + unsigned int type; };
struct panel_simple { @@ -467,6 +468,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) drm_panel_init(&panel->base); panel->base.dev = dev; panel->base.funcs = &panel_simple_funcs; + panel->base.type = desc->type ? desc->type : DRM_MODE_CONNECTOR_DPI;
err = drm_panel_add(&panel->base); if (err < 0) @@ -833,6 +835,7 @@ static const struct panel_desc auo_g133han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing auo_g185han01_timings = { @@ -862,6 +865,7 @@ static const struct panel_desc auo_g185han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing auo_p320hvn03_timings = { @@ -890,6 +894,7 @@ static const struct panel_desc auo_p320hvn03 = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode auo_t215hvn01_mode = { @@ -1205,6 +1210,7 @@ static const struct panel_desc dlc_dlc0700yzg_1 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing dlc_dlc1010gig_timing = { @@ -1235,6 +1241,7 @@ static const struct panel_desc dlc_dlc1010gig = { .unprepare = 60, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode edt_et035012dm6_mode = { @@ -1501,6 +1508,7 @@ static const struct panel_desc hannstar_hsd070pww1 = { .height = 94, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing hannstar_hsd100pxn1_timing = { @@ -1525,6 +1533,7 @@ static const struct panel_desc hannstar_hsd100pxn1 = { .height = 152, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = { @@ -1631,6 +1640,7 @@ static const struct panel_desc innolux_g070y2_l01 = { .unprepare = 800, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing innolux_g101ice_l01_timing = { @@ -1659,6 +1669,7 @@ static const struct panel_desc innolux_g101ice_l01 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing innolux_g121i1_l01_timing = { @@ -1686,6 +1697,7 @@ static const struct panel_desc innolux_g121i1_l01 = { .disable = 20, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode innolux_g121x1_l03_mode = { @@ -1869,6 +1881,7 @@ static const struct panel_desc koe_tx31d200vm0baa = { .height = 109, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing kyo_tcg121xglp_timing = { @@ -1893,6 +1906,7 @@ static const struct panel_desc kyo_tcg121xglp = { .height = 184, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode lemaker_bl035_rgb_002_mode = { @@ -1941,6 +1955,7 @@ static const struct panel_desc lg_lb070wv8 = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode lg_lp079qx1_sp0v_mode = { @@ -2063,6 +2078,7 @@ static const struct panel_desc mitsubishi_aa070mc01 = { .disable = 400, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, .bus_flags = DRM_BUS_FLAG_DE_HIGH, };
@@ -2091,6 +2107,7 @@ static const struct panel_desc nec_nl12880bc20_05 = { .disable = 50, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode nec_nl4827hc19_05b_mode = { @@ -2193,6 +2210,7 @@ static const struct panel_desc nlt_nl192108ac18_02d = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode nvd_9128_mode = { @@ -2216,6 +2234,7 @@ static const struct panel_desc nvd_9128 = { .height = 88, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing okaya_rs800480t_7x0gp_timing = { @@ -2628,6 +2647,7 @@ static const struct panel_desc sharp_lq101k1ly04 = { .height = 136, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing sharp_lq123p1jx31_timing = { @@ -2807,6 +2827,7 @@ static const struct panel_desc tianma_tm070jdhg30 = { .height = 95, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct display_timing tianma_tm070rvhg71_timing = { @@ -2831,6 +2852,7 @@ static const struct panel_desc tianma_tm070rvhg71 = { .height = 86, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .type = DRM_MODE_CONNECTOR_LVDS, };
static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = { @@ -2983,6 +3005,7 @@ static const struct panel_desc urt_umsh_8596md_lvds = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, + .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 09c5d9a6f9fa..863de44b1389 100644 --- a/drivers/gpu/drm/panel/panel-sitronix-st7701.c +++ b/drivers/gpu/drm/panel/panel-sitronix-st7701.c @@ -383,6 +383,7 @@ static int st7701_dsi_probe(struct mipi_dsi_device *dsi) st7701->sleep_delay = 120 + desc->panel_sleep_delay; st7701->panel.funcs = &st7701_funcs; st7701->panel.dev = &dsi->dev; + st7701->panel.type = DRM_MODE_CONNECTOR_DSI;
ret = drm_panel_add(&st7701->panel); if (ret < 0) diff --git a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c index 5e3e92ea9ea6..eb5f01629d92 100644 --- a/drivers/gpu/drm/panel/panel-sitronix-st7789v.c +++ b/drivers/gpu/drm/panel/panel-sitronix-st7789v.c @@ -383,6 +383,7 @@ static int st7789v_probe(struct spi_device *spi)
ctx->panel.dev = &spi->dev; ctx->panel.funcs = &st7789v_drm_funcs; + ctx->panel.type = 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 305259b58767..1cbcbd0e213a 100644 --- a/drivers/gpu/drm/panel/panel-sony-acx565akm.c +++ b/drivers/gpu/drm/panel/panel-sony-acx565akm.c @@ -651,6 +651,7 @@ static int acx565akm_probe(struct spi_device *spi) drm_panel_init(&lcd->panel); lcd->panel.dev = &lcd->spi->dev; lcd->panel.funcs = &acx565akm_funcs; + lcd->panel.type = 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 d7b2e34626ef..f643e55ef90d 100644 --- a/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c +++ b/drivers/gpu/drm/panel/panel-tpo-td028ttec1.c @@ -350,6 +350,7 @@ static int td028ttec1_probe(struct spi_device *spi) drm_panel_init(&lcd->panel); lcd->panel.dev = &lcd->spi->dev; lcd->panel.funcs = &td028ttec1_funcs; + lcd->panel.type = 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 3b4f30c0fdae..885ea1a8c1f6 100644 --- a/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c +++ b/drivers/gpu/drm/panel/panel-tpo-td043mtea1.c @@ -461,6 +461,7 @@ static int td043mtea1_probe(struct spi_device *spi) drm_panel_init(&lcd->panel); lcd->panel.dev = &lcd->spi->dev; lcd->panel.funcs = &td043mtea1_funcs; + lcd->panel.type = 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 71591e5f5938..73ec6ff7eefb 100644 --- a/drivers/gpu/drm/panel/panel-tpo-tpg110.c +++ b/drivers/gpu/drm/panel/panel-tpo-tpg110.c @@ -460,6 +460,7 @@ static int tpg110_probe(struct spi_device *spi) drm_panel_init(&tpg->panel); tpg->panel.dev = dev; tpg->panel.funcs = &tpg110_drm_funcs; + tpg->panel.type = 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 77e1311b7c69..aa2012fb7393 100644 --- a/drivers/gpu/drm/panel/panel-truly-nt35597.c +++ b/drivers/gpu/drm/panel/panel-truly-nt35597.c @@ -521,6 +521,7 @@ static int truly_nt35597_panel_add(struct truly_nt35597 *ctx) drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &truly_nt35597_drm_funcs; + ctx->panel.type = 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 624bd15ecfab..5899a7d6559c 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -139,6 +139,13 @@ struct drm_panel { */ const struct drm_panel_funcs *funcs;
+ /** + * @type: + * + * Type of the panel as a DRM_MODE_CONNECTOR_* value. + */ + int type; + /** * @list: *
The drm panel bridge creates a connector using a connector type explicit passed by the display controller or bridge driver that instantiates the panel bridge. Now that drm_panel reports its connector type, use it and remove the connector_type argument to drm_panel_bridge_add() and devm_drm_panel_bridge_add().
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com --- drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 2 +- drivers/gpu/drm/bridge/cdns-dsi.c | 2 +- drivers/gpu/drm/bridge/lvds-encoder.c | 2 +- drivers/gpu/drm/bridge/panel.c | 16 ++++------------ drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 2 +- drivers/gpu/drm/ingenic/ingenic-drm.c | 6 ++---- drivers/gpu/drm/mcde/mcde_dsi.c | 3 +-- drivers/gpu/drm/pl111/pl111_drv.c | 3 +-- drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 3 +-- drivers/gpu/drm/rockchip/rockchip_rgb.c | 2 +- drivers/gpu/drm/stm/ltdc.c | 3 +-- drivers/gpu/drm/tilcdc/tilcdc_external.c | 3 +-- drivers/gpu/drm/tve200/tve200_drv.c | 3 +-- drivers/gpu/drm/vc4/vc4_dpi.c | 2 +- drivers/gpu/drm/vc4/vc4_dsi.c | 3 +-- include/drm/drm_bridge.h | 6 ++---- 16 files changed, 21 insertions(+), 40 deletions(-)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c index c388497366ca..34ce38217350 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c @@ -107,7 +107,7 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, int endpoint) output->encoder.possible_crtcs = 0x1;
if (panel) { - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_Unknown); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) return PTR_ERR(bridge); } diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c index 2af7f25c7413..aa109b5dc41c 100644 --- a/drivers/gpu/drm/bridge/cdns-dsi.c +++ b/drivers/gpu/drm/bridge/cdns-dsi.c @@ -958,7 +958,7 @@ static int cdns_dsi_attach(struct mipi_dsi_host *host,
panel = of_drm_find_panel(np); if (!IS_ERR(panel)) { - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DSI); + bridge = drm_panel_bridge_add(panel); } else { bridge = of_drm_find_bridge(dev->dev.of_node); if (!bridge) diff --git a/drivers/gpu/drm/bridge/lvds-encoder.c b/drivers/gpu/drm/bridge/lvds-encoder.c index 9ebc750449cf..7b03ba65673d 100644 --- a/drivers/gpu/drm/bridge/lvds-encoder.c +++ b/drivers/gpu/drm/bridge/lvds-encoder.c @@ -107,7 +107,7 @@ static int lvds_encoder_probe(struct platform_device *pdev) }
lvds_encoder->panel_bridge = - devm_drm_panel_bridge_add(dev, panel, DRM_MODE_CONNECTOR_LVDS); + devm_drm_panel_bridge_add(dev, panel); if (IS_ERR(lvds_encoder->panel_bridge)) return PTR_ERR(lvds_encoder->panel_bridge);
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index f5b8e55301ac..912b0e9ecd5f 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -16,7 +16,6 @@ struct panel_bridge { struct drm_bridge bridge; struct drm_connector connector; struct drm_panel *panel; - u32 connector_type; };
static inline struct panel_bridge * @@ -72,7 +71,7 @@ static int panel_bridge_attach(struct drm_bridge *bridge,
ret = drm_connector_init(bridge->dev, connector, &panel_bridge_connector_funcs, - panel_bridge->connector_type); + panel_bridge->panel->type); if (ret) { DRM_ERROR("Failed to initialize connector\n"); return ret; @@ -137,8 +136,6 @@ static const struct drm_bridge_funcs panel_bridge_bridge_funcs = { * just calls the appropriate functions from &drm_panel. * * @panel: The drm_panel being wrapped. Must be non-NULL. - * @connector_type: The DRM_MODE_CONNECTOR_* for the connector to be - * created. * * For drivers converting from directly using drm_panel: The expected * usage pattern is that during either encoder module probe or DSI @@ -155,8 +152,7 @@ static const struct drm_bridge_funcs panel_bridge_bridge_funcs = { * See devm_drm_panel_bridge_add() for an automatically manged version of this * function. */ -struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, - u32 connector_type) +struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel) { struct panel_bridge *panel_bridge;
@@ -168,7 +164,6 @@ struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, if (!panel_bridge) return ERR_PTR(-ENOMEM);
- panel_bridge->connector_type = connector_type; panel_bridge->panel = panel;
panel_bridge->bridge.funcs = &panel_bridge_bridge_funcs; @@ -217,15 +212,12 @@ static void devm_drm_panel_bridge_release(struct device *dev, void *res) * that just calls the appropriate functions from &drm_panel. * @dev: device to tie the bridge lifetime to * @panel: The drm_panel being wrapped. Must be non-NULL. - * @connector_type: The DRM_MODE_CONNECTOR_* for the connector to be - * created. * * This is the managed version of drm_panel_bridge_add() which automatically * calls drm_panel_bridge_remove() when @dev is unbound. */ struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, - struct drm_panel *panel, - u32 connector_type) + struct drm_panel *panel) { struct drm_bridge **ptr, *bridge;
@@ -234,7 +226,7 @@ struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, if (!ptr) return ERR_PTR(-ENOMEM);
- bridge = drm_panel_bridge_add(panel, connector_type); + bridge = drm_panel_bridge_add(panel); if (!IS_ERR(bridge)) { *ptr = bridge; devres_add(dev, ptr); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c index 9245dde314a8..5b87c3ebb393 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c @@ -316,7 +316,7 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host, return ret;
if (panel) { - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DSI); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) return PTR_ERR(bridge); } diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.c b/drivers/gpu/drm/ingenic/ingenic-drm.c index 65eb10179ea9..3d0be48dc3cf 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm.c @@ -675,10 +675,8 @@ static int ingenic_drm_probe(struct platform_device *pdev) return ret; }
- if (panel) { - bridge = devm_drm_panel_bridge_add(dev, panel, - DRM_MODE_CONNECTOR_Unknown); - } + if (panel) + bridge = devm_drm_panel_bridge_add(dev, panel);
priv->dma_hwdesc = dma_alloc_coherent(dev, sizeof(*priv->dma_hwdesc), &priv->dma_hwdesc_phys, diff --git a/drivers/gpu/drm/mcde/mcde_dsi.c b/drivers/gpu/drm/mcde/mcde_dsi.c index 8feaa1b81473..a4745cfd405b 100644 --- a/drivers/gpu/drm/mcde/mcde_dsi.c +++ b/drivers/gpu/drm/mcde/mcde_dsi.c @@ -926,8 +926,7 @@ static int mcde_dsi_bind(struct device *dev, struct device *master, } } if (panel) { - bridge = drm_panel_bridge_add(panel, - DRM_MODE_CONNECTOR_DSI); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) { dev_err(dev, "error adding panel bridge\n"); return PTR_ERR(bridge); diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index 276b53473a84..d94c896122eb 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -150,8 +150,7 @@ static int pl111_modeset_init(struct drm_device *dev) return -EPROBE_DEFER;
if (panel) { - bridge = drm_panel_bridge_add(panel, - DRM_MODE_CONNECTOR_Unknown); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) { ret = PTR_ERR(bridge); goto out_config; diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c index 26603843c318..700923a7c604 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c @@ -84,8 +84,7 @@ int rcar_du_encoder_init(struct rcar_du_device *rcdu, goto done; }
- bridge = devm_drm_panel_bridge_add(rcdu->dev, panel, - DRM_MODE_CONNECTOR_DPI); + bridge = devm_drm_panel_bridge_add(rcdu->dev, panel); if (IS_ERR(bridge)) { ret = PTR_ERR(bridge); goto done; diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c index f586e06f3df2..ad8869bccc0e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c @@ -135,7 +135,7 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev, drm_encoder_helper_add(encoder, &rockchip_rgb_encoder_helper_funcs);
if (panel) { - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_LVDS); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) return ERR_CAST(bridge); } diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c index 18561d977d84..e117d5fdf423 100644 --- a/drivers/gpu/drm/stm/ltdc.c +++ b/drivers/gpu/drm/stm/ltdc.c @@ -1236,8 +1236,7 @@ int ltdc_load(struct drm_device *ddev) /* Add endpoints panels or bridges if any */ for (i = 0; i < MAX_ENDPOINTS; i++) { if (panel[i]) { - bridge[i] = drm_panel_bridge_add(panel[i], - DRM_MODE_CONNECTOR_DPI); + bridge[i] = drm_panel_bridge_add(panel[i]); if (IS_ERR(bridge[i])) { DRM_ERROR("panel-bridge endpoint %d\n", i); ret = PTR_ERR(bridge[i]); diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c index 1ed765ce9349..9e52d97711b6 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_external.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c @@ -139,8 +139,7 @@ int tilcdc_attach_external_device(struct drm_device *ddev) }
if (panel) { - bridge = devm_drm_panel_bridge_add(ddev->dev, panel, - DRM_MODE_CONNECTOR_DPI); + bridge = devm_drm_panel_bridge_add(ddev->dev, panel); if (IS_ERR(bridge)) { ret = PTR_ERR(bridge); goto err_encoder_cleanup; diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c index 416f24823c0a..4bbbe635a62f 100644 --- a/drivers/gpu/drm/tve200/tve200_drv.c +++ b/drivers/gpu/drm/tve200/tve200_drv.c @@ -80,8 +80,7 @@ static int tve200_modeset_init(struct drm_device *dev) if (ret && ret != -ENODEV) return ret; if (panel) { - bridge = drm_panel_bridge_add(panel, - DRM_MODE_CONNECTOR_Unknown); + bridge = drm_panel_bridge_add(panel); if (IS_ERR(bridge)) { ret = PTR_ERR(bridge); goto out_bridge; diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c index 59662d735432..a13b4e4d7879 100644 --- a/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c @@ -249,7 +249,7 @@ static int vc4_dpi_init_bridge(struct vc4_dpi *dpi) }
if (panel) - bridge = drm_panel_bridge_add(panel, DRM_MODE_CONNECTOR_DPI); + bridge = drm_panel_bridge_add(panel);
return drm_bridge_attach(dpi->encoder, bridge, NULL, 0); } diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c index f5d5b6837831..c692af50778f 100644 --- a/drivers/gpu/drm/vc4/vc4_dsi.c +++ b/drivers/gpu/drm/vc4/vc4_dsi.c @@ -1575,8 +1575,7 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data) }
if (panel) { - dsi->bridge = devm_drm_panel_bridge_add(dev, panel, - DRM_MODE_CONNECTOR_DSI); + dsi->bridge = devm_drm_panel_bridge_add(dev, panel); if (IS_ERR(dsi->bridge)) return PTR_ERR(dsi->bridge); } diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index a2960a77f5cf..7fff677f59a5 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -625,12 +625,10 @@ void drm_bridge_hpd_notify(struct drm_bridge *bridge, enum drm_connector_status status);
#ifdef CONFIG_DRM_PANEL_BRIDGE -struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, - u32 connector_type); +struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel); void drm_panel_bridge_remove(struct drm_bridge *bridge); struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, - struct drm_panel *panel, - u32 connector_type); + struct drm_panel *panel); #endif
#endif
On Fri, Aug 23, 2019 at 3:40 AM Laurent Pinchart laurent.pinchart@ideasonboard.com wrote:
The drm panel bridge creates a connector using a connector type explicit passed by the display controller or bridge driver that instantiates the panel bridge. Now that drm_panel reports its connector type, use it and remove the connector_type argument to drm_panel_bridge_add() and devm_drm_panel_bridge_add().
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
Reviewed-by: Linus Walleij linus.walleij@linaro.org
Yours, Linus Walleij
Hi Laurent.
Thanks for looking into this, but you will not be happy in a minute...
On Fri, Aug 23, 2019 at 04:40:32AM +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.
Ohh, that explains what this should be used for. I had missed that we have the panel when we create the drm_connector.
(I had seen we had to use the connector type to match a panel with a connector or something like that).
diff --git a/drivers/gpu/drm/panel/panel-arm-versatile.c b/drivers/gpu/drm/panel/panel-arm-versatile.c index 5f72c922a04b..5c335fc1632b 100644 --- a/drivers/gpu/drm/panel/panel-arm-versatile.c +++ b/drivers/gpu/drm/panel/panel-arm-versatile.c @@ -353,6 +353,7 @@ static int versatile_panel_probe(struct platform_device *pdev) drm_panel_init(&vpanel->panel); vpanel->panel.dev = dev; vpanel->panel.funcs = &versatile_panel_drm_funcs;
- vpanel->panel.type = DRM_MODE_CONNECTOR_DPI;
The pattern where we call a simple init like here, and then have a set of mandatory assignments right after is not a good way to help the driver writer.
We should instead do:
drm_panel_init(&vpanel->panel, dev, &versatile_panel_drm_funcs, DRM_MODE_CONNECTOR_DPI);
Then all drm_panel users are forced to supply the init parameters, and we do not secretly rely on some defaults for panels that do not have it. Also new panels will fail to build if they do not specify the new field.
This may also allow us to chatch that:
diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c index b5b14aa059ea..cac074939e2c 100644 --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c @@ -428,6 +428,7 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
ts->base.dev = dev; ts->base.funcs = &rpi_touchscreen_funcs;
- ts->base.type = DRM_MODE_CONNECTOR_DSI;
forgets to call drm_panel_init()....
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 28fa6ba7b767..6d5d0c51e97e 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;
- unsigned int type;
};
struct panel_simple { @@ -467,6 +468,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) drm_panel_init(&panel->base); panel->base.dev = dev; panel->base.funcs = &panel_simple_funcs;
panel->base.type = desc->type ? desc->type : DRM_MODE_CONNECTOR_DPI;
err = drm_panel_add(&panel->base); if (err < 0)
@@ -833,6 +835,7 @@ static const struct panel_desc auo_g133han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing auo_g185han01_timings = { @@ -862,6 +865,7 @@ static const struct panel_desc auo_g185han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing auo_p320hvn03_timings = { @@ -890,6 +894,7 @@ static const struct panel_desc auo_p320hvn03 = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode auo_t215hvn01_mode = { @@ -1205,6 +1210,7 @@ static const struct panel_desc dlc_dlc0700yzg_1 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing dlc_dlc1010gig_timing = { @@ -1235,6 +1241,7 @@ static const struct panel_desc dlc_dlc1010gig = { .unprepare = 60, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode edt_et035012dm6_mode = { @@ -1501,6 +1508,7 @@ static const struct panel_desc hannstar_hsd070pww1 = { .height = 94, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing hannstar_hsd100pxn1_timing = { @@ -1525,6 +1533,7 @@ static const struct panel_desc hannstar_hsd100pxn1 = { .height = 152, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = { @@ -1631,6 +1640,7 @@ static const struct panel_desc innolux_g070y2_l01 = { .unprepare = 800, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing innolux_g101ice_l01_timing = { @@ -1659,6 +1669,7 @@ static const struct panel_desc innolux_g101ice_l01 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing innolux_g121i1_l01_timing = { @@ -1686,6 +1697,7 @@ static const struct panel_desc innolux_g121i1_l01 = { .disable = 20, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode innolux_g121x1_l03_mode = { @@ -1869,6 +1881,7 @@ static const struct panel_desc koe_tx31d200vm0baa = { .height = 109, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing kyo_tcg121xglp_timing = { @@ -1893,6 +1906,7 @@ static const struct panel_desc kyo_tcg121xglp = { .height = 184, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode lemaker_bl035_rgb_002_mode = { @@ -1941,6 +1955,7 @@ static const struct panel_desc lg_lb070wv8 = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode lg_lp079qx1_sp0v_mode = { @@ -2063,6 +2078,7 @@ static const struct panel_desc mitsubishi_aa070mc01 = { .disable = 400, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS, .bus_flags = DRM_BUS_FLAG_DE_HIGH,
};
@@ -2091,6 +2107,7 @@ static const struct panel_desc nec_nl12880bc20_05 = { .disable = 50, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode nec_nl4827hc19_05b_mode = { @@ -2193,6 +2210,7 @@ static const struct panel_desc nlt_nl192108ac18_02d = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode nvd_9128_mode = { @@ -2216,6 +2234,7 @@ static const struct panel_desc nvd_9128 = { .height = 88, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing okaya_rs800480t_7x0gp_timing = { @@ -2628,6 +2647,7 @@ static const struct panel_desc sharp_lq101k1ly04 = { .height = 136, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing sharp_lq123p1jx31_timing = { @@ -2807,6 +2827,7 @@ static const struct panel_desc tianma_tm070jdhg30 = { .height = 95, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing tianma_tm070rvhg71_timing = { @@ -2831,6 +2852,7 @@ static const struct panel_desc tianma_tm070rvhg71 = { .height = 86, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = { @@ -2983,6 +3005,7 @@ static const struct panel_desc urt_umsh_8596md_lvds = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
Not too big a fan that we rely on the default CONNONTOR_Unknown for the remaining panels. I think the right connector type would be CONNECTOR_DSI - but I did not check.
Sam
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 624bd15ecfab..5899a7d6559c 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -139,6 +139,13 @@ struct drm_panel { */ const struct drm_panel_funcs *funcs;
- /**
* @type:
*
* Type of the panel as a DRM_MODE_CONNECTOR_* value.
Maybe here add that the purpose it to init the drm_connector with the correct connector type?
*/
- int type;
In the bikeshedding department - consider connector_type. To make it more obvious what the type is about. That it matches the field name in drm_mode_get_connector is likely a little thing - but my OCD like the same naming all over.
Sam
Hi Sam,
On Fri, Aug 23, 2019 at 06:49:49AM +0200, Sam Ravnborg wrote:
Hi Laurent.
Thanks for looking into this, but you will not be happy in a minute...
Could be worse :-)
On Fri, Aug 23, 2019 at 04:40:32AM +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.
Ohh, that explains what this should be used for. I had missed that we have the panel when we create the drm_connector.
(I had seen we had to use the connector type to match a panel with a connector or something like that).
diff --git a/drivers/gpu/drm/panel/panel-arm-versatile.c b/drivers/gpu/drm/panel/panel-arm-versatile.c index 5f72c922a04b..5c335fc1632b 100644 --- a/drivers/gpu/drm/panel/panel-arm-versatile.c +++ b/drivers/gpu/drm/panel/panel-arm-versatile.c @@ -353,6 +353,7 @@ static int versatile_panel_probe(struct platform_device *pdev) drm_panel_init(&vpanel->panel); vpanel->panel.dev = dev; vpanel->panel.funcs = &versatile_panel_drm_funcs;
- vpanel->panel.type = DRM_MODE_CONNECTOR_DPI;
The pattern where we call a simple init like here, and then have a set of mandatory assignments right after is not a good way to help the driver writer.
We should instead do:
drm_panel_init(&vpanel->panel, dev, &versatile_panel_drm_funcs, DRM_MODE_CONNECTOR_DPI);
Then all drm_panel users are forced to supply the init parameters, and we do not secretly rely on some defaults for panels that do not have it. Also new panels will fail to build if they do not specify the new field.
I'll fix that.
This may also allow us to chatch that:
diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c index b5b14aa059ea..cac074939e2c 100644 --- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c +++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c @@ -428,6 +428,7 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,
ts->base.dev = dev; ts->base.funcs = &rpi_touchscreen_funcs;
- ts->base.type = DRM_MODE_CONNECTOR_DSI;
forgets to call drm_panel_init()....
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 28fa6ba7b767..6d5d0c51e97e 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;
- unsigned int type;
};
struct panel_simple { @@ -467,6 +468,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) drm_panel_init(&panel->base); panel->base.dev = dev; panel->base.funcs = &panel_simple_funcs;
panel->base.type = desc->type ? desc->type : DRM_MODE_CONNECTOR_DPI;
err = drm_panel_add(&panel->base); if (err < 0)
@@ -833,6 +835,7 @@ static const struct panel_desc auo_g133han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing auo_g185han01_timings = { @@ -862,6 +865,7 @@ static const struct panel_desc auo_g185han01 = { .unprepare = 1000, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing auo_p320hvn03_timings = { @@ -890,6 +894,7 @@ static const struct panel_desc auo_p320hvn03 = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode auo_t215hvn01_mode = { @@ -1205,6 +1210,7 @@ static const struct panel_desc dlc_dlc0700yzg_1 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing dlc_dlc1010gig_timing = { @@ -1235,6 +1241,7 @@ static const struct panel_desc dlc_dlc1010gig = { .unprepare = 60, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode edt_et035012dm6_mode = { @@ -1501,6 +1508,7 @@ static const struct panel_desc hannstar_hsd070pww1 = { .height = 94, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing hannstar_hsd100pxn1_timing = { @@ -1525,6 +1533,7 @@ static const struct panel_desc hannstar_hsd100pxn1 = { .height = 152, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = { @@ -1631,6 +1640,7 @@ static const struct panel_desc innolux_g070y2_l01 = { .unprepare = 800, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing innolux_g101ice_l01_timing = { @@ -1659,6 +1669,7 @@ static const struct panel_desc innolux_g101ice_l01 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing innolux_g121i1_l01_timing = { @@ -1686,6 +1697,7 @@ static const struct panel_desc innolux_g121i1_l01 = { .disable = 20, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode innolux_g121x1_l03_mode = { @@ -1869,6 +1881,7 @@ static const struct panel_desc koe_tx31d200vm0baa = { .height = 109, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing kyo_tcg121xglp_timing = { @@ -1893,6 +1906,7 @@ static const struct panel_desc kyo_tcg121xglp = { .height = 184, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode lemaker_bl035_rgb_002_mode = { @@ -1941,6 +1955,7 @@ static const struct panel_desc lg_lb070wv8 = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode lg_lp079qx1_sp0v_mode = { @@ -2063,6 +2078,7 @@ static const struct panel_desc mitsubishi_aa070mc01 = { .disable = 400, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS, .bus_flags = DRM_BUS_FLAG_DE_HIGH,
};
@@ -2091,6 +2107,7 @@ static const struct panel_desc nec_nl12880bc20_05 = { .disable = 50, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode nec_nl4827hc19_05b_mode = { @@ -2193,6 +2210,7 @@ static const struct panel_desc nlt_nl192108ac18_02d = { .unprepare = 500, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode nvd_9128_mode = { @@ -2216,6 +2234,7 @@ static const struct panel_desc nvd_9128 = { .height = 88, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing okaya_rs800480t_7x0gp_timing = { @@ -2628,6 +2647,7 @@ static const struct panel_desc sharp_lq101k1ly04 = { .height = 136, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing sharp_lq123p1jx31_timing = { @@ -2807,6 +2827,7 @@ static const struct panel_desc tianma_tm070jdhg30 = { .height = 95, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct display_timing tianma_tm070rvhg71_timing = { @@ -2831,6 +2852,7 @@ static const struct panel_desc tianma_tm070rvhg71 = { .height = 86, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = { @@ -2983,6 +3005,7 @@ static const struct panel_desc urt_umsh_8596md_lvds = { .height = 91, }, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
- .type = DRM_MODE_CONNECTOR_LVDS,
};
Not too big a fan that we rely on the default CONNONTOR_Unknown for the remaining panels. I think the right connector type would be CONNECTOR_DSI - but I did not check.
I think it would be CONNECTOR_DPI. I could set the explicitly, I wanted to keep the diff small(er), but I can update it.
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h index 624bd15ecfab..5899a7d6559c 100644 --- a/include/drm/drm_panel.h +++ b/include/drm/drm_panel.h @@ -139,6 +139,13 @@ struct drm_panel { */ const struct drm_panel_funcs *funcs;
- /**
* @type:
*
* Type of the panel as a DRM_MODE_CONNECTOR_* value.
Maybe here add that the purpose it to init the drm_connector with the correct connector type?
*/
- int type;
In the bikeshedding department - consider connector_type. To make it more obvious what the type is about. That it matches the field name in drm_mode_get_connector is likely a little thing - but my OCD like the same naming all over.
OK, I'll update that.
Hi Laurent,
On 23/08/2019 at 03:40, 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.
With Microchip/Atmel driver, we mainly (only) use the "Unknown" type of connector because our hardware simply uses RGB wires in parallel.
Should we move to another connector type (maybe now that it's created and it was not, back when we chose the "Unknown" one)?
What would be the consequences if we move (silently?) to another type and particularly on the command line argument like the ones we currently use: "Unknown-1:800x480-16"?
Thanks for your insight on this. Best regards, Nicolas
Update all panel drivers to fill the new field.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
[..]
Hi Nicolas,
On Fri, Aug 23, 2019 at 07:30:07AM +0000, Nicolas.Ferre@microchip.com wrote:
On 23/08/2019 at 03:40, 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.
With Microchip/Atmel driver, we mainly (only) use the "Unknown" type of connector because our hardware simply uses RGB wires in parallel.
That's called DPI (Display Pixel Interface, sometimes also referred to as Display Parallel Interface) :-)
Should we move to another connector type (maybe now that it's created and it was not, back when we chose the "Unknown" one)?
I think DRM_MODE_CONNECTOR_DPI would be best, yes.
What would be the consequences if we move (silently?) to another type and particularly on the command line argument like the ones we currently use: "Unknown-1:800x480-16"?
That will be nasty to handle :-( As much as I'd love to ignore that issue, I don't think we can. At the same time it shouldn't prevent us from moving forward and exposing the real connector type. One option could be to keep the extra type argument to drm_panel_bridge_add() to force the connector type, and add another variant of the function that would derive it automatically from the panel type. Drivers could then decide to switch to the new variant on a case-by-case basis. Still, that won't solve your issue, as I'm not sure how you would be able to decide which variant to call if we want newer systems to expose the right panel type while keeping backward compatibility.
Another option would be to hack the command line argument parsing to convert Unknown-* to a panel type when there's no connector with an unknown type, but that seems fragile.
Any other proposal ? :-)
Update all panel drivers to fill the new field.
Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
On Fri, 23 Aug 2019 07:30:07 +0000 Nicolas.Ferre@microchip.com wrote:
Hi Laurent,
On 23/08/2019 at 03:40, 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.
With Microchip/Atmel driver, we mainly (only) use the "Unknown" type of connector because our hardware simply uses RGB wires in parallel.
Should we move to another connector type (maybe now that it's created and it was not, back when we chose the "Unknown" one)?
I confirm, DRM_MODE_ENCODER_DPI was not defined when I switched from _LVDS (which was wrong) to _Unknown.
dri-devel@lists.freedesktop.org