| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- From acd937ac924aefd22ea9a66ea621ab80a4f9b594 Mon Sep 17 00:00:00 2001
- From: Kurt Mahan <[email protected]>
- Date: Mon, 10 Dec 2007 03:37:19 -0700
- Subject: [PATCH] Update EDMA driver to allow callback/arg changes.
- LTIBName: m5445x-edma-callback
- Signed-off-by: Kurt Mahan <[email protected]>
- ---
- drivers/spi/coldfire_edma.c | 27 +++++++++++++++++++++++++++
- include/asm-m68k/coldfire_edma.h | 20 ++++++++++++++++++++
- 2 files changed, 47 insertions(+), 0 deletions(-)
- --- a/drivers/spi/coldfire_edma.c
- +++ b/drivers/spi/coldfire_edma.c
- @@ -206,6 +206,31 @@ int request_edma_channel(int channel,
- EXPORT_SYMBOL(request_edma_channel);
-
- /**
- + * set_edma_callback - Update the channel callback/arg
- + * @channel: channel number
- + * @handler: dma handler
- + * @error_handler: dma error handler
- + * @arg: argument to pass back
- + *
- + * Returns 0 if success or a negative value if failure
- + */
- +int set_edma_callback(int channel,
- + edma_irq_handler handler,
- + edma_error_handler error_handler,
- + void *arg )
- +{
- + if (devp!=NULL && channel>=0 && channel<=EDMA_CHANNELS &&
- + devp->dma_interrupt_handlers[channel].allocated) {
- + devp->dma_interrupt_handlers[channel].irq_handler = handler;
- + devp->dma_interrupt_handlers[channel].error_handler = error_handler;
- + devp->dma_interrupt_handlers[channel].arg = arg;
- + return 0;
- + }
- + return -EINVAL;
- +}
- +EXPORT_SYMBOL(set_edma_callback);
- +
- +/**
- * free_edma_channel - Free the edma channel
- * @channel: channel number
- * @arg: argument created with
- @@ -216,8 +241,10 @@ int free_edma_channel(int channel, void
- {
- if (devp!=NULL && channel>=0 && channel<=EDMA_CHANNELS) {
- if (devp->dma_interrupt_handlers[channel].allocated) {
- +#if 0
- if (devp->dma_interrupt_handlers[channel].arg != arg)
- return -EBUSY;
- +#endif
-
- devp->dma_interrupt_handlers[channel].allocated = 0;
- devp->dma_interrupt_handlers[channel].arg = NULL;
- --- a/include/asm-m68k/coldfire_edma.h
- +++ b/include/asm-m68k/coldfire_edma.h
- @@ -96,10 +96,30 @@ int request_edma_channel(int channel,
- void *dev,
- spinlock_t *lock,
- const char *device_id);
- +
- +/**
- + * set_edma_callback - Update the channel callback/arg
- + * @channel: channel number
- + * @handler: dma handler
- + * @error_handler: dma error handler
- + * @arg: argument to pass back
- + *
- + * Returns 0 if success or a negative value if failure
- + */
- +int set_edma_callback(int channel,
- + edma_irq_handler handler,
- + edma_error_handler error_handler,
- + void *arg);
-
- /* Free eDMA channel
- * channel - eDMA TCD number
- * dev - device
- */
- int free_edma_channel(int channel, void *dev);
- +
- +/*
- + * DMA Modes
- + */
- +#define DMA_MODE_READ 0
- +#define DMA_MODE_WRITE 1
- #endif
|