diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_display.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index b186174fa72..3cb52bc52b2 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "nouveau_crtc.h" | 33 | #include "nouveau_crtc.h" |
34 | #include "nouveau_dma.h" | 34 | #include "nouveau_dma.h" |
35 | #include "nouveau_connector.h" | 35 | #include "nouveau_connector.h" |
36 | #include "nouveau_gpio.h" | ||
36 | #include "nv50_display.h" | 37 | #include "nv50_display.h" |
37 | 38 | ||
38 | static void | 39 | static void |
@@ -211,11 +212,19 @@ nouveau_display_init(struct drm_device *dev) | |||
211 | { | 212 | { |
212 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 213 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
213 | struct nouveau_display_engine *disp = &dev_priv->engine.display; | 214 | struct nouveau_display_engine *disp = &dev_priv->engine.display; |
215 | struct drm_connector *connector; | ||
214 | int ret; | 216 | int ret; |
215 | 217 | ||
216 | ret = disp->init(dev); | 218 | ret = disp->init(dev); |
217 | if (ret == 0) { | 219 | if (ret) |
218 | drm_kms_helper_poll_enable(dev); | 220 | return ret; |
221 | |||
222 | drm_kms_helper_poll_enable(dev); | ||
223 | |||
224 | /* enable hotplug interrupts */ | ||
225 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
226 | struct nouveau_connector *conn = nouveau_connector(connector); | ||
227 | nouveau_gpio_irq(dev, 0, conn->hpd, 0xff, true); | ||
219 | } | 228 | } |
220 | 229 | ||
221 | return ret; | 230 | return ret; |
@@ -226,6 +235,13 @@ nouveau_display_fini(struct drm_device *dev) | |||
226 | { | 235 | { |
227 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 236 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
228 | struct nouveau_display_engine *disp = &dev_priv->engine.display; | 237 | struct nouveau_display_engine *disp = &dev_priv->engine.display; |
238 | struct drm_connector *connector; | ||
239 | |||
240 | /* disable hotplug interrupts */ | ||
241 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
242 | struct nouveau_connector *conn = nouveau_connector(connector); | ||
243 | nouveau_gpio_irq(dev, 0, conn->hpd, 0xff, false); | ||
244 | } | ||
229 | 245 | ||
230 | drm_kms_helper_poll_disable(dev); | 246 | drm_kms_helper_poll_disable(dev); |
231 | disp->fini(dev); | 247 | disp->fini(dev); |