diff options
author | Christoph Hellwig <hch@lst.de> | 2018-12-21 08:07:11 -0500 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2019-04-08 11:52:24 -0400 |
commit | 4217efa353c6754005bf5198001a79fed751fe76 (patch) | |
tree | 1c6708bf6b1f00557da367f98a5862d0eea3b7e4 /drivers/parport | |
parent | c13edf8106f6ad1edb9b7e011351fbaf83ceb992 (diff) |
parport_ip32: pass struct device to DMA API functions
The DMA API generally relies on a struct device to work properly, and
only barely works without one for legacy reasons. Pass the easily
available struct device from the platform_device to remedy this.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/parport')
-rw-r--r-- | drivers/parport/parport_ip32.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/parport/parport_ip32.c b/drivers/parport/parport_ip32.c index 62873070f988..b7a892791c3e 100644 --- a/drivers/parport/parport_ip32.c +++ b/drivers/parport/parport_ip32.c | |||
@@ -568,6 +568,7 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id) | |||
568 | 568 | ||
569 | /** | 569 | /** |
570 | * parport_ip32_dma_start - begins a DMA transfer | 570 | * parport_ip32_dma_start - begins a DMA transfer |
571 | * @p: partport to work on | ||
571 | * @dir: DMA direction: DMA_TO_DEVICE or DMA_FROM_DEVICE | 572 | * @dir: DMA direction: DMA_TO_DEVICE or DMA_FROM_DEVICE |
572 | * @addr: pointer to data buffer | 573 | * @addr: pointer to data buffer |
573 | * @count: buffer size | 574 | * @count: buffer size |
@@ -575,8 +576,8 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id) | |||
575 | * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be | 576 | * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be |
576 | * correctly balanced. | 577 | * correctly balanced. |
577 | */ | 578 | */ |
578 | static int parport_ip32_dma_start(enum dma_data_direction dir, | 579 | static int parport_ip32_dma_start(struct parport *p, |
579 | void *addr, size_t count) | 580 | enum dma_data_direction dir, void *addr, size_t count) |
580 | { | 581 | { |
581 | unsigned int limit; | 582 | unsigned int limit; |
582 | u64 ctrl; | 583 | u64 ctrl; |
@@ -601,7 +602,7 @@ static int parport_ip32_dma_start(enum dma_data_direction dir, | |||
601 | 602 | ||
602 | /* Prepare DMA pointers */ | 603 | /* Prepare DMA pointers */ |
603 | parport_ip32_dma.dir = dir; | 604 | parport_ip32_dma.dir = dir; |
604 | parport_ip32_dma.buf = dma_map_single(NULL, addr, count, dir); | 605 | parport_ip32_dma.buf = dma_map_single(&p->bus_dev, addr, count, dir); |
605 | parport_ip32_dma.len = count; | 606 | parport_ip32_dma.len = count; |
606 | parport_ip32_dma.next = parport_ip32_dma.buf; | 607 | parport_ip32_dma.next = parport_ip32_dma.buf; |
607 | parport_ip32_dma.left = parport_ip32_dma.len; | 608 | parport_ip32_dma.left = parport_ip32_dma.len; |
@@ -625,11 +626,12 @@ static int parport_ip32_dma_start(enum dma_data_direction dir, | |||
625 | 626 | ||
626 | /** | 627 | /** |
627 | * parport_ip32_dma_stop - ends a running DMA transfer | 628 | * parport_ip32_dma_stop - ends a running DMA transfer |
629 | * @p: partport to work on | ||
628 | * | 630 | * |
629 | * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be | 631 | * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be |
630 | * correctly balanced. | 632 | * correctly balanced. |
631 | */ | 633 | */ |
632 | static void parport_ip32_dma_stop(void) | 634 | static void parport_ip32_dma_stop(struct parport *p) |
633 | { | 635 | { |
634 | u64 ctx_a; | 636 | u64 ctx_a; |
635 | u64 ctx_b; | 637 | u64 ctx_b; |
@@ -685,8 +687,8 @@ static void parport_ip32_dma_stop(void) | |||
685 | enable_irq(MACEISA_PAR_CTXB_IRQ); | 687 | enable_irq(MACEISA_PAR_CTXB_IRQ); |
686 | parport_ip32_dma.irq_on = 1; | 688 | parport_ip32_dma.irq_on = 1; |
687 | 689 | ||
688 | dma_unmap_single(NULL, parport_ip32_dma.buf, parport_ip32_dma.len, | 690 | dma_unmap_single(&p->bus_dev, parport_ip32_dma.buf, |
689 | parport_ip32_dma.dir); | 691 | parport_ip32_dma.len, parport_ip32_dma.dir); |
690 | } | 692 | } |
691 | 693 | ||
692 | /** | 694 | /** |
@@ -1445,7 +1447,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p, | |||
1445 | 1447 | ||
1446 | priv->irq_mode = PARPORT_IP32_IRQ_HERE; | 1448 | priv->irq_mode = PARPORT_IP32_IRQ_HERE; |
1447 | 1449 | ||
1448 | parport_ip32_dma_start(DMA_TO_DEVICE, (void *)buf, len); | 1450 | parport_ip32_dma_start(p, DMA_TO_DEVICE, (void *)buf, len); |
1449 | reinit_completion(&priv->irq_complete); | 1451 | reinit_completion(&priv->irq_complete); |
1450 | parport_ip32_frob_econtrol(p, ECR_DMAEN | ECR_SERVINTR, ECR_DMAEN); | 1452 | parport_ip32_frob_econtrol(p, ECR_DMAEN | ECR_SERVINTR, ECR_DMAEN); |
1451 | 1453 | ||
@@ -1461,7 +1463,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p, | |||
1461 | if (ecr & ECR_SERVINTR) | 1463 | if (ecr & ECR_SERVINTR) |
1462 | break; /* DMA transfer just finished */ | 1464 | break; /* DMA transfer just finished */ |
1463 | } | 1465 | } |
1464 | parport_ip32_dma_stop(); | 1466 | parport_ip32_dma_stop(p); |
1465 | written = len - parport_ip32_dma_get_residue(); | 1467 | written = len - parport_ip32_dma_get_residue(); |
1466 | 1468 | ||
1467 | priv->irq_mode = PARPORT_IP32_IRQ_FWD; | 1469 | priv->irq_mode = PARPORT_IP32_IRQ_FWD; |