ARM: clps711x: p720t: Using "leds-gpio" driver for LED control
authorAlexander Shiyan <shc_work@mail.ru>
Sat, 17 Nov 2012 13:57:08 +0000 (17:57 +0400)
committerOlof Johansson <olof@lixom.net>
Wed, 21 Nov 2012 06:21:43 +0000 (22:21 -0800)
Instead of manually create LED class device, we will use "leds-gpio"
driver for LED control.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Olof Johansson <olof@lixom.net>
arch/arm/mach-clps711x/common.h
arch/arm/mach-clps711x/p720t.c

index fc0f0650dcb544cf24c040b995af699d8d1aba26..dc60caea3278ca38edc4fe370e8d4ce9f591d6a0 100644 (file)
@@ -4,6 +4,9 @@
  * Common bits.
  */
 
+#define CLPS711X_NR_GPIO       (4 * 8 + 3)
+#define CLPS711X_GPIO(prt, bit)        ((prt) * 8 + (bit))
+
 struct sys_timer;
 
 extern void clps711x_map_io(void);
index dd8995027dd4d80a364e33bf667ae3737b151bff..8fe33b3a204c56ce0fa266abaae0506799075697 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/io.h>
 #include <linux/slab.h>
 #include <linux/leds.h>
+#include <linux/platform_device.h>
 
 #include <mach/hardware.h>
 #include <asm/pgtable.h>
@@ -38,6 +39,8 @@
 
 #include "common.h"
 
+#define GPIO_USERLED   CLPS711X_GPIO(3, 0)
+
 /*
  * Map the P720T system PLD. It occupies two address spaces:
  * 0x10000000 and 0x10400000. We map both regions as one.
@@ -103,71 +106,34 @@ static void __init p720t_init_early(void)
        }
 }
 
-/*
- * LED controled by CPLD
- */
-#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
-static void p720t_led_set(struct led_classdev *cdev,
-                             enum led_brightness b)
-{
-       u8 reg = clps_readb(PDDR);
-
-       if (b != LED_OFF)
-               reg |= 0x1;
-       else
-               reg &= ~0x1;
-
-       clps_writeb(reg, PDDR);
-}
-
-static enum led_brightness p720t_led_get(struct led_classdev *cdev)
-{
-       u8 reg = clps_readb(PDDR);
+static struct gpio_led p720t_gpio_leds[] = {
+       {
+               .name                   = "User LED",
+               .default_trigger        = "heartbeat",
+               .gpio                   = GPIO_USERLED,
+       },
+};
 
-       return (reg & 0x1) ? LED_FULL : LED_OFF;
-}
+static struct gpio_led_platform_data p720t_gpio_led_pdata __initdata = {
+       .leds           = p720t_gpio_leds,
+       .num_leds       = ARRAY_SIZE(p720t_gpio_leds),
+};
 
-static int __init p720t_leds_init(void)
+static void __init p720t_init_late(void)
 {
-
-       struct led_classdev *cdev;
-       int ret;
-
-       if (!machine_is_p720t())
-               return -ENODEV;
-
-       cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
-       if (!cdev)
-               return -ENOMEM;
-
-       cdev->name = "p720t:0";
-       cdev->brightness_set = p720t_led_set;
-       cdev->brightness_get = p720t_led_get;
-       cdev->default_trigger = "heartbeat";
-
-       ret = led_classdev_register(NULL, cdev);
-       if (ret < 0) {
-               kfree(cdev);
-               return ret;
-       }
-
-       return 0;
+       platform_device_register_data(&platform_bus, "leds-gpio", 0,
+                                     &p720t_gpio_led_pdata,
+                                     sizeof(p720t_gpio_led_pdata));
 }
 
-/*
- * Since we may have triggers on any subsystem, defer registration
- * until after subsystem_init.
- */
-fs_initcall(p720t_leds_init);
-#endif
-
 MACHINE_START(P720T, "ARM-Prospector720T")
        /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
        .atag_offset    = 0x100,
        .fixup          = fixup_p720t,
-       .init_early     = p720t_init_early,
        .map_io         = p720t_map_io,
+       .init_early     = p720t_init_early,
        .init_irq       = clps711x_init_irq,
        .timer          = &clps711x_timer,
+       .init_late      = p720t_init_late,
        .restart        = clps711x_restart,
 MACHINE_END