From 123f87758658285f5f844d7e8a8b974ce88d1ffc Mon Sep 17 00:00:00 2001 From: Sachin Kamat Date: Tue, 14 May 2013 21:34:13 +0530 Subject: [SCSI] ufs: Remove redundant platform_set_drvdata() Commit 0998d06310 (device-core: Ensure drvdata = NULL when no driver is bound) removes the need to set driver data field to NULL. Signed-off-by: Sachin Kamat Signed-off-by: Santosh Y Signed-off-by: James Bottomley --- drivers/scsi/ufs/ufshcd-pltfrm.c | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/scsi/ufs/ufshcd-pltfrm.c') diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 03319acd9c72..3db2ee1a38bd 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -184,7 +184,6 @@ static int ufshcd_pltfrm_remove(struct platform_device *pdev) mem_size = resource_size(mem_res); release_mem_region(mem_res->start, mem_size); } - platform_set_drvdata(pdev, NULL); return 0; } -- cgit v1.2.1 From 2953f850c3b80bdca004967c83733365d8aa0aa2 Mon Sep 17 00:00:00 2001 From: Seungwon Jeon Date: Thu, 27 Jun 2013 13:31:54 +0900 Subject: [SCSI] ufs: use devres functions for ufshcd This patch replaces normal calls for resource allocation with devm_*() derivative functions. It makes resource freeing simpler. Signed-off-by: Seungwon Jeon Signed-off-by: Santosh Y Signed-off-by: James Bottomley --- drivers/scsi/ufs/ufshcd-pltfrm.c | 72 +++++++++++----------------------------- 1 file changed, 20 insertions(+), 52 deletions(-) (limited to 'drivers/scsi/ufs/ufshcd-pltfrm.c') diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 3db2ee1a38bd..0e48827c86bd 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -33,9 +33,10 @@ * this program. */ -#include "ufshcd.h" #include +#include "ufshcd.h" + #ifdef CONFIG_PM /** * ufshcd_pltfrm_suspend - suspend power management function @@ -97,62 +98,45 @@ static int ufshcd_pltfrm_probe(struct platform_device *pdev) struct ufs_hba *hba; void __iomem *mmio_base; struct resource *mem_res; - struct resource *irq_res; - resource_size_t mem_size; - int err; + int irq, err; struct device *dev = &pdev->dev; mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem_res) { - dev_err(&pdev->dev, - "Memory resource not available\n"); + dev_err(dev, "Memory resource not available\n"); err = -ENODEV; - goto out_error; + goto out; } - mem_size = resource_size(mem_res); - if (!request_mem_region(mem_res->start, mem_size, "ufshcd")) { - dev_err(&pdev->dev, - "Cannot reserve the memory resource\n"); - err = -EBUSY; - goto out_error; + mmio_base = devm_ioremap_resource(dev, mem_res); + if (IS_ERR(mmio_base)) { + dev_err(dev, "memory map failed\n"); + err = PTR_ERR(mmio_base); + goto out; } - mmio_base = ioremap_nocache(mem_res->start, mem_size); - if (!mmio_base) { - dev_err(&pdev->dev, "memory map failed\n"); - err = -ENOMEM; - goto out_release_regions; - } - - irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!irq_res) { - dev_err(&pdev->dev, "IRQ resource not available\n"); + irq = platform_get_irq(pdev, 0); + if (irq < 0) { + dev_err(dev, "IRQ resource not available\n"); err = -ENODEV; - goto out_iounmap; + goto out; } err = dma_set_coherent_mask(dev, dev->coherent_dma_mask); if (err) { - dev_err(&pdev->dev, "set dma mask failed\n"); - goto out_iounmap; + dev_err(dev, "set dma mask failed\n"); + goto out; } - err = ufshcd_init(&pdev->dev, &hba, mmio_base, irq_res->start); + err = ufshcd_init(dev, &hba, mmio_base, irq); if (err) { - dev_err(&pdev->dev, "Intialization failed\n"); - goto out_iounmap; + dev_err(dev, "Intialization failed\n"); + goto out; } platform_set_drvdata(pdev, hba); - return 0; - -out_iounmap: - iounmap(mmio_base); -out_release_regions: - release_mem_region(mem_res->start, mem_size); -out_error: +out: return err; } @@ -164,26 +148,10 @@ out_error: */ static int ufshcd_pltfrm_remove(struct platform_device *pdev) { - struct resource *mem_res; - resource_size_t mem_size; struct ufs_hba *hba = platform_get_drvdata(pdev); disable_irq(hba->irq); - - /* Some buggy controllers raise interrupt after - * the resources are removed. So first we unregister the - * irq handler and then the resources used by driver - */ - - free_irq(hba->irq, hba); ufshcd_remove(hba); - mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!mem_res) - dev_err(&pdev->dev, "ufshcd: Memory resource not available\n"); - else { - mem_size = resource_size(mem_res); - release_mem_region(mem_res->start, mem_size); - } return 0; } -- cgit v1.2.1 From 2e2930a3449f1fe3806e26c4391a71097cae43f3 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Wed, 26 Jun 2013 22:39:32 +0530 Subject: [SCSI] ufshcd-pltfrm: add missing empty slot in ufs_of_match[] of_match_table member in struct device_driver must be terminated by empty slot as a sentinel. Signed-off-by: Akinobu Mita Signed-off-by: Santosh Y Signed-off-by: James Bottomley --- drivers/scsi/ufs/ufshcd-pltfrm.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/scsi/ufs/ufshcd-pltfrm.c') diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 0e48827c86bd..6829a160869f 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -157,6 +157,7 @@ static int ufshcd_pltfrm_remove(struct platform_device *pdev) static const struct of_device_id ufs_of_match[] = { { .compatible = "jedec,ufs-1.1"}, + {}, }; static const struct dev_pm_ops ufshcd_dev_pm_ops = { -- cgit v1.2.1 From aca898f5d7ddcd0e7cc358a613338b009a88af80 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Wed, 26 Jun 2013 22:39:34 +0530 Subject: [SCSI] ufshcd-pltfrm: remove unnecessary dma_set_coherent_mask() call Changing the device coherent dma mask to the value that currently set has no effect. Signed-off-by: Akinobu Mita Signed-off-by: Santosh Y Signed-off-by: James Bottomley --- drivers/scsi/ufs/ufshcd-pltfrm.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/scsi/ufs/ufshcd-pltfrm.c') diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 6829a160869f..c42db40d4e51 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -122,12 +122,6 @@ static int ufshcd_pltfrm_probe(struct platform_device *pdev) goto out; } - err = dma_set_coherent_mask(dev, dev->coherent_dma_mask); - if (err) { - dev_err(dev, "set dma mask failed\n"); - goto out; - } - err = ufshcd_init(dev, &hba, mmio_base, irq); if (err) { dev_err(dev, "Intialization failed\n"); -- cgit v1.2.1