Merge tag 'vexpress/fixes-for-3.9' of git://git.linaro.org/people/pawelmoll/linux...
authorOlof Johansson <olof@lixom.net>
Tue, 29 Jan 2013 23:34:05 +0000 (15:34 -0800)
committerOlof Johansson <olof@lixom.net>
Tue, 29 Jan 2013 23:34:14 +0000 (15:34 -0800)
From Pawel Moll:
Versatile Express related fixes for 3.9
* Correct interrupt definitions for WDT node in
  V2P-CA15 and V2P-CA15_A7 Device Trees

* tag 'vexpress/fixes-for-3.9' of git://git.linaro.org/people/pawelmoll/linux:
  ARM: vexpress: Fix wdt interrupt in ca15{-tc1,_a7} dts

Signed-off-by: Olof Johansson <olof@lixom.net>
arch/arm/mach-pxa/include/mach/palmtreo.h
arch/arm/mach-pxa/include/mach/smemc.h
arch/arm/mach-pxa/palmtreo.c
arch/arm/mach-pxa/smemc.c
arch/arm/mach-pxa/spitz.c

index 2d3f14e3be29a99859ac18dd9404df76f12ff472..714b6574393e88efa2089de95a98f5d15a7b3a5d 100644 (file)
 #define GPIO_NR_TREO_LCD_POWER 25
 
 /* Treo680 specific GPIOs */
-#ifdef CONFIG_MACH_TREO680
 #define GPIO_NR_TREO680_SD_READONLY    33
 #define GPIO_NR_TREO680_SD_POWER       42
 #define GPIO_NR_TREO680_VIBRATE_EN     44
 #define GPIO_NR_TREO680_KEYB_BL                24
 #define GPIO_NR_TREO680_BT_EN          43
-#endif /* CONFIG_MACH_TREO680 */
+#define GPIO_NR_TREO680_LCD_POWER      77
+#define GPIO_NR_TREO680_LCD_EN         86
+#define GPIO_NR_TREO680_LCD_EN_N       25
 
 /* Centro685 specific GPIOs */
 #define GPIO_NR_CENTRO_SD_POWER                21
index b7de471b273a240e275103dff330498f40f3f036..b802f285fe00e6dd3b39af77e3b351d3a4343316 100644 (file)
@@ -37,6 +37,7 @@
 #define CSADRCFG1      (SMEMC_VIRT + 0x84)  /* Address Configuration Register for CS1 */
 #define CSADRCFG2      (SMEMC_VIRT + 0x88)  /* Address Configuration Register for CS2 */
 #define CSADRCFG3      (SMEMC_VIRT + 0x8C)  /* Address Configuration Register for CS3 */
+#define CSMSADRCFG     (SMEMC_VIRT + 0xA0)  /* Chip Select Configuration Register */
 
 /*
  * More handy macros for PCMCIA
index 3f3c48f2f7ceabd5f256169b5cc56d62524c40f4..577512845a6c17d1acbd7263ce75942360b090b9 100644 (file)
@@ -98,9 +98,6 @@ static unsigned long treo_pin_config[] __initdata = {
        GPIO96_KP_MKOUT_6,
        GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,        /* Hotsync button */
 
-       /* LCD */
-       GPIOxx_LCD_TFT_16BPP,
-
        /* Quick Capture Interface */
        GPIO84_CIF_FV,
        GPIO85_CIF_LV,
@@ -140,6 +137,12 @@ static unsigned long treo680_pin_config[] __initdata = {
        /* MATRIX KEYPAD - different wake up source */
        GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
        GPIO99_KP_MKIN_5,
+
+       /* LCD... L_BIAS alt fn not configured on Treo680; is GPIO instead */
+       GPIOxx_LCD_16BPP,
+       GPIO74_LCD_FCLK,
+       GPIO75_LCD_LCLK,
+       GPIO76_LCD_PCLK,
 };
 #endif /* CONFIG_MACH_TREO680 */
 
@@ -155,6 +158,9 @@ static unsigned long centro685_pin_config[] __initdata = {
        /* MATRIX KEYPAD - different wake up source */
        GPIO100_KP_MKIN_0,
        GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH,
+
+       /* LCD */
+       GPIOxx_LCD_TFT_16BPP,
 };
 #endif /* CONFIG_MACH_CENTRO */
 
@@ -328,7 +334,6 @@ static inline void palmtreo_uhc_init(void) {}
 /******************************************************************************
  * Vibra and LEDs
  ******************************************************************************/
-#ifdef CONFIG_MACH_TREO680
 static struct gpio_led treo680_gpio_leds[] = {
        {
                .name                   = "treo680:vibra:vibra",
@@ -379,21 +384,17 @@ static struct gpio_led_platform_data centro_gpio_led_info = {
 static struct platform_device palmtreo_leds = {
        .name   = "leds-gpio",
        .id     = -1,
-       .dev    = {
-               .platform_data  = &treo680_gpio_led_info,
-       }
 };
 
 static void __init palmtreo_leds_init(void)
 {
        if (machine_is_centro())
                palmtreo_leds.dev.platform_data = &centro_gpio_led_info;
+       else if (machine_is_treo680())
+               palmtreo_leds.dev.platform_data = &treo680_gpio_led_info;
 
        platform_device_register(&palmtreo_leds);
 }
-#else
-static inline void palmtreo_leds_init(void) {}
-#endif
 
 /******************************************************************************
  * Machine init
@@ -424,10 +425,59 @@ static void __init palmphone_common_init(void)
 }
 
 #ifdef CONFIG_MACH_TREO680
+void __init treo680_gpio_init(void)
+{
+       unsigned int gpio;
+
+       /* drive all three lcd gpios high initially */
+       const unsigned long lcd_flags = GPIOF_INIT_HIGH | GPIOF_DIR_OUT;
+
+       /*
+        * LCD GPIO initialization...
+        */
+
+       /*
+        * This is likely the power to the lcd.  Toggling it low/high appears to
+        * turn the lcd off/on.  Can be toggled after lcd is initialized without
+        * any apparent adverse effects to the lcd operation.  Note that this
+        * gpio line is used by the lcd controller as the L_BIAS signal, but
+        * treo680 configures it as gpio.
+        */
+       gpio = GPIO_NR_TREO680_LCD_POWER;
+       if (gpio_request_one(gpio, lcd_flags, "LCD power") < 0)
+               goto fail;
+
+       /*
+        * These two are called "enables", for lack of a better understanding.
+        * If either of these are toggled after the lcd is initialized, the
+        * image becomes degraded.  N.B. The IPL shipped with the treo
+        * configures GPIO_NR_TREO680_LCD_EN_N as output and drives it high.  If
+        * the IPL is ever reprogrammed, this initialization may be need to be
+        * revisited.
+        */
+       gpio = GPIO_NR_TREO680_LCD_EN;
+       if (gpio_request_one(gpio, lcd_flags, "LCD enable") < 0)
+               goto fail;
+       gpio = GPIO_NR_TREO680_LCD_EN_N;
+       if (gpio_request_one(gpio, lcd_flags, "LCD enable_n") < 0)
+               goto fail;
+
+       /* driving this low turns LCD on */
+       gpio_set_value(GPIO_NR_TREO680_LCD_EN_N, 0);
+
+       return;
+ fail:
+       pr_err("gpio %d initialization failed\n", gpio);
+       gpio_free(GPIO_NR_TREO680_LCD_POWER);
+       gpio_free(GPIO_NR_TREO680_LCD_EN);
+       gpio_free(GPIO_NR_TREO680_LCD_EN_N);
+}
+
 static void __init treo680_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
        palmphone_common_init();
+       treo680_gpio_init();
        palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY,
                        GPIO_NR_TREO680_SD_POWER, 0);
 }
index 79923058d10f1352d8fd420180fc86ceca06957c..f38aa890b2c915a1114bfe9c6bd281ee3bfdee57 100644 (file)
@@ -40,6 +40,8 @@ static void pxa3xx_smemc_resume(void)
        __raw_writel(csadrcfg[1], CSADRCFG1);
        __raw_writel(csadrcfg[2], CSADRCFG2);
        __raw_writel(csadrcfg[3], CSADRCFG3);
+       /* CSMSADRCFG wakes up in its default state (0), so we need to set it */
+       __raw_writel(0x2, CSMSADRCFG);
 }
 
 static struct syscore_ops smemc_syscore_ops = {
@@ -49,8 +51,19 @@ static struct syscore_ops smemc_syscore_ops = {
 
 static int __init smemc_init(void)
 {
-       if (cpu_is_pxa3xx())
+       if (cpu_is_pxa3xx()) {
+               /*
+                * The only documentation we have on the
+                * Chip Select Configuration Register (CSMSADRCFG) is that
+                * it must be programmed to 0x2.
+                * Moreover, in the bit definitions, the second bit
+                * (CSMSADRCFG[1]) is called "SETALWAYS".
+                * Other bits are reserved in this register.
+                */
+               __raw_writel(0x2, CSMSADRCFG);
+
                register_syscore_ops(&smemc_syscore_ops);
+       }
 
        return 0;
 }
index 2073f0e6db0d22e87659a435ea4510469a610b65..7e2cb880daa63dd0c8e5801a37f316d2e774d09e 100644 (file)
@@ -732,7 +732,7 @@ static inline void spitz_lcd_init(void) {}
 #endif
 
 /******************************************************************************
- * Framebuffer
+ * NAND Flash
  ******************************************************************************/
 #if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE)
 static struct mtd_partition spitz_nand_partitions[] = {
@@ -858,7 +858,7 @@ static inline void spitz_nor_init(void) {}
 #endif
 
 /******************************************************************************
- * GPIO expander
+ * I2C devices
  ******************************************************************************/
 #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
 static struct pca953x_platform_data akita_pca953x_pdata = {
This page took 0.029688 seconds and 5 git commands to generate.