forked from mirrors/linux
		
	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:
		
							parent
							
								
									9fdca9dfe0
								
							
						
					
					
						commit
						1a77b127ae
					
				
					 1 changed files with 4 additions and 20 deletions
				
			
		|  | @ -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) | ||||||
| 		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) | ||||||
| 	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) | ||||||
| 			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) | ||||||
| 	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) | ||||||
| 	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) | ||||||
| 
 | 
 | ||||||
| 	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); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Shubhrajyoti D
						Shubhrajyoti D