Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6
This commit is contained in:
commit
355532bdda
|
@ -3,6 +3,11 @@
|
||||||
|
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
|
|
||||||
|
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
||||||
|
#define MFP_DRIVE_SLOW (0x1 << 13)
|
||||||
|
#define MFP_DRIVE_MEDIUM (0x2 << 13)
|
||||||
|
#define MFP_DRIVE_FAST (0x3 << 13)
|
||||||
|
|
||||||
/* GPIO */
|
/* GPIO */
|
||||||
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
||||||
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
|
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
|
|
||||||
|
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
||||||
|
#define MFP_DRIVE_SLOW (0x2 << 13)
|
||||||
|
#define MFP_DRIVE_MEDIUM (0x4 << 13)
|
||||||
|
#define MFP_DRIVE_FAST (0x8 << 13)
|
||||||
|
|
||||||
/* UART2 */
|
/* UART2 */
|
||||||
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
||||||
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
||||||
|
|
|
@ -12,16 +12,13 @@
|
||||||
* possible, we make the following compromise:
|
* possible, we make the following compromise:
|
||||||
*
|
*
|
||||||
* 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)
|
* 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)
|
||||||
* 2. DRIVE strength definitions redefined to include the reserved bit10
|
* 2. DRIVE strength definitions redefined to include the reserved bit
|
||||||
|
* - the reserved bit differs between pxa168 and pxa910, and the
|
||||||
|
* MFP_DRIVE_* macros are individually defined in mfp-pxa{168,910}.h
|
||||||
* 3. Override MFP_CFG() and MFP_CFG_DRV()
|
* 3. Override MFP_CFG() and MFP_CFG_DRV()
|
||||||
* 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()
|
* 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
|
||||||
#define MFP_DRIVE_SLOW (0x2 << 13)
|
|
||||||
#define MFP_DRIVE_MEDIUM (0x4 << 13)
|
|
||||||
#define MFP_DRIVE_FAST (0x8 << 13)
|
|
||||||
|
|
||||||
#undef MFP_CFG
|
#undef MFP_CFG
|
||||||
#undef MFP_CFG_DRV
|
#undef MFP_CFG_DRV
|
||||||
#undef MFP_CFG_LPM
|
#undef MFP_CFG_LPM
|
||||||
|
|
|
@ -136,7 +136,7 @@ static struct clock_event_device ckevt = {
|
||||||
.set_mode = timer_set_mode,
|
.set_mode = timer_set_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
static cycle_t clksrc_read(void)
|
static cycle_t clksrc_read(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
return timer_read();
|
return timer_read();
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,9 +111,9 @@ static unsigned long ezx_pin_config[] __initdata = {
|
||||||
GPIO25_SSP1_TXD,
|
GPIO25_SSP1_TXD,
|
||||||
GPIO26_SSP1_RXD,
|
GPIO26_SSP1_RXD,
|
||||||
GPIO24_GPIO, /* pcap chip select */
|
GPIO24_GPIO, /* pcap chip select */
|
||||||
GPIO1_GPIO, /* pcap interrupt */
|
GPIO1_GPIO | WAKEUP_ON_EDGE_RISE, /* pcap interrupt */
|
||||||
GPIO4_GPIO, /* WDI_AP */
|
GPIO4_GPIO | MFP_LPM_DRIVE_HIGH, /* WDI_AP */
|
||||||
GPIO55_GPIO, /* SYS_RESTART */
|
GPIO55_GPIO | MFP_LPM_DRIVE_HIGH, /* SYS_RESTART */
|
||||||
|
|
||||||
/* MMC */
|
/* MMC */
|
||||||
GPIO32_MMC_CLK,
|
GPIO32_MMC_CLK,
|
||||||
|
@ -144,20 +144,20 @@ static unsigned long ezx_pin_config[] __initdata = {
|
||||||
#if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
|
#if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
|
||||||
static unsigned long gen1_pin_config[] __initdata = {
|
static unsigned long gen1_pin_config[] __initdata = {
|
||||||
/* flip / lockswitch */
|
/* flip / lockswitch */
|
||||||
GPIO12_GPIO,
|
GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||||
|
|
||||||
/* bluetooth (bcm2035) */
|
/* bluetooth (bcm2035) */
|
||||||
GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
GPIO14_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||||
GPIO48_GPIO, /* RESET */
|
GPIO48_GPIO, /* RESET */
|
||||||
GPIO28_GPIO, /* WAKEUP */
|
GPIO28_GPIO, /* WAKEUP */
|
||||||
|
|
||||||
/* Neptune handshake */
|
/* Neptune handshake */
|
||||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||||
GPIO57_GPIO, /* AP_RDY */
|
GPIO57_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI */
|
||||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI2 */
|
GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI2 */
|
||||||
GPIO82_GPIO, /* RESET */
|
GPIO82_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||||
GPIO99_GPIO, /* TC_MM_EN */
|
GPIO99_GPIO | MFP_LPM_DRIVE_HIGH, /* TC_MM_EN */
|
||||||
|
|
||||||
/* sound */
|
/* sound */
|
||||||
GPIO52_SSP3_SCLK,
|
GPIO52_SSP3_SCLK,
|
||||||
|
@ -199,21 +199,21 @@ static unsigned long gen1_pin_config[] __initdata = {
|
||||||
defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
|
defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
|
||||||
static unsigned long gen2_pin_config[] __initdata = {
|
static unsigned long gen2_pin_config[] __initdata = {
|
||||||
/* flip / lockswitch */
|
/* flip / lockswitch */
|
||||||
GPIO15_GPIO,
|
GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||||
|
|
||||||
/* EOC */
|
/* EOC */
|
||||||
GPIO10_GPIO,
|
GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||||
|
|
||||||
/* bluetooth (bcm2045) */
|
/* bluetooth (bcm2045) */
|
||||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
GPIO13_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||||
GPIO37_GPIO, /* RESET */
|
GPIO37_GPIO, /* RESET */
|
||||||
GPIO57_GPIO, /* WAKEUP */
|
GPIO57_GPIO, /* WAKEUP */
|
||||||
|
|
||||||
/* Neptune handshake */
|
/* Neptune handshake */
|
||||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||||
GPIO96_GPIO, /* AP_RDY */
|
GPIO96_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
GPIO3_GPIO | WAKEUP_ON_EDGE_FALL, /* WDI */
|
||||||
GPIO116_GPIO, /* RESET */
|
GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||||
GPIO41_GPIO, /* BP_FLASH */
|
GPIO41_GPIO, /* BP_FLASH */
|
||||||
|
|
||||||
/* sound */
|
/* sound */
|
||||||
|
|
|
@ -13,8 +13,9 @@ extern void clear_reset_status(unsigned int mask);
|
||||||
/**
|
/**
|
||||||
* init_gpio_reset() - register GPIO as reset generator
|
* init_gpio_reset() - register GPIO as reset generator
|
||||||
* @gpio: gpio nr
|
* @gpio: gpio nr
|
||||||
* @output: set gpio as out/low instead of input during normal work
|
* @output: set gpio as output instead of input during normal work
|
||||||
|
* @level: output level
|
||||||
*/
|
*/
|
||||||
extern int init_gpio_reset(int gpio, int output);
|
extern int init_gpio_reset(int gpio, int output, int level);
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_RESET_H */
|
#endif /* __ASM_ARCH_RESET_H */
|
||||||
|
|
|
@ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {}
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static unsigned long saved_gafr[2][4];
|
static unsigned long saved_gafr[2][4];
|
||||||
static unsigned long saved_gpdr[4];
|
static unsigned long saved_gpdr[4];
|
||||||
|
static unsigned long saved_pgsr[4];
|
||||||
|
|
||||||
static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
||||||
{
|
{
|
||||||
|
@ -332,6 +333,7 @@ static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
||||||
saved_gafr[0][i] = GAFR_L(i);
|
saved_gafr[0][i] = GAFR_L(i);
|
||||||
saved_gafr[1][i] = GAFR_U(i);
|
saved_gafr[1][i] = GAFR_U(i);
|
||||||
saved_gpdr[i] = GPDR(i * 32);
|
saved_gpdr[i] = GPDR(i * 32);
|
||||||
|
saved_pgsr[i] = PGSR(i);
|
||||||
|
|
||||||
GPDR(i * 32) = gpdr_lpm[i];
|
GPDR(i * 32) = gpdr_lpm[i];
|
||||||
}
|
}
|
||||||
|
@ -346,6 +348,7 @@ static int pxa2xx_mfp_resume(struct sys_device *d)
|
||||||
GAFR_L(i) = saved_gafr[0][i];
|
GAFR_L(i) = saved_gafr[0][i];
|
||||||
GAFR_U(i) = saved_gafr[1][i];
|
GAFR_U(i) = saved_gafr[1][i];
|
||||||
GPDR(i * 32) = saved_gpdr[i];
|
GPDR(i * 32) = saved_gpdr[i];
|
||||||
|
PGSR(i) = saved_pgsr[i];
|
||||||
}
|
}
|
||||||
PSSR = PSSR_RDH | PSSR_PH;
|
PSSR = PSSR_RDH | PSSR_PH;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -374,6 +377,9 @@ static int __init pxa2xx_mfp_init(void)
|
||||||
if (cpu_is_pxa27x())
|
if (cpu_is_pxa27x())
|
||||||
pxa27x_mfp_init();
|
pxa27x_mfp_init();
|
||||||
|
|
||||||
|
/* clear RDH bit to enable GPIO receivers after reset/sleep exit */
|
||||||
|
PSSR = PSSR_RDH;
|
||||||
|
|
||||||
/* initialize gafr_run[], pgsr_lpm[] from existing values */
|
/* initialize gafr_run[], pgsr_lpm[] from existing values */
|
||||||
for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
|
for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
|
||||||
gpdr_lpm[i] = GPDR(i * 32);
|
gpdr_lpm[i] = GPDR(i * 32);
|
||||||
|
|
|
@ -62,6 +62,8 @@ static unsigned long palmld_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
GPIO108_GPIO, /* ir disable */
|
GPIO108_GPIO, /* ir disable */
|
||||||
|
|
|
@ -64,6 +64,7 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
GPIO95_AC97_nRESET,
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
|
|
|
@ -65,6 +65,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
GPIO95_AC97_nRESET,
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
|
|
|
@ -20,7 +20,7 @@ static void do_hw_reset(void);
|
||||||
|
|
||||||
static int reset_gpio = -1;
|
static int reset_gpio = -1;
|
||||||
|
|
||||||
int init_gpio_reset(int gpio, int output)
|
int init_gpio_reset(int gpio, int output, int level)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ int init_gpio_reset(int gpio, int output)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output)
|
if (output)
|
||||||
rc = gpio_direction_output(gpio, 0);
|
rc = gpio_direction_output(gpio, level);
|
||||||
else
|
else
|
||||||
rc = gpio_direction_input(gpio);
|
rc = gpio_direction_input(gpio);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
|
|
@ -531,9 +531,15 @@ static int spitz_ohci_init(struct device *dev)
|
||||||
return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
|
return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void spitz_ohci_exit(struct device *dev)
|
||||||
|
{
|
||||||
|
gpio_free(SPITZ_GPIO_USB_HOST);
|
||||||
|
}
|
||||||
|
|
||||||
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
||||||
.port_mode = PMM_NPS_MODE,
|
.port_mode = PMM_NPS_MODE,
|
||||||
.init = spitz_ohci_init,
|
.init = spitz_ohci_init,
|
||||||
|
.exit = spitz_ohci_exit,
|
||||||
.flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
|
.flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
|
||||||
.power_budget = 150,
|
.power_budget = 150,
|
||||||
};
|
};
|
||||||
|
@ -731,7 +737,7 @@ static void spitz_restart(char mode, const char *cmd)
|
||||||
|
|
||||||
static void __init common_init(void)
|
static void __init common_init(void)
|
||||||
{
|
{
|
||||||
init_gpio_reset(SPITZ_GPIO_ON_RESET, 1);
|
init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0);
|
||||||
pm_power_off = spitz_poweroff;
|
pm_power_off = spitz_poweroff;
|
||||||
arm_pm_restart = spitz_restart;
|
arm_pm_restart = spitz_restart;
|
||||||
|
|
||||||
|
|
|
@ -897,7 +897,7 @@ static void __init tosa_init(void)
|
||||||
gpio_set_wake(MFP_PIN_GPIO1, 1);
|
gpio_set_wake(MFP_PIN_GPIO1, 1);
|
||||||
/* We can't pass to gpio-keys since it will drop the Reset altfunc */
|
/* We can't pass to gpio-keys since it will drop the Reset altfunc */
|
||||||
|
|
||||||
init_gpio_reset(TOSA_GPIO_ON_RESET, 0);
|
init_gpio_reset(TOSA_GPIO_ON_RESET, 0, 0);
|
||||||
|
|
||||||
pm_power_off = tosa_poweroff;
|
pm_power_off = tosa_poweroff;
|
||||||
arm_pm_restart = tosa_restart;
|
arm_pm_restart = tosa_restart;
|
||||||
|
|
Loading…
Reference in a new issue