aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_display.c20
-rw-r--r--drivers/gpu/drm/nouveau/nv04_display.c8
-rw-r--r--drivers/gpu/drm/nouveau/nv50_display.c17
3 files changed, 18 insertions, 27 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
38static void 39static 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);
diff --git a/drivers/gpu/drm/nouveau/nv04_display.c b/drivers/gpu/drm/nouveau/nv04_display.c
index 15b748f0ea4..7047d37e8da 100644
--- a/drivers/gpu/drm/nouveau/nv04_display.c
+++ b/drivers/gpu/drm/nouveau/nv04_display.c
@@ -31,7 +31,6 @@
31#include "nouveau_hw.h" 31#include "nouveau_hw.h"
32#include "nouveau_encoder.h" 32#include "nouveau_encoder.h"
33#include "nouveau_connector.h" 33#include "nouveau_connector.h"
34#include "nouveau_gpio.h"
35 34
36static void nv04_vblank_crtc0_isr(struct drm_device *); 35static void nv04_vblank_crtc0_isr(struct drm_device *);
37static void nv04_vblank_crtc1_isr(struct drm_device *); 36static void nv04_vblank_crtc1_isr(struct drm_device *);
@@ -221,7 +220,6 @@ nv04_display_destroy(struct drm_device *dev)
221int 220int
222nv04_display_init(struct drm_device *dev) 221nv04_display_init(struct drm_device *dev)
223{ 222{
224 struct drm_connector *connector;
225 struct drm_encoder *encoder; 223 struct drm_encoder *encoder;
226 struct drm_crtc *crtc; 224 struct drm_crtc *crtc;
227 225
@@ -242,12 +240,6 @@ nv04_display_init(struct drm_device *dev)
242 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) 240 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
243 crtc->funcs->restore(crtc); 241 crtc->funcs->restore(crtc);
244 242
245 /* enable hotplug interrupts */
246 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
247 struct nouveau_connector *conn = nouveau_connector(connector);
248 nouveau_gpio_irq(dev, 0, conn->hpd, 0xff, true);
249 }
250
251 return 0; 243 return 0;
252} 244}
253 245
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index f408e105a0c..7ba28e08ee3 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -32,7 +32,6 @@
32#include "nouveau_fb.h" 32#include "nouveau_fb.h"
33#include "nouveau_fbcon.h" 33#include "nouveau_fbcon.h"
34#include "nouveau_ramht.h" 34#include "nouveau_ramht.h"
35#include "nouveau_gpio.h"
36#include "drm_crtc_helper.h" 35#include "drm_crtc_helper.h"
37 36
38static void nv50_display_isr(struct drm_device *); 37static void nv50_display_isr(struct drm_device *);
@@ -141,7 +140,6 @@ nv50_display_sync(struct drm_device *dev)
141int 140int
142nv50_display_init(struct drm_device *dev) 141nv50_display_init(struct drm_device *dev)
143{ 142{
144 struct drm_connector *connector;
145 struct nouveau_channel *evo; 143 struct nouveau_channel *evo;
146 int ret, i; 144 int ret, i;
147 u32 val; 145 u32 val;
@@ -236,12 +234,6 @@ nv50_display_init(struct drm_device *dev)
236 NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 | 234 NV50_PDISPLAY_INTR_EN_1_CLK_UNK20 |
237 NV50_PDISPLAY_INTR_EN_1_CLK_UNK40); 235 NV50_PDISPLAY_INTR_EN_1_CLK_UNK40);
238 236
239 /* enable hotplug interrupts */
240 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
241 struct nouveau_connector *conn = nouveau_connector(connector);
242 nouveau_gpio_irq(dev, 0, conn->hpd, 0xff, true);
243 }
244
245 ret = nv50_evo_init(dev); 237 ret = nv50_evo_init(dev);
246 if (ret) 238 if (ret)
247 return ret; 239 return ret;
@@ -262,7 +254,6 @@ nv50_display_init(struct drm_device *dev)
262void 254void
263nv50_display_fini(struct drm_device *dev) 255nv50_display_fini(struct drm_device *dev)
264{ 256{
265 struct drm_nouveau_private *dev_priv = dev->dev_private;
266 struct nv50_display *disp = nv50_display(dev); 257 struct nv50_display *disp = nv50_display(dev);
267 struct nouveau_channel *evo = disp->master; 258 struct nouveau_channel *evo = disp->master;
268 struct drm_crtc *drm_crtc; 259 struct drm_crtc *drm_crtc;
@@ -325,14 +316,6 @@ nv50_display_fini(struct drm_device *dev)
325 316
326 /* disable interrupts. */ 317 /* disable interrupts. */
327 nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, 0x00000000); 318 nv_wr32(dev, NV50_PDISPLAY_INTR_EN_1, 0x00000000);
328
329 /* disable hotplug interrupts */
330 nv_wr32(dev, 0xe054, 0xffffffff);
331 nv_wr32(dev, 0xe050, 0x00000000);
332 if (dev_priv->chipset >= 0x90) {
333 nv_wr32(dev, 0xe074, 0xffffffff);
334 nv_wr32(dev, 0xe070, 0x00000000);
335 }
336} 319}
337 320
338int 321int