aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-05-31 16:14:43 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2018-09-03 09:13:29 -0400
commit47a3ee27934a7a774be4aa1733c662f33e1ae656 (patch)
tree285cb957ea78eee57aabea31458e4cdbcb640bcf /drivers/gpu/drm/omapdrm
parent7805d1e5098c1a90e5feb153809b16ba890b03e4 (diff)
drm/omap: Pass both output and display omap_dss_device to connector init
The drm_connector implementation requires access to the omap_dss_device corresponding to the display, which is passed to its initialization function and stored internally. Refactoring of the timings operations will require access to the output omap_dss_device. To prepare for that, pass it to the connector 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>
Diffstat (limited to 'drivers/gpu/drm/omapdrm')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_connector.c30
-rw-r--r--drivers/gpu/drm/omapdrm/omap_connector.h4
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c3
3 files changed, 21 insertions, 16 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index 5091991363d6..92fea0085a9c 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -29,7 +29,8 @@
29 29
30struct omap_connector { 30struct omap_connector {
31 struct drm_connector base; 31 struct drm_connector base;
32 struct omap_dss_device *dssdev; 32 struct omap_dss_device *output;
33 struct omap_dss_device *display;
33 struct omap_dss_device *hpd; 34 struct omap_dss_device *hpd;
34 bool hdmi_mode; 35 bool hdmi_mode;
35}; 36};
@@ -104,7 +105,7 @@ omap_connector_find_device(struct drm_connector *connector,
104 struct omap_connector *omap_connector = to_omap_connector(connector); 105 struct omap_connector *omap_connector = to_omap_connector(connector);
105 struct omap_dss_device *dssdev; 106 struct omap_dss_device *dssdev;
106 107
107 for (dssdev = omap_connector->dssdev; dssdev; dssdev = dssdev->src) { 108 for (dssdev = omap_connector->display; dssdev; dssdev = dssdev->src) {
108 if (dssdev->ops_flags & op) 109 if (dssdev->ops_flags & op)
109 return dssdev; 110 return dssdev;
110 } 111 }
@@ -129,7 +130,7 @@ static enum drm_connector_status omap_connector_detect(
129 130
130 omap_connector_hpd_notify(connector, dssdev->src, status); 131 omap_connector_hpd_notify(connector, dssdev->src, status);
131 } else { 132 } else {
132 switch (omap_connector->dssdev->type) { 133 switch (omap_connector->display->type) {
133 case OMAP_DISPLAY_TYPE_DPI: 134 case OMAP_DISPLAY_TYPE_DPI:
134 case OMAP_DISPLAY_TYPE_DBI: 135 case OMAP_DISPLAY_TYPE_DBI:
135 case OMAP_DISPLAY_TYPE_SDI: 136 case OMAP_DISPLAY_TYPE_SDI:
@@ -142,7 +143,7 @@ static enum drm_connector_status omap_connector_detect(
142 } 143 }
143 } 144 }
144 145
145 VERB("%s: %d (force=%d)", omap_connector->dssdev->name, status, force); 146 VERB("%s: %d (force=%d)", omap_connector->display->name, status, force);
146 147
147 return status; 148 return status;
148} 149}
@@ -151,7 +152,7 @@ static void omap_connector_destroy(struct drm_connector *connector)
151{ 152{
152 struct omap_connector *omap_connector = to_omap_connector(connector); 153 struct omap_connector *omap_connector = to_omap_connector(connector);
153 154
154 DBG("%s", omap_connector->dssdev->name); 155 DBG("%s", omap_connector->display->name);
155 156
156 if (omap_connector->hpd) { 157 if (omap_connector->hpd) {
157 struct omap_dss_device *hpd = omap_connector->hpd; 158 struct omap_dss_device *hpd = omap_connector->hpd;
@@ -165,7 +166,8 @@ static void omap_connector_destroy(struct drm_connector *connector)
165 drm_connector_cleanup(connector); 166 drm_connector_cleanup(connector);
166 kfree(omap_connector); 167 kfree(omap_connector);
167 168
168 omapdss_device_put(omap_connector->dssdev); 169 omapdss_device_put(omap_connector->output);
170 omapdss_device_put(omap_connector->display);
169} 171}
170 172
171#define MAX_EDID 512 173#define MAX_EDID 512
@@ -212,7 +214,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
212 struct drm_display_mode *mode; 214 struct drm_display_mode *mode;
213 struct videomode vm = {0}; 215 struct videomode vm = {0};
214 216
215 DBG("%s", omap_connector->dssdev->name); 217 DBG("%s", omap_connector->display->name);
216 218
217 /* 219 /*
218 * If display exposes EDID, then we parse that in the normal way to 220 * If display exposes EDID, then we parse that in the normal way to
@@ -229,7 +231,7 @@ static int omap_connector_get_modes(struct drm_connector *connector)
229 if (!mode) 231 if (!mode)
230 return 0; 232 return 0;
231 233
232 dssdev = omap_connector->dssdev; 234 dssdev = omap_connector->display;
233 dssdev->ops->get_timings(dssdev, &vm); 235 dssdev->ops->get_timings(dssdev, &vm);
234 236
235 drm_display_mode_from_videomode(&vm, mode); 237 drm_display_mode_from_videomode(&vm, mode);
@@ -250,7 +252,7 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
250 struct drm_display_mode *mode) 252 struct drm_display_mode *mode)
251{ 253{
252 struct omap_connector *omap_connector = to_omap_connector(connector); 254 struct omap_connector *omap_connector = to_omap_connector(connector);
253 struct omap_dss_device *dssdev = omap_connector->dssdev; 255 struct omap_dss_device *dssdev = omap_connector->display;
254 struct videomode vm = {0}; 256 struct videomode vm = {0};
255 struct drm_device *dev = connector->dev; 257 struct drm_device *dev = connector->dev;
256 struct drm_display_mode *new_mode; 258 struct drm_display_mode *new_mode;
@@ -325,19 +327,21 @@ static const struct drm_connector_helper_funcs omap_connector_helper_funcs = {
325 327
326/* initialize connector */ 328/* initialize connector */
327struct drm_connector *omap_connector_init(struct drm_device *dev, 329struct drm_connector *omap_connector_init(struct drm_device *dev,
328 int connector_type, struct omap_dss_device *dssdev, 330 int connector_type, struct omap_dss_device *output,
329 struct drm_encoder *encoder) 331 struct omap_dss_device *display, struct drm_encoder *encoder)
330{ 332{
331 struct drm_connector *connector = NULL; 333 struct drm_connector *connector = NULL;
332 struct omap_connector *omap_connector; 334 struct omap_connector *omap_connector;
335 struct omap_dss_device *dssdev;
333 336
334 DBG("%s", dssdev->name); 337 DBG("%s", display->name);
335 338
336 omap_connector = kzalloc(sizeof(*omap_connector), GFP_KERNEL); 339 omap_connector = kzalloc(sizeof(*omap_connector), GFP_KERNEL);
337 if (!omap_connector) 340 if (!omap_connector)
338 goto fail; 341 goto fail;
339 342
340 omap_connector->dssdev = omapdss_device_get(dssdev); 343 omap_connector->output = omapdss_device_get(output);
344 omap_connector->display = omapdss_device_get(display);
341 345
342 connector = &omap_connector->base; 346 connector = &omap_connector->base;
343 connector->interlace_allowed = 1; 347 connector->interlace_allowed = 1;
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.h b/drivers/gpu/drm/omapdrm/omap_connector.h
index 465b3c9499d5..42ff0a106179 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.h
+++ b/drivers/gpu/drm/omapdrm/omap_connector.h
@@ -28,8 +28,8 @@ struct drm_encoder;
28struct omap_dss_device; 28struct omap_dss_device;
29 29
30struct drm_connector *omap_connector_init(struct drm_device *dev, 30struct drm_connector *omap_connector_init(struct drm_device *dev,
31 int connector_type, struct omap_dss_device *dssdev, 31 int connector_type, struct omap_dss_device *output,
32 struct drm_encoder *encoder); 32 struct omap_dss_device *display, struct drm_encoder *encoder);
33struct drm_encoder *omap_connector_attached_encoder( 33struct drm_encoder *omap_connector_attached_encoder(
34 struct drm_connector *connector); 34 struct drm_connector *connector);
35bool omap_connector_get_hdmi_mode(struct drm_connector *connector); 35bool omap_connector_get_hdmi_mode(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 174bf498f4e5..03771f818eaa 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -323,7 +323,8 @@ static int omap_modeset_init(struct drm_device *dev)
323 return -ENOMEM; 323 return -ENOMEM;
324 324
325 connector = omap_connector_init(dev, 325 connector = omap_connector_init(dev,
326 get_connector_type(display), display, encoder); 326 get_connector_type(display), pipe->output,
327 display, encoder);
327 if (!connector) 328 if (!connector)
328 return -ENOMEM; 329 return -ENOMEM;
329 330