+1
drivers/dma/edma.c
+1
drivers/dma/edma.c
+5
-4
drivers/dma/sh/rcar-hpbdma.c
+5
-4
drivers/dma/sh/rcar-hpbdma.c
···
93
93
void __iomem *base;
94
94
const struct hpb_dmae_slave_config *cfg;
95
95
char dev_id[16]; /* unique name per DMAC of channel */
96
+
dma_addr_t slave_addr;
96
97
};
97
98
98
99
struct hpb_dmae_device {
···
433
432
hpb_chan->xfer_mode = XFER_DOUBLE;
434
433
} else {
435
434
dev_err(hpb_chan->shdma_chan.dev, "DCR setting error");
436
-
shdma_free_irq(&hpb_chan->shdma_chan);
437
435
return -EINVAL;
438
436
}
439
437
···
446
446
return 0;
447
447
}
448
448
449
-
static int hpb_dmae_set_slave(struct shdma_chan *schan, int slave_id, bool try)
449
+
static int hpb_dmae_set_slave(struct shdma_chan *schan, int slave_id,
450
+
dma_addr_t slave_addr, bool try)
450
451
{
451
452
struct hpb_dmae_chan *chan = to_chan(schan);
452
453
const struct hpb_dmae_slave_config *sc =
···
458
457
if (try)
459
458
return 0;
460
459
chan->cfg = sc;
460
+
chan->slave_addr = slave_addr ? : sc->addr;
461
461
return hpb_dmae_alloc_chan_resources(chan, sc);
462
462
}
463
463
···
470
468
{
471
469
struct hpb_dmae_chan *chan = to_chan(schan);
472
470
473
-
return chan->cfg->addr;
471
+
return chan->slave_addr;
474
472
}
475
473
476
474
static struct shdma_desc *hpb_dmae_embedded_desc(void *buf, int i)
···
616
614
shdma_for_each_chan(schan, &hpbdev->shdma_dev, i) {
617
615
BUG_ON(!schan);
618
616
619
-
shdma_free_irq(schan);
620
617
shdma_chan_remove(schan);
621
618
}
622
619
dma_dev->chancnt = 0;