diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_connector.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_connector.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c index f9cc04c7c0fa..4729af395156 100644 --- a/drivers/gpu/drm/omapdrm/omap_connector.c +++ b/drivers/gpu/drm/omapdrm/omap_connector.c | |||
@@ -61,26 +61,36 @@ static enum drm_connector_status omap_connector_detect( | |||
61 | struct drm_connector *connector, bool force) | 61 | struct drm_connector *connector, bool force) |
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; |
65 | enum drm_connector_status ret; | 65 | enum drm_connector_status status; |
66 | |||
67 | for (dssdev = omap_connector->dssdev; dssdev; dssdev = dssdev->src) { | ||
68 | if (dssdev->ops_flags & OMAP_DSS_DEVICE_OP_DETECT) | ||
69 | break; | ||
70 | } | ||
66 | 71 | ||
67 | if (dssdev->ops->detect) { | 72 | if (dssdev) { |
68 | if (dssdev->ops->detect(dssdev)) | 73 | if (dssdev->ops->detect(dssdev)) |
69 | ret = connector_status_connected; | 74 | status = connector_status_connected; |
70 | else | 75 | else |
71 | ret = connector_status_disconnected; | 76 | status = connector_status_disconnected; |
72 | } else if (dssdev->type == OMAP_DISPLAY_TYPE_DPI || | ||
73 | dssdev->type == OMAP_DISPLAY_TYPE_DBI || | ||
74 | dssdev->type == OMAP_DISPLAY_TYPE_SDI || | ||
75 | dssdev->type == OMAP_DISPLAY_TYPE_DSI) { | ||
76 | ret = connector_status_connected; | ||
77 | } else { | 77 | } else { |
78 | ret = connector_status_unknown; | 78 | switch (omap_connector->dssdev->type) { |
79 | case OMAP_DISPLAY_TYPE_DPI: | ||
80 | case OMAP_DISPLAY_TYPE_DBI: | ||
81 | case OMAP_DISPLAY_TYPE_SDI: | ||
82 | case OMAP_DISPLAY_TYPE_DSI: | ||
83 | status = connector_status_connected; | ||
84 | break; | ||
85 | default: | ||
86 | status = connector_status_unknown; | ||
87 | break; | ||
88 | } | ||
79 | } | 89 | } |
80 | 90 | ||
81 | VERB("%s: %d (force=%d)", omap_connector->dssdev->name, ret, force); | 91 | VERB("%s: %d (force=%d)", omap_connector->dssdev->name, status, force); |
82 | 92 | ||
83 | return ret; | 93 | return status; |
84 | } | 94 | } |
85 | 95 | ||
86 | static void omap_connector_destroy(struct drm_connector *connector) | 96 | static void omap_connector_destroy(struct drm_connector *connector) |