|
@@ -19,11 +19,21 @@
|
|
|
#include <linux/scx200_gpio.h>
|
|
|
|
|
|
#define DRVNAME "wrap-led"
|
|
|
+#define WRAP_POWER_LED_GPIO 2
|
|
|
#define WRAP_ERROR_LED_GPIO 3
|
|
|
-#define WRAP_EXTRA_LED_GPIO 18
|
|
|
+#define WRAP_EXTRA_LED_GPIO 18
|
|
|
|
|
|
static struct platform_device *pdev;
|
|
|
|
|
|
+static void wrap_power_led_set(struct led_classdev *led_cdev,
|
|
|
+ enum led_brightness value)
|
|
|
+{
|
|
|
+ if (value)
|
|
|
+ scx200_gpio_set_low(WRAP_POWER_LED_GPIO);
|
|
|
+ else
|
|
|
+ scx200_gpio_set_high(WRAP_POWER_LED_GPIO);
|
|
|
+}
|
|
|
+
|
|
|
static void wrap_error_led_set(struct led_classdev *led_cdev,
|
|
|
enum led_brightness value)
|
|
|
{
|
|
@@ -42,6 +52,11 @@ static void wrap_extra_led_set(struct led_classdev *led_cdev,
|
|
|
scx200_gpio_set_high(WRAP_EXTRA_LED_GPIO);
|
|
|
}
|
|
|
|
|
|
+static struct led_classdev wrap_power_led = {
|
|
|
+ .name = "wrap::power",
|
|
|
+ .brightness_set = wrap_power_led_set,
|
|
|
+};
|
|
|
+
|
|
|
static struct led_classdev wrap_error_led = {
|
|
|
.name = "wrap::error",
|
|
|
.brightness_set = wrap_error_led_set,
|
|
@@ -56,6 +71,7 @@ static struct led_classdev wrap_extra_led = {
|
|
|
static int wrap_led_suspend(struct platform_device *dev,
|
|
|
pm_message_t state)
|
|
|
{
|
|
|
+ led_classdev_suspend(&wrap_power_led);
|
|
|
led_classdev_suspend(&wrap_error_led);
|
|
|
led_classdev_suspend(&wrap_extra_led);
|
|
|
return 0;
|
|
@@ -63,6 +79,7 @@ static int wrap_led_suspend(struct platform_device *dev,
|
|
|
|
|
|
static int wrap_led_resume(struct platform_device *dev)
|
|
|
{
|
|
|
+ led_classdev_resume(&wrap_power_led);
|
|
|
led_classdev_resume(&wrap_error_led);
|
|
|
led_classdev_resume(&wrap_extra_led);
|
|
|
return 0;
|
|
@@ -76,17 +93,31 @@ static int wrap_led_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
+ ret = led_classdev_register(&pdev->dev, &wrap_power_led);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
ret = led_classdev_register(&pdev->dev, &wrap_error_led);
|
|
|
- if (ret == 0) {
|
|
|
- ret = led_classdev_register(&pdev->dev, &wrap_extra_led);
|
|
|
- if (ret < 0)
|
|
|
- led_classdev_unregister(&wrap_error_led);
|
|
|
- }
|
|
|
+ if (ret < 0)
|
|
|
+ goto err1;
|
|
|
+
|
|
|
+ ret = led_classdev_register(&pdev->dev, &wrap_extra_led);
|
|
|
+ if (ret < 0)
|
|
|
+ goto err2;
|
|
|
+
|
|
|
+ return ret;
|
|
|
+
|
|
|
+err2:
|
|
|
+ led_classdev_unregister(&wrap_error_led);
|
|
|
+err1:
|
|
|
+ led_classdev_unregister(&wrap_power_led);
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
static int wrap_led_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
+ led_classdev_unregister(&wrap_power_led);
|
|
|
led_classdev_unregister(&wrap_error_led);
|
|
|
led_classdev_unregister(&wrap_extra_led);
|
|
|
return 0;
|