Merge branch 'for-2.6.30' into for-2.6.31
[pandora-kernel.git] / drivers / leds / leds-gpio.c
index 0daa2d2..102ef4a 100644 (file)
@@ -78,6 +78,13 @@ static int __devinit create_gpio_led(const struct gpio_led *template,
 {
        int ret;
 
+       /* skip leds that aren't available */
+       if (!gpio_is_valid(template->gpio)) {
+               printk(KERN_INFO "Skipping unavilable LED gpio %d (%s)\n", 
+                               template->gpio, template->name);
+               return;
+       }
+
        ret = gpio_request(template->gpio, template->name);
        if (ret < 0)
                return ret;
@@ -93,7 +100,8 @@ static int __devinit create_gpio_led(const struct gpio_led *template,
        }
        led_dat->cdev.brightness_set = gpio_led_set;
        led_dat->cdev.brightness = LED_OFF;
-       led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
+       if (!template->retain_state_suspended)
+               led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
 
        ret = gpio_direction_output(led_dat->gpio, led_dat->active_low);
        if (ret < 0)
@@ -113,6 +121,8 @@ err:
 
 static void delete_gpio_led(struct gpio_led_data *led)
 {
+       if (!gpio_is_valid(led->gpio))
+               return;
        led_classdev_unregister(&led->cdev);
        cancel_work_sync(&led->work);
        gpio_free(led->gpio);