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: Shubhrajyoti D <shubhrajyoti@ti.com>
This commit is contained in:
Родитель
9fdca9dfe0
Коммит
1a77b127ae
|
@ -789,7 +789,7 @@ static int omap2_mcspi_setup(struct spi_device *spi)
|
|||
mcspi_dma = &mcspi->dma_channels[spi->chip_select];
|
||||
|
||||
if (!cs) {
|
||||
cs = kzalloc(sizeof *cs, GFP_KERNEL);
|
||||
cs = devm_kzalloc(&spi->dev , sizeof *cs, GFP_KERNEL);
|
||||
if (!cs)
|
||||
return -ENOMEM;
|
||||
cs->base = mcspi->base + spi->chip_select * 0x14;
|
||||
|
@ -831,7 +831,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
|
|||
cs = spi->controller_state;
|
||||
list_del(&cs->node);
|
||||
|
||||
kfree(spi->controller_state);
|
||||
}
|
||||
|
||||
if (spi->chip_select < spi->master->num_chipselect) {
|
||||
|
@ -1127,17 +1126,12 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
|
|||
r->start += pdata->regs_offset;
|
||||
r->end += pdata->regs_offset;
|
||||
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) {
|
||||
dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
|
||||
status = -ENOMEM;
|
||||
goto release_region;
|
||||
goto free_master;
|
||||
}
|
||||
|
||||
mcspi->dev = &pdev->dev;
|
||||
|
@ -1152,7 +1146,7 @@ static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
|
|||
GFP_KERNEL);
|
||||
|
||||
if (mcspi->dma_channels == NULL)
|
||||
goto unmap_io;
|
||||
goto free_master;
|
||||
|
||||
for (i = 0; i < master->num_chipselect; i++) {
|
||||
char dma_ch_name[14];
|
||||
|
@ -1202,10 +1196,6 @@ disable_pm:
|
|||
pm_runtime_disable(&pdev->dev);
|
||||
dma_chnl_free:
|
||||
kfree(mcspi->dma_channels);
|
||||
unmap_io:
|
||||
iounmap(mcspi->base);
|
||||
release_region:
|
||||
release_mem_region(r->start, resource_size(r));
|
||||
free_master:
|
||||
kfree(master);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
@ -1217,8 +1207,6 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev)
|
|||
struct spi_master *master;
|
||||
struct omap2_mcspi *mcspi;
|
||||
struct omap2_mcspi_dma *dma_channels;
|
||||
struct resource *r;
|
||||
void __iomem *base;
|
||||
|
||||
master = dev_get_drvdata(&pdev->dev);
|
||||
mcspi = spi_master_get_devdata(master);
|
||||
|
@ -1226,12 +1214,8 @@ static int __devexit omap2_mcspi_remove(struct platform_device *pdev)
|
|||
|
||||
omap2_mcspi_disable_clocks(mcspi);
|
||||
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);
|
||||
iounmap(base);
|
||||
kfree(dma_channels);
|
||||
destroy_workqueue(mcspi->wq);
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
|
Загрузка…
Ссылка в новой задаче