diff -urN kernel26/arch/arm/mach-pxa/h4000/h4000_lcd.c kernel26_x/arch/arm/mach-pxa/h4000/h4000_lcd.c
--- kernel26/arch/arm/mach-pxa/h4000/h4000_lcd.c	2006-01-31 23:12:56.000000000 -0700
+++ kernel26_x/arch/arm/mach-pxa/h4000/h4000_lcd.c	2006-02-05 01:48:36.000000000 -0700
@@ -29,6 +29,7 @@
 #include <linux/soc/asic3_base.h>
 
 extern struct platform_device h4000_asic3;
+static int saved_brightness;
 
 static int h4000_lcd_get_power(struct lcd_device *lm)
 {
@@ -48,7 +49,7 @@
 {
 	 /* Enable or disable power to the LCD (0: on; 4: off) */
 
-	if ( power < 1 ) {
+	if (power == 0) {
 		ipaq_asic3_set_gpio_out_c(&h4000_asic3.dev,
 				GPIOC_LCD_3V3_ON, GPIOC_LCD_3V3_ON);
 		mdelay(30);
@@ -61,6 +62,8 @@
 		ipaq_asic3_set_gpio_out_c(&h4000_asic3.dev,
 				GPIOC_LCD_5V_EN, GPIOC_LCD_5V_EN);
 		mdelay(5);
+		ipaq_asic3_set_gpio_out_b(&h4000_asic3.dev,
+				GPIOB_LCD_PCI, GPIOB_LCD_PCI);
 	} else {
 		mdelay(5);
 		ipaq_asic3_set_gpio_out_c(&h4000_asic3.dev, GPIOC_LCD_5V_EN, 0);
@@ -70,17 +73,9 @@
 		ipaq_asic3_set_gpio_out_c(&h4000_asic3.dev, GPIOC_LCD_N3V_EN,0);
 		mdelay(100);
 		ipaq_asic3_set_gpio_out_c(&h4000_asic3.dev, GPIOC_LCD_3V3_ON,0);
-	}
-
-	if ( power < 4 ) {
-		mdelay(17);     // Wait one from before turning on
-		ipaq_asic3_set_gpio_out_b(&h4000_asic3.dev,
-				GPIOB_LCD_PCI, GPIOB_LCD_PCI);
-	} else {
 		ipaq_asic3_set_gpio_out_b (&h4000_asic3.dev, GPIOB_LCD_PCI, 0);
-		mdelay(30);     // Wait before turning off
 	}
-	
+
 	return 0;
 }
 
@@ -113,7 +108,7 @@
 {
 	/* Enable or disable power to the LCD (0: on; 4: off) */
 
-	if (power < 1)
+	if (power == 0)
 		ipaq_asic3_set_gpio_out_b(&h4000_asic3.dev,
 			GPIOB_BACKLIGHT_POWER_ON, GPIOB_BACKLIGHT_POWER_ON);
 	else
@@ -195,25 +190,23 @@
 
 static int h4000_lcd_remove(struct device * dev)
 {
-	backlight_device_unregister(h4000_bl_dev);
-	lcd_device_unregister(h4000_lcd_dev);
 	h4000_lcd_set_power(h4000_lcd_dev, 4);
 	h4000_bl_set_power(h4000_bl_dev, 4);
+	backlight_device_unregister(h4000_bl_dev);
+	lcd_device_unregister(h4000_lcd_dev);
 
 	return 0;
 }
 
 static int h4000_lcd_suspend(struct device * dev, pm_message_t state)
 {
-	h4000_bl_set_power(h4000_bl_dev, 4);
-	h4000_lcd_set_power(h4000_lcd_dev, 4);
+	saved_brightness = h4000_bl_get_brightness(h4000_bl_dev);
 	return 0;
 }
 
 static int h4000_lcd_resume(struct device * dev)
 {
-	h4000_lcd_set_power(h4000_lcd_dev, 0);
-	h4000_bl_set_power(h4000_bl_dev, 0);
+	h4000_bl_set_brightness(h4000_bl_dev, saved_brightness);
 	return 0;
 }
 

