Index: linux-2.6.21.7/arch/arm/mach-pxa/gumstix.c =================================================================== --- linux-2.6.21.7.orig/arch/arm/mach-pxa/gumstix.c +++ linux-2.6.21.7/arch/arm/mach-pxa/gumstix.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "generic.h" @@ -90,6 +91,89 @@ static struct platform_device gum_audio_ .id = -1, }; + +#if defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) || defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) +static void gumstix_lcd_backlight(int on_or_off) +{ + if(on_or_off) + { + pxa_gpio_mode(17 | GPIO_IN); + } else { + GPCR(17) = GPIO_bit(17); + pxa_gpio_mode(17 | GPIO_OUT); + GPCR(17) = GPIO_bit(17); + } +} +#endif + + +#ifdef CONFIG_FB_PXA_ALPS_CDOLLAR +static struct pxafb_mode_info gumstix_fb_mode = { + .pixclock = 300000, + .xres = 240, + .yres = 320, + .bpp = 16, + .hsync_len = 2, + .left_margin = 1, + .right_margin = 1, + .vsync_len = 3, + .upper_margin = 0, + .lower_margin = 0, + .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, +}; + +static struct pxafb_mach_info gumstix_fb_info = { + .modes = &gumstix_fb_mode, + .num_modes = 1, + .lccr0 = LCCR0_Pas | LCCR0_Sngl | LCCR0_Color, + .lccr3 = 0, +}; +#elif defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) +static struct pxafb_mode_info gumstix_fb_mode = { + .pixclock = 110000, + .xres = 480, + .yres = 272, + .bpp = 16, + .hsync_len = 41, + .left_margin = 2, + .right_margin = 2, + .vsync_len = 10, + .upper_margin = 2, + .lower_margin = 2, + .sync = 0, // Hsync and Vsync both active low +}; + +static struct pxafb_mach_info gumstix_fb_info = { + .modes = &gumstix_fb_mode, + .num_modes = 1, + .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color, + .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (3 << 30), + .pxafb_backlight_power = &gumstix_lcd_backlight, +}; +#elif defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) +static struct pxafb_mode_info gumstix_fb_mode = { + .pixclock = 108696, // 9.2MHz typical DOTCLK from datasheet + .xres = 480, + .hsync_len = 41, // HLW from datasheet: 41 typ + .left_margin = 4, // HBP - HLW from datasheet: 45 - 41 = 4 + .right_margin = 8, // HFP from datasheet: 8 typ + .yres = 272, + .vsync_len = 10, // VLW from datasheet: 10 typ + .upper_margin = 2, // VBP - VLW from datasheet: 12 - 10 = 2 + .lower_margin = 4, // VFP from datasheet: 4 typ + .bpp = 16, + .sync = 0, // Hsync and Vsync both active low +}; + +static struct pxafb_mach_info gumstix_fb_info = { + .modes = &gumstix_fb_mode, + .num_modes = 1, + .lccr0 = LCCR0_Act | LCCR0_Sngl | LCCR0_Color, + .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | (3 << 30), + .pxafb_backlight_power = &gumstix_lcd_backlight, +}; +#endif + static struct platform_device *devices[] __initdata = { &gum_audio_device, }; @@ -98,6 +182,9 @@ static void __init gumstix_init(void) { pxa_set_mci_info(&gumstix_mci_platform_data); pxa_set_udc_info(&gumstix_udc_info); +#if defined(CONFIG_FB_PXA_ALPS_CDOLLAR) | defined(CONFIG_FB_PXA_SHARP_LQ043_PSP) | defined(CONFIG_FB_PXA_SAMSUNG_LTE430WQ_F0C) + set_pxa_fb_info(&gumstix_fb_info); +#endif (void) platform_add_devices(devices, ARRAY_SIZE(devices)); } Index: linux-2.6.21.7/drivers/video/Kconfig =================================================================== --- linux-2.6.21.7.orig/drivers/video/Kconfig +++ linux-2.6.21.7/drivers/video/Kconfig @@ -1495,6 +1495,37 @@ config FB_PXA If unsure, say N. +choice + depends on FB_PXA + prompt "LCD Panel" + default FB_PXA_SAMSUNG_LTE430WQ_F0C + +config FB_PXA_ALPS_CDOLLAR + boolean "Chris Dollar's ALPS screen" + ---help--- + Enable definitions (over-ridable on the kernel command line if + "PXA LCD command line parameters" is also selected) for an ALPS + screen which Chris Dollar uses + +config FB_PXA_SHARP_LQ043_PSP + boolean "SHARP LQ043... series" + ---help--- + Enable definitions (over-ridable on the kernel command line if + "PXA LCD command line parameters" is also selected) for a SHARP + LQ043... screen, such as the one used by the PSP. These screens are + the ones normally sold by gumstix with its boards. + +config FB_PXA_SAMSUNG_LTE430WQ_F0C + boolean "Samsung LTE430WQ-F0C (standard gumstix LCD)" + ---help--- + Enable definitions for a Samsung LTE430WQ-F0C LCD panel, such as the ones resold + by gumstix for use with their "LCD-Ready" boards. + +config FB_PXA_NONEOFTHEABOVE + boolean "None of the above" + +endchoice + config FB_PXA_PARAMETERS bool "PXA LCD command line parameters" default n Index: linux-2.6.21.7/drivers/video/pxafb.c =================================================================== --- linux-2.6.21.7.orig/drivers/video/pxafb.c +++ linux-2.6.21.7/drivers/video/pxafb.c @@ -22,6 +22,7 @@ * */ +#include #include #include #include @@ -789,7 +790,13 @@ static void pxafb_setup_gpio(struct pxaf pxa_gpio_mode(GPIO74_LCD_FCLK_MD); pxa_gpio_mode(GPIO75_LCD_LCLK_MD); pxa_gpio_mode(GPIO76_LCD_PCLK_MD); +#ifdef CONFIG_FB_PXA_SHARP_LQ043_PSP + /* DISP must be always high while screen is on */ + pxa_gpio_mode(GPIO77_LCD_ACBIAS | GPIO_OUT); + GPSR(GPIO77_LCD_ACBIAS) = GPIO_bit(GPIO77_LCD_ACBIAS); +#else pxa_gpio_mode(GPIO77_LCD_ACBIAS_MD); +#endif } static void pxafb_enable_controller(struct pxafb_info *fbi)