aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/hsu/hsu.c
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2015-10-13 06:29:05 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-10-18 00:22:08 -0400
commit4c97ad993d763904fc1c9e0bdc3a6dba062802a2 (patch)
tree65019ab05cba45b85a4c523ecb2b6d581069cf01 /drivers/dma/hsu/hsu.c
parent47f82f1adf701b31d1816bf45118f8e83c02588e (diff)
dmaengine: hsu: remove platform data
There are no platforms where it's not possible to calculate the number of channels based on IO space length, and since that is the only purpose for struct hsu_dma_platform_data, removing it. Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/dma/hsu/hsu.c')
-rw-r--r--drivers/dma/hsu/hsu.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/drivers/dma/hsu/hsu.c b/drivers/dma/hsu/hsu.c
index 7669c7dd1e34..823ad728aecf 100644
--- a/drivers/dma/hsu/hsu.c
+++ b/drivers/dma/hsu/hsu.c
@@ -146,7 +146,7 @@ irqreturn_t hsu_dma_irq(struct hsu_dma_chip *chip, unsigned short nr)
146 u32 sr; 146 u32 sr;
147 147
148 /* Sanity check */ 148 /* Sanity check */
149 if (nr >= chip->pdata->nr_channels) 149 if (nr >= chip->hsu->nr_channels)
150 return IRQ_NONE; 150 return IRQ_NONE;
151 151
152 hsuc = &chip->hsu->chan[nr]; 152 hsuc = &chip->hsu->chan[nr];
@@ -375,7 +375,6 @@ static void hsu_dma_free_chan_resources(struct dma_chan *chan)
375int hsu_dma_probe(struct hsu_dma_chip *chip) 375int hsu_dma_probe(struct hsu_dma_chip *chip)
376{ 376{
377 struct hsu_dma *hsu; 377 struct hsu_dma *hsu;
378 struct hsu_dma_platform_data *pdata = chip->pdata;
379 void __iomem *addr = chip->regs + chip->offset; 378 void __iomem *addr = chip->regs + chip->offset;
380 unsigned short i; 379 unsigned short i;
381 int ret; 380 int ret;
@@ -386,25 +385,16 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
386 385
387 chip->hsu = hsu; 386 chip->hsu = hsu;
388 387
389 if (!pdata) { 388 /* Calculate nr_channels from the IO space length */
390 pdata = devm_kzalloc(chip->dev, sizeof(*pdata), GFP_KERNEL); 389 hsu->nr_channels = (chip->length - chip->offset) / HSU_DMA_CHAN_LENGTH;
391 if (!pdata)
392 return -ENOMEM;
393 390
394 chip->pdata = pdata; 391 hsu->chan = devm_kcalloc(chip->dev, hsu->nr_channels,
395
396 /* Guess nr_channels from the IO space length */
397 pdata->nr_channels = (chip->length - chip->offset) /
398 HSU_DMA_CHAN_LENGTH;
399 }
400
401 hsu->chan = devm_kcalloc(chip->dev, pdata->nr_channels,
402 sizeof(*hsu->chan), GFP_KERNEL); 392 sizeof(*hsu->chan), GFP_KERNEL);
403 if (!hsu->chan) 393 if (!hsu->chan)
404 return -ENOMEM; 394 return -ENOMEM;
405 395
406 INIT_LIST_HEAD(&hsu->dma.channels); 396 INIT_LIST_HEAD(&hsu->dma.channels);
407 for (i = 0; i < pdata->nr_channels; i++) { 397 for (i = 0; i < hsu->nr_channels; i++) {
408 struct hsu_dma_chan *hsuc = &hsu->chan[i]; 398 struct hsu_dma_chan *hsuc = &hsu->chan[i];
409 399
410 hsuc->vchan.desc_free = hsu_dma_desc_free; 400 hsuc->vchan.desc_free = hsu_dma_desc_free;
@@ -440,7 +430,7 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
440 if (ret) 430 if (ret)
441 return ret; 431 return ret;
442 432
443 dev_info(chip->dev, "Found HSU DMA, %d channels\n", pdata->nr_channels); 433 dev_info(chip->dev, "Found HSU DMA, %d channels\n", hsu->nr_channels);
444 return 0; 434 return 0;
445} 435}
446EXPORT_SYMBOL_GPL(hsu_dma_probe); 436EXPORT_SYMBOL_GPL(hsu_dma_probe);
@@ -452,7 +442,7 @@ int hsu_dma_remove(struct hsu_dma_chip *chip)
452 442
453 dma_async_device_unregister(&hsu->dma); 443 dma_async_device_unregister(&hsu->dma);
454 444
455 for (i = 0; i < chip->pdata->nr_channels; i++) { 445 for (i = 0; i < hsu->nr_channels; i++) {
456 struct hsu_dma_chan *hsuc = &hsu->chan[i]; 446 struct hsu_dma_chan *hsuc = &hsu->chan[i];
457 447
458 tasklet_kill(&hsuc->vchan.task); 448 tasklet_kill(&hsuc->vchan.task);