Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d14b272b authored by Richard Purdie's avatar Richard Purdie Committed by Russell King
Browse files

[ARM] 3848/1: pxafb: Add option of fixing video modes and spitz QVGA mode support



Add the ability to have pxafb use only certain fixed video modes
(selected on a per platform basis). This is useful on production
hardware such as the Zaurus cxx00 models where the valid modes are
known in advance and any other modes could result in hardware damage.

Following this, add support for the cxx00 QVGA mode. Mode information
is passed to the lcd_power call to allowing the panel drivers to
configure the display hardware accordingly (corgi_lcd already contains
the functionality for the cxx00 panel).

This mirrors the setup already used by w100fb.

Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent c5d311c7
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -431,10 +431,10 @@ struct platform_device corgifb_device = {


#include <asm/arch/pxafb.h>
#include <asm/arch/pxafb.h>


void spitz_lcd_power(int on)
void spitz_lcd_power(int on, struct fb_var_screeninfo *var)
{
{
	if (on)
	if (on)
		lcdtg_hw_init(480);
		lcdtg_hw_init(var->xres);
	else
	else
		lcdtg_suspend();
		lcdtg_suspend();
}
}
+5 −8
Original line number Original line Diff line number Diff line
@@ -204,13 +204,6 @@ static struct platform_device udc_device = {
	}
	}
};
};


static struct pxafb_mach_info pxa_fb_info;

void __init set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info)
{
	memcpy(&pxa_fb_info,hard_pxa_fb_info,sizeof(struct pxafb_mach_info));
}

static struct resource pxafb_resources[] = {
static struct resource pxafb_resources[] = {
	[0] = {
	[0] = {
		.start	= 0x44000000,
		.start	= 0x44000000,
@@ -230,7 +223,6 @@ static struct platform_device pxafb_device = {
	.name		= "pxa2xx-fb",
	.name		= "pxa2xx-fb",
	.id		= -1,
	.id		= -1,
	.dev		= {
	.dev		= {
 		.platform_data	= &pxa_fb_info,
		.dma_mask	= &fb_dma_mask,
		.dma_mask	= &fb_dma_mask,
		.coherent_dma_mask = 0xffffffff,
		.coherent_dma_mask = 0xffffffff,
	},
	},
@@ -238,6 +230,11 @@ static struct platform_device pxafb_device = {
	.resource	= pxafb_resources,
	.resource	= pxafb_resources,
};
};


void __init set_pxa_fb_info(struct pxafb_mach_info *info)
{
	pxafb_device.dev.platform_data = info;
}

void __init set_pxa_fb_parent(struct device *parent_dev)
void __init set_pxa_fb_parent(struct device *parent_dev)
{
{
	pxafb_device.dev.parent = parent_dev;
	pxafb_device.dev.parent = parent_dev;
+7 −2
Original line number Original line Diff line number Diff line
@@ -82,7 +82,7 @@ static void idp_vlcd(int on)
	}
	}
}
}


static void idp_lcd_power(int on)
static void idp_lcd_power(int on, struct fb_var_screeninfo *var)
{
{
	if (on) {
	if (on) {
		IDP_CPLD_LCD |= (1<<0);
		IDP_CPLD_LCD |= (1<<0);
@@ -99,7 +99,7 @@ static void idp_lcd_power(int on)
	idp_vlcd(on);
	idp_vlcd(on);
}
}


static struct pxafb_mach_info sharp_lm8v31 __initdata = {
static struct pxafb_mode_info sharp_lm8v31_mode = {
	.pixclock	= 270000,
	.pixclock	= 270000,
	.xres		= 640,
	.xres		= 640,
	.yres		= 480,
	.yres		= 480,
@@ -112,6 +112,11 @@ static struct pxafb_mach_info sharp_lm8v31 __initdata = {
	.lower_margin	= 0,
	.lower_margin	= 0,
	.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.cmap_greyscale	= 0,
	.cmap_greyscale	= 0,
};

static struct pxafb_mach_info sharp_lm8v31 = {
	.modes          = &sharp_lm8v31_mode,
	.num_modes      = 1,
	.cmap_inverse	= 0,
	.cmap_inverse	= 0,
	.cmap_static	= 0,
	.cmap_static	= 0,
	.lccr0		= LCCR0_SDS,
	.lccr0		= LCCR0_SDS,
+36 −6
Original line number Original line Diff line number Diff line
@@ -248,7 +248,7 @@ static void lpd270_backlight_power(int on)
}
}


/* 5.7" TFT QVGA (LoLo display number 1) */
/* 5.7" TFT QVGA (LoLo display number 1) */
static struct pxafb_mach_info sharp_lq057q3dc02 __initdata = {
static struct pxafb_mode_info sharp_lq057q3dc02_mode = {
	.pixclock		= 150000,
	.pixclock		= 150000,
	.xres			= 320,
	.xres			= 320,
	.yres			= 240,
	.yres			= 240,
@@ -260,13 +260,18 @@ static struct pxafb_mach_info sharp_lq057q3dc02 __initdata = {
	.upper_margin		= 0x08,
	.upper_margin		= 0x08,
	.lower_margin		= 0x14,
	.lower_margin		= 0x14,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq057q3dc02 = {
	.modes			= &sharp_lq057q3dc02_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
};
};


/* 12.1" TFT SVGA (LoLo display number 2) */
/* 12.1" TFT SVGA (LoLo display number 2) */
static struct pxafb_mach_info sharp_lq121s1dg31 __initdata = {
static struct pxafb_mode_info sharp_lq121s1dg31_mode = {
	.pixclock		= 50000,
	.pixclock		= 50000,
	.xres			= 800,
	.xres			= 800,
	.yres			= 600,
	.yres			= 600,
@@ -278,13 +283,18 @@ static struct pxafb_mach_info sharp_lq121s1dg31 __initdata = {
	.upper_margin		= 0x14,
	.upper_margin		= 0x14,
	.lower_margin		= 0x0a,
	.lower_margin		= 0x0a,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq121s1dg31 = {
	.modes			= &sharp_lq121s1dg31_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
};
};


/* 3.6" TFT QVGA (LoLo display number 3) */
/* 3.6" TFT QVGA (LoLo display number 3) */
static struct pxafb_mach_info sharp_lq036q1da01 __initdata = {
static struct pxafb_mode_info sharp_lq036q1da01_mode = {
	.pixclock		= 150000,
	.pixclock		= 150000,
	.xres			= 320,
	.xres			= 320,
	.yres			= 240,
	.yres			= 240,
@@ -296,13 +306,18 @@ static struct pxafb_mach_info sharp_lq036q1da01 __initdata = {
	.upper_margin		= 0x03,
	.upper_margin		= 0x03,
	.lower_margin		= 0x03,
	.lower_margin		= 0x03,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq036q1da01 = {
	.modes			= &sharp_lq036q1da01_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
};
};


/* 6.4" TFT VGA (LoLo display number 5) */
/* 6.4" TFT VGA (LoLo display number 5) */
static struct pxafb_mach_info sharp_lq64d343 __initdata = {
static struct pxafb_mode_info sharp_lq64d343_mode = {
	.pixclock		= 25000,
	.pixclock		= 25000,
	.xres			= 640,
	.xres			= 640,
	.yres			= 480,
	.yres			= 480,
@@ -314,13 +329,18 @@ static struct pxafb_mach_info sharp_lq64d343 __initdata = {
	.upper_margin		= 0x22,
	.upper_margin		= 0x22,
	.lower_margin		= 0x00,
	.lower_margin		= 0x00,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq64d343 = {
	.modes			= &sharp_lq64d343_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
};
};


/* 10.4" TFT VGA (LoLo display number 7) */
/* 10.4" TFT VGA (LoLo display number 7) */
static struct pxafb_mach_info sharp_lq10d368 __initdata = {
static struct pxafb_mode_info sharp_lq10d368_mode = {
	.pixclock		= 25000,
	.pixclock		= 25000,
	.xres			= 640,
	.xres			= 640,
	.yres			= 480,
	.yres			= 480,
@@ -332,13 +352,18 @@ static struct pxafb_mach_info sharp_lq10d368 __initdata = {
	.upper_margin		= 0x22,
	.upper_margin		= 0x22,
	.lower_margin		= 0x00,
	.lower_margin		= 0x00,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq10d368 = {
	.modes			= &sharp_lq10d368_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
};
};


/* 3.5" TFT QVGA (LoLo display number 8) */
/* 3.5" TFT QVGA (LoLo display number 8) */
static struct pxafb_mach_info sharp_lq035q7db02_20 __initdata = {
static struct pxafb_mode_info sharp_lq035q7db02_20_mode = {
	.pixclock		= 150000,
	.pixclock		= 150000,
	.xres			= 240,
	.xres			= 240,
	.yres			= 320,
	.yres			= 320,
@@ -350,6 +375,11 @@ static struct pxafb_mach_info sharp_lq035q7db02_20 __initdata = {
	.upper_margin		= 0x05,
	.upper_margin		= 0x05,
	.lower_margin		= 0x14,
	.lower_margin		= 0x14,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync			= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};

static struct pxafb_mach_info sharp_lq035q7db02_20 = {
	.modes			= &sharp_lq035q7db02_20_mode,
	.num_modes		= 1,
	.lccr0			= 0x07800080,
	.lccr0			= 0x07800080,
	.lccr3			= 0x00400000,
	.lccr3			= 0x00400000,
	.pxafb_backlight_power	= lpd270_backlight_power,
	.pxafb_backlight_power	= lpd270_backlight_power,
+6 −1
Original line number Original line Diff line number Diff line
@@ -352,7 +352,7 @@ static struct platform_device *devices[] __initdata = {
	&pxa_ssp,
	&pxa_ssp,
};
};


static struct pxafb_mach_info sharp_lm8v31 __initdata = {
static struct pxafb_mode_info sharp_lm8v31_mode = {
	.pixclock	= 270000,
	.pixclock	= 270000,
	.xres		= 640,
	.xres		= 640,
	.yres		= 480,
	.yres		= 480,
@@ -365,6 +365,11 @@ static struct pxafb_mach_info sharp_lm8v31 __initdata = {
	.lower_margin	= 0,
	.lower_margin	= 0,
	.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
	.cmap_greyscale	= 0,
	.cmap_greyscale	= 0,
};

static struct pxafb_mach_info sharp_lm8v31 = {
	.modes		= &sharp_lm8v31_mode,
	.num_modes	= 1,
	.cmap_inverse	= 0,
	.cmap_inverse	= 0,
	.cmap_static	= 0,
	.cmap_static	= 0,
	.lccr0		= LCCR0_SDS,
	.lccr0		= LCCR0_SDS,
Loading