Index: linux-2.6.15-rc2/arch/arm/mach-pxa/corgi.c
===================================================================
--- linux-2.6.15-rc2.orig/arch/arm/mach-pxa/corgi.c	2006-01-08 20:15:11.198734560 +0100
+++ linux-2.6.15-rc2/arch/arm/mach-pxa/corgi.c	2006-01-09 09:27:12.874341760 +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.15-rc2/arch/arm/mach-pxa/spitz.c
===================================================================
--- linux-2.6.15-rc2.orig/arch/arm/mach-pxa/spitz.c	2006-01-08 20:15:11.198734560 +0100
+++ linux-2.6.15-rc2/arch/arm/mach-pxa/spitz.c	2006-01-09 09:27:13.147300264 +0100
@@ -219,6 +219,8 @@
  * Spitz Backlight Device
  */
 static struct corgibl_machinfo spitz_bl_machinfo = {
+	.default_intensity = 0x1f,
+	.limit_mask = 0x0b,
 	.max_intensity = 0x2f,
 };
 
Index: linux-2.6.15-rc2/drivers/video/backlight/Kconfig
===================================================================
--- linux-2.6.15-rc2.orig/drivers/video/backlight/Kconfig	2006-01-08 20:15:11.198734560 +0100
+++ linux-2.6.15-rc2/drivers/video/backlight/Kconfig	2006-01-08 20:45:15.856384896 +0100
@@ -43,11 +43,11 @@
 	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_HX2750
Index: linux-2.6.15-rc2/include/asm-arm/arch-pxa/sharpsl.h
===================================================================
--- linux-2.6.15-rc2.orig/include/asm-arm/arch-pxa/sharpsl.h	2006-01-08 20:15:11.199734408 +0100
+++ linux-2.6.15-rc2/include/asm-arm/arch-pxa/sharpsl.h	2006-01-08 20:45:15.856384896 +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.15-rc2/drivers/video/backlight/corgi_bl.c
===================================================================
--- linux-2.6.15-rc2.orig/drivers/video/backlight/corgi_bl.c	2006-01-08 20:15:11.199734408 +0100
+++ linux-2.6.15-rc2/drivers/video/backlight/corgi_bl.c	2006-01-08 20:45:15.857384744 +0100
@@ -15,40 +15,35 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
-#include <linux/spinlock.h>
 #include <linux/fb.h>
 #include <linux/backlight.h>
 
 #include <asm/arch/sharpsl.h>
 #include <asm/hardware/sharpsl_pm.h>
-
-#define CORGI_DEFAULT_INTENSITY		0x1f
-#define CORGI_LIMIT_MASK		0x0b
+#include <asm/semaphore.h>
 
 static int corgibl_powermode = FB_BLANK_UNBLANK;
 static int current_intensity = 0;
 static int corgibl_limit = 0;
+static int limit_mask;
 static void (*corgibl_mach_set_intensity)(int intensity);
-static spinlock_t bl_lock = SPIN_LOCK_UNLOCKED;
+static struct semaphore bl_sem;
 static struct backlight_properties corgibl_data;
 
 static void corgibl_send_intensity(int intensity)
 {
-	unsigned long flags;
 	void (*corgi_kick_batt)(void);
 
 	if (corgibl_powermode != FB_BLANK_UNBLANK) {
 		intensity = 0;
 	} else {
 		if (corgibl_limit)
-			intensity &= CORGI_LIMIT_MASK;
+			intensity &= limit_mask;
 	}
 
-	spin_lock_irqsave(&bl_lock, flags);
-
+	down(&bl_sem);
 	corgibl_mach_set_intensity(intensity);
-
-	spin_unlock_irqrestore(&bl_lock, flags);
+	up(&bl_sem);
 
  	corgi_kick_batt = symbol_get(sharpsl_battery_kick);
  	if (corgi_kick_batt) {
@@ -148,15 +143,20 @@
 {
 	struct corgibl_machinfo *machinfo = pdev->dev.platform_data;
 
+	sema_init(&bl_sem, 1);
 	corgibl_data.max_brightness = machinfo->max_intensity;
 	corgibl_mach_set_intensity = machinfo->set_bl_intensity;
+	if (machinfo->limit_mask)
+		limit_mask = machinfo->limit_mask;
+	else
+		limit_mask = -1;
 
 	corgi_backlight_device = backlight_device_register ("corgi-bl",
 		NULL, &corgibl_data);
 	if (IS_ERR (corgi_backlight_device))
 		return PTR_ERR (corgi_backlight_device);
 
-	corgibl_set_intensity(NULL, CORGI_DEFAULT_INTENSITY);
+	corgibl_set_intensity(NULL, machinfo->default_intensity);
 	corgibl_limit_intensity(0);
 
 	printk("Corgi Backlight Driver Initialized.\n");
