/**
* struct dma_controller - A DMA Controller.
- * @private_data: controller-private data;
* @start: call this to start a DMA controller;
* return 0 on success, else negative errno
* @stop: call this to stop a DMA controller
* Controllers manage dma channels.
*/
struct dma_controller {
- void *private_data;
int (*start)(struct dma_controller *);
int (*stop)(struct dma_controller *);
struct dma_channel *(*channel_alloc)(struct dma_controller *,
pImplChannel->Channel.status =
MUSB_DMA_STATUS_BUS_ABORT;
else {
+ u8 devctl;
+
dwAddress = musb_readl(mbase,
MUSB_HSDMA_CHANNEL_OFFSET(
bChannel,
< pImplChannel->len) ?
"=> reconfig 0": "=> complete");
- u8 devctl = musb_readb(mbase,
- MUSB_DEVCTL);
+ devctl = musb_readb(mbase, MUSB_DEVCTL);
pChannel->status = MUSB_DMA_STATUS_FREE;
void dma_controller_destroy(struct dma_controller *c)
{
- struct musb_dma_controller *controller =
- (struct musb_dma_controller *) c->private_data;
+ struct musb_dma_controller *controller;
+ controller = container_of(c, struct musb_dma_controller, Controller);
if (!controller)
return;
free_irq(controller->irq, c);
kfree(controller);
- c->private_data = NULL;
}
struct dma_controller *__init
controller->pDmaPrivate = musb;
controller->pCoreBase = pCoreBase;
- controller->Controller.private_data = controller;
controller->Controller.start = dma_controller_start;
controller->Controller.stop = dma_controller_stop;
controller->Controller.channel_alloc = dma_channel_allocate;
tusb_dma->controller.channel_release = tusb_omap_dma_release;
tusb_dma->controller.channel_program = tusb_omap_dma_program;
tusb_dma->controller.channel_abort = tusb_omap_dma_abort;
- tusb_dma->controller.private_data = tusb_dma;
if (tusb_get_revision(musb) >= TUSB_REV_30)
tusb_dma->multichannel = 1;