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

Commit 2c0f5fb0 authored by Richard Purdie's avatar Richard Purdie Committed by Linus Torvalds
Browse files

[PATCH] backlight: corgi_bl: Generalise to support other Sharp SL hardware



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: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5f27a27b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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,
};

+2 −0
Original line number Diff line number Diff line
@@ -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,
};

+2 −2
Original line number Diff line number Diff line
@@ -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
+13 −18
Original line number Diff line number Diff line
/*
 *  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
 *
@@ -15,21 +15,17 @@
#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
@@ -37,7 +33,6 @@ static unsigned long corgibl_flags;

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

@@ -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;

@@ -122,8 +115,10 @@ 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);
@@ -131,7 +126,7 @@ static int __init corgibl_probe(struct platform_device *pdev)
		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");
+2 −0
Original line number Diff line number Diff line
@@ -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);