OSDN Git Service

Staging: android: timed_gpio: Request gpios.
authorArve Hjønnevåg <arve@android.com>
Thu, 7 Jan 2010 01:17:33 +0000 (17:17 -0800)
committerIliyan Malchev <malchev@google.com>
Mon, 23 May 2011 22:43:33 +0000 (15:43 -0700)
Change-Id: I9e98250a04e5505ce2db2edd355e8fdf8391cabd
Signed-off-by: Arve Hjønnevåg <arve@android.com>
drivers/staging/android/timed_gpio.c

index be7cdaa..a646107 100644 (file)
@@ -106,10 +106,17 @@ static int timed_gpio_probe(struct platform_device *pdev)
                gpio_dat->dev.name = cur_gpio->name;
                gpio_dat->dev.get_time = gpio_get_time;
                gpio_dat->dev.enable = gpio_enable;
-               ret = timed_output_dev_register(&gpio_dat->dev);
+               ret = gpio_request(cur_gpio->gpio, cur_gpio->name);
+               if (ret >= 0) {
+                       ret = timed_output_dev_register(&gpio_dat->dev);
+                       if (ret < 0)
+                               gpio_free(cur_gpio->gpio);
+               }
                if (ret < 0) {
-                       for (j = 0; j < i; j++)
+                       for (j = 0; j < i; j++) {
                                timed_output_dev_unregister(&gpio_data[i].dev);
+                               gpio_free(gpio_data[i].gpio);
+                       }
                        kfree(gpio_data);
                        return ret;
                }
@@ -131,8 +138,10 @@ static int timed_gpio_remove(struct platform_device *pdev)
        struct timed_gpio_data *gpio_data = platform_get_drvdata(pdev);
        int i;
 
-       for (i = 0; i < pdata->num_gpios; i++)
+       for (i = 0; i < pdata->num_gpios; i++) {
                timed_output_dev_unregister(&gpio_data[i].dev);
+               gpio_free(gpio_data[i].gpio);
+       }
 
        kfree(gpio_data);