ARM: footbridge: cleanup LEDs code
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 30 Nov 2013 13:41:26 +0000 (13:41 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 29 Dec 2013 12:36:44 +0000 (12:36 +0000)
Cleanup the LEDs code to use ioremap()/writeb() to access the register.
This allows us to move the definitions out of a header file directly
into the ebsa285 support code.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-footbridge/common.c
arch/arm/mach-footbridge/ebsa285.c
arch/arm/mach-footbridge/include/mach/hardware.h

index e0091685fd4861c8eb6f41b00c5f316865c1668b..9e8220e38398f87d368bcaa97dec961b846b22f3 100644 (file)
@@ -143,11 +143,6 @@ static struct map_desc fb_common_io_desc[] __initdata = {
                .pfn            = __phys_to_pfn(DC21285_ARMCSR_BASE),
                .length         = ARMCSR_SIZE,
                .type           = MT_DEVICE,
-       }, {
-               .virtual        = XBUS_BASE,
-               .pfn            = __phys_to_pfn(0x40000000),
-               .length         = XBUS_SIZE,
-               .type           = MT_DEVICE,
        }
 };
 
index 3ff7a0c30a0f962801f84a5cd58194f7622ca1d2..aee8300f34906d584ba6e38df4ba7a4d54264a19 100644 (file)
@@ -4,6 +4,7 @@
  * EBSA285 machine fixup
  */
 #include <linux/init.h>
+#include <linux/io.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
 #include <linux/leds.h>
 
 /* LEDs */
 #if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
+#define XBUS_AMBER_L   BIT(0)
+#define XBUS_GREEN_L   BIT(1)
+#define XBUS_RED_L     BIT(2)
+#define XBUS_TOGGLE    BIT(7)
+
 struct ebsa285_led {
        struct led_classdev     cdev;
        u8                      mask;
@@ -36,6 +42,7 @@ static const struct {
 };
 
 static unsigned char hw_led_state;
+static void __iomem *xbus;
 
 static void ebsa285_led_set(struct led_classdev *cdev,
                enum led_brightness b)
@@ -47,7 +54,7 @@ static void ebsa285_led_set(struct led_classdev *cdev,
                hw_led_state |= led->mask;
        else
                hw_led_state &= ~led->mask;
-       *XBUS_LEDS = hw_led_state;
+       writeb(hw_led_state, xbus);
 }
 
 static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
@@ -65,9 +72,13 @@ static int __init ebsa285_leds_init(void)
        if (!machine_is_ebsa285())
                return -ENODEV;
 
+       xbus = ioremap(XBUS_CS2, SZ_4K);
+       if (!xbus)
+               return -ENOMEM;
+
        /* 3 LEDS all off */
-       hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
-       *XBUS_LEDS = hw_led_state;
+       hw_led_state = XBUS_AMBER_L | XBUS_GREEN_L | XBUS_RED_L;
+       writeb(hw_led_state, xbus);
 
        for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
                struct ebsa285_led *led;
index e3d6ccac21628fc323c042b3c5feb6e6a6e19d25..02f6d7a706b1f2455c6331809b62494ca3df6aca 100644 (file)
 #define PCIMEM_SIZE            0x01000000
 #define PCIMEM_BASE            MMU_IO(0xf0000000, 0x80000000)
 
-#define XBUS_LEDS              ((volatile unsigned char *)(XBUS_BASE + 0x12000))
-#define XBUS_LED_AMBER         (1 << 0)
-#define XBUS_LED_GREEN         (1 << 1)
-#define XBUS_LED_RED           (1 << 2)
-#define XBUS_LED_TOGGLE                (1 << 8)
+#define XBUS_CS2               0x40012000
 
 #define XBUS_SWITCH            ((volatile unsigned char *)(XBUS_BASE + 0x12000))
 #define XBUS_SWITCH_SWITCH     ((*XBUS_SWITCH) & 15)