Skip to content

Commit dbde5c2

Browse files
andy-shevVinod Koul
authored andcommitted
dw_dmac: use devm_* functions to simplify code
Use devm_kzalloc, devm_clk_get, devm_request_irq, and devm_request_and_ioremap to reduce the code and to simplify the error path. Signed-off-by: Andy Shevchenko <[email protected]> Cc: Viresh Kumar <[email protected]> Acked-by: Viresh Kumar <[email protected]> Signed-off-by: Vinod Koul <[email protected]>
1 parent 6343325 commit dbde5c2

2 files changed

Lines changed: 10 additions & 45 deletions

File tree

drivers/dma/dw_dmac.c

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,26 +1392,17 @@ static int __devinit dw_probe(struct platform_device *pdev)
13921392

13931393
size = sizeof(struct dw_dma);
13941394
size += pdata->nr_channels * sizeof(struct dw_dma_chan);
1395-
dw = kzalloc(size, GFP_KERNEL);
1395+
dw = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
13961396
if (!dw)
13971397
return -ENOMEM;
13981398

1399-
if (!request_mem_region(io->start, DW_REGLEN, pdev->dev.driver->name)) {
1400-
err = -EBUSY;
1401-
goto err_kfree;
1402-
}
1403-
1404-
dw->regs = ioremap(io->start, DW_REGLEN);
1405-
if (!dw->regs) {
1406-
err = -ENOMEM;
1407-
goto err_release_r;
1408-
}
1399+
dw->regs = devm_request_and_ioremap(&pdev->dev, io);
1400+
if (!dw->regs)
1401+
return -EBUSY;
14091402

1410-
dw->clk = clk_get(&pdev->dev, "hclk");
1411-
if (IS_ERR(dw->clk)) {
1412-
err = PTR_ERR(dw->clk);
1413-
goto err_clk;
1414-
}
1403+
dw->clk = devm_clk_get(&pdev->dev, "hclk");
1404+
if (IS_ERR(dw->clk))
1405+
return PTR_ERR(dw->clk);
14151406
clk_prepare_enable(dw->clk);
14161407

14171408
/* Calculate all channel mask before DMA setup */
@@ -1423,9 +1414,10 @@ static int __devinit dw_probe(struct platform_device *pdev)
14231414
/* disable BLOCK interrupts as well */
14241415
channel_clear_bit(dw, MASK.BLOCK, dw->all_chan_mask);
14251416

1426-
err = request_irq(irq, dw_dma_interrupt, 0, "dw_dmac", dw);
1417+
err = devm_request_irq(&pdev->dev, irq, dw_dma_interrupt, 0,
1418+
"dw_dmac", dw);
14271419
if (err)
1428-
goto err_irq;
1420+
return err;
14291421

14301422
platform_set_drvdata(pdev, dw);
14311423

@@ -1491,30 +1483,16 @@ static int __devinit dw_probe(struct platform_device *pdev)
14911483
dma_async_device_register(&dw->dma);
14921484

14931485
return 0;
1494-
1495-
err_irq:
1496-
clk_disable_unprepare(dw->clk);
1497-
clk_put(dw->clk);
1498-
err_clk:
1499-
iounmap(dw->regs);
1500-
dw->regs = NULL;
1501-
err_release_r:
1502-
release_resource(io);
1503-
err_kfree:
1504-
kfree(dw);
1505-
return err;
15061486
}
15071487

15081488
static int __devexit dw_remove(struct platform_device *pdev)
15091489
{
15101490
struct dw_dma *dw = platform_get_drvdata(pdev);
15111491
struct dw_dma_chan *dwc, *_dwc;
1512-
struct resource *io;
15131492

15141493
dw_dma_off(dw);
15151494
dma_async_device_unregister(&dw->dma);
15161495

1517-
free_irq(platform_get_irq(pdev, 0), dw);
15181496
tasklet_kill(&dw->tasklet);
15191497

15201498
list_for_each_entry_safe(dwc, _dwc, &dw->dma.channels,
@@ -1523,17 +1501,6 @@ static int __devexit dw_remove(struct platform_device *pdev)
15231501
channel_clear_bit(dw, CH_EN, dwc->mask);
15241502
}
15251503

1526-
clk_disable_unprepare(dw->clk);
1527-
clk_put(dw->clk);
1528-
1529-
iounmap(dw->regs);
1530-
dw->regs = NULL;
1531-
1532-
io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1533-
release_mem_region(io->start, DW_REGLEN);
1534-
1535-
kfree(dw);
1536-
15371504
return 0;
15381505
}
15391506

drivers/dma/dw_dmac_regs.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,6 @@ struct dw_dma_regs {
140140
/* Bitfields in CFG */
141141
#define DW_CFG_DMA_EN (1 << 0)
142142

143-
#define DW_REGLEN 0x400
144-
145143
enum dw_dmac_flags {
146144
DW_DMA_IS_CYCLIC = 0,
147145
};

0 commit comments

Comments
 (0)