[PATCH 20/21] drm/omap: Pass both output and display omap_dss_device to encoder init

Sebastian Reichel sre at kernel.org
Mon Jun 11 23:56:48 UTC 2018


Hi,

On Wed, Jun 06, 2018 at 12:36:49PM +0300, Laurent Pinchart wrote:
> The drm_encoder implementation requires access to the omap_dss_device
> corresponding to the display, which is passed to its initialization
> function and stored internally. Clean up of the HDMI mode and infoframe
> handling will require access to the output omap_dss_device. To prepare
> for that, pass it to the encoder initialization function and store it
> internally as well.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---

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

-- Sebastian

>  drivers/gpu/drm/omapdrm/omap_drv.c     |  2 +-
>  drivers/gpu/drm/omapdrm/omap_encoder.c | 17 ++++++++++-------
>  drivers/gpu/drm/omapdrm/omap_encoder.h |  3 ++-
>  3 files changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index bbcd467cd83f..49cd7609fa3b 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -318,7 +318,7 @@ static int omap_modeset_init(struct drm_device *dev)
>  		struct drm_encoder *encoder;
>  		struct drm_crtc *crtc;
>  
> -		encoder = omap_encoder_init(dev, display);
> +		encoder = omap_encoder_init(dev, pipe->output, display);
>  		if (!encoder)
>  			return -ENOMEM;
>  
> diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
> index 87e2b3799a45..2689ae74ea60 100644
> --- a/drivers/gpu/drm/omapdrm/omap_encoder.c
> +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
> @@ -36,7 +36,8 @@
>   */
>  struct omap_encoder {
>  	struct drm_encoder base;
> -	struct omap_dss_device *dssdev;
> +	struct omap_dss_device *output;
> +	struct omap_dss_device *display;
>  };
>  
>  static void omap_encoder_destroy(struct drm_encoder *encoder)
> @@ -57,7 +58,7 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder,
>  {
>  	struct drm_device *dev = encoder->dev;
>  	struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
> -	struct omap_dss_device *dssdev = omap_encoder->dssdev;
> +	struct omap_dss_device *dssdev = omap_encoder->display;
>  	struct drm_connector *connector;
>  	bool hdmi_mode;
>  	int r;
> @@ -86,7 +87,7 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder,
>  static void omap_encoder_disable(struct drm_encoder *encoder)
>  {
>  	struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
> -	struct omap_dss_device *dssdev = omap_encoder->dssdev;
> +	struct omap_dss_device *dssdev = omap_encoder->display;
>  
>  	dssdev->ops->disable(dssdev);
>  }
> @@ -97,7 +98,7 @@ static int omap_encoder_update(struct drm_encoder *encoder,
>  {
>  	struct drm_device *dev = encoder->dev;
>  	struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
> -	struct omap_dss_device *dssdev = omap_encoder->dssdev;
> +	struct omap_dss_device *dssdev = omap_encoder->display;
>  	int ret;
>  
>  	if (dssdev->ops->check_timings) {
> @@ -127,7 +128,7 @@ static int omap_encoder_update(struct drm_encoder *encoder,
>  static void omap_encoder_enable(struct drm_encoder *encoder)
>  {
>  	struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
> -	struct omap_dss_device *dssdev = omap_encoder->dssdev;
> +	struct omap_dss_device *dssdev = omap_encoder->display;
>  	int r;
>  
>  	omap_encoder_update(encoder, omap_crtc_channel(encoder->crtc),
> @@ -156,7 +157,8 @@ static const struct drm_encoder_helper_funcs omap_encoder_helper_funcs = {
>  
>  /* initialize encoder */
>  struct drm_encoder *omap_encoder_init(struct drm_device *dev,
> -		struct omap_dss_device *dssdev)
> +				      struct omap_dss_device *output,
> +				      struct omap_dss_device *display)
>  {
>  	struct drm_encoder *encoder = NULL;
>  	struct omap_encoder *omap_encoder;
> @@ -165,7 +167,8 @@ struct drm_encoder *omap_encoder_init(struct drm_device *dev,
>  	if (!omap_encoder)
>  		goto fail;
>  
> -	omap_encoder->dssdev = dssdev;
> +	omap_encoder->output = output;
> +	omap_encoder->display = display;
>  
>  	encoder = &omap_encoder->base;
>  
> diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.h b/drivers/gpu/drm/omapdrm/omap_encoder.h
> index e8f1a35dce2f..a7b5dde63ecb 100644
> --- a/drivers/gpu/drm/omapdrm/omap_encoder.h
> +++ b/drivers/gpu/drm/omapdrm/omap_encoder.h
> @@ -25,6 +25,7 @@ struct drm_encoder;
>  struct omap_dss_device;
>  
>  struct drm_encoder *omap_encoder_init(struct drm_device *dev,
> -		struct omap_dss_device *dssdev);
> +				      struct omap_dss_device *output,
> +				      struct omap_dss_device *display);
>  
>  #endif /* __OMAPDRM_ENCODER_H__ */
> -- 
> 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/20180612/4d230d99/attachment.sig>


More information about the dri-devel mailing list