2019-06-04 11:11:33 +03:00
// SPDX-License-Identifier: GPL-2.0-only
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 >
*/
# include <linux/kernel.h>
# include <linux/init.h>
2011-07-03 21:56:03 +04:00
# include <linux/module.h>
2006-03-31 14:31:10 +04:00
# include <linux/device.h>
# include <linux/leds.h>
2008-08-05 19:14:15 +04:00
# include <mach/hardware.h>
2006-03-31 14:31:10 +04:00
# 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 " ,
2009-02-10 15:21:42 +03:00
. default_trigger = " main-battery-charging " ,
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 ;
2015-10-17 00:33:03 +03:00
ret = devm_led_classdev_register ( & ldev - > dev , & locomo_led0 ) ;
2006-03-31 14:31:10 +04:00
if ( ret < 0 )
return ret ;
2015-10-17 00:33:03 +03:00
return devm_led_classdev_register ( & ldev - > dev , & locomo_led1 ) ;
2006-03-31 14:31:10 +04:00
}
static struct locomo_driver locomoled_driver = {
. drv = {
. name = " locomoled "
} ,
. devid = LOCOMO_DEVID_LED ,
. probe = locomoled_probe ,
} ;
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 " ) ;