Index: linux-2.6.16/arch/arm/mach-pxa/corgi.c =================================================================== --- linux-2.6.16.orig/arch/arm/mach-pxa/corgi.c 2006-03-26 17:04:28.000000000 +0100 +++ linux-2.6.16/arch/arm/mach-pxa/corgi.c 2006-03-26 23:09:00.000000000 +0100 @@ -142,6 +142,8 @@ */ static struct corgibl_machinfo corgi_bl_machinfo = { .max_intensity = 0x2f, + .default_intensity = 0x1f, + .limit_mask = 0x0b, .set_bl_intensity = corgi_bl_set_intensity, }; Index: linux-2.6.16/arch/arm/mach-pxa/spitz.c =================================================================== --- linux-2.6.16.orig/arch/arm/mach-pxa/spitz.c 2006-03-26 17:04:28.000000000 +0100 +++ linux-2.6.16/arch/arm/mach-pxa/spitz.c 2006-03-26 23:09:00.000000000 +0100 @@ -221,6 +221,8 @@ * Spitz Backlight Device */ static struct corgibl_machinfo spitz_bl_machinfo = { + .default_intensity = 0x1f, + .limit_mask = 0x0b, .max_intensity = 0x2f, }; Index: linux-2.6.16/drivers/video/backlight/Kconfig =================================================================== --- linux-2.6.16.orig/drivers/video/backlight/Kconfig 2006-03-26 17:04:28.000000000 +0100 +++ linux-2.6.16/drivers/video/backlight/Kconfig 2006-03-26 19:01:13.000000000 +0100 @@ -43,17 +43,17 @@ default y config BACKLIGHT_CORGI - tristate "Sharp Corgi Backlight Driver (SL-C7xx Series)" + tristate "Sharp Corgi Backlight Driver (SL Series)" depends on BACKLIGHT_DEVICE && PXA_SHARPSL default y help - If you have a Sharp Zaurus SL-C7xx, say y to enable the + If you have a Sharp Zaurus SL-C7xx, SL-Cxx00 or SL-6000x say y to enable the backlight driver. config BACKLIGHT_HP680 tristate "HP Jornada 680 Backlight Driver" - depends on BACKLIGHT_DEVICE && SH_HP6XX - default y + depends on BACKLIGHT_DEVICE + default n help If you have a HP Jornada 680, say y to enable the backlight driver. Index: linux-2.6.16/include/asm-arm/arch-pxa/sharpsl.h =================================================================== --- linux-2.6.16.orig/include/asm-arm/arch-pxa/sharpsl.h 2006-03-26 17:04:28.000000000 +0100 +++ linux-2.6.16/include/asm-arm/arch-pxa/sharpsl.h 2006-03-26 18:38:54.000000000 +0100 @@ -27,6 +27,8 @@ */ struct corgibl_machinfo { int max_intensity; + int default_intensity; + int limit_mask; void (*set_bl_intensity)(int intensity); }; extern void corgibl_limit_intensity(int limit); Index: linux-2.6.16/drivers/video/backlight/corgi_bl.c =================================================================== --- linux-2.6.16.orig/drivers/video/backlight/corgi_bl.c 2006-03-26 18:07:27.000000000 +0100 +++ linux-2.6.16/drivers/video/backlight/corgi_bl.c 2006-03-26 18:44:52.000000000 +0100 @@ -1,7 +1,7 @@ /* - * Backlight Driver for Sharp Corgi + * Backlight Driver for Sharp Zaurus Handhelds (various models) * - * Copyright (c) 2004-2005 Richard Purdie + * Copyright (c) 2004-2006 Richard Purdie * * Based on Sharp's 2.4 Backlight Driver * @@ -15,21 +15,17 @@ #include #include #include -#include +#include #include #include - #include #include -#define CORGI_DEFAULT_INTENSITY 0x1f -#define CORGI_LIMIT_MASK 0x0b - static int corgibl_intensity; -static void (*corgibl_mach_set_intensity)(int intensity); -static spinlock_t bl_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_MUTEX(bl_mutex); static struct backlight_properties corgibl_data; static struct backlight_device *corgi_backlight_device; +static struct corgibl_machinfo *bl_machinfo; static unsigned long corgibl_flags; #define CORGIBL_SUSPENDED 0x01 @@ -37,7 +33,6 @@ static int corgibl_send_intensity(struct backlight_device *bd) { - unsigned long flags; void (*corgi_kick_batt)(void); int intensity = bd->props->brightness; @@ -48,13 +43,11 @@ if (corgibl_flags & CORGIBL_SUSPENDED) intensity = 0; if (corgibl_flags & CORGIBL_BATTLOW) - intensity &= CORGI_LIMIT_MASK; - - spin_lock_irqsave(&bl_lock, flags); - - corgibl_mach_set_intensity(intensity); + intensity &= bl_machinfo->limit_mask; - spin_unlock_irqrestore(&bl_lock, flags); + mutex_lock(&bl_mutex); + bl_machinfo->set_bl_intensity(intensity); + mutex_unlock(&bl_mutex); corgibl_intensity = intensity; @@ -122,8 +115,10 @@ { struct corgibl_machinfo *machinfo = pdev->dev.platform_data; + bl_machinfo = machinfo; corgibl_data.max_brightness = machinfo->max_intensity; - corgibl_mach_set_intensity = machinfo->set_bl_intensity; + if (!machinfo->limit_mask) + machinfo->limit_mask = -1; corgi_backlight_device = backlight_device_register ("corgi-bl", NULL, &corgibl_data); @@ -131,7 +126,7 @@ return PTR_ERR (corgi_backlight_device); corgibl_data.power = FB_BLANK_UNBLANK; - corgibl_data.brightness = CORGI_DEFAULT_INTENSITY; + corgibl_data.brightness = machinfo->default_intensity; corgibl_send_intensity(corgi_backlight_device); printk("Corgi Backlight Driver Initialized.\n");