drm/omap: Pass both output and display omap_dss_device to encoder init
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Thu, 31 May 2018 20:14:43 +0000 (23:14 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:29 +0000 (16:13 +0300)
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@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/omap_drv.c
drivers/gpu/drm/omapdrm/omap_encoder.c
drivers/gpu/drm/omapdrm/omap_encoder.h

index 0cca16c323d962c276853f4d434a527462cfc701..174bf498f4e5a488c5eb84b1d2d626fb24810e76 100644 (file)
@@ -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;
 
index 87e2b3799a45120721d2143792f731c76c60bc57..2689ae74ea60aa34d58bfb5439d310b7106771b4 100644 (file)
@@ -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;
 
index e8f1a35dce2fbeb337a3b3cfa437e193d93873b3..a7b5dde63ecbf83ae5d4ae40a22b7880de88567f 100644 (file)
@@ -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__ */