Commit 1a77b127 authored by Shubhrajyoti D's avatar Shubhrajyoti D

OMAP : SPI : use devm_* functions

The various devm_* functions allocate memory that is released when a driver
detaches. This patch uses devm_request_and_ioremap
to request memory in probe function. Since the freeing is not
needed the calls are deleted from remove function.Also use
use devm_kzalloc for the cs memory allocation.
Signed-off-by: default avatarShubhrajyoti D <shubhrajyoti@ti.com>
parent 9fdca9df
...@@ -789,7 +789,7 @@ static int omap2_mcspi_setup(struct spi_device *spi) ...@@ -789,7 +789,7 @@ static int omap2_mcspi_setup(struct spi_device *spi)
mcspi_dma = &mcspi->dma_channels[spi->chip_select]; mcspi_dma = &mcspi->dma_channels[spi->chip_select];
if (!cs) { if (!cs) {
cs = kzalloc(sizeof *cs, GFP_KERNEL); cs = devm_kzalloc(&spi->dev , sizeof *cs, GFP_KERNEL);
if (!cs) if (!cs)
return -ENOMEM; return -ENOMEM;
cs->base = mcspi->base + spi->chip_select * 0x14; cs->base = mcspi->base + spi->chip_select * 0x14;
...@@ -831,7 +831,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi) ...@@ -831,7 +831,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
cs = spi->controller_state; cs = spi->controller_state;
list_del(&cs->node); list_del(&cs->node);
kfree(spi->controller_state);
} }
if (spi->chip_select < spi->master->num_chipselect) { if (spi->chip_select < spi->master->num_chipselect) {
...@@ -1127,17 +1126,12 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1127,17 +1126,12 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
r->start += pdata->regs_offset; r->start += pdata->regs_offset;
r->end += pdata->regs_offset; r->end += pdata->regs_offset;
mcspi->phys = r->start; mcspi->phys = r->start;
if (!request_mem_region(r->start, resource_size(r),
dev_name(&pdev->dev))) {
status = -EBUSY;
goto free_master;
}
mcspi->base = ioremap(r->start, resource_size(r)); mcspi->base = devm_request_and_ioremap(&pdev->dev, r);
if (!mcspi->base) { if (!mcspi->base) {
dev_dbg(&pdev->dev, "can't ioremap MCSPI\n"); dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
status = -ENOMEM; status = -ENOMEM;
goto release_region; goto free_master;
} }
mcspi->dev = &pdev->dev; mcspi->dev = &pdev->dev;
...@@ -1152,7 +1146,7 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1152,7 +1146,7 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
GFP_KERNEL); GFP_KERNEL);
if (mcspi->dma_channels == NULL) if (mcspi->dma_channels == NULL)
goto unmap_io; goto free_master;
for (i = 0; i < master->num_chipselect; i++) { for (i = 0; i < master->num_chipselect; i++) {
char dma_ch_name[14]; char dma_ch_name[14];
...@@ -1202,10 +1196,6 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1202,10 +1196,6 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
dma_chnl_free: dma_chnl_free:
kfree(mcspi->dma_channels); kfree(mcspi->dma_channels);
unmap_io:
iounmap(mcspi->base);
release_region:
release_mem_region(r->start, resource_size(r));
free_master: free_master:
kfree(master); kfree(master);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
...@@ -1217,8 +1207,6 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev) ...@@ -1217,8 +1207,6 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev)
struct spi_master *master; struct spi_master *master;
struct omap2_mcspi *mcspi; struct omap2_mcspi *mcspi;
struct omap2_mcspi_dma *dma_channels; struct omap2_mcspi_dma *dma_channels;
struct resource *r;
void __iomem *base;
master = dev_get_drvdata(&pdev->dev); master = dev_get_drvdata(&pdev->dev);
mcspi = spi_master_get_devdata(master); mcspi = spi_master_get_devdata(master);
...@@ -1226,12 +1214,8 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev) ...@@ -1226,12 +1214,8 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev)
omap2_mcspi_disable_clocks(mcspi); omap2_mcspi_disable_clocks(mcspi);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, resource_size(r));
base = mcspi->base;
spi_unregister_master(master); spi_unregister_master(master);
iounmap(base);
kfree(dma_channels); kfree(dma_channels);
destroy_workqueue(mcspi->wq); destroy_workqueue(mcspi->wq);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment