diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-11-11 01:14:56 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-03 00:11:45 -0500 |
commit | fce2bad0ee2666d6a10bfeb634b1021469cc3d79 (patch) | |
tree | bc66c771c5c27dcd3b59135fb25c39c342ffed71 /drivers/gpu/drm/nouveau/nouveau_state.c | |
parent | e4cbadcaaa4678020e37ca93502942ffdf9aef80 (diff) |
drm/nv50: rework PGPIO IRQ handling and hotplug detection
Allows callers to install their own handlers for when a GPIO line
changes state (such as for hotplug detect).
This also fixes a bug where we weren't acknowledging the GPIO IRQ
until after the bottom half had run, causing a severe IRQ storm
in some cases.
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_state.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_state.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 262545b58d9..b26b34c419c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c | |||
@@ -396,6 +396,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) | |||
396 | engine->gpio.takedown = nv50_gpio_fini; | 396 | engine->gpio.takedown = nv50_gpio_fini; |
397 | engine->gpio.get = nv50_gpio_get; | 397 | engine->gpio.get = nv50_gpio_get; |
398 | engine->gpio.set = nv50_gpio_set; | 398 | engine->gpio.set = nv50_gpio_set; |
399 | engine->gpio.irq_register = nv50_gpio_irq_register; | ||
400 | engine->gpio.irq_unregister = nv50_gpio_irq_unregister; | ||
399 | engine->gpio.irq_enable = nv50_gpio_irq_enable; | 401 | engine->gpio.irq_enable = nv50_gpio_irq_enable; |
400 | switch (dev_priv->chipset) { | 402 | switch (dev_priv->chipset) { |
401 | case 0x84: | 403 | case 0x84: |
@@ -487,6 +489,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) | |||
487 | engine->gpio.takedown = nouveau_stub_takedown; | 489 | engine->gpio.takedown = nouveau_stub_takedown; |
488 | engine->gpio.get = nv50_gpio_get; | 490 | engine->gpio.get = nv50_gpio_get; |
489 | engine->gpio.set = nv50_gpio_set; | 491 | engine->gpio.set = nv50_gpio_set; |
492 | engine->gpio.irq_register = nv50_gpio_irq_register; | ||
493 | engine->gpio.irq_unregister = nv50_gpio_irq_unregister; | ||
490 | engine->gpio.irq_enable = nv50_gpio_irq_enable; | 494 | engine->gpio.irq_enable = nv50_gpio_irq_enable; |
491 | engine->crypt.init = nouveau_stub_init; | 495 | engine->crypt.init = nouveau_stub_init; |
492 | engine->crypt.takedown = nouveau_stub_takedown; | 496 | engine->crypt.takedown = nouveau_stub_takedown; |