Commit 1351e6e0 authored by Richard Purdie's avatar Richard Purdie Committed by Linus Torvalds

[PATCH] SharpSL: Abstract model specifics from Corgi Backlight driver

Separate out the Sharp Zaurus c7x0 series specific code from the Corgi
backlight driver.  Abstract model/machine specific functions to corgi_lcd.c
via sharpsl.h

This enables the driver to be used by the Zaurus cxx00 series.
Signed-Off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Cc: Vojtech Pavlik <vojtech@suse.cz>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 513b6e1a
...@@ -109,10 +109,16 @@ struct corgissp_machinfo corgi_ssp_machinfo = { ...@@ -109,10 +109,16 @@ struct corgissp_machinfo corgi_ssp_machinfo = {
/* /*
* Corgi Backlight Device * Corgi Backlight Device
*/ */
static struct corgibl_machinfo corgi_bl_machinfo = {
.max_intensity = 0x2f,
.set_bl_intensity = corgi_bl_set_intensity,
};
static struct platform_device corgibl_device = { static struct platform_device corgibl_device = {
.name = "corgi-bl", .name = "corgi-bl",
.dev = { .dev = {
.parent = &corgifb_device.dev, .parent = &corgifb_device.dev,
.platform_data = &corgi_bl_machinfo,
}, },
.id = -1, .id = -1,
}; };
......
...@@ -498,3 +498,68 @@ void spitz_wait_hsync(void) ...@@ -498,3 +498,68 @@ void spitz_wait_hsync(void)
sharpsl_wait_sync(SPITZ_GPIO_HSYNC); sharpsl_wait_sync(SPITZ_GPIO_HSYNC);
} }
#endif #endif
/*
* Corgi/Spitz Backlight Power
*/
#ifdef CONFIG_PXA_SHARP_C7xx
void corgi_bl_set_intensity(int intensity)
{
if (intensity > 0x10)
intensity += 0x10;
/* Bits 0-4 are accessed via the SSP interface */
corgi_ssp_blduty_set(intensity & 0x1f);
/* Bit 5 is via SCOOP */
if (intensity & 0x0020)
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_BACKLIGHT_CONT);
else
reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_BACKLIGHT_CONT);
}
#endif
#if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI)
void spitz_bl_set_intensity(int intensity)
{
if (intensity > 0x10)
intensity += 0x10;
/* Bits 0-4 are accessed via the SSP interface */
corgi_ssp_blduty_set(intensity & 0x1f);
/* Bit 5 is via SCOOP */
if (intensity & 0x0020)
reset_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_BACKLIGHT_CONT);
else
set_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_BACKLIGHT_CONT);
if (intensity)
set_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_BACKLIGHT_ON);
else
reset_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_BACKLIGHT_ON);
}
#endif
#ifdef CONFIG_MACH_AKITA
void akita_bl_set_intensity(int intensity)
{
if (intensity > 0x10)
intensity += 0x10;
/* Bits 0-4 are accessed via the SSP interface */
corgi_ssp_blduty_set(intensity & 0x1f);
/* Bit 5 is via IO-Expander */
if (intensity & 0x0020)
akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_BACKLIGHT_CONT);
else
akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_BACKLIGHT_CONT);
if (intensity)
akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_BACKLIGHT_ON);
else
akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_BACKLIGHT_ON);
}
#endif
...@@ -14,6 +14,14 @@ struct corgissp_machinfo { ...@@ -14,6 +14,14 @@ struct corgissp_machinfo {
void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo); void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo);
/*
* SharpSL Backlight
*/
void corgi_bl_set_intensity(int intensity);
void spitz_bl_set_intensity(int intensity);
void akita_bl_set_intensity(int intensity);
/* /*
* SharpSL Touchscreen Driver * SharpSL Touchscreen Driver
*/ */
......
...@@ -43,18 +43,10 @@ static void corgibl_send_intensity(int intensity) ...@@ -43,18 +43,10 @@ static void corgibl_send_intensity(int intensity)
intensity &= CORGI_LIMIT_MASK; intensity &= CORGI_LIMIT_MASK;
} }
/* Skip 0x20 as it will blank the display */
if (intensity >= 0x20)
intensity++;
spin_lock_irqsave(&bl_lock, flags); spin_lock_irqsave(&bl_lock, flags);
/* Bits 0-4 are accessed via the SSP interface */
corgi_ssp_blduty_set(intensity & 0x1f); corgibl_mach_set_intensity(intensity);
/* Bit 5 is via SCOOP */
if (intensity & 0x0020)
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_BACKLIGHT_CONT);
else
reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_BACKLIGHT_CONT);
spin_unlock_irqrestore(&bl_lock, flags); spin_unlock_irqrestore(&bl_lock, flags);
} }
...@@ -113,8 +105,8 @@ static int corgibl_get_power(struct backlight_device *bd) ...@@ -113,8 +105,8 @@ static int corgibl_get_power(struct backlight_device *bd)
static int corgibl_set_intensity(struct backlight_device *bd, int intensity) static int corgibl_set_intensity(struct backlight_device *bd, int intensity)
{ {
if (intensity > CORGI_MAX_INTENSITY) if (intensity > corgibl_data.max_brightness)
intensity = CORGI_MAX_INTENSITY; intensity = corgibl_data.max_brightness;
corgibl_send_intensity(intensity); corgibl_send_intensity(intensity);
current_intensity=intensity; current_intensity=intensity;
return 0; return 0;
...@@ -141,7 +133,6 @@ static struct backlight_properties corgibl_data = { ...@@ -141,7 +133,6 @@ static struct backlight_properties corgibl_data = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.get_power = corgibl_get_power, .get_power = corgibl_get_power,
.set_power = corgibl_set_power, .set_power = corgibl_set_power,
.max_brightness = CORGI_MAX_INTENSITY,
.get_brightness = corgibl_get_intensity, .get_brightness = corgibl_get_intensity,
.set_brightness = corgibl_set_intensity, .set_brightness = corgibl_set_intensity,
}; };
...@@ -150,12 +141,18 @@ static struct backlight_device *corgi_backlight_device; ...@@ -150,12 +141,18 @@ static struct backlight_device *corgi_backlight_device;
static int __init corgibl_probe(struct device *dev) static int __init corgibl_probe(struct device *dev)
{ {
struct corgibl_machinfo *machinfo = dev->platform_data;
corgibl_data.max_brightness = machinfo->max_intensity;
corgibl_mach_set_intensity = machinfo->set_bl_intensity;
corgi_backlight_device = backlight_device_register ("corgi-bl", corgi_backlight_device = backlight_device_register ("corgi-bl",
NULL, &corgibl_data); NULL, &corgibl_data);
if (IS_ERR (corgi_backlight_device)) if (IS_ERR (corgi_backlight_device))
return PTR_ERR (corgi_backlight_device); return PTR_ERR (corgi_backlight_device);
corgibl_set_intensity(NULL, CORGI_DEFAULT_INTENSITY); corgibl_set_intensity(NULL, CORGI_DEFAULT_INTENSITY);
corgibl_limit_intensity(0);
printk("Corgi Backlight Driver Initialized.\n"); printk("Corgi Backlight Driver Initialized.\n");
return 0; return 0;
......
...@@ -20,3 +20,13 @@ struct corgits_machinfo { ...@@ -20,3 +20,13 @@ struct corgits_machinfo {
void (*put_hsync)(void); void (*put_hsync)(void);
void (*wait_hsync)(void); void (*wait_hsync)(void);
}; };
/*
* SharpSL Backlight
*/
struct corgibl_machinfo {
int max_intensity;
void (*set_bl_intensity)(int intensity);
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment