[PATCH] SharpSL: Abstract model specifics from Corgi Backlight driver
authorRichard Purdie <rpurdie@rpsys.net>
Tue, 13 Sep 2005 08:25:33 +0000 (01:25 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 13 Sep 2005 15:22:31 +0000 (08:22 -0700)
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>
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/corgi_lcd.c
arch/arm/mach-pxa/sharpsl.h
drivers/video/backlight/corgi_bl.c
include/asm-arm/arch-pxa/sharpsl.h

index fc428b827671b3e0faa5cc031e82567556d4f3e3..426c2bc517eb7ca8fd42a06fa2e6b0d971b24324 100644 (file)
@@ -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,
 };
index bfe5efc11b8a8d59962128fe2e2f3309f0a74f0a..c5efcd04fcbc8011c01961ca334a080dcf62005a 100644 (file)
@@ -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
index 7007d8a1c5c5be26ff4a1f0127d6e28767e7124e..3977a77aacdd1e27fa4dcd5dfab6a96668646c8e 100644 (file)
@@ -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
  */
index 353cb3f73cf2f6267dbaf2a8a625d261742828ce..a32817678552f61de175cd18302343be45a725a1 100644 (file)
@@ -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;
index 1e1d11033940078fa8ea82ce46a6f9100d3f9eb3..311f2bb5386ac949c80a3aec417e4d7f0e69071d 100644 (file)
@@ -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);
+};
+