Skip to content

Commit

Permalink
[PATCH] SharpSL: Abstract model specifics from Corgi Backlight driver
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Richard Purdie authored and Linus Torvalds committed Sep 13, 2005
1 parent 513b6e1 commit 1351e6e
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 14 deletions.
6 changes: 6 additions & 0 deletions arch/arm/mach-pxa/corgi.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,16 @@ struct corgissp_machinfo corgi_ssp_machinfo = {
/*
* 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 = {
.name = "corgi-bl",
.dev = {
.parent = &corgifb_device.dev,
.platform_data = &corgi_bl_machinfo,
},
.id = -1,
};
Expand Down
65 changes: 65 additions & 0 deletions arch/arm/mach-pxa/corgi_lcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -498,3 +498,68 @@ void spitz_wait_hsync(void)
sharpsl_wait_sync(SPITZ_GPIO_HSYNC);
}
#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
8 changes: 8 additions & 0 deletions arch/arm/mach-pxa/sharpsl.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ struct corgissp_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
*/
Expand Down
25 changes: 11 additions & 14 deletions drivers/video/backlight/corgi_bl.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,10 @@ static void corgibl_send_intensity(int intensity)
intensity &= CORGI_LIMIT_MASK;
}

/* Skip 0x20 as it will blank the display */
if (intensity >= 0x20)
intensity++;

spin_lock_irqsave(&bl_lock, flags);
/* 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);

corgibl_mach_set_intensity(intensity);

spin_unlock_irqrestore(&bl_lock, flags);
}

Expand Down Expand Up @@ -113,8 +105,8 @@ static int corgibl_get_power(struct backlight_device *bd)

static int corgibl_set_intensity(struct backlight_device *bd, int intensity)
{
if (intensity > CORGI_MAX_INTENSITY)
intensity = CORGI_MAX_INTENSITY;
if (intensity > corgibl_data.max_brightness)
intensity = corgibl_data.max_brightness;
corgibl_send_intensity(intensity);
current_intensity=intensity;
return 0;
Expand All @@ -141,7 +133,6 @@ static struct backlight_properties corgibl_data = {
.owner = THIS_MODULE,
.get_power = corgibl_get_power,
.set_power = corgibl_set_power,
.max_brightness = CORGI_MAX_INTENSITY,
.get_brightness = corgibl_get_intensity,
.set_brightness = corgibl_set_intensity,
};
Expand All @@ -150,12 +141,18 @@ static struct backlight_device *corgi_backlight_device;

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",
NULL, &corgibl_data);
if (IS_ERR (corgi_backlight_device))
return PTR_ERR (corgi_backlight_device);

corgibl_set_intensity(NULL, CORGI_DEFAULT_INTENSITY);
corgibl_limit_intensity(0);

printk("Corgi Backlight Driver Initialized.\n");
return 0;
Expand Down
10 changes: 10 additions & 0 deletions include/asm-arm/arch-pxa/sharpsl.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,13 @@ struct corgits_machinfo {
void (*put_hsync)(void);
void (*wait_hsync)(void);
};

/*
* SharpSL Backlight
*/

struct corgibl_machinfo {
int max_intensity;
void (*set_bl_intensity)(int intensity);
};

0 comments on commit 1351e6e

Please sign in to comment.