From: chenqiwu <chenqiwu@xxxxxxxxxx> 1. Use a wrapped API devm_platform_ioremap_resource() instead of calling platform_get_resource() and devm_ioremap_resource() separately to simplify code. 2. Add error checking and error processing for led driver probe. Signed-off-by: chenqiwu <chenqiwu@xxxxxxxxxx> --- changes in v2: - Add error checking and error processing for led driver probe. - Modify the commit title and message. --- drivers/leds/leds-cobalt-qube.c | 20 +++++++++++--------- drivers/leds/leds-cobalt-raq.c | 12 ++++-------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/drivers/leds/leds-cobalt-qube.c b/drivers/leds/leds-cobalt-qube.c index ef22e1e..d8c3eac 100644 --- a/drivers/leds/leds-cobalt-qube.c +++ b/drivers/leds/leds-cobalt-qube.c @@ -36,20 +36,22 @@ static void qube_front_led_set(struct led_classdev *led_cdev, static int cobalt_qube_led_probe(struct platform_device *pdev) { - struct resource *res; + int retval; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - return -EBUSY; - - led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res)); - if (!led_port) - return -ENOMEM; + led_port = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(led_port)) + return PTR_ERR(led_port); led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT; writeb(led_value, led_port); - return devm_led_classdev_register(&pdev->dev, &qube_front_led); + retval = devm_led_classdev_register(&pdev->dev, &qube_front_led); + if (retval) { + devm_ioremap_release(&pdev->dev, led_port); + led_port = NULL; + } + + return retval; } static struct platform_driver cobalt_qube_led_driver = { diff --git a/drivers/leds/leds-cobalt-raq.c b/drivers/leds/leds-cobalt-raq.c index 045c239..8b1317d 100644 --- a/drivers/leds/leds-cobalt-raq.c +++ b/drivers/leds/leds-cobalt-raq.c @@ -65,16 +65,11 @@ static void raq_power_off_led_set(struct led_classdev *led_cdev, static int cobalt_raq_led_probe(struct platform_device *pdev) { - struct resource *res; int retval; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - return -EBUSY; - - led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res)); - if (!led_port) - return -ENOMEM; + led_port = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(led_port)) + return PTR_ERR(led_port); retval = led_classdev_register(&pdev->dev, &raq_power_off_led); if (retval) @@ -90,6 +85,7 @@ static int cobalt_raq_led_probe(struct platform_device *pdev) led_classdev_unregister(&raq_power_off_led); err_null: + devm_ioremap_release(&pdev->dev, led_port); led_port = NULL; return retval; -- 1.9.1