Skip to content

Commit

Permalink
[PATCH] backlight: corgi_bl: Generalise to support other Sharp SL har…
Browse files Browse the repository at this point in the history
…dware

Generalise the Corgi backlight driver by moving the default intensity and
limit mask settings into the platform specific data structure.  This enables
the driver to support other Zaurus hardware, specifically the SL-6000x (Tosa)
model.

Also change the spinlock to a mutex (the spinlock is overkill).

Signed-off-by: Richard Purdie <[email protected]>
Signed-off-by: Antonino Daplas <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
rpurdie authored and Linus Torvalds committed Mar 31, 2006
1 parent 5f27a27 commit 2c0f5fb
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 20 deletions.
2 changes: 2 additions & 0 deletions arch/arm/mach-pxa/corgi.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ struct corgissp_machinfo corgi_ssp_machinfo = {
*/
static struct corgibl_machinfo corgi_bl_machinfo = {
.max_intensity = 0x2f,
.default_intensity = 0x1f,
.limit_mask = 0x0b,
.set_bl_intensity = corgi_bl_set_intensity,
};

Expand Down
2 changes: 2 additions & 0 deletions arch/arm/mach-pxa/spitz.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,8 @@ struct corgissp_machinfo spitz_ssp_machinfo = {
* Spitz Backlight Device
*/
static struct corgibl_machinfo spitz_bl_machinfo = {
.default_intensity = 0x1f,
.limit_mask = 0x0b,
.max_intensity = 0x2f,
};

Expand Down
4 changes: 2 additions & 2 deletions drivers/video/backlight/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ config LCD_DEVICE
default y

config BACKLIGHT_CORGI
tristate "Sharp Corgi Backlight Driver (SL-C7xx Series)"
tristate "Sharp Corgi Backlight Driver (SL Series)"
depends on BACKLIGHT_DEVICE && PXA_SHARPSL
default y
help
If you have a Sharp Zaurus SL-C7xx, say y to enable the
If you have a Sharp Zaurus SL-C7xx, SL-Cxx00 or SL-6000x say y to enable the
backlight driver.

config BACKLIGHT_HP680
Expand Down
31 changes: 13 additions & 18 deletions drivers/video/backlight/corgi_bl.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Backlight Driver for Sharp Corgi
* Backlight Driver for Sharp Zaurus Handhelds (various models)
*
* Copyright (c) 2004-2005 Richard Purdie
* Copyright (c) 2004-2006 Richard Purdie
*
* Based on Sharp's 2.4 Backlight Driver
*
Expand All @@ -15,29 +15,24 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/fb.h>
#include <linux/backlight.h>

#include <asm/arch/sharpsl.h>
#include <asm/hardware/sharpsl_pm.h>

#define CORGI_DEFAULT_INTENSITY 0x1f
#define CORGI_LIMIT_MASK 0x0b

static int corgibl_intensity;
static void (*corgibl_mach_set_intensity)(int intensity);
static spinlock_t bl_lock = SPIN_LOCK_UNLOCKED;
static DEFINE_MUTEX(bl_mutex);
static struct backlight_properties corgibl_data;
static struct backlight_device *corgi_backlight_device;
static struct corgibl_machinfo *bl_machinfo;

static unsigned long corgibl_flags;
#define CORGIBL_SUSPENDED 0x01
#define CORGIBL_BATTLOW 0x02

static int corgibl_send_intensity(struct backlight_device *bd)
{
unsigned long flags;
void (*corgi_kick_batt)(void);
int intensity = bd->props->brightness;

Expand All @@ -48,13 +43,11 @@ static int corgibl_send_intensity(struct backlight_device *bd)
if (corgibl_flags & CORGIBL_SUSPENDED)
intensity = 0;
if (corgibl_flags & CORGIBL_BATTLOW)
intensity &= CORGI_LIMIT_MASK;

spin_lock_irqsave(&bl_lock, flags);

corgibl_mach_set_intensity(intensity);
intensity &= bl_machinfo->limit_mask;

spin_unlock_irqrestore(&bl_lock, flags);
mutex_lock(&bl_mutex);
bl_machinfo->set_bl_intensity(intensity);
mutex_unlock(&bl_mutex);

corgibl_intensity = intensity;

Expand Down Expand Up @@ -122,16 +115,18 @@ static int __init corgibl_probe(struct platform_device *pdev)
{
struct corgibl_machinfo *machinfo = pdev->dev.platform_data;

bl_machinfo = machinfo;
corgibl_data.max_brightness = machinfo->max_intensity;
corgibl_mach_set_intensity = machinfo->set_bl_intensity;
if (!machinfo->limit_mask)
machinfo->limit_mask = -1;

corgi_backlight_device = backlight_device_register ("corgi-bl",
NULL, &corgibl_data);
if (IS_ERR (corgi_backlight_device))
return PTR_ERR (corgi_backlight_device);

corgibl_data.power = FB_BLANK_UNBLANK;
corgibl_data.brightness = CORGI_DEFAULT_INTENSITY;
corgibl_data.brightness = machinfo->default_intensity;
corgibl_send_intensity(corgi_backlight_device);

printk("Corgi Backlight Driver Initialized.\n");
Expand Down
2 changes: 2 additions & 0 deletions include/asm-arm/arch-pxa/sharpsl.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ struct corgits_machinfo {
*/
struct corgibl_machinfo {
int max_intensity;
int default_intensity;
int limit_mask;
void (*set_bl_intensity)(int intensity);
};
extern void corgibl_limit_intensity(int limit);
Expand Down

0 comments on commit 2c0f5fb

Please sign in to comment.