diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2009-03-27 15:59:46 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-16 00:44:40 -0400 |
commit | 91e9c4fec7ee777213859aa1a18bf0b885527637 (patch) | |
tree | db35bc238f2fb6e81d453b23b6acd3f0ec239957 /drivers/usb/musb/davinci.c | |
parent | c9cd06b3d6ea825c62e277def929cc4315802b48 (diff) |
musb: split out CPPI interrupt handler
As DaVinci DM646x has a dedicated CPPI DMA interrupt, replace
cppi_completion() (which has always been kind of layering
violation) by a complete CPPI interrupt handler.
[ dbrownell@users.sourceforge.net: only cppi_dma.c needs platform
device header, not cppi_dma.h ]
Signed-off-by: Dmitry Krivoschekov <dkrivoschekov@ru.mvista.com>
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/musb/davinci.c')
-rw-r--r-- | drivers/usb/musb/davinci.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c index 898b52fcff5d..6e14e06ff820 100644 --- a/drivers/usb/musb/davinci.c +++ b/drivers/usb/musb/davinci.c | |||
@@ -265,6 +265,7 @@ static irqreturn_t davinci_interrupt(int irq, void *__hci) | |||
265 | irqreturn_t retval = IRQ_NONE; | 265 | irqreturn_t retval = IRQ_NONE; |
266 | struct musb *musb = __hci; | 266 | struct musb *musb = __hci; |
267 | void __iomem *tibase = musb->ctrl_base; | 267 | void __iomem *tibase = musb->ctrl_base; |
268 | struct cppi *cppi; | ||
268 | u32 tmp; | 269 | u32 tmp; |
269 | 270 | ||
270 | spin_lock_irqsave(&musb->lock, flags); | 271 | spin_lock_irqsave(&musb->lock, flags); |
@@ -281,16 +282,9 @@ static irqreturn_t davinci_interrupt(int irq, void *__hci) | |||
281 | /* CPPI interrupts share the same IRQ line, but have their own | 282 | /* CPPI interrupts share the same IRQ line, but have their own |
282 | * mask, state, "vector", and EOI registers. | 283 | * mask, state, "vector", and EOI registers. |
283 | */ | 284 | */ |
284 | if (is_cppi_enabled()) { | 285 | cppi = container_of(musb->dma_controller, struct cppi, controller); |
285 | u32 cppi_tx = musb_readl(tibase, DAVINCI_TXCPPI_MASKED_REG); | 286 | if (is_cppi_enabled() && musb->dma_controller && !cppi->irq) |
286 | u32 cppi_rx = musb_readl(tibase, DAVINCI_RXCPPI_MASKED_REG); | 287 | retval = cppi_interrupt(irq, __hci); |
287 | |||
288 | if (cppi_tx || cppi_rx) { | ||
289 | DBG(4, "CPPI IRQ t%x r%x\n", cppi_tx, cppi_rx); | ||
290 | cppi_completion(musb, cppi_rx, cppi_tx); | ||
291 | retval = IRQ_HANDLED; | ||
292 | } | ||
293 | } | ||
294 | 288 | ||
295 | /* ack and handle non-CPPI interrupts */ | 289 | /* ack and handle non-CPPI interrupts */ |
296 | tmp = musb_readl(tibase, DAVINCI_USB_INT_SRC_MASKED_REG); | 290 | tmp = musb_readl(tibase, DAVINCI_USB_INT_SRC_MASKED_REG); |