aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Mack <zonque@gmail.com>2013-08-12 04:37:17 -0400
committerMark Brown <broonie@linaro.org>2013-08-14 14:54:27 -0400
commit1c459de1e645b213a07b9492884a54f5861409f5 (patch)
treeabe4d39ad7e86538a767e07fb9a78d3c3f840f01
parenta6e56c28a178cef5f93d1e11698a23a5482175d9 (diff)
ARM: pxa: ssp: use devm_ functions
Use devm_ functions to allocate memory, ioremap, clk_get etc to clean up the error unwind path. Signed-off-by: Daniel Mack <zonque@gmail.com> Acked-by: Haojian Zhuang <haojian.zhuang@gmail.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--arch/arm/plat-pxa/ssp.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/arch/arm/plat-pxa/ssp.c b/arch/arm/plat-pxa/ssp.c
index c3afcec7094c..f2661355fa4e 100644
--- a/arch/arm/plat-pxa/ssp.c
+++ b/arch/arm/plat-pxa/ssp.c
@@ -94,19 +94,16 @@ static int pxa_ssp_probe(struct platform_device *pdev)
94 struct resource *res; 94 struct resource *res;
95 struct ssp_device *ssp; 95 struct ssp_device *ssp;
96 struct device *dev = &pdev->dev; 96 struct device *dev = &pdev->dev;
97 int ret = 0;
98 97
99 ssp = kzalloc(sizeof(struct ssp_device), GFP_KERNEL); 98 ssp = devm_kzalloc(dev, sizeof(struct ssp_device), GFP_KERNEL);
100 if (ssp == NULL) 99 if (ssp == NULL)
101 return -ENOMEM; 100 return -ENOMEM;
102 101
103 ssp->pdev = pdev; 102 ssp->pdev = pdev;
104 103
105 ssp->clk = clk_get(dev, NULL); 104 ssp->clk = devm_clk_get(dev, NULL);
106 if (IS_ERR(ssp->clk)) { 105 if (IS_ERR(ssp->clk))
107 ret = PTR_ERR(ssp->clk); 106 return PTR_ERR(ssp->clk);
108 goto err_free;
109 }
110 107
111 if (dev->of_node) { 108 if (dev->of_node) {
112 struct of_phandle_args dma_spec; 109 struct of_phandle_args dma_spec;
@@ -148,32 +145,28 @@ static int pxa_ssp_probe(struct platform_device *pdev)
148 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 145 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
149 if (res == NULL) { 146 if (res == NULL) {
150 dev_err(dev, "no memory resource defined\n"); 147 dev_err(dev, "no memory resource defined\n");
151 ret = -ENODEV; 148 return -ENODEV;
152 goto err_free_clk;
153 } 149 }
154 150
155 res = request_mem_region(res->start, resource_size(res), 151 res = devm_request_mem_region(dev, res->start, resource_size(res),
156 pdev->name); 152 pdev->name);
157 if (res == NULL) { 153 if (res == NULL) {
158 dev_err(dev, "failed to request memory resource\n"); 154 dev_err(dev, "failed to request memory resource\n");
159 ret = -EBUSY; 155 return -EBUSY;
160 goto err_free_clk;
161 } 156 }
162 157
163 ssp->phys_base = res->start; 158 ssp->phys_base = res->start;
164 159
165 ssp->mmio_base = ioremap(res->start, resource_size(res)); 160 ssp->mmio_base = devm_ioremap(dev, res->start, resource_size(res));
166 if (ssp->mmio_base == NULL) { 161 if (ssp->mmio_base == NULL) {
167 dev_err(dev, "failed to ioremap() registers\n"); 162 dev_err(dev, "failed to ioremap() registers\n");
168 ret = -ENODEV; 163 return -ENODEV;
169 goto err_free_mem;
170 } 164 }
171 165
172 ssp->irq = platform_get_irq(pdev, 0); 166 ssp->irq = platform_get_irq(pdev, 0);
173 if (ssp->irq < 0) { 167 if (ssp->irq < 0) {
174 dev_err(dev, "no IRQ resource defined\n"); 168 dev_err(dev, "no IRQ resource defined\n");
175 ret = -ENODEV; 169 return -ENODEV;
176 goto err_free_io;
177 } 170 }
178 171
179 if (dev->of_node) { 172 if (dev->of_node) {
@@ -198,17 +191,8 @@ static int pxa_ssp_probe(struct platform_device *pdev)
198 mutex_unlock(&ssp_lock); 191 mutex_unlock(&ssp_lock);
199 192
200 platform_set_drvdata(pdev, ssp); 193 platform_set_drvdata(pdev, ssp);
201 return 0;
202 194
203err_free_io: 195 return 0;
204 iounmap(ssp->mmio_base);
205err_free_mem:
206 release_mem_region(res->start, resource_size(res));
207err_free_clk:
208 clk_put(ssp->clk);
209err_free:
210 kfree(ssp);
211 return ret;
212} 196}
213 197
214static int pxa_ssp_remove(struct platform_device *pdev) 198static int pxa_ssp_remove(struct platform_device *pdev)