summaryrefslogtreecommitdiffstats
path: root/drivers/parport
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-12-21 08:07:11 -0500
committerChristoph Hellwig <hch@lst.de>2019-04-08 11:52:24 -0400
commit4217efa353c6754005bf5198001a79fed751fe76 (patch)
tree1c6708bf6b1f00557da367f98a5862d0eea3b7e4 /drivers/parport
parentc13edf8106f6ad1edb9b7e011351fbaf83ceb992 (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.c18
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 */
578static int parport_ip32_dma_start(enum dma_data_direction dir, 579static 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 */
632static void parport_ip32_dma_stop(void) 634static 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;