Merge branch 'armsoc/fix' of git://github.com/hzhuang1/linux into next/cleanup

A couple of PXA fixes that aren't critical enough for 3.9. From Haojian
Zhuang.

* 'armsoc/fix' of git://github.com/hzhuang1/linux:
  ARM: pxa: Minor naming fixes in spitz.c
  ARM: PXA3xx: program the CSMSADRCFG register
  ARM: palmtreo: fix #ifdefs for leds-gpio device
  ARM: palmtreo: fix lcd initilialization on treo680

Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
Olof Johansson 2013-01-27 22:33:42 -08:00
commit 3394d8977e
5 changed files with 80 additions and 15 deletions

View File

@ -38,13 +38,14 @@
#define GPIO_NR_TREO_LCD_POWER 25 #define GPIO_NR_TREO_LCD_POWER 25
/* Treo680 specific GPIOs */ /* Treo680 specific GPIOs */
#ifdef CONFIG_MACH_TREO680
#define GPIO_NR_TREO680_SD_READONLY 33 #define GPIO_NR_TREO680_SD_READONLY 33
#define GPIO_NR_TREO680_SD_POWER 42 #define GPIO_NR_TREO680_SD_POWER 42
#define GPIO_NR_TREO680_VIBRATE_EN 44 #define GPIO_NR_TREO680_VIBRATE_EN 44
#define GPIO_NR_TREO680_KEYB_BL 24 #define GPIO_NR_TREO680_KEYB_BL 24
#define GPIO_NR_TREO680_BT_EN 43 #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 */ /* Centro685 specific GPIOs */
#define GPIO_NR_CENTRO_SD_POWER 21 #define GPIO_NR_CENTRO_SD_POWER 21

View File

@ -37,6 +37,7 @@
#define CSADRCFG1 (SMEMC_VIRT + 0x84) /* Address Configuration Register for CS1 */ #define CSADRCFG1 (SMEMC_VIRT + 0x84) /* Address Configuration Register for CS1 */
#define CSADRCFG2 (SMEMC_VIRT + 0x88) /* Address Configuration Register for CS2 */ #define CSADRCFG2 (SMEMC_VIRT + 0x88) /* Address Configuration Register for CS2 */
#define CSADRCFG3 (SMEMC_VIRT + 0x8C) /* Address Configuration Register for CS3 */ #define CSADRCFG3 (SMEMC_VIRT + 0x8C) /* Address Configuration Register for CS3 */
#define CSMSADRCFG (SMEMC_VIRT + 0xA0) /* Chip Select Configuration Register */
/* /*
* More handy macros for PCMCIA * More handy macros for PCMCIA

View File

@ -98,9 +98,6 @@ static unsigned long treo_pin_config[] __initdata = {
GPIO96_KP_MKOUT_6, GPIO96_KP_MKOUT_6,
GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */
/* LCD */
GPIOxx_LCD_TFT_16BPP,
/* Quick Capture Interface */ /* Quick Capture Interface */
GPIO84_CIF_FV, GPIO84_CIF_FV,
GPIO85_CIF_LV, GPIO85_CIF_LV,
@ -140,6 +137,12 @@ static unsigned long treo680_pin_config[] __initdata = {
/* MATRIX KEYPAD - different wake up source */ /* MATRIX KEYPAD - different wake up source */
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
GPIO99_KP_MKIN_5, 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 */ #endif /* CONFIG_MACH_TREO680 */
@ -155,6 +158,9 @@ static unsigned long centro685_pin_config[] __initdata = {
/* MATRIX KEYPAD - different wake up source */ /* MATRIX KEYPAD - different wake up source */
GPIO100_KP_MKIN_0, GPIO100_KP_MKIN_0,
GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH, GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH,
/* LCD */
GPIOxx_LCD_TFT_16BPP,
}; };
#endif /* CONFIG_MACH_CENTRO */ #endif /* CONFIG_MACH_CENTRO */
@ -328,7 +334,6 @@ static inline void palmtreo_uhc_init(void) {}
/****************************************************************************** /******************************************************************************
* Vibra and LEDs * Vibra and LEDs
******************************************************************************/ ******************************************************************************/
#ifdef CONFIG_MACH_TREO680
static struct gpio_led treo680_gpio_leds[] = { static struct gpio_led treo680_gpio_leds[] = {
{ {
.name = "treo680:vibra:vibra", .name = "treo680:vibra:vibra",
@ -379,21 +384,17 @@ static struct gpio_led_platform_data centro_gpio_led_info = {
static struct platform_device palmtreo_leds = { static struct platform_device palmtreo_leds = {
.name = "leds-gpio", .name = "leds-gpio",
.id = -1, .id = -1,
.dev = {
.platform_data = &treo680_gpio_led_info,
}
}; };
static void __init palmtreo_leds_init(void) static void __init palmtreo_leds_init(void)
{ {
if (machine_is_centro()) if (machine_is_centro())
palmtreo_leds.dev.platform_data = &centro_gpio_led_info; 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); platform_device_register(&palmtreo_leds);
} }
#else
static inline void palmtreo_leds_init(void) {}
#endif
/****************************************************************************** /******************************************************************************
* Machine init * Machine init
@ -424,10 +425,59 @@ static void __init palmphone_common_init(void)
} }
#ifdef CONFIG_MACH_TREO680 #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) static void __init treo680_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
palmphone_common_init(); palmphone_common_init();
treo680_gpio_init();
palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY, palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY,
GPIO_NR_TREO680_SD_POWER, 0); GPIO_NR_TREO680_SD_POWER, 0);
} }

View File

@ -40,6 +40,8 @@ static void pxa3xx_smemc_resume(void)
__raw_writel(csadrcfg[1], CSADRCFG1); __raw_writel(csadrcfg[1], CSADRCFG1);
__raw_writel(csadrcfg[2], CSADRCFG2); __raw_writel(csadrcfg[2], CSADRCFG2);
__raw_writel(csadrcfg[3], CSADRCFG3); __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 = { static struct syscore_ops smemc_syscore_ops = {
@ -49,8 +51,19 @@ static struct syscore_ops smemc_syscore_ops = {
static int __init smemc_init(void) 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); register_syscore_ops(&smemc_syscore_ops);
}
return 0; return 0;
} }

View File

@ -732,7 +732,7 @@ static inline void spitz_lcd_init(void) {}
#endif #endif
/****************************************************************************** /******************************************************************************
* Framebuffer * NAND Flash
******************************************************************************/ ******************************************************************************/
#if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE) #if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE)
static struct mtd_partition spitz_nand_partitions[] = { static struct mtd_partition spitz_nand_partitions[] = {
@ -858,7 +858,7 @@ static inline void spitz_nor_init(void) {}
#endif #endif
/****************************************************************************** /******************************************************************************
* GPIO expander * I2C devices
******************************************************************************/ ******************************************************************************/
#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
static struct pca953x_platform_data akita_pca953x_pdata = { static struct pca953x_platform_data akita_pca953x_pdata = {