diff -Nur linux-2.6.16/arch/arm/mach-pxa/corgi_lcd.c linux-2.6.16-pxafb-spitz/arch/arm/mach-pxa/corgi_lcd.c
--- linux-2.6.16/arch/arm/mach-pxa/corgi_lcd.c	2006-03-20 05:53:29.000000000 +0000
+++ linux-2.6.16-pxafb-spitz/arch/arm/mach-pxa/corgi_lcd.c	2006-04-21 09:37:25.000000000 +0000
@@ -433,7 +433,9 @@
 
 void spitz_lcd_power(int on)
 {
-	if (on)
+	if (on == 240)
+		lcdtg_hw_init(240);
+	else if (on)
 		lcdtg_hw_init(480);
 	else
 		lcdtg_suspend();
diff -Nur linux-2.6.16/drivers/video/pxafb.c linux-2.6.16-pxafb-spitz/drivers/video/pxafb.c
--- linux-2.6.16/drivers/video/pxafb.c	2006-04-21 09:49:03.000000000 +0000
+++ linux-2.6.16-pxafb-spitz/drivers/video/pxafb.c	2006-04-21 09:43:54.000000000 +0000
@@ -55,6 +55,46 @@
 
 #include "pxafb.h"
 
+#ifdef CONFIG_PXA_SHARP_Cxx00
+static struct pxafb_mach_info lcd_pxafb_info [] = {
+    {
+        .pixclock       = 19231,
+        .xres           = 480,
+        .yres           = 640,
+        .bpp            = 16,
+        .hsync_len      = 40,
+        .left_margin    = 46,
+        .right_margin   = 125,
+        .vsync_len      = 3,
+        .upper_margin   = 1,
+        .lower_margin   = 0,
+        .sync           = 0,
+        .lccr0          = LCCR0_Color | LCCR0_Sngl | LCCR0_Act | LCCR0_LDDALT | LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM,
+        .lccr3          = LCCR3_PixRsEdg | LCCR3_OutEnH,
+    },
+    {
+        .pixclock       = 134617,
+        .xres           = 240,
+        .yres           = 320,
+        .bpp            = 16,
+        .hsync_len      = 20,
+        .left_margin    = 20,
+        .right_margin   = 46,
+        .vsync_len      = 2,
+        .upper_margin   = 1,
+        .lower_margin   = 0,
+        .sync           = 0,
+        .lccr0          = LCCR0_Color | LCCR0_Sngl | LCCR0_Act | LCCR0_LDDALT | LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM,
+        .lccr3          = LCCR3_PixRsEdg | LCCR3_OutEnH,
+    },
+};
+
+#define SCREEN_VGA	0
+#define SCREEN_QVGA	1
+
+static unsigned int current_mode = SCREEN_VGA;
+#endif
+
 /* Bits which should not be set in machine configuration structures */
 #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB)
 #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP)
@@ -241,6 +281,26 @@
 	var->yres_virtual =
 		max(var->yres_virtual, var->yres);
 
+#ifdef CONFIG_PXA_SHARP_Cxx00
+	if (var->xres <= 240)
+	    current_mode = SCREEN_QVGA;
+	else
+	    current_mode = SCREEN_VGA;
+	var->pixclock     = lcd_pxafb_info[current_mode].pixclock;
+	var->xres         = lcd_pxafb_info[current_mode].xres;
+	var->yres         = lcd_pxafb_info[current_mode].yres;
+	var->bits_per_pixel = lcd_pxafb_info[current_mode].bpp;
+	var->hsync_len    = lcd_pxafb_info[current_mode].hsync_len;
+	var->left_margin  = lcd_pxafb_info[current_mode].left_margin;
+	var->right_margin = lcd_pxafb_info[current_mode].right_margin;
+	var->vsync_len    = lcd_pxafb_info[current_mode].vsync_len;
+	var->upper_margin = lcd_pxafb_info[current_mode].upper_margin;
+	var->lower_margin = lcd_pxafb_info[current_mode].lower_margin;
+	var->sync         = lcd_pxafb_info[current_mode].sync;
+	var->xres_virtual = var->xres;
+	var->yres_virtual = var->yres;
+#endif
+
         /*
 	 * Setup the RGB parameters for this display.
 	 *
@@ -699,7 +759,12 @@
 	pr_debug("pxafb: LCD power o%s\n", on ? "n" : "ff");
 
 	if (pxafb_lcd_power)
+#ifdef CONFIG_PXA_SHARP_Cxx00
+		pxafb_lcd_power(on?((current_mode==SCREEN_QVGA)?240:480):0);
+	printk("pxafb: Power mode %d\n", on?((current_mode==SCREEN_QVGA)?240:480):0);
+#else
 		pxafb_lcd_power(on);
+#endif
 }
 
 static void pxafb_setup_gpio(struct pxafb_info *fbi)
@@ -977,9 +977,11 @@
 		if (old_state == C_ENABLE) {
 			if(fbi->set_overlay_ctrlr_state)
 				fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
+			__pxafb_lcd_power(fbi, 0);
 			pxafb_disable_controller(fbi);
 			pxafb_setup_gpio(fbi);
 			pxafb_enable_controller(fbi);
+			__pxafb_lcd_power(fbi, 1);
 			if(fbi->set_overlay_ctrlr_state)
 				fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
 		}

