diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_connector.c | 30 | ||||
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_connector.h | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.c | 3 |
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 | ||
| 30 | struct omap_connector { | 30 | struct 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 */ |
| 327 | struct drm_connector *omap_connector_init(struct drm_device *dev, | 329 | struct 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; | |||
| 28 | struct omap_dss_device; | 28 | struct omap_dss_device; |
| 29 | 29 | ||
| 30 | struct drm_connector *omap_connector_init(struct drm_device *dev, | 30 | struct 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); |
| 33 | struct drm_encoder *omap_connector_attached_encoder( | 33 | struct drm_encoder *omap_connector_attached_encoder( |
| 34 | struct drm_connector *connector); | 34 | struct drm_connector *connector); |
| 35 | bool omap_connector_get_hdmi_mode(struct drm_connector *connector); | 35 | bool 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 | ||
