diff options
author | Libin Yang <lbyang@marvell.com> | 2013-07-03 00:56:04 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2013-07-26 12:26:33 -0400 |
commit | 578e99d6cd98c58b68d9c3ad22b4e0c1528a2826 (patch) | |
tree | 40faed73eed6c23631ac3174cbd8edc731bc6242 /drivers/media/platform/marvell-ccic | |
parent | 0a0b3fb42f78eded6a8d1249c545224242d8999e (diff) |
[media] marvell-ccic: switch to resource managed allocation and request
This patch switchs to resource managed allocation and request in mmp-driver.
It can remove free resource operations.
Signed-off-by: Albert Wang <twang13@marvell.com>
Signed-off-by: Libin Yang <lbyang@marvell.com>
Acked-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/platform/marvell-ccic')
-rw-r--r-- | drivers/media/platform/marvell-ccic/mmp-driver.c | 60 |
1 files changed, 22 insertions, 38 deletions
diff --git a/drivers/media/platform/marvell-ccic/mmp-driver.c b/drivers/media/platform/marvell-ccic/mmp-driver.c index 3665fbbf9ee7..f06daa4f2502 100644 --- a/drivers/media/platform/marvell-ccic/mmp-driver.c +++ b/drivers/media/platform/marvell-ccic/mmp-driver.c | |||
@@ -367,7 +367,7 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
367 | if (!pdata) | 367 | if (!pdata) |
368 | return -ENODEV; | 368 | return -ENODEV; |
369 | 369 | ||
370 | cam = kzalloc(sizeof(*cam), GFP_KERNEL); | 370 | cam = devm_kzalloc(&pdev->dev, sizeof(*cam), GFP_KERNEL); |
371 | if (cam == NULL) | 371 | if (cam == NULL) |
372 | return -ENOMEM; | 372 | return -ENOMEM; |
373 | cam->pdev = pdev; | 373 | cam->pdev = pdev; |
@@ -398,15 +398,11 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
398 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 398 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
399 | if (res == NULL) { | 399 | if (res == NULL) { |
400 | dev_err(&pdev->dev, "no iomem resource!\n"); | 400 | dev_err(&pdev->dev, "no iomem resource!\n"); |
401 | ret = -ENODEV; | 401 | return -ENODEV; |
402 | goto out_free; | ||
403 | } | ||
404 | mcam->regs = ioremap(res->start, resource_size(res)); | ||
405 | if (mcam->regs == NULL) { | ||
406 | dev_err(&pdev->dev, "MMIO ioremap fail\n"); | ||
407 | ret = -ENODEV; | ||
408 | goto out_free; | ||
409 | } | 402 | } |
403 | mcam->regs = devm_ioremap_resource(&pdev->dev, res); | ||
404 | if (IS_ERR(mcam->regs)) | ||
405 | return PTR_ERR(mcam->regs); | ||
410 | mcam->regs_size = resource_size(res); | 406 | mcam->regs_size = resource_size(res); |
411 | /* | 407 | /* |
412 | * Power/clock memory is elsewhere; get it too. Perhaps this | 408 | * Power/clock memory is elsewhere; get it too. Perhaps this |
@@ -415,40 +411,37 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
415 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 411 | res = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
416 | if (res == NULL) { | 412 | if (res == NULL) { |
417 | dev_err(&pdev->dev, "no power resource!\n"); | 413 | dev_err(&pdev->dev, "no power resource!\n"); |
418 | ret = -ENODEV; | 414 | return -ENODEV; |
419 | goto out_unmap1; | ||
420 | } | ||
421 | cam->power_regs = ioremap(res->start, resource_size(res)); | ||
422 | if (cam->power_regs == NULL) { | ||
423 | dev_err(&pdev->dev, "power MMIO ioremap fail\n"); | ||
424 | ret = -ENODEV; | ||
425 | goto out_unmap1; | ||
426 | } | 415 | } |
416 | cam->power_regs = devm_ioremap_resource(&pdev->dev, res); | ||
417 | if (IS_ERR(cam->power_regs)) | ||
418 | return PTR_ERR(cam->power_regs); | ||
427 | /* | 419 | /* |
428 | * Find the i2c adapter. This assumes, of course, that the | 420 | * Find the i2c adapter. This assumes, of course, that the |
429 | * i2c bus is already up and functioning. | 421 | * i2c bus is already up and functioning. |
430 | */ | 422 | */ |
431 | mcam->i2c_adapter = platform_get_drvdata(pdata->i2c_device); | 423 | mcam->i2c_adapter = platform_get_drvdata(pdata->i2c_device); |
432 | if (mcam->i2c_adapter == NULL) { | 424 | if (mcam->i2c_adapter == NULL) { |
433 | ret = -ENODEV; | ||
434 | dev_err(&pdev->dev, "No i2c adapter\n"); | 425 | dev_err(&pdev->dev, "No i2c adapter\n"); |
435 | goto out_unmap2; | 426 | return -ENODEV; |
436 | } | 427 | } |
437 | /* | 428 | /* |
438 | * Sensor GPIO pins. | 429 | * Sensor GPIO pins. |
439 | */ | 430 | */ |
440 | ret = gpio_request(pdata->sensor_power_gpio, "cam-power"); | 431 | ret = devm_gpio_request(&pdev->dev, pdata->sensor_power_gpio, |
432 | "cam-power"); | ||
441 | if (ret) { | 433 | if (ret) { |
442 | dev_err(&pdev->dev, "Can't get sensor power gpio %d", | 434 | dev_err(&pdev->dev, "Can't get sensor power gpio %d", |
443 | pdata->sensor_power_gpio); | 435 | pdata->sensor_power_gpio); |
444 | goto out_unmap2; | 436 | return ret; |
445 | } | 437 | } |
446 | gpio_direction_output(pdata->sensor_power_gpio, 0); | 438 | gpio_direction_output(pdata->sensor_power_gpio, 0); |
447 | ret = gpio_request(pdata->sensor_reset_gpio, "cam-reset"); | 439 | ret = devm_gpio_request(&pdev->dev, pdata->sensor_reset_gpio, |
440 | "cam-reset"); | ||
448 | if (ret) { | 441 | if (ret) { |
449 | dev_err(&pdev->dev, "Can't get sensor reset gpio %d", | 442 | dev_err(&pdev->dev, "Can't get sensor reset gpio %d", |
450 | pdata->sensor_reset_gpio); | 443 | pdata->sensor_reset_gpio); |
451 | goto out_gpio; | 444 | return ret; |
452 | } | 445 | } |
453 | gpio_direction_output(pdata->sensor_reset_gpio, 0); | 446 | gpio_direction_output(pdata->sensor_reset_gpio, 0); |
454 | 447 | ||
@@ -459,10 +452,10 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
459 | */ | 452 | */ |
460 | ret = mmpcam_power_up(mcam); | 453 | ret = mmpcam_power_up(mcam); |
461 | if (ret) | 454 | if (ret) |
462 | goto out_gpio2; | 455 | goto out_deinit_clk; |
463 | ret = mccic_register(mcam); | 456 | ret = mccic_register(mcam); |
464 | if (ret) | 457 | if (ret) |
465 | goto out_pwdn; | 458 | goto out_power_down; |
466 | /* | 459 | /* |
467 | * Finally, set up our IRQ now that the core is ready to | 460 | * Finally, set up our IRQ now that the core is ready to |
468 | * deal with it. | 461 | * deal with it. |
@@ -473,8 +466,8 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
473 | goto out_unregister; | 466 | goto out_unregister; |
474 | } | 467 | } |
475 | cam->irq = res->start; | 468 | cam->irq = res->start; |
476 | ret = request_irq(cam->irq, mmpcam_irq, IRQF_SHARED, | 469 | ret = devm_request_irq(&pdev->dev, cam->irq, mmpcam_irq, IRQF_SHARED, |
477 | "mmp-camera", mcam); | 470 | "mmp-camera", mcam); |
478 | if (ret == 0) { | 471 | if (ret == 0) { |
479 | mmpcam_add_device(cam); | 472 | mmpcam_add_device(cam); |
480 | return 0; | 473 | return 0; |
@@ -482,19 +475,10 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
482 | 475 | ||
483 | out_unregister: | 476 | out_unregister: |
484 | mccic_shutdown(mcam); | 477 | mccic_shutdown(mcam); |
485 | out_pwdn: | 478 | out_power_down: |
486 | mmpcam_power_down(mcam); | 479 | mmpcam_power_down(mcam); |
487 | out_gpio2: | 480 | out_deinit_clk: |
488 | mcam_deinit_clk(mcam); | 481 | mcam_deinit_clk(mcam); |
489 | gpio_free(pdata->sensor_reset_gpio); | ||
490 | out_gpio: | ||
491 | gpio_free(pdata->sensor_power_gpio); | ||
492 | out_unmap2: | ||
493 | iounmap(cam->power_regs); | ||
494 | out_unmap1: | ||
495 | iounmap(mcam->regs); | ||
496 | out_free: | ||
497 | kfree(cam); | ||
498 | return ret; | 482 | return ret; |
499 | } | 483 | } |
500 | 484 | ||