On Wed, Dec 05, 2018 at 05:00:07PM +0200, Laurent Pinchart wrote: > Instead of manually iterating over the dss devices in the pipeline to > find the first one that implements the .get_modes() operation, add a new > operation flag for .get_modes() and use the omap_connector_find_device() > helper function to locate the right dss device. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> -- Sebastian > drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 1 + > drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 1 + > .../gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c | 1 + > drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c | 1 + > .../gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c | 1 + > drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c | 1 + > drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c | 1 + > drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c | 1 + > drivers/gpu/drm/omapdrm/dss/omapdss.h | 4 +++- > drivers/gpu/drm/omapdrm/dss/venc.c | 1 + > drivers/gpu/drm/omapdrm/omap_connector.c | 8 ++++---- > 11 files changed, 16 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c > index 2bda6d4fdb16..3b3570cb0d9a 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c > @@ -152,6 +152,7 @@ static int panel_dpi_probe(struct platform_device *pdev) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > omapdss_display_init(dssdev); > omapdss_device_register(dssdev); > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > index c5f570106a17..fe9d9f847d2e 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c > @@ -1271,6 +1271,7 @@ static int dsicm_probe(struct platform_device *pdev) > dssdev->type = OMAP_DISPLAY_TYPE_DSI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE | > OMAP_DSS_DISPLAY_CAP_TEAR_ELIM; > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c > index e05b7f80416e..f37931bf1c5f 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c > @@ -199,6 +199,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > /* > * Note: According to the panel documentation: > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c > index cf2127837e67..8f2fb3d0492f 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c > @@ -194,6 +194,7 @@ static int nec_8048_probe(struct spi_device *spi) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE > | DRM_BUS_FLAG_PIXDATA_POSEDGE; > > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c > index 30320cee1e56..8d5d7f775b55 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c > @@ -209,6 +209,7 @@ static int sharp_ls_probe(struct platform_device *pdev) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > /* > * Note: According to the panel documentation: > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c > index 8debe77f92ff..b8360cef3754 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c > @@ -708,6 +708,7 @@ static int acx565akm_probe(struct spi_device *spi) > dssdev->type = OMAP_DISPLAY_TYPE_SDI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_NEGEDGE > | DRM_BUS_FLAG_PIXDATA_POSEDGE; > > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c > index c8b15f19a166..721c5bb3bdef 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c > @@ -323,6 +323,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > /* > * Note: According to the panel documentation: > diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c > index 9ecc4c7bee67..50960018dbe8 100644 > --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c > +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c > @@ -422,6 +422,7 @@ static int tpo_td043_probe(struct spi_device *spi) > dssdev->type = OMAP_DISPLAY_TYPE_DPI; > dssdev->owner = THIS_MODULE; > dssdev->of_ports = BIT(0); > + dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > /* > * Note: According to the panel documentation: > diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h > index 561f404a58f2..5dac69519d7e 100644 > --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h > +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h > @@ -393,12 +393,14 @@ struct omap_dss_device_ops { > * enum omap_dss_device_ops_flag - Indicates which device ops are supported > * @OMAP_DSS_DEVICE_OP_DETECT: The device supports output connection detection > * @OMAP_DSS_DEVICE_OP_HPD: The device supports all hot-plug-related operations > - * @OMAP_DSS_DEVICE_OP_EDID: The device supports readind EDID > + * @OMAP_DSS_DEVICE_OP_EDID: The device supports reading EDID > + * @OMAP_DSS_DEVICE_OP_MODES: The device supports reading modes > */ > enum omap_dss_device_ops_flag { > OMAP_DSS_DEVICE_OP_DETECT = BIT(0), > OMAP_DSS_DEVICE_OP_HPD = BIT(1), > OMAP_DSS_DEVICE_OP_EDID = BIT(2), > + OMAP_DSS_DEVICE_OP_MODES = BIT(3), > }; > > enum omap_dss_device_type { > diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c > index cefefe6d6fcb..f1abb4195a76 100644 > --- a/drivers/gpu/drm/omapdrm/dss/venc.c > +++ b/drivers/gpu/drm/omapdrm/dss/venc.c > @@ -755,6 +755,7 @@ static int venc_init_output(struct venc_device *venc) > out->ops = &venc_ops; > out->owner = THIS_MODULE; > out->of_ports = BIT(0); > + out->ops_flags = OMAP_DSS_DEVICE_OP_MODES; > > r = omapdss_device_init_output(out); > if (r < 0) > diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c > index c21a2016d03f..0bbbf4d0502d 100644 > --- a/drivers/gpu/drm/omapdrm/omap_connector.c > +++ b/drivers/gpu/drm/omapdrm/omap_connector.c > @@ -228,10 +228,10 @@ static int omap_connector_get_modes(struct drm_connector *connector) > * Otherwise if the display pipeline reports modes (e.g. with a fixed > * resolution panel or an analog TV output), query it. > */ > - for (dssdev = omap_connector->display; dssdev; dssdev = dssdev->src) { > - if (dssdev->ops->get_modes) > - return dssdev->ops->get_modes(dssdev, connector); > - } > + dssdev = omap_connector_find_device(connector, > + OMAP_DSS_DEVICE_OP_MODES); > + if (dssdev) > + return dssdev->ops->get_modes(dssdev, connector); > > /* > * We can't retrieve modes, which can happen for instance for a DVI or > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel