[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: Richard Purdie <rpurdie@rpsys.net> Cc: Vojtech Pavlik <vojtech@suse.cz> Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
513b6e1afa
Коммит
1351e6e093
|
@ -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)
|
||||||
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 {
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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 = {
|
||||||
.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;
|
||||||
|
|
||||||
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 {
|
||||||
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);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче