aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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",