diff -Naru kernel26.orig/arch/arm/mach-pxa/htcsable/htcsable.c kernel26/arch/arm/mach-pxa/htcsable/htcsable.c
--- kernel26.orig/arch/arm/mach-pxa/htcsable/htcsable.c	2007-09-10 16:30:25.000000000 +0200
+++ kernel26/arch/arm/mach-pxa/htcsable/htcsable.c	2008-03-11 00:43:32.000000000 +0100
@@ -28,6 +28,7 @@
 #include <asm/arch/htcsable-asic.h>
 
 #include <asm/hardware/ipaq-asic3.h>
+#include <asm/hardware/asic3_leds.h>
 #include <linux/mfd/asic3_base.h>
 #include <linux/mfd/tmio_mmc.h>
 
@@ -131,6 +132,75 @@
 };
 #endif
 
+/* LEDs */
+static struct asic3_led htcsable_leds[] = {
+	{
+		.led_cdev  = {
+			.name	         = "sable:blue",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = 1,
+	},
+	{
+		.led_cdev  = {
+			.name	         = "sable:green",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = 2,
+	},
+	{
+		.led_cdev  = {
+			.name	         = "sable:amber",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = -1,
+		.gpio_num = ('C'-'A')*16+GPIOC_LED_AMBER,
+	},
+	{
+		.led_cdev  = {
+			.name	         = "sable:keypad",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = -1,
+		.gpio_num = ('D'-'A')*16+GPIOD_KEYPAD_BACKLIGHT,
+	},
+	{
+		.led_cdev  = {
+			.name	         = "sable:keyboard",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = -1,
+		.gpio_num = ('D'-'A')*16+GPIOD_KBD_BACKLIGHT,
+	},
+	{
+		.led_cdev  = {
+			.name	         = "sable:vibra",
+/*			.default_trigger = "", */
+			.flags = LED_SUPPORTS_HWTIMER,
+		},
+		.hw_num = -1,
+		.gpio_num = ('D'-'A')*16+GPIOD_VIBRATE,
+	},
+};
+
+static struct asic3_leds_machinfo htcsable_leds_machinfo = {
+	.num_leds = ARRAY_SIZE(htcsable_leds),
+	.leds = htcsable_leds,
+	.asic3_pdev = &htcsable_asic3,
+};
+
+static struct platform_device htcsable_leds_pdev = {
+	.name = "asic3-leds",
+	.dev = {
+		.platform_data = &htcsable_leds_machinfo,
+	},
+};
+
 static struct platform_device *htcsable_asic3_devices[] __initdata = {
 	&htcsable_ts,
 	&htcsable_kbd,
@@ -147,6 +217,7 @@
 	&htcsable_phone,
 #endif
 	&htcsable_udc,
+	&htcsable_leds_pdev,
 };
 
 static struct tmio_mmc_hwconfig htcsable_mmc_hwconfig = {
diff -Naru kernel26.orig/include/asm-arm/arch-pxa/htcsable-asic.h kernel26/include/asm-arm/arch-pxa/htcsable-asic.h
--- kernel26.orig/include/asm-arm/arch-pxa/htcsable-asic.h	2007-04-21 21:01:10.000000000 +0200
+++ kernel26/include/asm-arm/arch-pxa/htcsable-asic.h	2008-03-11 00:43:22.000000000 +0100
@@ -43,6 +43,7 @@
 
 /* ASIC3 GPIO C bank */
 
+#define GPIOC_LED_AMBER		2	/*  Output */	/* Amber LED */
 #define GPIOC_BT_RESET       7  /*  Output */
 #define GPIOC_PHONE_4        12  /*  Output */ /* phone-related: not sure of name or purpose */
 #define GPIOC_ACX_RESET   8  /* Output */ /* acx wifi reset */
@@ -61,6 +62,8 @@
 #define GPIOD_PHONE_2     8  /* Output */ /* phone-related: not sure of name or purpose */
 #define GPIOD_VIBRATE     10  /* Output */ /* vibrate */
 #define GPIOD_LCD_BACKLIGHT 		12	/* Output */
+#define GPIOD_KEYPAD_BACKLIGHT 		14	/* Output */ /* Keypad backlight */
+#define GPIOD_KBD_BACKLIGHT 		15	/* Output */ /* Keyboard backlight */
 
 extern struct platform_device htcsable_asic3;
 

