175 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/arch/arm/mach-pxa/gumstix.c
 | |
| +++ b/arch/arm/mach-pxa/gumstix.c
 | |
| @@ -25,6 +25,7 @@
 | |
|  #include <asm/arch/udc.h>
 | |
|  #include <asm/arch/mmc.h>
 | |
|  #include <asm/arch/pxa-regs.h>
 | |
| +#include <asm/arch/pxafb.h>
 | |
|  #include <asm/arch/gumstix.h>
 | |
|  
 | |
|  #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));
 | |
|  }
 | |
|  
 | |
| --- a/drivers/video/Kconfig
 | |
| +++ b/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
 | |
| --- a/drivers/video/pxafb.c
 | |
| +++ b/drivers/video/pxafb.c
 | |
| @@ -22,6 +22,7 @@
 | |
|   *
 | |
|   */
 | |
|  
 | |
| +#include <linux/autoconf.h>
 | |
|  #include <linux/module.h>
 | |
|  #include <linux/moduleparam.h>
 | |
|  #include <linux/kernel.h>
 | |
| @@ -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)
 |