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

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

[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
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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,
};
+65 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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
 */
+11 −14
Original line number Diff line number Diff line
@@ -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);
}

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