diff options
Diffstat (limited to 'drivers/mfd/jz4740-adc.c')
-rw-r--r-- | drivers/mfd/jz4740-adc.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/mfd/jz4740-adc.c b/drivers/mfd/jz4740-adc.c index c6b6d7dda51..8619508f348 100644 --- a/drivers/mfd/jz4740-adc.c +++ b/drivers/mfd/jz4740-adc.c | |||
@@ -211,7 +211,7 @@ static int __devinit jz4740_adc_probe(struct platform_device *pdev) | |||
211 | int ret; | 211 | int ret; |
212 | int irq_base; | 212 | int irq_base; |
213 | 213 | ||
214 | adc = kmalloc(sizeof(*adc), GFP_KERNEL); | 214 | adc = devm_kzalloc(&pdev->dev, sizeof(*adc), GFP_KERNEL); |
215 | if (!adc) { | 215 | if (!adc) { |
216 | dev_err(&pdev->dev, "Failed to allocate driver structure\n"); | 216 | dev_err(&pdev->dev, "Failed to allocate driver structure\n"); |
217 | return -ENOMEM; | 217 | return -ENOMEM; |
@@ -221,30 +221,27 @@ static int __devinit jz4740_adc_probe(struct platform_device *pdev) | |||
221 | if (adc->irq < 0) { | 221 | if (adc->irq < 0) { |
222 | ret = adc->irq; | 222 | ret = adc->irq; |
223 | dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret); | 223 | dev_err(&pdev->dev, "Failed to get platform irq: %d\n", ret); |
224 | goto err_free; | 224 | return ret; |
225 | } | 225 | } |
226 | 226 | ||
227 | irq_base = platform_get_irq(pdev, 1); | 227 | irq_base = platform_get_irq(pdev, 1); |
228 | if (irq_base < 0) { | 228 | if (irq_base < 0) { |
229 | ret = irq_base; | 229 | dev_err(&pdev->dev, "Failed to get irq base: %d\n", irq_base); |
230 | dev_err(&pdev->dev, "Failed to get irq base: %d\n", ret); | 230 | return irq_base; |
231 | goto err_free; | ||
232 | } | 231 | } |
233 | 232 | ||
234 | mem_base = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 233 | mem_base = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
235 | if (!mem_base) { | 234 | if (!mem_base) { |
236 | ret = -ENOENT; | ||
237 | dev_err(&pdev->dev, "Failed to get platform mmio resource\n"); | 235 | dev_err(&pdev->dev, "Failed to get platform mmio resource\n"); |
238 | goto err_free; | 236 | return -ENOENT; |
239 | } | 237 | } |
240 | 238 | ||
241 | /* Only request the shared registers for the MFD driver */ | 239 | /* Only request the shared registers for the MFD driver */ |
242 | adc->mem = request_mem_region(mem_base->start, JZ_REG_ADC_STATUS, | 240 | adc->mem = request_mem_region(mem_base->start, JZ_REG_ADC_STATUS, |
243 | pdev->name); | 241 | pdev->name); |
244 | if (!adc->mem) { | 242 | if (!adc->mem) { |
245 | ret = -EBUSY; | ||
246 | dev_err(&pdev->dev, "Failed to request mmio memory region\n"); | 243 | dev_err(&pdev->dev, "Failed to request mmio memory region\n"); |
247 | goto err_free; | 244 | return -EBUSY; |
248 | } | 245 | } |
249 | 246 | ||
250 | adc->base = ioremap_nocache(adc->mem->start, resource_size(adc->mem)); | 247 | adc->base = ioremap_nocache(adc->mem->start, resource_size(adc->mem)); |
@@ -301,9 +298,6 @@ err_iounmap: | |||
301 | iounmap(adc->base); | 298 | iounmap(adc->base); |
302 | err_release_mem_region: | 299 | err_release_mem_region: |
303 | release_mem_region(adc->mem->start, resource_size(adc->mem)); | 300 | release_mem_region(adc->mem->start, resource_size(adc->mem)); |
304 | err_free: | ||
305 | kfree(adc); | ||
306 | |||
307 | return ret; | 301 | return ret; |
308 | } | 302 | } |
309 | 303 | ||
@@ -325,8 +319,6 @@ static int __devexit jz4740_adc_remove(struct platform_device *pdev) | |||
325 | 319 | ||
326 | platform_set_drvdata(pdev, NULL); | 320 | platform_set_drvdata(pdev, NULL); |
327 | 321 | ||
328 | kfree(adc); | ||
329 | |||
330 | return 0; | 322 | return 0; |
331 | } | 323 | } |
332 | 324 | ||