diff options
Diffstat (limited to 'drivers/mfd/jz4740-adc.c')
| -rw-r--r-- | drivers/mfd/jz4740-adc.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/drivers/mfd/jz4740-adc.c b/drivers/mfd/jz4740-adc.c index c6b6d7dda517..e80587f1a792 100644 --- a/drivers/mfd/jz4740-adc.c +++ b/drivers/mfd/jz4740-adc.c | |||
| @@ -202,7 +202,7 @@ static struct mfd_cell jz4740_adc_cells[] = { | |||
| 202 | }, | 202 | }, |
| 203 | }; | 203 | }; |
| 204 | 204 | ||
| 205 | static int __devinit jz4740_adc_probe(struct platform_device *pdev) | 205 | static int jz4740_adc_probe(struct platform_device *pdev) |
| 206 | { | 206 | { |
| 207 | struct irq_chip_generic *gc; | 207 | struct irq_chip_generic *gc; |
| 208 | struct irq_chip_type *ct; | 208 | struct irq_chip_type *ct; |
| @@ -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,13 +298,10 @@ 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 | ||
| 310 | static int __devexit jz4740_adc_remove(struct platform_device *pdev) | 304 | static int jz4740_adc_remove(struct platform_device *pdev) |
| 311 | { | 305 | { |
| 312 | struct jz4740_adc *adc = platform_get_drvdata(pdev); | 306 | struct jz4740_adc *adc = platform_get_drvdata(pdev); |
| 313 | 307 | ||
| @@ -325,14 +319,12 @@ 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 | ||
| 333 | static struct platform_driver jz4740_adc_driver = { | 325 | static struct platform_driver jz4740_adc_driver = { |
| 334 | .probe = jz4740_adc_probe, | 326 | .probe = jz4740_adc_probe, |
| 335 | .remove = __devexit_p(jz4740_adc_remove), | 327 | .remove = jz4740_adc_remove, |
| 336 | .driver = { | 328 | .driver = { |
| 337 | .name = "jz4740-adc", | 329 | .name = "jz4740-adc", |
| 338 | .owner = THIS_MODULE, | 330 | .owner = THIS_MODULE, |
