diff options
author | Daniel Stone <daniel.stone@nokia.com> | 2009-09-22 19:46:57 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:50 -0400 |
commit | 4c88ef170f0f9b1f26923b43af526c973c5a74da (patch) | |
tree | 358d55e961ad7c4d20143c52e7ae511326ffd879 /drivers/video/omap/rfbi.c | |
parent | 48a00e7fe9a6abeedb62c99ca7b7860754aae3d8 (diff) |
omapfb: dispc: allow multiple external IRQ handlers
Previously, the only external (to dispc.c) IRQ handler was RFBI's frame
done handler. dispc's IRQ framework was very dumb: you could only have
one handler, and the semantics of {request,free}_irq were odd, to say the
least.
The new framework allows multiple consumers to register arbitrary IRQ
masks.
Signed-off-by: Daniel Stone <daniel.stone@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Imre Deak <imre.deak@nokia.com>
Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/omap/rfbi.c')
-rw-r--r-- | drivers/video/omap/rfbi.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/video/omap/rfbi.c b/drivers/video/omap/rfbi.c index 9332d6ca6456..ee01e84e19c1 100644 --- a/drivers/video/omap/rfbi.c +++ b/drivers/video/omap/rfbi.c | |||
@@ -57,6 +57,7 @@ | |||
57 | 57 | ||
58 | #define DISPC_BASE 0x48050400 | 58 | #define DISPC_BASE 0x48050400 |
59 | #define DISPC_CONTROL 0x0040 | 59 | #define DISPC_CONTROL 0x0040 |
60 | #define DISPC_IRQ_FRAMEMASK 0x0001 | ||
60 | 61 | ||
61 | static struct { | 62 | static struct { |
62 | void __iomem *base; | 63 | void __iomem *base; |
@@ -553,7 +554,9 @@ static int rfbi_init(struct omapfb_device *fbdev) | |||
553 | l = (0x01 << 2); | 554 | l = (0x01 << 2); |
554 | rfbi_write_reg(RFBI_CONTROL, l); | 555 | rfbi_write_reg(RFBI_CONTROL, l); |
555 | 556 | ||
556 | if ((r = omap_dispc_request_irq(rfbi_dma_callback, NULL)) < 0) { | 557 | r = omap_dispc_request_irq(DISPC_IRQ_FRAMEMASK, rfbi_dma_callback, |
558 | NULL); | ||
559 | if (r < 0) { | ||
557 | dev_err(fbdev->dev, "can't get DISPC irq\n"); | 560 | dev_err(fbdev->dev, "can't get DISPC irq\n"); |
558 | rfbi_enable_clocks(0); | 561 | rfbi_enable_clocks(0); |
559 | return r; | 562 | return r; |
@@ -570,7 +573,7 @@ static int rfbi_init(struct omapfb_device *fbdev) | |||
570 | 573 | ||
571 | static void rfbi_cleanup(void) | 574 | static void rfbi_cleanup(void) |
572 | { | 575 | { |
573 | omap_dispc_free_irq(); | 576 | omap_dispc_free_irq(DISPC_IRQ_FRAMEMASK, rfbi_dma_callback, NULL); |
574 | rfbi_put_clocks(); | 577 | rfbi_put_clocks(); |
575 | iounmap(rfbi.base); | 578 | iounmap(rfbi.base); |
576 | } | 579 | } |