diff options
| -rw-r--r-- | drivers/leds/leds-wrap.c | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/drivers/leds/leds-wrap.c b/drivers/leds/leds-wrap.c index 5770cc36ec20..7ac61a7b56ad 100644 --- a/drivers/leds/leds-wrap.c +++ b/drivers/leds/leds-wrap.c | |||
| @@ -19,11 +19,21 @@ | |||
| 19 | #include <linux/scx200_gpio.h> | 19 | #include <linux/scx200_gpio.h> |
| 20 | 20 | ||
| 21 | #define DRVNAME "wrap-led" | 21 | #define DRVNAME "wrap-led" |
| 22 | #define WRAP_POWER_LED_GPIO 2 | ||
| 22 | #define WRAP_ERROR_LED_GPIO 3 | 23 | #define WRAP_ERROR_LED_GPIO 3 |
| 23 | #define WRAP_EXTRA_LED_GPIO 18 | 24 | #define WRAP_EXTRA_LED_GPIO 18 |
| 24 | 25 | ||
| 25 | static struct platform_device *pdev; | 26 | static struct platform_device *pdev; |
| 26 | 27 | ||
| 28 | static void wrap_power_led_set(struct led_classdev *led_cdev, | ||
| 29 | enum led_brightness value) | ||
| 30 | { | ||
| 31 | if (value) | ||
| 32 | scx200_gpio_set_low(WRAP_POWER_LED_GPIO); | ||
| 33 | else | ||
| 34 | scx200_gpio_set_high(WRAP_POWER_LED_GPIO); | ||
| 35 | } | ||
| 36 | |||
| 27 | static void wrap_error_led_set(struct led_classdev *led_cdev, | 37 | static void wrap_error_led_set(struct led_classdev *led_cdev, |
| 28 | enum led_brightness value) | 38 | enum led_brightness value) |
| 29 | { | 39 | { |
| @@ -42,6 +52,11 @@ static void wrap_extra_led_set(struct led_classdev *led_cdev, | |||
| 42 | scx200_gpio_set_high(WRAP_EXTRA_LED_GPIO); | 52 | scx200_gpio_set_high(WRAP_EXTRA_LED_GPIO); |
| 43 | } | 53 | } |
| 44 | 54 | ||
| 55 | static struct led_classdev wrap_power_led = { | ||
| 56 | .name = "wrap::power", | ||
| 57 | .brightness_set = wrap_power_led_set, | ||
| 58 | }; | ||
| 59 | |||
| 45 | static struct led_classdev wrap_error_led = { | 60 | static struct led_classdev wrap_error_led = { |
| 46 | .name = "wrap::error", | 61 | .name = "wrap::error", |
| 47 | .brightness_set = wrap_error_led_set, | 62 | .brightness_set = wrap_error_led_set, |
| @@ -56,6 +71,7 @@ static struct led_classdev wrap_extra_led = { | |||
| 56 | static int wrap_led_suspend(struct platform_device *dev, | 71 | static int wrap_led_suspend(struct platform_device *dev, |
| 57 | pm_message_t state) | 72 | pm_message_t state) |
| 58 | { | 73 | { |
| 74 | led_classdev_suspend(&wrap_power_led); | ||
| 59 | led_classdev_suspend(&wrap_error_led); | 75 | led_classdev_suspend(&wrap_error_led); |
| 60 | led_classdev_suspend(&wrap_extra_led); | 76 | led_classdev_suspend(&wrap_extra_led); |
| 61 | return 0; | 77 | return 0; |
| @@ -63,6 +79,7 @@ static int wrap_led_suspend(struct platform_device *dev, | |||
| 63 | 79 | ||
| 64 | static int wrap_led_resume(struct platform_device *dev) | 80 | static int wrap_led_resume(struct platform_device *dev) |
| 65 | { | 81 | { |
| 82 | led_classdev_resume(&wrap_power_led); | ||
| 66 | led_classdev_resume(&wrap_error_led); | 83 | led_classdev_resume(&wrap_error_led); |
| 67 | led_classdev_resume(&wrap_extra_led); | 84 | led_classdev_resume(&wrap_extra_led); |
| 68 | return 0; | 85 | return 0; |
| @@ -76,17 +93,31 @@ static int wrap_led_probe(struct platform_device *pdev) | |||
| 76 | { | 93 | { |
| 77 | int ret; | 94 | int ret; |
| 78 | 95 | ||
| 96 | ret = led_classdev_register(&pdev->dev, &wrap_power_led); | ||
| 97 | if (ret < 0) | ||
| 98 | return ret; | ||
| 99 | |||
| 79 | ret = led_classdev_register(&pdev->dev, &wrap_error_led); | 100 | ret = led_classdev_register(&pdev->dev, &wrap_error_led); |
| 80 | if (ret == 0) { | 101 | if (ret < 0) |
| 81 | ret = led_classdev_register(&pdev->dev, &wrap_extra_led); | 102 | goto err1; |
| 82 | if (ret < 0) | 103 | |
| 83 | led_classdev_unregister(&wrap_error_led); | 104 | ret = led_classdev_register(&pdev->dev, &wrap_extra_led); |
| 84 | } | 105 | if (ret < 0) |
| 106 | goto err2; | ||
| 107 | |||
| 108 | return ret; | ||
| 109 | |||
| 110 | err2: | ||
| 111 | led_classdev_unregister(&wrap_error_led); | ||
| 112 | err1: | ||
| 113 | led_classdev_unregister(&wrap_power_led); | ||
| 114 | |||
| 85 | return ret; | 115 | return ret; |
| 86 | } | 116 | } |
| 87 | 117 | ||
| 88 | static int wrap_led_remove(struct platform_device *pdev) | 118 | static int wrap_led_remove(struct platform_device *pdev) |
| 89 | { | 119 | { |
| 120 | led_classdev_unregister(&wrap_power_led); | ||
| 90 | led_classdev_unregister(&wrap_error_led); | 121 | led_classdev_unregister(&wrap_error_led); |
| 91 | led_classdev_unregister(&wrap_extra_led); | 122 | led_classdev_unregister(&wrap_extra_led); |
| 92 | return 0; | 123 | return 0; |
