r2956 - trunk/src/target/OM-2007.2/daemons/neod/src
mickey at sita.openmoko.org
mickey at sita.openmoko.org
Wed Sep 12 16:28:16 CEST 2007
Author: mickey
Date: 2007-09-12 16:28:14 +0200 (Wed, 12 Sep 2007)
New Revision: 2956
Modified:
trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
Log:
neod: get the name of the (first) backlight device node from sysfs
This makes neod controlling brightness on all devices with LCD backlight class
Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-09-11 20:41:25 UTC (rev 2955)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2007-09-12 14:28:14 UTC (rev 2956)
@@ -42,9 +42,11 @@
#undef DEBUG_THIS_FILE
//#define DEBUG_THIS_FILE
-//FIXME load this from sysfs
-static const int MAX_BRIGHTNESS = 5000;
+#define SYS_CLASS_BACKLIGHT "/sys/class/backlight/"
+static gchar* backlight_node = NULL;
+static int backlight_max_brightness = 1;
+
#define AUX_BUTTON_KEYCODE 0x22
#define POWER_BUTTON_KEYCODE 0x23
#define TOUCHSCREEN_BUTTON_KEYCODE 0x14a
@@ -676,14 +678,49 @@
void neod_buttonactions_set_display( int brightness )
{
- g_debug( "mainmenu set display %d", brightness );
- int fd = g_open( "/sys/class/backlight/gta01-bl/brightness", O_WRONLY, 0 );
+ g_debug( "requested to set display brightness %d", brightness );
+
+ if ( !backlight_node )
+ {
+ GDir* backlight_class_dir = g_dir_open( SYS_CLASS_BACKLIGHT, 0, NULL );
+ if ( backlight_class_dir )
+ {
+ const gchar* backlight_node_dir = g_dir_read_name( backlight_class_dir );
+ if ( backlight_node_dir )
+ {
+ g_debug( "backlight_node_dir = %s", backlight_node_dir );
+ backlight_node = g_strdup_printf( SYS_CLASS_BACKLIGHT "%s/brightness", backlight_node_dir );
+ g_debug( "detected backlight in sysfs as '%s'", backlight_node );
+ const gchar* backlight_node_max_brightness = g_strdup_printf( SYS_CLASS_BACKLIGHT "%s/max_brightness", backlight_node_dir );
+
+ FILE* f = fopen( backlight_node_max_brightness, "r" );
+ if ( f == NULL )
+ {
+ g_debug( "can't open max brightness '%s': (%s), aborting.", backlight_node_max_brightness, strerror( errno ) );
+ g_dir_close( backlight_class_dir );
+ return;
+ }
+ fscanf( f, "%d", &backlight_max_brightness );
+ fclose( f );
+ g_debug( "scanned maximum brightness for '%s' = '%d'", backlight_node, backlight_max_brightness );
+ g_dir_close( backlight_class_dir );
+ }
+ }
+ else
+ {
+ g_debug( "can't open '%s': (%s), aborting.", SYS_CLASS_BACKLIGHT, strerror( errno ) );
+ return;
+ }
+ }
+
+ int fd = g_open( backlight_node, O_WRONLY, 0 );
if ( fd == -1 )
- g_debug( "can't open backlight device: %s", strerror( errno ) );
+ g_debug( "can't open backlight device '%s'(%s)", backlight_node, strerror( errno ) );
else
{
char buf[10];
- int numbytes = g_sprintf( buf, "%d\0", MAX_BRIGHTNESS / 100 * (brightness+1 ) );
+ int numbytes = g_sprintf( buf, "%d\0", backlight_max_brightness * brightness / 100 );
+ g_debug( "writing '%s' to '%s'", buf, backlight_node );
write( fd, buf, numbytes );
close( fd );
}
More information about the commitlog
mailing list