aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
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
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')
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-dvi.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-hdmi.c31
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c14
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dpi.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c12
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c4
-rw-r--r--drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c4
-rw-r--r--drivers/gpu/drm/omapdrm/dss/base.c12
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dss.c2
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi4.c3
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi5.c3
-rw-r--r--drivers/gpu/drm/omapdrm/dss/omapdss.h54
-rw-r--r--drivers/gpu/drm/omapdrm/omap_connector.c37
-rw-r--r--drivers/gpu/drm/omapdrm/omap_crtc.c2
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c12
-rw-r--r--drivers/gpu/drm/omapdrm/omap_encoder.c25
21 files changed, 106 insertions, 137 deletions
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
index d59b4f2e22dc..563fc7e618b3 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
@@ -119,7 +119,7 @@ static int tvc_check_timings(struct omap_dss_device *dssdev,
119 return src->ops->check_timings(src, vm); 119 return src->ops->check_timings(src, vm);
120} 120}
121 121
122static const struct omap_dss_driver tvc_driver = { 122static const struct omap_dss_device_ops tvc_ops = {
123 .connect = tvc_connect, 123 .connect = tvc_connect,
124 .disconnect = tvc_disconnect, 124 .disconnect = tvc_disconnect,
125 125
@@ -146,7 +146,7 @@ static int tvc_probe(struct platform_device *pdev)
146 ddata->vm = tvc_pal_vm; 146 ddata->vm = tvc_pal_vm;
147 147
148 dssdev = &ddata->dssdev; 148 dssdev = &ddata->dssdev;
149 dssdev->driver = &tvc_driver; 149 dssdev->ops = &tvc_ops;
150 dssdev->dev = &pdev->dev; 150 dssdev->dev = &pdev->dev;
151 dssdev->type = OMAP_DISPLAY_TYPE_VENC; 151 dssdev->type = OMAP_DISPLAY_TYPE_VENC;
152 dssdev->owner = THIS_MODULE; 152 dssdev->owner = THIS_MODULE;
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index 39e7d0be887f..a639a86cd47b 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -265,7 +265,7 @@ static void dvic_disable_hpd(struct omap_dss_device *dssdev)
265 mutex_unlock(&ddata->hpd_lock); 265 mutex_unlock(&ddata->hpd_lock);
266} 266}
267 267
268static const struct omap_dss_driver dvic_driver = { 268static const struct omap_dss_device_ops dvic_ops = {
269 .connect = dvic_connect, 269 .connect = dvic_connect,
270 .disconnect = dvic_disconnect, 270 .disconnect = dvic_disconnect,
271 271
@@ -367,7 +367,7 @@ static int dvic_probe(struct platform_device *pdev)
367 ddata->vm = dvic_default_vm; 367 ddata->vm = dvic_default_vm;
368 368
369 dssdev = &ddata->dssdev; 369 dssdev = &ddata->dssdev;
370 dssdev->driver = &dvic_driver; 370 dssdev->ops = &dvic_ops;
371 dssdev->dev = &pdev->dev; 371 dssdev->dev = &pdev->dev;
372 dssdev->type = OMAP_DISPLAY_TYPE_DVI; 372 dssdev->type = OMAP_DISPLAY_TYPE_DVI;
373 dssdev->owner = THIS_MODULE; 373 dssdev->owner = THIS_MODULE;
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index d39480b8cf6b..54bfd7156360 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -132,7 +132,7 @@ static int hdmic_read_edid(struct omap_dss_device *dssdev,
132{ 132{
133 struct omap_dss_device *src = dssdev->src; 133 struct omap_dss_device *src = dssdev->src;
134 134
135 return src->ops->hdmi.read_edid(src, edid, len); 135 return src->ops->read_edid(src, edid, len);
136} 136}
137 137
138static bool hdmic_detect(struct omap_dss_device *dssdev) 138static bool hdmic_detect(struct omap_dss_device *dssdev)
@@ -144,7 +144,7 @@ static bool hdmic_detect(struct omap_dss_device *dssdev)
144 if (ddata->hpd_gpio) 144 if (ddata->hpd_gpio)
145 connected = gpiod_get_value_cansleep(ddata->hpd_gpio); 145 connected = gpiod_get_value_cansleep(ddata->hpd_gpio);
146 else 146 else
147 connected = src->ops->hdmi.detect(src); 147 connected = src->ops->detect(src);
148 if (!connected && src->ops->hdmi.lost_hotplug) 148 if (!connected && src->ops->hdmi.lost_hotplug)
149 src->ops->hdmi.lost_hotplug(src); 149 src->ops->hdmi.lost_hotplug(src);
150 return connected; 150 return connected;
@@ -164,8 +164,8 @@ static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
164 ddata->hpd_cb_data = cb_data; 164 ddata->hpd_cb_data = cb_data;
165 mutex_unlock(&ddata->hpd_lock); 165 mutex_unlock(&ddata->hpd_lock);
166 return 0; 166 return 0;
167 } else if (src->ops->hdmi.register_hpd_cb) { 167 } else if (src->ops->register_hpd_cb) {
168 return src->ops->hdmi.register_hpd_cb(src, cb, cb_data); 168 return src->ops->register_hpd_cb(src, cb, cb_data);
169 } 169 }
170 170
171 return -ENOTSUPP; 171 return -ENOTSUPP;
@@ -181,8 +181,8 @@ static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev)
181 ddata->hpd_cb = NULL; 181 ddata->hpd_cb = NULL;
182 ddata->hpd_cb_data = NULL; 182 ddata->hpd_cb_data = NULL;
183 mutex_unlock(&ddata->hpd_lock); 183 mutex_unlock(&ddata->hpd_lock);
184 } else if (src->ops->hdmi.unregister_hpd_cb) { 184 } else if (src->ops->unregister_hpd_cb) {
185 src->ops->hdmi.unregister_hpd_cb(src); 185 src->ops->unregister_hpd_cb(src);
186 } 186 }
187} 187}
188 188
@@ -195,8 +195,8 @@ static void hdmic_enable_hpd(struct omap_dss_device *dssdev)
195 mutex_lock(&ddata->hpd_lock); 195 mutex_lock(&ddata->hpd_lock);
196 ddata->hpd_enabled = true; 196 ddata->hpd_enabled = true;
197 mutex_unlock(&ddata->hpd_lock); 197 mutex_unlock(&ddata->hpd_lock);
198 } else if (src->ops->hdmi.enable_hpd) { 198 } else if (src->ops->enable_hpd) {
199 src->ops->hdmi.enable_hpd(src); 199 src->ops->enable_hpd(src);
200 } 200 }
201} 201}
202 202
@@ -209,8 +209,8 @@ static void hdmic_disable_hpd(struct omap_dss_device *dssdev)
209 mutex_lock(&ddata->hpd_lock); 209 mutex_lock(&ddata->hpd_lock);
210 ddata->hpd_enabled = false; 210 ddata->hpd_enabled = false;
211 mutex_unlock(&ddata->hpd_lock); 211 mutex_unlock(&ddata->hpd_lock);
212 } else if (src->ops->hdmi.disable_hpd) { 212 } else if (src->ops->disable_hpd) {
213 src->ops->hdmi.disable_hpd(src); 213 src->ops->disable_hpd(src);
214 } 214 }
215} 215}
216 216
@@ -229,7 +229,7 @@ static int hdmic_set_infoframe(struct omap_dss_device *dssdev,
229 return src->ops->hdmi.set_infoframe(src, avi); 229 return src->ops->hdmi.set_infoframe(src, avi);
230} 230}
231 231
232static const struct omap_dss_driver hdmic_driver = { 232static const struct omap_dss_device_ops hdmic_ops = {
233 .connect = hdmic_connect, 233 .connect = hdmic_connect,
234 .disconnect = hdmic_disconnect, 234 .disconnect = hdmic_disconnect,
235 235
@@ -246,8 +246,11 @@ static const struct omap_dss_driver hdmic_driver = {
246 .unregister_hpd_cb = hdmic_unregister_hpd_cb, 246 .unregister_hpd_cb = hdmic_unregister_hpd_cb,
247 .enable_hpd = hdmic_enable_hpd, 247 .enable_hpd = hdmic_enable_hpd,
248 .disable_hpd = hdmic_disable_hpd, 248 .disable_hpd = hdmic_disable_hpd,
249 .set_hdmi_mode = hdmic_set_hdmi_mode, 249
250 .set_hdmi_infoframe = hdmic_set_infoframe, 250 .hdmi = {
251 .set_hdmi_mode = hdmic_set_hdmi_mode,
252 .set_infoframe = hdmic_set_infoframe,
253 },
251}; 254};
252 255
253static irqreturn_t hdmic_hpd_isr(int irq, void *data) 256static irqreturn_t hdmic_hpd_isr(int irq, void *data)
@@ -309,7 +312,7 @@ static int hdmic_probe(struct platform_device *pdev)
309 ddata->vm = hdmic_default_vm; 312 ddata->vm = hdmic_default_vm;
310 313
311 dssdev = &ddata->dssdev; 314 dssdev = &ddata->dssdev;
312 dssdev->driver = &hdmic_driver; 315 dssdev->ops = &hdmic_ops;
313 dssdev->dev = &pdev->dev; 316 dssdev->dev = &pdev->dev;
314 dssdev->type = OMAP_DISPLAY_TYPE_HDMI; 317 dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
315 dssdev->owner = THIS_MODULE; 318 dssdev->owner = THIS_MODULE;
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index c99e55487d38..0cc7bd656473 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -125,7 +125,7 @@ static int tpd_read_edid(struct omap_dss_device *dssdev,
125 if (!gpiod_get_value_cansleep(ddata->hpd_gpio)) 125 if (!gpiod_get_value_cansleep(ddata->hpd_gpio))
126 return -ENODEV; 126 return -ENODEV;
127 127
128 return src->ops->hdmi.read_edid(src, edid, len); 128 return src->ops->read_edid(src, edid, len);
129} 129}
130 130
131static bool tpd_detect(struct omap_dss_device *dssdev) 131static bool tpd_detect(struct omap_dss_device *dssdev)
@@ -205,14 +205,14 @@ static const struct omap_dss_device_ops tpd_ops = {
205 .disable = tpd_disable, 205 .disable = tpd_disable,
206 .check_timings = tpd_check_timings, 206 .check_timings = tpd_check_timings,
207 .set_timings = tpd_set_timings, 207 .set_timings = tpd_set_timings,
208 .read_edid = tpd_read_edid,
209 .detect = tpd_detect,
210 .register_hpd_cb = tpd_register_hpd_cb,
211 .unregister_hpd_cb = tpd_unregister_hpd_cb,
212 .enable_hpd = tpd_enable_hpd,
213 .disable_hpd = tpd_disable_hpd,
208 214
209 .hdmi = { 215 .hdmi = {
210 .read_edid = tpd_read_edid,
211 .detect = tpd_detect,
212 .register_hpd_cb = tpd_register_hpd_cb,
213 .unregister_hpd_cb = tpd_unregister_hpd_cb,
214 .enable_hpd = tpd_enable_hpd,
215 .disable_hpd = tpd_disable_hpd,
216 .set_infoframe = tpd_set_infoframe, 216 .set_infoframe = tpd_set_infoframe,
217 .set_hdmi_mode = tpd_set_hdmi_mode, 217 .set_hdmi_mode = tpd_set_hdmi_mode,
218 }, 218 },
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index 91f99c95c4c4..c03877af9cdb 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -122,7 +122,7 @@ static int panel_dpi_check_timings(struct omap_dss_device *dssdev,
122 return src->ops->check_timings(src, vm); 122 return src->ops->check_timings(src, vm);
123} 123}
124 124
125static const struct omap_dss_driver panel_dpi_ops = { 125static const struct omap_dss_device_ops panel_dpi_ops = {
126 .connect = panel_dpi_connect, 126 .connect = panel_dpi_connect,
127 .disconnect = panel_dpi_disconnect, 127 .disconnect = panel_dpi_disconnect,
128 128
@@ -196,7 +196,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
196 196
197 dssdev = &ddata->dssdev; 197 dssdev = &ddata->dssdev;
198 dssdev->dev = &pdev->dev; 198 dssdev->dev = &pdev->dev;
199 dssdev->driver = &panel_dpi_ops; 199 dssdev->ops = &panel_dpi_ops;
200 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 200 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
201 dssdev->owner = THIS_MODULE; 201 dssdev->owner = THIS_MODULE;
202 dssdev->of_ports = BIT(0); 202 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index e30f0ab315f5..29692a5217c5 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -1179,18 +1179,21 @@ static void dsicm_get_size(struct omap_dss_device *dssdev,
1179 *height = ddata->height_mm; 1179 *height = ddata->height_mm;
1180} 1180}
1181 1181
1182static const struct omap_dss_driver dsicm_ops = { 1182static const struct omap_dss_device_ops dsicm_ops = {
1183 .connect = dsicm_connect, 1183 .connect = dsicm_connect,
1184 .disconnect = dsicm_disconnect, 1184 .disconnect = dsicm_disconnect,
1185 1185
1186 .enable = dsicm_enable, 1186 .enable = dsicm_enable,
1187 .disable = dsicm_disable, 1187 .disable = dsicm_disable,
1188 1188
1189 .get_timings = dsicm_get_timings,
1190 .check_timings = dsicm_check_timings,
1191};
1192
1193static const struct omap_dss_driver dsicm_dss_driver = {
1189 .update = dsicm_update, 1194 .update = dsicm_update,
1190 .sync = dsicm_sync, 1195 .sync = dsicm_sync,
1191 1196
1192 .get_timings = dsicm_get_timings,
1193 .check_timings = dsicm_check_timings,
1194 .get_size = dsicm_get_size, 1197 .get_size = dsicm_get_size,
1195 1198
1196 .enable_te = dsicm_enable_te, 1199 .enable_te = dsicm_enable_te,
@@ -1299,7 +1302,8 @@ static int dsicm_probe(struct platform_device *pdev)
1299 1302
1300 dssdev = &ddata->dssdev; 1303 dssdev = &ddata->dssdev;
1301 dssdev->dev = dev; 1304 dssdev->dev = dev;
1302 dssdev->driver = &dsicm_ops; 1305 dssdev->ops = &dsicm_ops;
1306 dssdev->driver = &dsicm_dss_driver;
1303 dssdev->type = OMAP_DISPLAY_TYPE_DSI; 1307 dssdev->type = OMAP_DISPLAY_TYPE_DSI;
1304 dssdev->owner = THIS_MODULE; 1308 dssdev->owner = THIS_MODULE;
1305 dssdev->of_ports = BIT(0); 1309 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
index 66763a12fc3d..62576e4f89e3 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
@@ -199,7 +199,7 @@ static int lb035q02_check_timings(struct omap_dss_device *dssdev,
199 return src->ops->check_timings(src, vm); 199 return src->ops->check_timings(src, vm);
200} 200}
201 201
202static const struct omap_dss_driver lb035q02_ops = { 202static const struct omap_dss_device_ops lb035q02_ops = {
203 .connect = lb035q02_connect, 203 .connect = lb035q02_connect,
204 .disconnect = lb035q02_disconnect, 204 .disconnect = lb035q02_disconnect,
205 205
@@ -249,7 +249,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
249 249
250 dssdev = &ddata->dssdev; 250 dssdev = &ddata->dssdev;
251 dssdev->dev = &spi->dev; 251 dssdev->dev = &spi->dev;
252 dssdev->driver = &lb035q02_ops; 252 dssdev->ops = &lb035q02_ops;
253 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 253 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
254 dssdev->owner = THIS_MODULE; 254 dssdev->owner = THIS_MODULE;
255 dssdev->of_ports = BIT(0); 255 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
index 767ffd2fa0f4..9f34cf02a114 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
@@ -187,7 +187,7 @@ static int nec_8048_check_timings(struct omap_dss_device *dssdev,
187 return src->ops->check_timings(src, vm); 187 return src->ops->check_timings(src, vm);
188} 188}
189 189
190static const struct omap_dss_driver nec_8048_ops = { 190static const struct omap_dss_device_ops nec_8048_ops = {
191 .connect = nec_8048_connect, 191 .connect = nec_8048_connect,
192 .disconnect = nec_8048_disconnect, 192 .disconnect = nec_8048_disconnect,
193 193
@@ -239,7 +239,7 @@ static int nec_8048_probe(struct spi_device *spi)
239 239
240 dssdev = &ddata->dssdev; 240 dssdev = &ddata->dssdev;
241 dssdev->dev = &spi->dev; 241 dssdev->dev = &spi->dev;
242 dssdev->driver = &nec_8048_ops; 242 dssdev->ops = &nec_8048_ops;
243 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 243 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
244 dssdev->owner = THIS_MODULE; 244 dssdev->owner = THIS_MODULE;
245 dssdev->of_ports = BIT(0); 245 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
index 7fbdf3ec0113..9ee6b8376916 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
@@ -161,7 +161,7 @@ static int sharp_ls_check_timings(struct omap_dss_device *dssdev,
161 return src->ops->check_timings(src, vm); 161 return src->ops->check_timings(src, vm);
162} 162}
163 163
164static const struct omap_dss_driver sharp_ls_ops = { 164static const struct omap_dss_device_ops sharp_ls_ops = {
165 .connect = sharp_ls_connect, 165 .connect = sharp_ls_connect,
166 .disconnect = sharp_ls_disconnect, 166 .disconnect = sharp_ls_disconnect,
167 167
@@ -247,7 +247,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
247 247
248 dssdev = &ddata->dssdev; 248 dssdev = &ddata->dssdev;
249 dssdev->dev = &pdev->dev; 249 dssdev->dev = &pdev->dev;
250 dssdev->driver = &sharp_ls_ops; 250 dssdev->ops = &sharp_ls_ops;
251 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 251 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
252 dssdev->owner = THIS_MODULE; 252 dssdev->owner = THIS_MODULE;
253 dssdev->of_ports = BIT(0); 253 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
index 3eca39821d79..d0a8d2810c33 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
@@ -660,7 +660,7 @@ static int acx565akm_check_timings(struct omap_dss_device *dssdev,
660 return src->ops->check_timings(src, vm); 660 return src->ops->check_timings(src, vm);
661} 661}
662 662
663static const struct omap_dss_driver acx565akm_ops = { 663static const struct omap_dss_device_ops acx565akm_ops = {
664 .connect = acx565akm_connect, 664 .connect = acx565akm_connect,
665 .disconnect = acx565akm_disconnect, 665 .disconnect = acx565akm_disconnect,
666 666
@@ -762,7 +762,7 @@ static int acx565akm_probe(struct spi_device *spi)
762 762
763 dssdev = &ddata->dssdev; 763 dssdev = &ddata->dssdev;
764 dssdev->dev = &spi->dev; 764 dssdev->dev = &spi->dev;
765 dssdev->driver = &acx565akm_ops; 765 dssdev->ops = &acx565akm_ops;
766 dssdev->type = OMAP_DISPLAY_TYPE_SDI; 766 dssdev->type = OMAP_DISPLAY_TYPE_SDI;
767 dssdev->owner = THIS_MODULE; 767 dssdev->owner = THIS_MODULE;
768 dssdev->of_ports = BIT(0); 768 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
index ecb903a93cf4..1b0e42daa296 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
@@ -330,7 +330,7 @@ static int td028ttec1_panel_check_timings(struct omap_dss_device *dssdev,
330 return src->ops->check_timings(src, vm); 330 return src->ops->check_timings(src, vm);
331} 331}
332 332
333static const struct omap_dss_driver td028ttec1_ops = { 333static const struct omap_dss_device_ops td028ttec1_ops = {
334 .connect = td028ttec1_panel_connect, 334 .connect = td028ttec1_panel_connect,
335 .disconnect = td028ttec1_panel_disconnect, 335 .disconnect = td028ttec1_panel_disconnect,
336 336
@@ -371,7 +371,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
371 371
372 dssdev = &ddata->dssdev; 372 dssdev = &ddata->dssdev;
373 dssdev->dev = &spi->dev; 373 dssdev->dev = &spi->dev;
374 dssdev->driver = &td028ttec1_ops; 374 dssdev->ops = &td028ttec1_ops;
375 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 375 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
376 dssdev->owner = THIS_MODULE; 376 dssdev->owner = THIS_MODULE;
377 dssdev->of_ports = BIT(0); 377 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
index 1521812ab15b..b211a7809a26 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
@@ -404,7 +404,7 @@ static int tpo_td043_check_timings(struct omap_dss_device *dssdev,
404 return src->ops->check_timings(src, vm); 404 return src->ops->check_timings(src, vm);
405} 405}
406 406
407static const struct omap_dss_driver tpo_td043_ops = { 407static const struct omap_dss_device_ops tpo_td043_ops = {
408 .connect = tpo_td043_connect, 408 .connect = tpo_td043_connect,
409 .disconnect = tpo_td043_disconnect, 409 .disconnect = tpo_td043_disconnect,
410 410
@@ -469,7 +469,7 @@ static int tpo_td043_probe(struct spi_device *spi)
469 469
470 dssdev = &ddata->dssdev; 470 dssdev = &ddata->dssdev;
471 dssdev->dev = &spi->dev; 471 dssdev->dev = &spi->dev;
472 dssdev->driver = &tpo_td043_ops; 472 dssdev->ops = &tpo_td043_ops;
473 dssdev->type = OMAP_DISPLAY_TYPE_DPI; 473 dssdev->type = OMAP_DISPLAY_TYPE_DPI;
474 dssdev->owner = THIS_MODULE; 474 dssdev->owner = THIS_MODULE;
475 dssdev->of_ports = BIT(0); 475 dssdev->of_ports = BIT(0);
diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
index 614331b7d702..472f56e3de70 100644
--- a/drivers/gpu/drm/omapdrm/dss/base.c
+++ b/drivers/gpu/drm/omapdrm/dss/base.c
@@ -198,11 +198,7 @@ int omapdss_device_connect(struct dss_device *dss,
198 198
199 dst->dss = dss; 199 dst->dss = dss;
200 200
201 if (dst->driver) 201 ret = dst->ops->connect(src, dst);
202 ret = dst->driver->connect(src, dst);
203 else
204 ret = dst->ops->connect(src, dst);
205
206 if (ret < 0) { 202 if (ret < 0) {
207 dst->dss = NULL; 203 dst->dss = NULL;
208 return ret; 204 return ret;
@@ -238,11 +234,7 @@ void omapdss_device_disconnect(struct omap_dss_device *src,
238 234
239 WARN_ON(dst->state != OMAP_DSS_DISPLAY_DISABLED); 235 WARN_ON(dst->state != OMAP_DSS_DISPLAY_DISABLED);
240 236
241 if (dst->driver) 237 dst->ops->disconnect(src, dst);
242 dst->driver->disconnect(src, dst);
243 else
244 dst->ops->disconnect(src, dst);
245
246 dst->dss = NULL; 238 dst->dss = NULL;
247} 239}
248EXPORT_SYMBOL_GPL(omapdss_device_disconnect); 240EXPORT_SYMBOL_GPL(omapdss_device_disconnect);
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c
index 14ffe23b5ecf..19fc4dfc429e 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -1553,7 +1553,7 @@ static void dss_shutdown(struct platform_device *pdev)
1553 1553
1554 for_each_dss_display(dssdev) { 1554 for_each_dss_display(dssdev) {
1555 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) 1555 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
1556 dssdev->driver->disable(dssdev); 1556 dssdev->ops->disable(dssdev);
1557 } 1557 }
1558} 1558}
1559 1559
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index c4fcdc9ed62d..bebce93fed3e 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -511,8 +511,9 @@ static const struct omap_dss_device_ops hdmi_ops = {
511 .check_timings = hdmi_display_check_timing, 511 .check_timings = hdmi_display_check_timing,
512 .set_timings = hdmi_display_set_timing, 512 .set_timings = hdmi_display_set_timing,
513 513
514 .read_edid = hdmi_read_edid,
515
514 .hdmi = { 516 .hdmi = {
515 .read_edid = hdmi_read_edid,
516 .lost_hotplug = hdmi_lost_hotplug, 517 .lost_hotplug = hdmi_lost_hotplug,
517 .set_infoframe = hdmi_set_infoframe, 518 .set_infoframe = hdmi_set_infoframe,
518 .set_hdmi_mode = hdmi_set_hdmi_mode, 519 .set_hdmi_mode = hdmi_set_hdmi_mode,
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
index 889c31745492..7c07e0208107 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -505,8 +505,9 @@ static const struct omap_dss_device_ops hdmi_ops = {
505 .check_timings = hdmi_display_check_timing, 505 .check_timings = hdmi_display_check_timing,
506 .set_timings = hdmi_display_set_timing, 506 .set_timings = hdmi_display_set_timing,
507 507
508 .read_edid = hdmi_read_edid,
509
508 .hdmi = { 510 .hdmi = {
509 .read_edid = hdmi_read_edid,
510 .set_infoframe = hdmi_set_infoframe, 511 .set_infoframe = hdmi_set_infoframe,
511 .set_hdmi_mode = hdmi_set_hdmi_mode, 512 .set_hdmi_mode = hdmi_set_hdmi_mode,
512 }, 513 },
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 6d22b38f2ce5..60e4269e6c88 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -297,18 +297,7 @@ struct omap_dss_writeback_info {
297}; 297};
298 298
299struct omapdss_hdmi_ops { 299struct omapdss_hdmi_ops {
300 int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
301 void (*lost_hotplug)(struct omap_dss_device *dssdev); 300 void (*lost_hotplug)(struct omap_dss_device *dssdev);
302 bool (*detect)(struct omap_dss_device *dssdev);
303
304 int (*register_hpd_cb)(struct omap_dss_device *dssdev,
305 void (*cb)(void *cb_data,
306 enum drm_connector_status status),
307 void *cb_data);
308 void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
309 void (*enable_hpd)(struct omap_dss_device *dssdev);
310 void (*disable_hpd)(struct omap_dss_device *dssdev);
311
312 int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode); 301 int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode);
313 int (*set_infoframe)(struct omap_dss_device *dssdev, 302 int (*set_infoframe)(struct omap_dss_device *dssdev,
314 const struct hdmi_avi_infoframe *avi); 303 const struct hdmi_avi_infoframe *avi);
@@ -376,9 +365,23 @@ struct omap_dss_device_ops {
376 365
377 int (*check_timings)(struct omap_dss_device *dssdev, 366 int (*check_timings)(struct omap_dss_device *dssdev,
378 struct videomode *vm); 367 struct videomode *vm);
368 void (*get_timings)(struct omap_dss_device *dssdev,
369 struct videomode *vm);
379 void (*set_timings)(struct omap_dss_device *dssdev, 370 void (*set_timings)(struct omap_dss_device *dssdev,
380 struct videomode *vm); 371 struct videomode *vm);
381 372
373 bool (*detect)(struct omap_dss_device *dssdev);
374
375 int (*register_hpd_cb)(struct omap_dss_device *dssdev,
376 void (*cb)(void *cb_data,
377 enum drm_connector_status status),
378 void *cb_data);
379 void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
380 void (*enable_hpd)(struct omap_dss_device *dssdev);
381 void (*disable_hpd)(struct omap_dss_device *dssdev);
382
383 int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
384
382 union { 385 union {
383 const struct omapdss_hdmi_ops hdmi; 386 const struct omapdss_hdmi_ops hdmi;
384 const struct omapdss_dsi_ops dsi; 387 const struct omapdss_dsi_ops dsi;
@@ -440,14 +443,6 @@ struct omap_dss_device {
440}; 443};
441 444
442struct omap_dss_driver { 445struct omap_dss_driver {
443 int (*connect)(struct omap_dss_device *src,
444 struct omap_dss_device *dst);
445 void (*disconnect)(struct omap_dss_device *src,
446 struct omap_dss_device *dst);
447
448 int (*enable)(struct omap_dss_device *display);
449 void (*disable)(struct omap_dss_device *display);
450
451 int (*update)(struct omap_dss_device *dssdev, 446 int (*update)(struct omap_dss_device *dssdev,
452 u16 x, u16 y, u16 w, u16 h); 447 u16 x, u16 y, u16 w, u16 h);
453 int (*sync)(struct omap_dss_device *dssdev); 448 int (*sync)(struct omap_dss_device *dssdev);
@@ -459,29 +454,8 @@ struct omap_dss_driver {
459 void *buf, size_t size, 454 void *buf, size_t size,
460 u16 x, u16 y, u16 w, u16 h); 455 u16 x, u16 y, u16 w, u16 h);
461 456
462 int (*check_timings)(struct omap_dss_device *dssdev,
463 struct videomode *vm);
464 void (*set_timings)(struct omap_dss_device *dssdev,
465 struct videomode *vm);
466 void (*get_timings)(struct omap_dss_device *dssdev,
467 struct videomode *vm);
468 void (*get_size)(struct omap_dss_device *dssdev, 457 void (*get_size)(struct omap_dss_device *dssdev,
469 unsigned int *width, unsigned int *height); 458 unsigned int *width, unsigned int *height);
470
471 int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len);
472 bool (*detect)(struct omap_dss_device *dssdev);
473
474 int (*register_hpd_cb)(struct omap_dss_device *dssdev,
475 void (*cb)(void *cb_data,
476 enum drm_connector_status status),
477 void *cb_data);
478 void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
479 void (*enable_hpd)(struct omap_dss_device *dssdev);
480 void (*disable_hpd)(struct omap_dss_device *dssdev);
481
482 int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode);
483 int (*set_hdmi_infoframe)(struct omap_dss_device *dssdev,
484 const struct hdmi_avi_infoframe *avi);
485}; 459};
486 460
487struct dss_device *omapdss_get_dss(void); 461struct dss_device *omapdss_get_dss(void);
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index 69ebb0fa1df5..f9cc04c7c0fa 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -62,11 +62,10 @@ static enum drm_connector_status omap_connector_detect(
62{ 62{
63 struct omap_connector *omap_connector = to_omap_connector(connector); 63 struct omap_connector *omap_connector = to_omap_connector(connector);
64 struct omap_dss_device *dssdev = omap_connector->dssdev; 64 struct omap_dss_device *dssdev = omap_connector->dssdev;
65 const struct omap_dss_driver *dssdrv = dssdev->driver;
66 enum drm_connector_status ret; 65 enum drm_connector_status ret;
67 66
68 if (dssdrv->detect) { 67 if (dssdev->ops->detect) {
69 if (dssdrv->detect(dssdev)) 68 if (dssdev->ops->detect(dssdev))
70 ret = connector_status_connected; 69 ret = connector_status_connected;
71 else 70 else
72 ret = connector_status_disconnected; 71 ret = connector_status_disconnected;
@@ -91,8 +90,8 @@ static void omap_connector_destroy(struct drm_connector *connector)
91 90
92 DBG("%s", omap_connector->dssdev->name); 91 DBG("%s", omap_connector->dssdev->name);
93 if (connector->polled == DRM_CONNECTOR_POLL_HPD && 92 if (connector->polled == DRM_CONNECTOR_POLL_HPD &&
94 dssdev->driver->unregister_hpd_cb) { 93 dssdev->ops->unregister_hpd_cb) {
95 dssdev->driver->unregister_hpd_cb(dssdev); 94 dssdev->ops->unregister_hpd_cb(dssdev);
96 } 95 }
97 drm_connector_unregister(connector); 96 drm_connector_unregister(connector);
98 drm_connector_cleanup(connector); 97 drm_connector_cleanup(connector);
@@ -107,7 +106,6 @@ static int omap_connector_get_modes(struct drm_connector *connector)
107{ 106{
108 struct omap_connector *omap_connector = to_omap_connector(connector); 107 struct omap_connector *omap_connector = to_omap_connector(connector);
109 struct omap_dss_device *dssdev = omap_connector->dssdev; 108 struct omap_dss_device *dssdev = omap_connector->dssdev;
110 const struct omap_dss_driver *dssdrv = dssdev->driver;
111 struct drm_device *dev = connector->dev; 109 struct drm_device *dev = connector->dev;
112 int n = 0; 110 int n = 0;
113 111
@@ -118,13 +116,13 @@ static int omap_connector_get_modes(struct drm_connector *connector)
118 * LCD panels) we just return a single mode corresponding to the 116 * LCD panels) we just return a single mode corresponding to the
119 * currently configured timings: 117 * currently configured timings:
120 */ 118 */
121 if (dssdrv->read_edid) { 119 if (dssdev->ops->read_edid) {
122 void *edid = kzalloc(MAX_EDID, GFP_KERNEL); 120 void *edid = kzalloc(MAX_EDID, GFP_KERNEL);
123 121
124 if (!edid) 122 if (!edid)
125 return 0; 123 return 0;
126 124
127 if ((dssdrv->read_edid(dssdev, edid, MAX_EDID) > 0) && 125 if ((dssdev->ops->read_edid(dssdev, edid, MAX_EDID) > 0) &&
128 drm_edid_is_valid(edid)) { 126 drm_edid_is_valid(edid)) {
129 drm_connector_update_edid_property( 127 drm_connector_update_edid_property(
130 connector, edid); 128 connector, edid);
@@ -145,7 +143,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
145 if (!mode) 143 if (!mode)
146 return 0; 144 return 0;
147 145
148 dssdrv->get_timings(dssdev, &vm); 146 dssdev->ops->get_timings(dssdev, &vm);
149 147
150 drm_display_mode_from_videomode(&vm, mode); 148 drm_display_mode_from_videomode(&vm, mode);
151 149
@@ -153,8 +151,8 @@ static int omap_connector_get_modes(struct drm_connector *connector)
153 drm_mode_set_name(mode); 151 drm_mode_set_name(mode);
154 drm_mode_probed_add(connector, mode); 152 drm_mode_probed_add(connector, mode);
155 153
156 if (dssdrv->get_size) { 154 if (dssdev->driver && dssdev->driver->get_size) {
157 dssdrv->get_size(dssdev, 155 dssdev->driver->get_size(dssdev,
158 &connector->display_info.width_mm, 156 &connector->display_info.width_mm,
159 &connector->display_info.height_mm); 157 &connector->display_info.height_mm);
160 } 158 }
@@ -170,7 +168,6 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
170{ 168{
171 struct omap_connector *omap_connector = to_omap_connector(connector); 169 struct omap_connector *omap_connector = to_omap_connector(connector);
172 struct omap_dss_device *dssdev = omap_connector->dssdev; 170 struct omap_dss_device *dssdev = omap_connector->dssdev;
173 const struct omap_dss_driver *dssdrv = dssdev->driver;
174 struct videomode vm = {0}; 171 struct videomode vm = {0};
175 struct drm_device *dev = connector->dev; 172 struct drm_device *dev = connector->dev;
176 struct drm_display_mode *new_mode; 173 struct drm_display_mode *new_mode;
@@ -184,12 +181,12 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
184 * a fixed resolution panel, check if the timings match with the 181 * a fixed resolution panel, check if the timings match with the
185 * panel's timings 182 * panel's timings
186 */ 183 */
187 if (dssdrv->check_timings) { 184 if (dssdev->ops->check_timings) {
188 r = dssdrv->check_timings(dssdev, &vm); 185 r = dssdev->ops->check_timings(dssdev, &vm);
189 } else { 186 } else {
190 struct videomode t = {0}; 187 struct videomode t = {0};
191 188
192 dssdrv->get_timings(dssdev, &t); 189 dssdev->ops->get_timings(dssdev, &t);
193 190
194 /* 191 /*
195 * Ignore the flags, as we don't get them from 192 * Ignore the flags, as we don't get them from
@@ -268,10 +265,10 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
268 connector_type); 265 connector_type);
269 drm_connector_helper_add(connector, &omap_connector_helper_funcs); 266 drm_connector_helper_add(connector, &omap_connector_helper_funcs);
270 267
271 if (dssdev->driver->register_hpd_cb) { 268 if (dssdev->ops->register_hpd_cb) {
272 int ret = dssdev->driver->register_hpd_cb(dssdev, 269 int ret = dssdev->ops->register_hpd_cb(dssdev,
273 omap_connector_hpd_cb, 270 omap_connector_hpd_cb,
274 omap_connector); 271 omap_connector);
275 if (!ret) 272 if (!ret)
276 hpd_supported = true; 273 hpd_supported = true;
277 else if (ret != -ENOTSUPP) 274 else if (ret != -ENOTSUPP)
@@ -281,7 +278,7 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
281 278
282 if (hpd_supported) 279 if (hpd_supported)
283 connector->polled = DRM_CONNECTOR_POLL_HPD; 280 connector->polled = DRM_CONNECTOR_POLL_HPD;
284 else if (dssdev->driver->detect) 281 else if (dssdev->ops->detect)
285 connector->polled = DRM_CONNECTOR_POLL_CONNECT | 282 connector->polled = DRM_CONNECTOR_POLL_CONNECT |
286 DRM_CONNECTOR_POLL_DISCONNECT; 283 DRM_CONNECTOR_POLL_DISCONNECT;
287 else 284 else
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 80498dcde6d7..197d05312306 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -458,7 +458,7 @@ static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc)
458 if (dssdev) { 458 if (dssdev) {
459 struct videomode vm = {0}; 459 struct videomode vm = {0};
460 460
461 dssdev->driver->get_timings(dssdev, &vm); 461 dssdev->ops->get_timings(dssdev, &vm);
462 462
463 omap_crtc->vm.flags |= vm.flags & flags_mask; 463 omap_crtc->vm.flags |= vm.flags & flags_mask;
464 } 464 }
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index d0f6929857bb..843222118fa7 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -378,8 +378,8 @@ static void omap_modeset_enable_external_hpd(struct drm_device *ddev)
378 for (i = 0; i < priv->num_pipes; i++) { 378 for (i = 0; i < priv->num_pipes; i++) {
379 struct omap_dss_device *display = priv->pipes[i].display; 379 struct omap_dss_device *display = priv->pipes[i].display;
380 380
381 if (display->driver->enable_hpd) 381 if (display->ops->enable_hpd)
382 display->driver->enable_hpd(display); 382 display->ops->enable_hpd(display);
383 } 383 }
384} 384}
385 385
@@ -394,8 +394,8 @@ static void omap_modeset_disable_external_hpd(struct drm_device *ddev)
394 for (i = 0; i < priv->num_pipes; i++) { 394 for (i = 0; i < priv->num_pipes; i++) {
395 struct omap_dss_device *display = priv->pipes[i].display; 395 struct omap_dss_device *display = priv->pipes[i].display;
396 396
397 if (display->driver->disable_hpd) 397 if (display->ops->disable_hpd)
398 display->driver->disable_hpd(display); 398 display->ops->disable_hpd(display);
399 } 399 }
400} 400}
401 401
@@ -724,7 +724,7 @@ static int omap_drm_suspend_all_displays(struct drm_device *ddev)
724 struct omap_dss_device *display = priv->pipes[i].display; 724 struct omap_dss_device *display = priv->pipes[i].display;
725 725
726 if (display->state == OMAP_DSS_DISPLAY_ACTIVE) { 726 if (display->state == OMAP_DSS_DISPLAY_ACTIVE) {
727 display->driver->disable(display); 727 display->ops->disable(display);
728 display->activate_after_resume = true; 728 display->activate_after_resume = true;
729 } else { 729 } else {
730 display->activate_after_resume = false; 730 display->activate_after_resume = false;
@@ -743,7 +743,7 @@ static int omap_drm_resume_all_displays(struct drm_device *ddev)
743 struct omap_dss_device *display = priv->pipes[i].display; 743 struct omap_dss_device *display = priv->pipes[i].display;
744 744
745 if (display->activate_after_resume) { 745 if (display->activate_after_resume) {
746 display->driver->enable(display); 746 display->ops->enable(display);
747 display->activate_after_resume = false; 747 display->activate_after_resume = false;
748 } 748 }
749 } 749 }
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",