aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_encoder.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-06-01 12:45:01 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2018-09-03 09:13:29 -0400
commit83910ad3f51fbc0e6546b60aafa90697b5127a8a (patch)
tree34a3d047e651e5ea8923ef40f360430f31d1713f /drivers/gpu/drm/omapdrm/omap_encoder.c
parente7df6571024ba791c6521efba5b3875724c47af6 (diff)
drm/omap: Move most omap_dss_driver operations to omap_dss_device_ops
omap_dss_device instances have two ops structures, omap_dss_driver and omap_dss_device_ops. The former is used for devices at the end of the pipeline (a.k.a. display devices), and the latter for intermediate devices. Having two sets of operations isn't convenient as code that iterates over omap_dss_device instances need to take them both into account. There's currently a reasonably small amount of such code, but more will be introduced to move the driver away from recursive operations. To simplify current and future code, move all operations that are not specific to the display device to the omap_dss_device_ops. 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>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_encoder.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_encoder.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
index ec0f451e3b36..7bbf3700e393 100644
--- a/drivers/gpu/drm/omapdrm/omap_encoder.c
+++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
@@ -77,16 +77,16 @@ static void omap_encoder_mode_set(struct drm_encoder *encoder,
77 } 77 }
78 } 78 }
79 79
80 if (dssdev->driver->set_hdmi_mode) 80 if (dssdev->ops->hdmi.set_hdmi_mode)
81 dssdev->driver->set_hdmi_mode(dssdev, hdmi_mode); 81 dssdev->ops->hdmi.set_hdmi_mode(dssdev, hdmi_mode);
82 82
83 if (hdmi_mode && dssdev->driver->set_hdmi_infoframe) { 83 if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) {
84 struct hdmi_avi_infoframe avi; 84 struct hdmi_avi_infoframe avi;
85 85
86 r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode, 86 r = drm_hdmi_avi_infoframe_from_display_mode(&avi, adjusted_mode,
87 false); 87 false);
88 if (r == 0) 88 if (r == 0)
89 dssdev->driver->set_hdmi_infoframe(dssdev, &avi); 89 dssdev->ops->hdmi.set_infoframe(dssdev, &avi);
90 } 90 }
91} 91}
92 92
@@ -94,9 +94,8 @@ static void omap_encoder_disable(struct drm_encoder *encoder)
94{ 94{
95 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 95 struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
96 struct omap_dss_device *dssdev = omap_encoder->dssdev; 96 struct omap_dss_device *dssdev = omap_encoder->dssdev;
97 const struct omap_dss_driver *dssdrv = dssdev->driver;
98 97
99 dssdrv->disable(dssdev); 98 dssdev->ops->disable(dssdev);
100} 99}
101 100
102static int omap_encoder_update(struct drm_encoder *encoder, 101static int omap_encoder_update(struct drm_encoder *encoder,
@@ -106,15 +105,14 @@ static int omap_encoder_update(struct drm_encoder *encoder,
106 struct drm_device *dev = encoder->dev; 105 struct drm_device *dev = encoder->dev;
107 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 106 struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
108 struct omap_dss_device *dssdev = omap_encoder->dssdev; 107 struct omap_dss_device *dssdev = omap_encoder->dssdev;
109 const struct omap_dss_driver *dssdrv = dssdev->driver;
110 int ret; 108 int ret;
111 109
112 if (dssdrv->check_timings) { 110 if (dssdev->ops->check_timings) {
113 ret = dssdrv->check_timings(dssdev, vm); 111 ret = dssdev->ops->check_timings(dssdev, vm);
114 } else { 112 } else {
115 struct videomode t = {0}; 113 struct videomode t = {0};
116 114
117 dssdrv->get_timings(dssdev, &t); 115 dssdev->ops->get_timings(dssdev, &t);
118 116
119 if (memcmp(vm, &t, sizeof(*vm))) 117 if (memcmp(vm, &t, sizeof(*vm)))
120 ret = -EINVAL; 118 ret = -EINVAL;
@@ -127,8 +125,8 @@ static int omap_encoder_update(struct drm_encoder *encoder,
127 return ret; 125 return ret;
128 } 126 }
129 127
130 if (dssdrv->set_timings) 128 if (dssdev->ops->set_timings)
131 dssdrv->set_timings(dssdev, vm); 129 dssdev->ops->set_timings(dssdev, vm);
132 130
133 return 0; 131 return 0;
134} 132}
@@ -137,13 +135,12 @@ static void omap_encoder_enable(struct drm_encoder *encoder)
137{ 135{
138 struct omap_encoder *omap_encoder = to_omap_encoder(encoder); 136 struct omap_encoder *omap_encoder = to_omap_encoder(encoder);
139 struct omap_dss_device *dssdev = omap_encoder->dssdev; 137 struct omap_dss_device *dssdev = omap_encoder->dssdev;
140 const struct omap_dss_driver *dssdrv = dssdev->driver;
141 int r; 138 int r;
142 139
143 omap_encoder_update(encoder, omap_crtc_channel(encoder->crtc), 140 omap_encoder_update(encoder, omap_crtc_channel(encoder->crtc),
144 omap_crtc_timings(encoder->crtc)); 141 omap_crtc_timings(encoder->crtc));
145 142
146 r = dssdrv->enable(dssdev); 143 r = dssdev->ops->enable(dssdev);
147 if (r) 144 if (r)
148 dev_err(encoder->dev->dev, 145 dev_err(encoder->dev->dev,
149 "Failed to enable display '%s': %d\n", 146 "Failed to enable display '%s': %d\n",