[PATCH 14/29] drm/omap: Add a dss device operation flag for .get_modes()

Sebastian Reichel sebastian.reichel at collabora.com
Sun Dec 9 22:02:54 UTC 2018


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 at ideasonboard.com>
> ---

Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.com>

-- 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20181209/c4e7733d/attachment-0001.sig>


More information about the dri-devel mailing list