Commit 43024ed6 authored by Russell King's avatar Russell King

ARM: footbridge: cleanup LEDs code

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: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 8c65da6d
...@@ -143,11 +143,6 @@ static struct map_desc fb_common_io_desc[] __initdata = { ...@@ -143,11 +143,6 @@ static struct map_desc fb_common_io_desc[] __initdata = {
.pfn = __phys_to_pfn(DC21285_ARMCSR_BASE), .pfn = __phys_to_pfn(DC21285_ARMCSR_BASE),
.length = ARMCSR_SIZE, .length = ARMCSR_SIZE,
.type = MT_DEVICE, .type = MT_DEVICE,
}, {
.virtual = XBUS_BASE,
.pfn = __phys_to_pfn(0x40000000),
.length = XBUS_SIZE,
.type = MT_DEVICE,
} }
}; };
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* EBSA285 machine fixup * EBSA285 machine fixup
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/leds.h> #include <linux/leds.h>
...@@ -17,6 +18,11 @@ ...@@ -17,6 +18,11 @@
/* LEDs */ /* LEDs */
#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS) #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 ebsa285_led {
struct led_classdev cdev; struct led_classdev cdev;
u8 mask; u8 mask;
...@@ -36,6 +42,7 @@ static const struct { ...@@ -36,6 +42,7 @@ static const struct {
}; };
static unsigned char hw_led_state; static unsigned char hw_led_state;
static void __iomem *xbus;
static void ebsa285_led_set(struct led_classdev *cdev, static void ebsa285_led_set(struct led_classdev *cdev,
enum led_brightness b) enum led_brightness b)
...@@ -47,7 +54,7 @@ static void ebsa285_led_set(struct led_classdev *cdev, ...@@ -47,7 +54,7 @@ static void ebsa285_led_set(struct led_classdev *cdev,
hw_led_state |= led->mask; hw_led_state |= led->mask;
else else
hw_led_state &= ~led->mask; 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) static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
...@@ -65,9 +72,13 @@ static int __init ebsa285_leds_init(void) ...@@ -65,9 +72,13 @@ static int __init ebsa285_leds_init(void)
if (!machine_is_ebsa285()) if (!machine_is_ebsa285())
return -ENODEV; return -ENODEV;
xbus = ioremap(XBUS_CS2, SZ_4K);
if (!xbus)
return -ENOMEM;
/* 3 LEDS all off */ /* 3 LEDS all off */
hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED; hw_led_state = XBUS_AMBER_L | XBUS_GREEN_L | XBUS_RED_L;
*XBUS_LEDS = hw_led_state; writeb(hw_led_state, xbus);
for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) { for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
struct ebsa285_led *led; struct ebsa285_led *led;
......
...@@ -51,11 +51,7 @@ ...@@ -51,11 +51,7 @@
#define PCIMEM_SIZE 0x01000000 #define PCIMEM_SIZE 0x01000000
#define PCIMEM_BASE MMU_IO(0xf0000000, 0x80000000) #define PCIMEM_BASE MMU_IO(0xf0000000, 0x80000000)
#define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) #define XBUS_CS2 0x40012000
#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_SWITCH ((volatile unsigned char *)(XBUS_BASE + 0x12000)) #define XBUS_SWITCH ((volatile unsigned char *)(XBUS_BASE + 0x12000))
#define XBUS_SWITCH_SWITCH ((*XBUS_SWITCH) & 15) #define XBUS_SWITCH_SWITCH ((*XBUS_SWITCH) & 15)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment