mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 18:39:59 +00:00
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:
commit
3394d8977e
5 changed files with 80 additions and 15 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = ¢ro_gpio_led_info;
|
palmtreo_leds.dev.platform_data = ¢ro_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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
Loading…
Reference in a new issue