[ARM] pxa: make zylonite use the generic PWM backlight driver
authoreric miao <eric.miao@marvell.com>
Sun, 13 Apr 2008 20:46:34 +0000 (21:46 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 3 Jul 2008 12:25:02 +0000 (13:25 +0100)
Patch mostly by Eric Miao, minor edits by rmk.

Signed-off-by: eric miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/zylonite.c
arch/arm/mach-pxa/zylonite_pxa300.c
arch/arm/mach-pxa/zylonite_pxa320.c
include/asm-arm/arch-pxa/zylonite.h

index 9c01505b182583087216e28c5726f4028605a5a7..b7a3281c420eb7c1d4b65e702b4d5b74cdfb82c5 100644 (file)
@@ -116,6 +116,7 @@ config MACH_COLIBRI
 config MACH_ZYLONITE
        bool "PXA3xx Development Platform"
        select PXA3xx
+       select HAVE_PWM
 
 config MACH_LITTLETON
        bool "PXA3xx Form Factor Platform (aka Littleton)"
@@ -276,6 +277,7 @@ config PXA_SSP
 
 config PXA_PWM
        tristate
+       default BACKLIGHT_PWM
        help
          Enable support for PXA2xx/PXA3xx PWM controllers
 endif
index 4a0028087ea65740d5b253c16dc9f839ab94892a..b13bb93851383f857c798561001d530651aa6fc5 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/pwm_backlight.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/arch/mmc.h>
 #include <asm/arch/pxa27x_keypad.h>
 
+#include "devices.h"
 #include "generic.h"
 
 #define MAX_SLOTS      3
 struct platform_mmc_slot zylonite_mmc_slot[MAX_SLOTS];
 
-int gpio_backlight;
 int gpio_eth_irq;
 
 int wm9713_irq;
@@ -62,10 +63,20 @@ static struct platform_device smc91x_device = {
 };
 
 #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
-static void zylonite_backlight_power(int on)
-{
-       gpio_set_value(gpio_backlight, on);
-}
+static struct platform_pwm_backlight_data zylonite_backlight_data = {
+       .pwm_id         = 3,
+       .max_brightness = 100,
+       .dft_brightness = 100,
+       .pwm_period_ns  = 10000,
+};
+
+static struct platform_device zylonite_backlight_device = {
+       .name           = "pwm-backlight",
+       .dev            = {
+               .parent = &pxa27x_device_pwm1.dev,
+               .platform_data  = &zylonite_backlight_data,
+       },
+};
 
 static struct pxafb_mode_info toshiba_ltm035a776c_mode = {
        .pixclock               = 110000,
@@ -98,7 +109,6 @@ static struct pxafb_mode_info toshiba_ltm04c380k_mode = {
 static struct pxafb_mach_info zylonite_toshiba_lcd_info = {
        .num_modes              = 1,
        .lcd_conn               = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-       .pxafb_backlight_power  = zylonite_backlight_power,
 };
 
 static struct pxafb_mode_info sharp_ls037_modes[] = {
@@ -134,13 +144,11 @@ static struct pxafb_mach_info zylonite_sharp_lcd_info = {
        .modes                  = sharp_ls037_modes,
        .num_modes              = 2,
        .lcd_conn               = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-       .pxafb_backlight_power  = zylonite_backlight_power,
 };
 
 static void __init zylonite_init_lcd(void)
 {
-       /* backlight GPIO: output, default on */
-       gpio_direction_output(gpio_backlight, 1);
+       platform_device_register(&zylonite_backlight_device);
 
        if (lcd_id & 0x20) {
                set_pxa_fb_info(&zylonite_sharp_lcd_info);
index 324fb9daae285300d68d3fc5bbeaf543bc6bb296..6f7ae972b8db658e137b705ae5cc2df9602fa92e 100644 (file)
@@ -50,6 +50,7 @@ static mfp_cfg_t common_mfp_cfg[] __initdata = {
        GPIO75_LCD_BIAS,
        GPIO76_LCD_VSYNC,
        GPIO127_LCD_CS_N,
+       GPIO20_PWM3_OUT,        /* backlight */
 
        /* BTUART */
        GPIO111_UART2_RTS,
@@ -200,9 +201,6 @@ void __init zylonite_pxa300_init(void)
                /* detect LCD panel */
                zylonite_detect_lcd_panel();
 
-               /* GPIO pin assignment */
-               gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO20);
-
                /* MMC card detect & write protect for controller 0 */
                zylonite_mmc_slot[0].gpio_cd  = EXT_GPIO(0);
                zylonite_mmc_slot[0].gpio_wp  = EXT_GPIO(2);
index 193d07903b06f68b211edc2dcf9f7915b8a387a9..2b4fc34919ac3d59c54ef9b6be2fcb9d7f3c0f4d 100644 (file)
@@ -49,6 +49,7 @@ static mfp_cfg_t mfp_cfg[] __initdata = {
        GPIO15_2_LCD_LCLK,
        GPIO16_2_LCD_PCLK,
        GPIO17_2_LCD_BIAS,
+       GPIO14_PWM3_OUT,        /* backlight */
 
        /* FFUART */
        GPIO41_UART1_RXD | MFP_LPM_EDGE_FALL,
@@ -187,7 +188,6 @@ void __init zylonite_pxa320_init(void)
                zylonite_detect_lcd_panel();
 
                /* GPIO pin assignment */
-               gpio_backlight  = mfp_to_gpio(MFP_PIN_GPIO14);
                gpio_eth_irq    = mfp_to_gpio(MFP_PIN_GPIO9);
 
                /* MMC card detect & write protect for controller 0 */
index 4881b80f0f9009a90c5dedc3bebbcea2631723e0..de577de8d18c9dc5994c75a77408e789cd14329d 100644 (file)
@@ -15,7 +15,6 @@ struct platform_mmc_slot {
 
 extern struct platform_mmc_slot zylonite_mmc_slot[];
 
-extern int gpio_backlight;
 extern int gpio_eth_irq;
 
 extern int wm9713_irq;