2007-02-13 02:16:27 +03:00
/*
* Copyright 2006 - Florian Fainelli < florian @ openwrt . org >
*
* Control the Cobalt Qube / RaQ front LED
*/
2007-09-27 12:51:17 +04:00
# include <linux/init.h>
# include <linux/io.h>
# include <linux/ioport.h>
# include <linux/leds.h>
2007-02-13 02:16:27 +03:00
# include <linux/module.h>
2007-09-27 12:51:17 +04:00
# include <linux/platform_device.h>
2007-02-13 02:16:27 +03:00
# include <linux/types.h>
2007-09-27 12:51:17 +04:00
# define LED_FRONT_LEFT 0x01
# define LED_FRONT_RIGHT 0x02
static void __iomem * led_port ;
static u8 led_value ;
static void qube_front_led_set ( struct led_classdev * led_cdev ,
2008-03-09 23:59:57 +03:00
enum led_brightness brightness )
2007-02-13 02:16:27 +03:00
{
if ( brightness )
2007-09-27 12:51:17 +04:00
led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT ;
2007-02-13 02:16:27 +03:00
else
2007-09-27 12:51:17 +04:00
led_value = ~ ( LED_FRONT_LEFT | LED_FRONT_RIGHT ) ;
writeb ( led_value , led_port ) ;
}
static struct led_classdev qube_front_led = {
2009-09-07 17:37:27 +04:00
. name = " qube::front " ,
2007-09-27 12:51:17 +04:00
. brightness = LED_FULL ,
. brightness_set = qube_front_led_set ,
2009-11-26 21:41:02 +03:00
. default_trigger = " default-on " ,
2007-09-27 12:51:17 +04:00
} ;
static int __devinit cobalt_qube_led_probe ( struct platform_device * pdev )
{
struct resource * res ;
int retval ;
res = platform_get_resource ( pdev , IORESOURCE_MEM , 0 ) ;
if ( ! res )
return - EBUSY ;
2009-12-12 00:50:58 +03:00
led_port = ioremap ( res - > start , resource_size ( res ) ) ;
2007-09-27 12:51:17 +04:00
if ( ! led_port )
return - ENOMEM ;
led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT ;
writeb ( led_value , led_port ) ;
retval = led_classdev_register ( & pdev - > dev , & qube_front_led ) ;
if ( retval )
goto err_iounmap ;
return 0 ;
err_iounmap :
iounmap ( led_port ) ;
led_port = NULL ;
return retval ;
}
static int __devexit cobalt_qube_led_remove ( struct platform_device * pdev )
{
led_classdev_unregister ( & qube_front_led ) ;
if ( led_port ) {
iounmap ( led_port ) ;
led_port = NULL ;
}
return 0 ;
2007-02-13 02:16:27 +03:00
}
2007-09-27 12:51:17 +04:00
static struct platform_driver cobalt_qube_led_driver = {
. probe = cobalt_qube_led_probe ,
. remove = __devexit_p ( cobalt_qube_led_remove ) ,
. driver = {
. name = " cobalt-qube-leds " ,
. owner = THIS_MODULE ,
} ,
2007-02-13 02:16:27 +03:00
} ;
2012-01-11 03:09:24 +04:00
module_platform_driver ( cobalt_qube_led_driver ) ;
2007-02-13 02:16:27 +03:00
MODULE_LICENSE ( " GPL " ) ;
MODULE_DESCRIPTION ( " Front LED support for Cobalt Server " ) ;
MODULE_AUTHOR ( " Florian Fainelli <florian@openwrt.org> " ) ;
2012-01-11 03:09:24 +04:00
MODULE_ALIAS ( " platform:cobalt-qube-leds " ) ;