aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-dvi.c9
-rw-r--r--drivers/gpu/drm/omapdrm/displays/connector-hdmi.c14
-rw-r--r--drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c8
-rw-r--r--drivers/gpu/drm/omapdrm/dss/omapdss.h6
-rw-r--r--drivers/gpu/drm/omapdrm/omap_connector.c17
5 files changed, 14 insertions, 40 deletions
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index e9353e4cd297..a53d5967e5a9 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -211,30 +211,23 @@ static bool dvic_detect(struct omap_dss_device *dssdev)
211 return r == 0; 211 return r == 0;
212} 212}
213 213
214static int dvic_register_hpd_cb(struct omap_dss_device *dssdev, 214static void dvic_register_hpd_cb(struct omap_dss_device *dssdev,
215 void (*cb)(void *cb_data, 215 void (*cb)(void *cb_data,
216 enum drm_connector_status status), 216 enum drm_connector_status status),
217 void *cb_data) 217 void *cb_data)
218{ 218{
219 struct panel_drv_data *ddata = to_panel_data(dssdev); 219 struct panel_drv_data *ddata = to_panel_data(dssdev);
220 220
221 if (!ddata->hpd_gpio)
222 return -ENOTSUPP;
223
224 mutex_lock(&ddata->hpd_lock); 221 mutex_lock(&ddata->hpd_lock);
225 ddata->hpd_cb = cb; 222 ddata->hpd_cb = cb;
226 ddata->hpd_cb_data = cb_data; 223 ddata->hpd_cb_data = cb_data;
227 mutex_unlock(&ddata->hpd_lock); 224 mutex_unlock(&ddata->hpd_lock);
228 return 0;
229} 225}
230 226
231static void dvic_unregister_hpd_cb(struct omap_dss_device *dssdev) 227static void dvic_unregister_hpd_cb(struct omap_dss_device *dssdev)
232{ 228{
233 struct panel_drv_data *ddata = to_panel_data(dssdev); 229 struct panel_drv_data *ddata = to_panel_data(dssdev);
234 230
235 if (!ddata->hpd_gpio)
236 return;
237
238 mutex_lock(&ddata->hpd_lock); 231 mutex_lock(&ddata->hpd_lock);
239 ddata->hpd_cb = NULL; 232 ddata->hpd_cb = NULL;
240 ddata->hpd_cb_data = NULL; 233 ddata->hpd_cb_data = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index 8eae973474dd..c58bf64d1a9b 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -147,31 +147,23 @@ static bool hdmic_detect(struct omap_dss_device *dssdev)
147 return connected; 147 return connected;
148} 148}
149 149
150static int hdmic_register_hpd_cb(struct omap_dss_device *dssdev, 150static void hdmic_register_hpd_cb(struct omap_dss_device *dssdev,
151 void (*cb)(void *cb_data, 151 void (*cb)(void *cb_data,
152 enum drm_connector_status status), 152 enum drm_connector_status status),
153 void *cb_data) 153 void *cb_data)
154{ 154{
155 struct panel_drv_data *ddata = to_panel_data(dssdev); 155 struct panel_drv_data *ddata = to_panel_data(dssdev);
156 156
157 if (!ddata->hpd_gpio)
158 return -ENOTSUPP;
159
160 mutex_lock(&ddata->hpd_lock); 157 mutex_lock(&ddata->hpd_lock);
161 ddata->hpd_cb = cb; 158 ddata->hpd_cb = cb;
162 ddata->hpd_cb_data = cb_data; 159 ddata->hpd_cb_data = cb_data;
163 mutex_unlock(&ddata->hpd_lock); 160 mutex_unlock(&ddata->hpd_lock);
164
165 return 0;
166} 161}
167 162
168static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev) 163static void hdmic_unregister_hpd_cb(struct omap_dss_device *dssdev)
169{ 164{
170 struct panel_drv_data *ddata = to_panel_data(dssdev); 165 struct panel_drv_data *ddata = to_panel_data(dssdev);
171 166
172 if (!ddata->hpd_gpio)
173 return;
174
175 mutex_lock(&ddata->hpd_lock); 167 mutex_lock(&ddata->hpd_lock);
176 ddata->hpd_cb = NULL; 168 ddata->hpd_cb = NULL;
177 ddata->hpd_cb_data = NULL; 169 ddata->hpd_cb_data = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index f6d4f90f2c08..508df4174c5e 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -140,10 +140,10 @@ static bool tpd_detect(struct omap_dss_device *dssdev)
140 return connected; 140 return connected;
141} 141}
142 142
143static int tpd_register_hpd_cb(struct omap_dss_device *dssdev, 143static void tpd_register_hpd_cb(struct omap_dss_device *dssdev,
144 void (*cb)(void *cb_data, 144 void (*cb)(void *cb_data,
145 enum drm_connector_status status), 145 enum drm_connector_status status),
146 void *cb_data) 146 void *cb_data)
147{ 147{
148 struct panel_drv_data *ddata = to_panel_data(dssdev); 148 struct panel_drv_data *ddata = to_panel_data(dssdev);
149 149
@@ -151,8 +151,6 @@ static int tpd_register_hpd_cb(struct omap_dss_device *dssdev,
151 ddata->hpd_cb = cb; 151 ddata->hpd_cb = cb;
152 ddata->hpd_cb_data = cb_data; 152 ddata->hpd_cb_data = cb_data;
153 mutex_unlock(&ddata->hpd_lock); 153 mutex_unlock(&ddata->hpd_lock);
154
155 return 0;
156} 154}
157 155
158static void tpd_unregister_hpd_cb(struct omap_dss_device *dssdev) 156static void tpd_unregister_hpd_cb(struct omap_dss_device *dssdev)
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 30ad9985776f..b05d47b34937 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -372,10 +372,10 @@ struct omap_dss_device_ops {
372 372
373 bool (*detect)(struct omap_dss_device *dssdev); 373 bool (*detect)(struct omap_dss_device *dssdev);
374 374
375 int (*register_hpd_cb)(struct omap_dss_device *dssdev, 375 void (*register_hpd_cb)(struct omap_dss_device *dssdev,
376 void (*cb)(void *cb_data, 376 void (*cb)(void *cb_data,
377 enum drm_connector_status status), 377 enum drm_connector_status status),
378 void *cb_data); 378 void *cb_data);
379 void (*unregister_hpd_cb)(struct omap_dss_device *dssdev); 379 void (*unregister_hpd_cb)(struct omap_dss_device *dssdev);
380 void (*enable_hpd)(struct omap_dss_device *dssdev); 380 void (*enable_hpd)(struct omap_dss_device *dssdev);
381 void (*disable_hpd)(struct omap_dss_device *dssdev); 381 void (*disable_hpd)(struct omap_dss_device *dssdev);
diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index 05734c908aae..cd33995b0b1a 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -298,19 +298,10 @@ struct drm_connector *omap_connector_init(struct drm_device *dev,
298 */ 298 */
299 dssdev = omap_connector_find_device(connector, OMAP_DSS_DEVICE_OP_HPD); 299 dssdev = omap_connector_find_device(connector, OMAP_DSS_DEVICE_OP_HPD);
300 if (dssdev) { 300 if (dssdev) {
301 int ret; 301 dssdev->ops->register_hpd_cb(dssdev, omap_connector_hpd_cb,
302 302 omap_connector);
303 ret = dssdev->ops->register_hpd_cb(dssdev, 303 connector->polled = DRM_CONNECTOR_POLL_HPD;
304 omap_connector_hpd_cb, 304 } else {
305 omap_connector);
306 if (ret < 0)
307 DBG("%s: Failed to register HPD callback (%d).",
308 dssdev->name, ret);
309 else
310 connector->polled = DRM_CONNECTOR_POLL_HPD;
311 }
312
313 if (!connector->polled) {
314 dssdev = omap_connector_find_device(connector, 305 dssdev = omap_connector_find_device(connector,
315 OMAP_DSS_DEVICE_OP_DETECT); 306 OMAP_DSS_DEVICE_OP_DETECT);
316 if (dssdev) 307 if (dssdev)