diff options
author | Maxime Ripard <maxime.ripard@free-electrons.com> | 2014-11-17 08:42:08 -0500 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-12-22 01:58:57 -0500 |
commit | 39159bea78ed0565bfffb7100b396a56625f1d00 (patch) | |
tree | a941d7897bb22488fc8419cd31dce70eb028a4ac /drivers/dma/bcm2835-dma.c | |
parent | 3d138877e8547e472863d975488bbf80f5a7be6c (diff) |
dmaengine: bcm2835: Split device_control
Split the device_control callback of the Broadcom BCM2835 DMA driver to make
use of the newly introduced callbacks, that will eventually be used to retrieve
slave capabilities.
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/bcm2835-dma.c')
-rw-r--r-- | drivers/dma/bcm2835-dma.c | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c index 3feba6c25836..13b05c1673b1 100644 --- a/drivers/dma/bcm2835-dma.c +++ b/drivers/dma/bcm2835-dma.c | |||
@@ -436,9 +436,11 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic( | |||
436 | return vchan_tx_prep(&c->vc, &d->vd, flags); | 436 | return vchan_tx_prep(&c->vc, &d->vd, flags); |
437 | } | 437 | } |
438 | 438 | ||
439 | static int bcm2835_dma_slave_config(struct bcm2835_chan *c, | 439 | static int bcm2835_dma_slave_config(struct dma_chan *chan, |
440 | struct dma_slave_config *cfg) | 440 | struct dma_slave_config *cfg) |
441 | { | 441 | { |
442 | struct bcm2835_chan *c = to_bcm2835_dma_chan(chan); | ||
443 | |||
442 | if ((cfg->direction == DMA_DEV_TO_MEM && | 444 | if ((cfg->direction == DMA_DEV_TO_MEM && |
443 | cfg->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || | 445 | cfg->src_addr_width != DMA_SLAVE_BUSWIDTH_4_BYTES) || |
444 | (cfg->direction == DMA_MEM_TO_DEV && | 446 | (cfg->direction == DMA_MEM_TO_DEV && |
@@ -452,8 +454,9 @@ static int bcm2835_dma_slave_config(struct bcm2835_chan *c, | |||
452 | return 0; | 454 | return 0; |
453 | } | 455 | } |
454 | 456 | ||
455 | static int bcm2835_dma_terminate_all(struct bcm2835_chan *c) | 457 | static int bcm2835_dma_terminate_all(struct dma_chan *chan) |
456 | { | 458 | { |
459 | struct bcm2835_chan *c = to_bcm2835_dma_chan(chan); | ||
457 | struct bcm2835_dmadev *d = to_bcm2835_dma_dev(c->vc.chan.device); | 460 | struct bcm2835_dmadev *d = to_bcm2835_dma_dev(c->vc.chan.device); |
458 | unsigned long flags; | 461 | unsigned long flags; |
459 | int timeout = 10000; | 462 | int timeout = 10000; |
@@ -495,24 +498,6 @@ static int bcm2835_dma_terminate_all(struct bcm2835_chan *c) | |||
495 | return 0; | 498 | return 0; |
496 | } | 499 | } |
497 | 500 | ||
498 | static int bcm2835_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, | ||
499 | unsigned long arg) | ||
500 | { | ||
501 | struct bcm2835_chan *c = to_bcm2835_dma_chan(chan); | ||
502 | |||
503 | switch (cmd) { | ||
504 | case DMA_SLAVE_CONFIG: | ||
505 | return bcm2835_dma_slave_config(c, | ||
506 | (struct dma_slave_config *)arg); | ||
507 | |||
508 | case DMA_TERMINATE_ALL: | ||
509 | return bcm2835_dma_terminate_all(c); | ||
510 | |||
511 | default: | ||
512 | return -ENXIO; | ||
513 | } | ||
514 | } | ||
515 | |||
516 | static int bcm2835_dma_chan_init(struct bcm2835_dmadev *d, int chan_id, int irq) | 501 | static int bcm2835_dma_chan_init(struct bcm2835_dmadev *d, int chan_id, int irq) |
517 | { | 502 | { |
518 | struct bcm2835_chan *c; | 503 | struct bcm2835_chan *c; |
@@ -615,9 +600,9 @@ static int bcm2835_dma_probe(struct platform_device *pdev) | |||
615 | od->ddev.device_free_chan_resources = bcm2835_dma_free_chan_resources; | 600 | od->ddev.device_free_chan_resources = bcm2835_dma_free_chan_resources; |
616 | od->ddev.device_tx_status = bcm2835_dma_tx_status; | 601 | od->ddev.device_tx_status = bcm2835_dma_tx_status; |
617 | od->ddev.device_issue_pending = bcm2835_dma_issue_pending; | 602 | od->ddev.device_issue_pending = bcm2835_dma_issue_pending; |
618 | od->ddev.device_slave_caps = bcm2835_dma_device_slave_caps; | ||
619 | od->ddev.device_prep_dma_cyclic = bcm2835_dma_prep_dma_cyclic; | 603 | od->ddev.device_prep_dma_cyclic = bcm2835_dma_prep_dma_cyclic; |
620 | od->ddev.device_control = bcm2835_dma_control; | 604 | od->ddev.device_config = bcm2835_dma_slave_config; |
605 | od->ddev.device_terminate_all = bcm2835_dma_terminate_all; | ||
621 | od->ddev.dev = &pdev->dev; | 606 | od->ddev.dev = &pdev->dev; |
622 | INIT_LIST_HEAD(&od->ddev.channels); | 607 | INIT_LIST_HEAD(&od->ddev.channels); |
623 | spin_lock_init(&od->lock); | 608 | spin_lock_init(&od->lock); |