Commit 355532bd authored by Russell King's avatar Russell King Committed by Russell King
parents 2528ed11 6ec04f43
...@@ -3,6 +3,11 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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); ...@@ -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) {} ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment