2006-03-31 14:31:10 +04:00
/*
2006-10-04 01:01:26 +04:00
* linux / drivers / leds / leds - locomo . c
2006-03-31 14:31:10 +04:00
*
* Copyright ( C ) 2005 John Lenz < lenz @ cs . wisc . edu >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/device.h>
# include <linux/leds.h>
# include <asm/hardware.h>
# include <asm/hardware/locomo.h>
static void locomoled_brightness_set ( struct led_classdev * led_cdev ,
enum led_brightness value , int offset )
{
2008-01-01 02:11:11 +03:00
struct locomo_dev * locomo_dev = LOCOMO_DEV ( led_cdev - > dev - > parent ) ;
2006-03-31 14:31:10 +04:00
unsigned long flags ;
local_irq_save ( flags ) ;
if ( value )
locomo_writel ( LOCOMO_LPT_TOFH , locomo_dev - > mapbase + offset ) ;
else
locomo_writel ( LOCOMO_LPT_TOFL , locomo_dev - > mapbase + offset ) ;
local_irq_restore ( flags ) ;
}
static void locomoled_brightness_set0 ( struct led_classdev * led_cdev ,
enum led_brightness value )
{
locomoled_brightness_set ( led_cdev , value , LOCOMO_LPT0 ) ;
}
static void locomoled_brightness_set1 ( struct led_classdev * led_cdev ,
enum led_brightness value )
{
locomoled_brightness_set ( led_cdev , value , LOCOMO_LPT1 ) ;
}
static struct led_classdev locomo_led0 = {
2007-10-31 17:00:07 +03:00
. name = " locomo:amber:charge " ,
2006-06-19 16:08:39 +04:00
. default_trigger = " sharpsl-charge " ,
2006-03-31 14:31:10 +04:00
. brightness_set = locomoled_brightness_set0 ,
} ;
static struct led_classdev locomo_led1 = {
2007-10-31 17:00:07 +03:00
. name = " locomo:green:mail " ,
2006-06-19 16:08:39 +04:00
. default_trigger = " nand-disk " ,
2006-03-31 14:31:10 +04:00
. brightness_set = locomoled_brightness_set1 ,
} ;
static int locomoled_probe ( struct locomo_dev * ldev )
{
int ret ;
ret = led_classdev_register ( & ldev - > dev , & locomo_led0 ) ;
if ( ret < 0 )
return ret ;
ret = led_classdev_register ( & ldev - > dev , & locomo_led1 ) ;
if ( ret < 0 )
led_classdev_unregister ( & locomo_led0 ) ;
return ret ;
}
static int locomoled_remove ( struct locomo_dev * dev )
{
led_classdev_unregister ( & locomo_led0 ) ;
led_classdev_unregister ( & locomo_led1 ) ;
return 0 ;
}
static struct locomo_driver locomoled_driver = {
. drv = {
. name = " locomoled "
} ,
. devid = LOCOMO_DEVID_LED ,
. probe = locomoled_probe ,
. remove = locomoled_remove ,
} ;
static int __init locomoled_init ( void )
{
return locomo_driver_register ( & locomoled_driver ) ;
}
module_init ( locomoled_init ) ;
MODULE_AUTHOR ( " John Lenz <lenz@cs.wisc.edu> " ) ;
MODULE_DESCRIPTION ( " Locomo LED driver " ) ;
MODULE_LICENSE ( " GPL " ) ;