diff options
author | Daniel Mack <zonque@gmail.com> | 2013-08-12 04:37:17 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-08-14 14:54:27 -0400 |
commit | 1c459de1e645b213a07b9492884a54f5861409f5 (patch) | |
tree | abe4d39ad7e86538a767e07fb9a78d3c3f840f01 | |
parent | a6e56c28a178cef5f93d1e11698a23a5482175d9 (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.c | 40 |
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 | ||
203 | err_free_io: | 195 | return 0; |
204 | iounmap(ssp->mmio_base); | ||
205 | err_free_mem: | ||
206 | release_mem_region(res->start, resource_size(res)); | ||
207 | err_free_clk: | ||
208 | clk_put(ssp->clk); | ||
209 | err_free: | ||
210 | kfree(ssp); | ||
211 | return ret; | ||
212 | } | 196 | } |
213 | 197 | ||
214 | static int pxa_ssp_remove(struct platform_device *pdev) | 198 | static int pxa_ssp_remove(struct platform_device *pdev) |