2 * Driver for the LED found on the EBSA110 machine
3 * Based on Versatile and RealView machine LED code
5 * License terms: GNU General Public License (GPL) version 2
6 * Author: Bryan Wu <bryan.wu@canonical.com>
8 #include <linux/kernel.h>
9 #include <linux/init.h>
11 #include <linux/slab.h>
12 #include <linux/leds.h>
14 #include <asm/mach-types.h>
18 #if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
19 static void ebsa110_led_set(struct led_classdev
*cdev
,
20 enum led_brightness b
)
22 u8 reg
= __raw_readb(SOFT_BASE
);
29 __raw_writeb(reg
, SOFT_BASE
);
32 static enum led_brightness
ebsa110_led_get(struct led_classdev
*cdev
)
34 u8 reg
= __raw_readb(SOFT_BASE
);
36 return (reg
& 0x80) ? LED_FULL
: LED_OFF
;
39 static int __init
ebsa110_leds_init(void)
42 struct led_classdev
*cdev
;
45 if (!machine_is_ebsa110())
48 cdev
= kzalloc(sizeof(*cdev
), GFP_KERNEL
);
52 cdev
->name
= "ebsa110:0";
53 cdev
->brightness_set
= ebsa110_led_set
;
54 cdev
->brightness_get
= ebsa110_led_get
;
55 cdev
->default_trigger
= "heartbeat";
57 ret
= led_classdev_register(NULL
, cdev
);
67 * Since we may have triggers on any subsystem, defer registration
68 * until after subsystem_init.
70 fs_initcall(ebsa110_leds_init
);