71 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Driver for the LED found on the EBSA110 machine
 | |
|  * Based on Versatile and RealView machine LED code
 | |
|  *
 | |
|  * License terms: GNU General Public License (GPL) version 2
 | |
|  * Author: Bryan Wu <bryan.wu@canonical.com>
 | |
|  */
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/init.h>
 | |
| #include <linux/io.h>
 | |
| #include <linux/slab.h>
 | |
| #include <linux/leds.h>
 | |
| 
 | |
| #include <asm/mach-types.h>
 | |
| 
 | |
| #include "core.h"
 | |
| 
 | |
| #if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
 | |
| static void ebsa110_led_set(struct led_classdev *cdev,
 | |
| 			      enum led_brightness b)
 | |
| {
 | |
| 	u8 reg = __raw_readb(SOFT_BASE);
 | |
| 
 | |
| 	if (b != LED_OFF)
 | |
| 		reg |= 0x80;
 | |
| 	else
 | |
| 		reg &= ~0x80;
 | |
| 
 | |
| 	__raw_writeb(reg, SOFT_BASE);
 | |
| }
 | |
| 
 | |
| static enum led_brightness ebsa110_led_get(struct led_classdev *cdev)
 | |
| {
 | |
| 	u8 reg = __raw_readb(SOFT_BASE);
 | |
| 
 | |
| 	return (reg & 0x80) ? LED_FULL : LED_OFF;
 | |
| }
 | |
| 
 | |
| static int __init ebsa110_leds_init(void)
 | |
| {
 | |
| 
 | |
| 	struct led_classdev *cdev;
 | |
| 	int ret;
 | |
| 
 | |
| 	if (!machine_is_ebsa110())
 | |
| 		return -ENODEV;
 | |
| 
 | |
| 	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
 | |
| 	if (!cdev)
 | |
| 		return -ENOMEM;
 | |
| 
 | |
| 	cdev->name = "ebsa110:0";
 | |
| 	cdev->brightness_set = ebsa110_led_set;
 | |
| 	cdev->brightness_get = ebsa110_led_get;
 | |
| 	cdev->default_trigger = "heartbeat";
 | |
| 
 | |
| 	ret = led_classdev_register(NULL, cdev);
 | |
| 	if (ret	< 0) {
 | |
| 		kfree(cdev);
 | |
| 		return ret;
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Since we may have triggers on any subsystem, defer registration
 | |
|  * until after subsystem_init.
 | |
|  */
 | |
| fs_initcall(ebsa110_leds_init);
 | |
| #endif
 | 
