2009-01-08 23:52:37 +03:00
/*
* Generic Backlight Driver
*
* Copyright ( c ) 2004 - 2008 Richard Purdie
*
* 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/module.h>
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/mutex.h>
# include <linux/fb.h>
# include <linux/backlight.h>
static int genericbl_intensity ;
static struct backlight_device * generic_backlight_device ;
static struct generic_bl_info * bl_machinfo ;
/* Flag to signal when the battery is low */
# define GENERICBL_BATTLOW BL_CORE_DRIVER1
static int genericbl_send_intensity ( struct backlight_device * bd )
{
int intensity = bd - > props . brightness ;
if ( bd - > props . power ! = FB_BLANK_UNBLANK )
intensity = 0 ;
if ( bd - > props . state & BL_CORE_FBBLANK )
intensity = 0 ;
if ( bd - > props . state & BL_CORE_SUSPENDED )
intensity = 0 ;
if ( bd - > props . state & GENERICBL_BATTLOW )
intensity & = bl_machinfo - > limit_mask ;
bl_machinfo - > set_bl_intensity ( intensity ) ;
genericbl_intensity = intensity ;
if ( bl_machinfo - > kick_battery )
bl_machinfo - > kick_battery ( ) ;
return 0 ;
}
static int genericbl_get_intensity ( struct backlight_device * bd )
{
return genericbl_intensity ;
}
2009-12-14 02:58:57 +03:00
static const struct backlight_ops genericbl_ops = {
2009-01-08 23:52:37 +03:00
. options = BL_CORE_SUSPENDRESUME ,
. get_brightness = genericbl_get_intensity ,
. update_status = genericbl_send_intensity ,
} ;
static int genericbl_probe ( struct platform_device * pdev )
{
2010-02-18 00:39:44 +03:00
struct backlight_properties props ;
2013-11-13 03:09:04 +04:00
struct generic_bl_info * machinfo = dev_get_platdata ( & pdev - > dev ) ;
2009-01-08 23:52:37 +03:00
const char * name = " generic-bl " ;
struct backlight_device * bd ;
bl_machinfo = machinfo ;
if ( ! machinfo - > limit_mask )
machinfo - > limit_mask = - 1 ;
if ( machinfo - > name )
name = machinfo - > name ;
2010-02-18 00:39:44 +03:00
memset ( & props , 0 , sizeof ( struct backlight_properties ) ) ;
2011-03-23 02:30:21 +03:00
props . type = BACKLIGHT_RAW ;
2010-02-18 00:39:44 +03:00
props . max_brightness = machinfo - > max_intensity ;
2013-11-13 03:09:15 +04:00
bd = devm_backlight_device_register ( & pdev - > dev , name , & pdev - > dev ,
NULL , & genericbl_ops , & props ) ;
2012-12-18 04:00:17 +04:00
if ( IS_ERR ( bd ) )
return PTR_ERR ( bd ) ;
2009-01-08 23:52:37 +03:00
platform_set_drvdata ( pdev , bd ) ;
bd - > props . power = FB_BLANK_UNBLANK ;
bd - > props . brightness = machinfo - > default_intensity ;
backlight_update_status ( bd ) ;
generic_backlight_device = bd ;
2013-04-30 03:17:33 +04:00
dev_info ( & pdev - > dev , " Generic Backlight Driver Initialized. \n " ) ;
2009-01-08 23:52:37 +03:00
return 0 ;
}
static int genericbl_remove ( struct platform_device * pdev )
{
struct backlight_device * bd = platform_get_drvdata ( pdev ) ;
bd - > props . power = 0 ;
bd - > props . brightness = 0 ;
backlight_update_status ( bd ) ;
2013-04-30 03:17:33 +04:00
dev_info ( & pdev - > dev , " Generic Backlight Driver Unloaded \n " ) ;
2009-01-08 23:52:37 +03:00
return 0 ;
}
static struct platform_driver genericbl_driver = {
. probe = genericbl_probe ,
. remove = genericbl_remove ,
. driver = {
. name = " generic-bl " ,
} ,
} ;
2012-01-11 03:09:11 +04:00
module_platform_driver ( genericbl_driver ) ;
2009-01-08 23:52:37 +03:00
MODULE_AUTHOR ( " Richard Purdie <rpurdie@rpsys.net> " ) ;
MODULE_DESCRIPTION ( " Generic Backlight Driver " ) ;
MODULE_LICENSE ( " GPL " ) ;