diff options
27 files changed, 849 insertions, 82 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 9673cd28a69b..4e7da96333f6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -636,7 +636,7 @@ P: Dirk Opfer | |||
636 | M: dirk@opfer-online.de | 636 | M: dirk@opfer-online.de |
637 | S: Maintained | 637 | S: Maintained |
638 | 638 | ||
639 | ARM/PALMTX,PALMT5,PALMLD SUPPORT | 639 | ARM/PALMTX,PALMT5,PALMLD,PALMTE2 SUPPORT |
640 | P: Marek Vasut | 640 | P: Marek Vasut |
641 | M: marek.vasut@gmail.com | 641 | M: marek.vasut@gmail.com |
642 | W: http://hackndev.com | 642 | W: http://hackndev.com |
diff --git a/arch/arm/configs/magician_defconfig b/arch/arm/configs/magician_defconfig index 82428c2f234c..f56837f69ca7 100644 --- a/arch/arm/configs/magician_defconfig +++ b/arch/arm/configs/magician_defconfig | |||
@@ -1183,7 +1183,11 @@ CONFIG_RTC_INTF_DEV=y | |||
1183 | CONFIG_RTC_DRV_SA1100=y | 1183 | CONFIG_RTC_DRV_SA1100=y |
1184 | # CONFIG_RTC_DRV_PXA is not set | 1184 | # CONFIG_RTC_DRV_PXA is not set |
1185 | # CONFIG_DMADEVICES is not set | 1185 | # CONFIG_DMADEVICES is not set |
1186 | # CONFIG_REGULATOR is not set | 1186 | CONFIG_REGULATOR=y |
1187 | # CONFIG_REGULATOR_DEBUG is not set | ||
1188 | # CONFIG_REGULATOR_FIXED_VOLTAGE is not set | ||
1189 | # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set | ||
1190 | CONFIG_REGULATOR_BQ24022=y | ||
1187 | # CONFIG_UIO is not set | 1191 | # CONFIG_UIO is not set |
1188 | # CONFIG_STAGING is not set | 1192 | # CONFIG_STAGING is not set |
1189 | 1193 | ||
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 96a2006cb597..3e66d9099eab 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -343,6 +343,15 @@ config ARCH_PXA_PALM | |||
343 | bool "PXA based Palm PDAs" | 343 | bool "PXA based Palm PDAs" |
344 | select HAVE_PWM | 344 | select HAVE_PWM |
345 | 345 | ||
346 | config MACH_PALMTE2 | ||
347 | bool "Palm Tungsten|E2" | ||
348 | default y | ||
349 | depends on ARCH_PXA_PALM | ||
350 | select PXA25x | ||
351 | help | ||
352 | Say Y here if you intend to run this kernel on a Palm Tungsten|E2 | ||
353 | handheld computer. | ||
354 | |||
346 | config MACH_PALMT5 | 355 | config MACH_PALMT5 |
347 | bool "Palm Tungsten|T5" | 356 | bool "Palm Tungsten|T5" |
348 | default y | 357 | default y |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index c80e1bac4945..682dbf4e14b0 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
@@ -57,6 +57,7 @@ obj-$(CONFIG_MACH_E740) += e740.o | |||
57 | obj-$(CONFIG_MACH_E750) += e750.o | 57 | obj-$(CONFIG_MACH_E750) += e750.o |
58 | obj-$(CONFIG_MACH_E400) += e400.o | 58 | obj-$(CONFIG_MACH_E400) += e400.o |
59 | obj-$(CONFIG_MACH_E800) += e800.o | 59 | obj-$(CONFIG_MACH_E800) += e800.o |
60 | obj-$(CONFIG_MACH_PALMTE2) += palmte2.o | ||
60 | obj-$(CONFIG_MACH_PALMT5) += palmt5.o | 61 | obj-$(CONFIG_MACH_PALMT5) += palmt5.o |
61 | obj-$(CONFIG_MACH_PALMTX) += palmtx.o | 62 | obj-$(CONFIG_MACH_PALMTX) += palmtx.o |
62 | obj-$(CONFIG_MACH_PALMLD) += palmld.o | 63 | obj-$(CONFIG_MACH_PALMLD) += palmld.o |
diff --git a/arch/arm/mach-pxa/cm-x2xx.c b/arch/arm/mach-pxa/cm-x2xx.c index 117b5435f8d5..b50ef39eabfc 100644 --- a/arch/arm/mach-pxa/cm-x2xx.c +++ b/arch/arm/mach-pxa/cm-x2xx.c | |||
@@ -121,7 +121,7 @@ static inline void cmx2xx_init_dm9000(void) {} | |||
121 | /* UCB1400 touchscreen controller */ | 121 | /* UCB1400 touchscreen controller */ |
122 | #if defined(CONFIG_TOUCHSCREEN_UCB1400) || defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE) | 122 | #if defined(CONFIG_TOUCHSCREEN_UCB1400) || defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE) |
123 | static struct platform_device cmx2xx_ts_device = { | 123 | static struct platform_device cmx2xx_ts_device = { |
124 | .name = "ucb1400_ts", | 124 | .name = "ucb1400_core", |
125 | .id = -1, | 125 | .id = -1, |
126 | }; | 126 | }; |
127 | 127 | ||
diff --git a/arch/arm/mach-pxa/colibri-pxa300.c b/arch/arm/mach-pxa/colibri-pxa300.c index 10c2eaf93230..7c9c34c19ae2 100644 --- a/arch/arm/mach-pxa/colibri-pxa300.c +++ b/arch/arm/mach-pxa/colibri-pxa300.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
18 | #include <net/ax88796.h> | 18 | #include <linux/interrupt.h> |
19 | 19 | ||
20 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
21 | #include <asm/sizes.h> | 21 | #include <asm/sizes.h> |
@@ -32,12 +32,13 @@ | |||
32 | 32 | ||
33 | #if defined(CONFIG_AX88796) | 33 | #if defined(CONFIG_AX88796) |
34 | #define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO) | 34 | #define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO) |
35 | |||
35 | /* | 36 | /* |
36 | * Asix AX88796 Ethernet | 37 | * Asix AX88796 Ethernet |
37 | */ | 38 | */ |
38 | static struct ax_plat_data colibri_asix_platdata = { | 39 | static struct ax_plat_data colibri_asix_platdata = { |
39 | .flags = AXFLG_MAC_FROMDEV, | 40 | .flags = 0, /* defined later */ |
40 | .wordlength = 2 | 41 | .wordlength = 2, |
41 | }; | 42 | }; |
42 | 43 | ||
43 | static struct resource colibri_asix_resource[] = { | 44 | static struct resource colibri_asix_resource[] = { |
@@ -49,7 +50,7 @@ static struct resource colibri_asix_resource[] = { | |||
49 | [1] = { | 50 | [1] = { |
50 | .start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), | 51 | .start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), |
51 | .end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), | 52 | .end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), |
52 | .flags = IORESOURCE_IRQ | 53 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING, |
53 | } | 54 | } |
54 | }; | 55 | }; |
55 | 56 | ||
@@ -70,8 +71,8 @@ static mfp_cfg_t colibri_pxa300_eth_pin_config[] __initdata = { | |||
70 | 71 | ||
71 | static void __init colibri_pxa300_init_eth(void) | 72 | static void __init colibri_pxa300_init_eth(void) |
72 | { | 73 | { |
74 | colibri_pxa3xx_init_eth(&colibri_asix_platdata); | ||
73 | pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config)); | 75 | pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config)); |
74 | set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING); | ||
75 | platform_device_register(&asix_device); | 76 | platform_device_register(&asix_device); |
76 | } | 77 | } |
77 | #else | 78 | #else |
diff --git a/arch/arm/mach-pxa/colibri-pxa320.c b/arch/arm/mach-pxa/colibri-pxa320.c index 55b74a7a6151..a18d37b3c5e6 100644 --- a/arch/arm/mach-pxa/colibri-pxa320.c +++ b/arch/arm/mach-pxa/colibri-pxa320.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/gpio.h> | 17 | #include <linux/gpio.h> |
18 | #include <net/ax88796.h> | 18 | #include <linux/interrupt.h> |
19 | 19 | ||
20 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
21 | #include <asm/sizes.h> | 21 | #include <asm/sizes.h> |
@@ -38,8 +38,8 @@ | |||
38 | * Asix AX88796 Ethernet | 38 | * Asix AX88796 Ethernet |
39 | */ | 39 | */ |
40 | static struct ax_plat_data colibri_asix_platdata = { | 40 | static struct ax_plat_data colibri_asix_platdata = { |
41 | .flags = AXFLG_MAC_FROMDEV, | 41 | .flags = 0, /* defined later */ |
42 | .wordlength = 2 | 42 | .wordlength = 2, |
43 | }; | 43 | }; |
44 | 44 | ||
45 | static struct resource colibri_asix_resource[] = { | 45 | static struct resource colibri_asix_resource[] = { |
@@ -51,7 +51,7 @@ static struct resource colibri_asix_resource[] = { | |||
51 | [1] = { | 51 | [1] = { |
52 | .start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), | 52 | .start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), |
53 | .end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), | 53 | .end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), |
54 | .flags = IORESOURCE_IRQ | 54 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING, |
55 | } | 55 | } |
56 | }; | 56 | }; |
57 | 57 | ||
@@ -72,8 +72,8 @@ static mfp_cfg_t colibri_pxa320_eth_pin_config[] __initdata = { | |||
72 | 72 | ||
73 | static void __init colibri_pxa320_init_eth(void) | 73 | static void __init colibri_pxa320_init_eth(void) |
74 | { | 74 | { |
75 | colibri_pxa3xx_init_eth(&colibri_asix_platdata); | ||
75 | pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_eth_pin_config)); | 76 | pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_eth_pin_config)); |
76 | set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING); | ||
77 | platform_device_register(&asix_device); | 77 | platform_device_register(&asix_device); |
78 | } | 78 | } |
79 | #else | 79 | #else |
diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c b/arch/arm/mach-pxa/colibri-pxa3xx.c index 12d0afc54aa5..ea34e34f8cd8 100644 --- a/arch/arm/mach-pxa/colibri-pxa3xx.c +++ b/arch/arm/mach-pxa/colibri-pxa3xx.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/platform_device.h> | 15 | #include <linux/platform_device.h> |
16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
17 | #include <linux/etherdevice.h> | ||
17 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
18 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
19 | #include <asm/sizes.h> | 20 | #include <asm/sizes.h> |
@@ -28,6 +29,40 @@ | |||
28 | #include "generic.h" | 29 | #include "generic.h" |
29 | #include "devices.h" | 30 | #include "devices.h" |
30 | 31 | ||
32 | #if defined(CONFIG_AX88796) | ||
33 | #define ETHER_ADDR_LEN 6 | ||
34 | static u8 ether_mac_addr[ETHER_ADDR_LEN]; | ||
35 | |||
36 | void __init colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data) | ||
37 | { | ||
38 | int i; | ||
39 | u64 serial = ((u64) system_serial_high << 32) | system_serial_low; | ||
40 | |||
41 | /* | ||
42 | * If the bootloader passed in a serial boot tag, which contains a | ||
43 | * valid ethernet MAC, pass it to the interface. Toradex ships the | ||
44 | * modules with their own bootloader which provides a valid MAC | ||
45 | * this way. | ||
46 | */ | ||
47 | |||
48 | for (i = 0; i < ETHER_ADDR_LEN; i++) { | ||
49 | ether_mac_addr[i] = serial & 0xff; | ||
50 | serial >>= 8; | ||
51 | } | ||
52 | |||
53 | if (is_valid_ether_addr(ether_mac_addr)) { | ||
54 | plat_data->flags |= AXFLG_MAC_FROMPLATFORM; | ||
55 | plat_data->mac_addr = ether_mac_addr; | ||
56 | printk(KERN_INFO "%s(): taking MAC from serial boot tag\n", | ||
57 | __func__); | ||
58 | } else { | ||
59 | plat_data->flags |= AXFLG_MAC_FROMDEV; | ||
60 | printk(KERN_INFO "%s(): no valid serial boot tag found, " | ||
61 | "taking MAC from device\n", __func__); | ||
62 | } | ||
63 | } | ||
64 | #endif | ||
65 | |||
31 | #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) | 66 | #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) |
32 | static int mmc_detect_pin; | 67 | static int mmc_detect_pin; |
33 | 68 | ||
diff --git a/arch/arm/mach-pxa/csb701.c b/arch/arm/mach-pxa/csb701.c index 4a2a2952c374..5a221a49ea4d 100644 --- a/arch/arm/mach-pxa/csb701.c +++ b/arch/arm/mach-pxa/csb701.c | |||
@@ -5,6 +5,8 @@ | |||
5 | #include <linux/input.h> | 5 | #include <linux/input.h> |
6 | #include <linux/leds.h> | 6 | #include <linux/leds.h> |
7 | 7 | ||
8 | #include <asm/mach-types.h> | ||
9 | |||
8 | static struct gpio_keys_button csb701_buttons[] = { | 10 | static struct gpio_keys_button csb701_buttons[] = { |
9 | { | 11 | { |
10 | .code = 0x7, | 12 | .code = 0x7, |
@@ -54,6 +56,9 @@ static struct platform_device *devices[] __initdata = { | |||
54 | 56 | ||
55 | static int __init csb701_init(void) | 57 | static int __init csb701_init(void) |
56 | { | 58 | { |
59 | if (!machine_is_csb726()) | ||
60 | return -ENODEV; | ||
61 | |||
57 | return platform_add_devices(devices, ARRAY_SIZE(devices)); | 62 | return platform_add_devices(devices, ARRAY_SIZE(devices)); |
58 | } | 63 | } |
59 | 64 | ||
diff --git a/arch/arm/mach-pxa/e740.c b/arch/arm/mach-pxa/e740.c index 07500a04fd8c..a36fc17f671d 100644 --- a/arch/arm/mach-pxa/e740.c +++ b/arch/arm/mach-pxa/e740.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <mach/udc.h> | 29 | #include <mach/udc.h> |
30 | #include <mach/irda.h> | 30 | #include <mach/irda.h> |
31 | #include <mach/irqs.h> | 31 | #include <mach/irqs.h> |
32 | #include <mach/audio.h> | ||
32 | 33 | ||
33 | #include "generic.h" | 34 | #include "generic.h" |
34 | #include "eseries.h" | 35 | #include "eseries.h" |
@@ -197,6 +198,7 @@ static void __init e740_init(void) | |||
197 | eseries_get_tmio_gpios(); | 198 | eseries_get_tmio_gpios(); |
198 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 199 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
199 | pxa_set_udc_info(&e7xx_udc_mach_info); | 200 | pxa_set_udc_info(&e7xx_udc_mach_info); |
201 | pxa_set_ac97_info(NULL); | ||
200 | e7xx_irda_init(); | 202 | e7xx_irda_init(); |
201 | pxa_set_ficp_info(&e7xx_ficp_platform_data); | 203 | pxa_set_ficp_info(&e7xx_ficp_platform_data); |
202 | } | 204 | } |
diff --git a/arch/arm/mach-pxa/e750.c b/arch/arm/mach-pxa/e750.c index 6126c04e02bc..1d00110590e5 100644 --- a/arch/arm/mach-pxa/e750.c +++ b/arch/arm/mach-pxa/e750.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <mach/udc.h> | 28 | #include <mach/udc.h> |
29 | #include <mach/irda.h> | 29 | #include <mach/irda.h> |
30 | #include <mach/irqs.h> | 30 | #include <mach/irqs.h> |
31 | #include <mach/audio.h> | ||
31 | 32 | ||
32 | #include "generic.h" | 33 | #include "generic.h" |
33 | #include "eseries.h" | 34 | #include "eseries.h" |
@@ -198,6 +199,7 @@ static void __init e750_init(void) | |||
198 | eseries_get_tmio_gpios(); | 199 | eseries_get_tmio_gpios(); |
199 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 200 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
200 | pxa_set_udc_info(&e7xx_udc_mach_info); | 201 | pxa_set_udc_info(&e7xx_udc_mach_info); |
202 | pxa_set_ac97_info(NULL); | ||
201 | e7xx_irda_init(); | 203 | e7xx_irda_init(); |
202 | pxa_set_ficp_info(&e7xx_ficp_platform_data); | 204 | pxa_set_ficp_info(&e7xx_ficp_platform_data); |
203 | } | 205 | } |
diff --git a/arch/arm/mach-pxa/e800.c b/arch/arm/mach-pxa/e800.c index 74ab09812a72..9866c7b9e784 100644 --- a/arch/arm/mach-pxa/e800.c +++ b/arch/arm/mach-pxa/e800.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <mach/eseries-gpio.h> | 27 | #include <mach/eseries-gpio.h> |
28 | #include <mach/udc.h> | 28 | #include <mach/udc.h> |
29 | #include <mach/irqs.h> | 29 | #include <mach/irqs.h> |
30 | #include <mach/audio.h> | ||
30 | 31 | ||
31 | #include "generic.h" | 32 | #include "generic.h" |
32 | #include "eseries.h" | 33 | #include "eseries.h" |
@@ -199,6 +200,7 @@ static void __init e800_init(void) | |||
199 | eseries_get_tmio_gpios(); | 200 | eseries_get_tmio_gpios(); |
200 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 201 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
201 | pxa_set_udc_info(&e800_udc_mach_info); | 202 | pxa_set_udc_info(&e800_udc_mach_info); |
203 | pxa_set_ac97_info(NULL); | ||
202 | } | 204 | } |
203 | 205 | ||
204 | MACHINE_START(E800, "Toshiba e800") | 206 | MACHINE_START(E800, "Toshiba e800") |
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c index 920dfb8d36da..67611dadb44e 100644 --- a/arch/arm/mach-pxa/em-x270.c +++ b/arch/arm/mach-pxa/em-x270.c | |||
@@ -25,8 +25,10 @@ | |||
25 | #include <linux/regulator/machine.h> | 25 | #include <linux/regulator/machine.h> |
26 | #include <linux/spi/spi.h> | 26 | #include <linux/spi/spi.h> |
27 | #include <linux/spi/tdo24m.h> | 27 | #include <linux/spi/tdo24m.h> |
28 | #include <linux/spi/libertas_spi.h> | ||
28 | #include <linux/power_supply.h> | 29 | #include <linux/power_supply.h> |
29 | #include <linux/apm-emulation.h> | 30 | #include <linux/apm-emulation.h> |
31 | #include <linux/delay.h> | ||
30 | 32 | ||
31 | #include <media/soc_camera.h> | 33 | #include <media/soc_camera.h> |
32 | 34 | ||
@@ -62,6 +64,8 @@ | |||
62 | #define GPIO93_CAM_RESET (93) | 64 | #define GPIO93_CAM_RESET (93) |
63 | #define GPIO41_ETHIRQ (41) | 65 | #define GPIO41_ETHIRQ (41) |
64 | #define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ) | 66 | #define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ) |
67 | #define GPIO115_WLAN_PWEN (115) | ||
68 | #define GPIO19_WLAN_STRAP (19) | ||
65 | 69 | ||
66 | static int mmc_cd; | 70 | static int mmc_cd; |
67 | static int nand_rb; | 71 | static int nand_rb; |
@@ -159,8 +163,8 @@ static unsigned long common_pin_config[] = { | |||
159 | GPIO57_SSP1_TXD, | 163 | GPIO57_SSP1_TXD, |
160 | 164 | ||
161 | /* SSP2 */ | 165 | /* SSP2 */ |
162 | GPIO19_SSP2_SCLK, | 166 | GPIO19_GPIO, /* SSP2 clock is used as GPIO for Libertas pin-strap */ |
163 | GPIO14_SSP2_SFRM, | 167 | GPIO14_GPIO, |
164 | GPIO89_SSP2_TXD, | 168 | GPIO89_SSP2_TXD, |
165 | GPIO88_SSP2_RXD, | 169 | GPIO88_SSP2_RXD, |
166 | 170 | ||
@@ -648,20 +652,86 @@ static struct tdo24m_platform_data em_x270_tdo24m_pdata = { | |||
648 | .model = TDO35S, | 652 | .model = TDO35S, |
649 | }; | 653 | }; |
650 | 654 | ||
655 | static struct pxa2xx_spi_master em_x270_spi_2_info = { | ||
656 | .num_chipselect = 1, | ||
657 | .enable_dma = 1, | ||
658 | }; | ||
659 | |||
660 | static struct pxa2xx_spi_chip em_x270_libertas_chip = { | ||
661 | .rx_threshold = 1, | ||
662 | .tx_threshold = 1, | ||
663 | .timeout = 1000, | ||
664 | }; | ||
665 | |||
666 | static unsigned long em_x270_libertas_pin_config[] = { | ||
667 | /* SSP2 */ | ||
668 | GPIO19_SSP2_SCLK, | ||
669 | GPIO14_GPIO, | ||
670 | GPIO89_SSP2_TXD, | ||
671 | GPIO88_SSP2_RXD, | ||
672 | }; | ||
673 | |||
674 | static int em_x270_libertas_setup(struct spi_device *spi) | ||
675 | { | ||
676 | int err = gpio_request(GPIO115_WLAN_PWEN, "WLAN PWEN"); | ||
677 | if (err) | ||
678 | return err; | ||
679 | |||
680 | gpio_direction_output(GPIO19_WLAN_STRAP, 1); | ||
681 | mdelay(100); | ||
682 | |||
683 | pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_libertas_pin_config)); | ||
684 | |||
685 | gpio_direction_output(GPIO115_WLAN_PWEN, 0); | ||
686 | mdelay(100); | ||
687 | gpio_set_value(GPIO115_WLAN_PWEN, 1); | ||
688 | mdelay(100); | ||
689 | |||
690 | spi->bits_per_word = 16; | ||
691 | spi_setup(spi); | ||
692 | |||
693 | return 0; | ||
694 | } | ||
695 | |||
696 | static int em_x270_libertas_teardown(struct spi_device *spi) | ||
697 | { | ||
698 | gpio_set_value(GPIO115_WLAN_PWEN, 0); | ||
699 | gpio_free(GPIO115_WLAN_PWEN); | ||
700 | |||
701 | return 0; | ||
702 | } | ||
703 | |||
704 | struct libertas_spi_platform_data em_x270_libertas_pdata = { | ||
705 | .use_dummy_writes = 1, | ||
706 | .gpio_cs = 14, | ||
707 | .setup = em_x270_libertas_setup, | ||
708 | .teardown = em_x270_libertas_teardown, | ||
709 | }; | ||
710 | |||
651 | static struct spi_board_info em_x270_spi_devices[] __initdata = { | 711 | static struct spi_board_info em_x270_spi_devices[] __initdata = { |
652 | { | 712 | { |
653 | .modalias = "tdo24m", | 713 | .modalias = "tdo24m", |
654 | .max_speed_hz = 1000000, | 714 | .max_speed_hz = 1000000, |
655 | .bus_num = 1, | 715 | .bus_num = 1, |
656 | .chip_select = 0, | 716 | .chip_select = 0, |
657 | .controller_data = &em_x270_tdo24m_chip, | 717 | .controller_data = &em_x270_tdo24m_chip, |
658 | .platform_data = &em_x270_tdo24m_pdata, | 718 | .platform_data = &em_x270_tdo24m_pdata, |
719 | }, | ||
720 | { | ||
721 | .modalias = "libertas_spi", | ||
722 | .max_speed_hz = 13000000, | ||
723 | .bus_num = 2, | ||
724 | .irq = IRQ_GPIO(116), | ||
725 | .chip_select = 0, | ||
726 | .controller_data = &em_x270_libertas_chip, | ||
727 | .platform_data = &em_x270_libertas_pdata, | ||
659 | }, | 728 | }, |
660 | }; | 729 | }; |
661 | 730 | ||
662 | static void __init em_x270_init_spi(void) | 731 | static void __init em_x270_init_spi(void) |
663 | { | 732 | { |
664 | pxa2xx_set_spi_info(1, &em_x270_spi_info); | 733 | pxa2xx_set_spi_info(1, &em_x270_spi_info); |
734 | pxa2xx_set_spi_info(2, &em_x270_spi_2_info); | ||
665 | spi_register_board_info(ARRAY_AND_SIZE(em_x270_spi_devices)); | 735 | spi_register_board_info(ARRAY_AND_SIZE(em_x270_spi_devices)); |
666 | } | 736 | } |
667 | #else | 737 | #else |
diff --git a/arch/arm/mach-pxa/include/mach/colibri.h b/arch/arm/mach-pxa/include/mach/colibri.h index 3f2a01d6a03c..90230c6f9925 100644 --- a/arch/arm/mach-pxa/include/mach/colibri.h +++ b/arch/arm/mach-pxa/include/mach/colibri.h | |||
@@ -1,5 +1,8 @@ | |||
1 | #ifndef _COLIBRI_H_ | 1 | #ifndef _COLIBRI_H_ |
2 | #define _COLIBRI_H_ | 2 | #define _COLIBRI_H_ |
3 | |||
4 | #include <net/ax88796.h> | ||
5 | |||
3 | /* | 6 | /* |
4 | * common settings for all modules | 7 | * common settings for all modules |
5 | */ | 8 | */ |
@@ -16,6 +19,10 @@ extern void colibri_pxa3xx_init_lcd(int bl_pin); | |||
16 | static inline void colibri_pxa3xx_init_lcd(int) {} | 19 | static inline void colibri_pxa3xx_init_lcd(int) {} |
17 | #endif | 20 | #endif |
18 | 21 | ||
22 | #if defined(CONFIG_AX88796) | ||
23 | extern void colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data); | ||
24 | #endif | ||
25 | |||
19 | /* physical memory regions */ | 26 | /* physical memory regions */ |
20 | #define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */ | 27 | #define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */ |
21 | 28 | ||
diff --git a/arch/arm/mach-pxa/include/mach/magician.h b/arch/arm/mach-pxa/include/mach/magician.h index 82a399f3f9f2..20ef37d4a9a7 100644 --- a/arch/arm/mach-pxa/include/mach/magician.h +++ b/arch/arm/mach-pxa/include/mach/magician.h | |||
@@ -27,7 +27,7 @@ | |||
27 | #define GPIO22_MAGICIAN_VIBRA_EN 22 | 27 | #define GPIO22_MAGICIAN_VIBRA_EN 22 |
28 | #define GPIO26_MAGICIAN_GSM_POWER 26 | 28 | #define GPIO26_MAGICIAN_GSM_POWER 26 |
29 | #define GPIO27_MAGICIAN_USBC_PUEN 27 | 29 | #define GPIO27_MAGICIAN_USBC_PUEN 27 |
30 | #define GPIO30_MAGICIAN_nCHARGE_EN 30 | 30 | #define GPIO30_MAGICIAN_BQ24022_nCHARGE_EN 30 |
31 | #define GPIO37_MAGICIAN_KEY_HANGUP 37 | 31 | #define GPIO37_MAGICIAN_KEY_HANGUP 37 |
32 | #define GPIO38_MAGICIAN_KEY_CONTACTS 38 | 32 | #define GPIO38_MAGICIAN_KEY_CONTACTS 38 |
33 | #define GPIO40_MAGICIAN_GSM_OUT2 40 | 33 | #define GPIO40_MAGICIAN_GSM_OUT2 40 |
@@ -98,7 +98,7 @@ | |||
98 | #define EGPIO_MAGICIAN_UNKNOWN_WAVEDEV_DLL MAGICIAN_EGPIO(2, 2) | 98 | #define EGPIO_MAGICIAN_UNKNOWN_WAVEDEV_DLL MAGICIAN_EGPIO(2, 2) |
99 | #define EGPIO_MAGICIAN_FLASH_VPP MAGICIAN_EGPIO(2, 3) | 99 | #define EGPIO_MAGICIAN_FLASH_VPP MAGICIAN_EGPIO(2, 3) |
100 | #define EGPIO_MAGICIAN_BL_POWER2 MAGICIAN_EGPIO(2, 4) | 100 | #define EGPIO_MAGICIAN_BL_POWER2 MAGICIAN_EGPIO(2, 4) |
101 | #define EGPIO_MAGICIAN_CHARGE_EN MAGICIAN_EGPIO(2, 5) | 101 | #define EGPIO_MAGICIAN_BQ24022_ISET2 MAGICIAN_EGPIO(2, 5) |
102 | #define EGPIO_MAGICIAN_GSM_POWER MAGICIAN_EGPIO(2, 7) | 102 | #define EGPIO_MAGICIAN_GSM_POWER MAGICIAN_EGPIO(2, 7) |
103 | 103 | ||
104 | /* input */ | 104 | /* input */ |
diff --git a/arch/arm/mach-pxa/include/mach/palmld.h b/arch/arm/mach-pxa/include/mach/palmld.h index 7c295a48d784..fb13c82ad6dc 100644 --- a/arch/arm/mach-pxa/include/mach/palmld.h +++ b/arch/arm/mach-pxa/include/mach/palmld.h | |||
@@ -87,6 +87,7 @@ | |||
87 | #define PALMLD_IDE_SIZE 0x00100000 | 87 | #define PALMLD_IDE_SIZE 0x00100000 |
88 | 88 | ||
89 | #define PALMLD_PHYS_IO_START 0x40000000 | 89 | #define PALMLD_PHYS_IO_START 0x40000000 |
90 | #define PALMLD_STR_BASE 0xa0200000 | ||
90 | 91 | ||
91 | /* BATTERY */ | 92 | /* BATTERY */ |
92 | #define PALMLD_BAT_MAX_VOLTAGE 4000 /* 4.00V maximum voltage */ | 93 | #define PALMLD_BAT_MAX_VOLTAGE 4000 /* 4.00V maximum voltage */ |
diff --git a/arch/arm/mach-pxa/include/mach/palmt5.h b/arch/arm/mach-pxa/include/mach/palmt5.h index 94db2881f048..052bfe788ada 100644 --- a/arch/arm/mach-pxa/include/mach/palmt5.h +++ b/arch/arm/mach-pxa/include/mach/palmt5.h | |||
@@ -59,6 +59,7 @@ | |||
59 | /* Various addresses */ | 59 | /* Various addresses */ |
60 | #define PALMT5_PHYS_RAM_START 0xa0000000 | 60 | #define PALMT5_PHYS_RAM_START 0xa0000000 |
61 | #define PALMT5_PHYS_IO_START 0x40000000 | 61 | #define PALMT5_PHYS_IO_START 0x40000000 |
62 | #define PALMT5_STR_BASE 0xa0200000 | ||
62 | 63 | ||
63 | /* TOUCHSCREEN */ | 64 | /* TOUCHSCREEN */ |
64 | #define AC97_LINK_FRAME 21 | 65 | #define AC97_LINK_FRAME 21 |
diff --git a/arch/arm/mach-pxa/include/mach/palmte2.h b/arch/arm/mach-pxa/include/mach/palmte2.h new file mode 100644 index 000000000000..12361341f9d8 --- /dev/null +++ b/arch/arm/mach-pxa/include/mach/palmte2.h | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * GPIOs and interrupts for Palm Tungsten|E2 Handheld Computer | ||
3 | * | ||
4 | * Author: | ||
5 | * Carlos Eduardo Medaglia Dyonisio <cadu@nerdfeliz.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | #ifndef _INCLUDE_PALMTE2_H_ | ||
14 | #define _INCLUDE_PALMTE2_H_ | ||
15 | |||
16 | /** HERE ARE GPIOs **/ | ||
17 | |||
18 | /* GPIOs */ | ||
19 | #define GPIO_NR_PALMTE2_POWER_DETECT 9 | ||
20 | #define GPIO_NR_PALMTE2_HOTSYNC_BUTTON_N 4 | ||
21 | #define GPIO_NR_PALMTE2_EARPHONE_DETECT 15 | ||
22 | |||
23 | /* SD/MMC */ | ||
24 | #define GPIO_NR_PALMTE2_SD_DETECT_N 10 | ||
25 | #define GPIO_NR_PALMTE2_SD_POWER 55 | ||
26 | #define GPIO_NR_PALMTE2_SD_READONLY 51 | ||
27 | |||
28 | /* IRDA - disable GPIO connected to SD pin of tranceiver (TFBS4710?) ? */ | ||
29 | #define GPIO_NR_PALMTE2_IR_DISABLE 48 | ||
30 | |||
31 | /* USB */ | ||
32 | #define GPIO_NR_PALMTE2_USB_DETECT_N 35 | ||
33 | #define GPIO_NR_PALMTE2_USB_PULLUP 53 | ||
34 | |||
35 | /* LCD/BACKLIGHT */ | ||
36 | #define GPIO_NR_PALMTE2_BL_POWER 56 | ||
37 | #define GPIO_NR_PALMTE2_LCD_POWER 37 | ||
38 | |||
39 | /* KEYS */ | ||
40 | #define GPIO_NR_PALMTE2_KEY_NOTES 5 | ||
41 | #define GPIO_NR_PALMTE2_KEY_TASKS 7 | ||
42 | #define GPIO_NR_PALMTE2_KEY_CALENDAR 11 | ||
43 | #define GPIO_NR_PALMTE2_KEY_CONTACTS 13 | ||
44 | #define GPIO_NR_PALMTE2_KEY_CENTER 14 | ||
45 | #define GPIO_NR_PALMTE2_KEY_LEFT 19 | ||
46 | #define GPIO_NR_PALMTE2_KEY_RIGHT 20 | ||
47 | #define GPIO_NR_PALMTE2_KEY_DOWN 21 | ||
48 | #define GPIO_NR_PALMTE2_KEY_UP 22 | ||
49 | |||
50 | /** HERE ARE INIT VALUES **/ | ||
51 | |||
52 | /* BACKLIGHT */ | ||
53 | #define PALMTE2_MAX_INTENSITY 0xFE | ||
54 | #define PALMTE2_DEFAULT_INTENSITY 0x7E | ||
55 | #define PALMTE2_LIMIT_MASK 0x7F | ||
56 | #define PALMTE2_PRESCALER 0x3F | ||
57 | #define PALMTE2_PERIOD_NS 3500 | ||
58 | |||
59 | /* BATTERY */ | ||
60 | #define PALMTE2_BAT_MAX_VOLTAGE 4000 /* 4.00v current voltage */ | ||
61 | #define PALMTE2_BAT_MIN_VOLTAGE 3550 /* 3.55v critical voltage */ | ||
62 | #define PALMTE2_BAT_MAX_CURRENT 0 /* unknokn */ | ||
63 | #define PALMTE2_BAT_MIN_CURRENT 0 /* unknown */ | ||
64 | #define PALMTE2_BAT_MAX_CHARGE 1 /* unknown */ | ||
65 | #define PALMTE2_BAT_MIN_CHARGE 1 /* unknown */ | ||
66 | #define PALMTE2_MAX_LIFE_MINS 360 /* on-life in minutes */ | ||
67 | |||
68 | #endif | ||
diff --git a/arch/arm/mach-pxa/include/mach/palmtx.h b/arch/arm/mach-pxa/include/mach/palmtx.h index 1e8bccbda510..9f7d62fb4cbb 100644 --- a/arch/arm/mach-pxa/include/mach/palmtx.h +++ b/arch/arm/mach-pxa/include/mach/palmtx.h | |||
@@ -78,6 +78,8 @@ | |||
78 | #define PALMTX_PHYS_RAM_START 0xa0000000 | 78 | #define PALMTX_PHYS_RAM_START 0xa0000000 |
79 | #define PALMTX_PHYS_IO_START 0x40000000 | 79 | #define PALMTX_PHYS_IO_START 0x40000000 |
80 | 80 | ||
81 | #define PALMTX_STR_BASE 0xa0200000 | ||
82 | |||
81 | #define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */ | 83 | #define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */ |
82 | #define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */ | 84 | #define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */ |
83 | 85 | ||
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index deeea1c2782b..c899bbd94dc0 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c | |||
@@ -25,6 +25,8 @@ | |||
25 | #include <linux/mtd/physmap.h> | 25 | #include <linux/mtd/physmap.h> |
26 | #include <linux/pda_power.h> | 26 | #include <linux/pda_power.h> |
27 | #include <linux/pwm_backlight.h> | 27 | #include <linux/pwm_backlight.h> |
28 | #include <linux/regulator/bq24022.h> | ||
29 | #include <linux/regulator/machine.h> | ||
28 | #include <linux/usb/gpio_vbus.h> | 30 | #include <linux/usb/gpio_vbus.h> |
29 | 31 | ||
30 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
@@ -552,33 +554,7 @@ static struct platform_device gpio_vbus = { | |||
552 | 554 | ||
553 | static int power_supply_init(struct device *dev) | 555 | static int power_supply_init(struct device *dev) |
554 | { | 556 | { |
555 | int ret; | 557 | return gpio_request(EGPIO_MAGICIAN_CABLE_STATE_AC, "CABLE_STATE_AC"); |
556 | |||
557 | ret = gpio_request(EGPIO_MAGICIAN_CABLE_STATE_AC, "CABLE_STATE_AC"); | ||
558 | if (ret) | ||
559 | goto err_cs_ac; | ||
560 | ret = gpio_request(EGPIO_MAGICIAN_CABLE_STATE_USB, "CABLE_STATE_USB"); | ||
561 | if (ret) | ||
562 | goto err_cs_usb; | ||
563 | ret = gpio_request(EGPIO_MAGICIAN_CHARGE_EN, "CHARGE_EN"); | ||
564 | if (ret) | ||
565 | goto err_chg_en; | ||
566 | ret = gpio_request(GPIO30_MAGICIAN_nCHARGE_EN, "nCHARGE_EN"); | ||
567 | if (!ret) | ||
568 | ret = gpio_direction_output(GPIO30_MAGICIAN_nCHARGE_EN, 0); | ||
569 | if (ret) | ||
570 | goto err_nchg_en; | ||
571 | |||
572 | return 0; | ||
573 | |||
574 | err_nchg_en: | ||
575 | gpio_free(EGPIO_MAGICIAN_CHARGE_EN); | ||
576 | err_chg_en: | ||
577 | gpio_free(EGPIO_MAGICIAN_CABLE_STATE_USB); | ||
578 | err_cs_usb: | ||
579 | gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC); | ||
580 | err_cs_ac: | ||
581 | return ret; | ||
582 | } | 558 | } |
583 | 559 | ||
584 | static int magician_is_ac_online(void) | 560 | static int magician_is_ac_online(void) |
@@ -586,22 +562,8 @@ static int magician_is_ac_online(void) | |||
586 | return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_AC); | 562 | return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_AC); |
587 | } | 563 | } |
588 | 564 | ||
589 | static int magician_is_usb_online(void) | ||
590 | { | ||
591 | return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_USB); | ||
592 | } | ||
593 | |||
594 | static void magician_set_charge(int flags) | ||
595 | { | ||
596 | gpio_set_value(GPIO30_MAGICIAN_nCHARGE_EN, !flags); | ||
597 | gpio_set_value(EGPIO_MAGICIAN_CHARGE_EN, flags); | ||
598 | } | ||
599 | |||
600 | static void power_supply_exit(struct device *dev) | 565 | static void power_supply_exit(struct device *dev) |
601 | { | 566 | { |
602 | gpio_free(GPIO30_MAGICIAN_nCHARGE_EN); | ||
603 | gpio_free(EGPIO_MAGICIAN_CHARGE_EN); | ||
604 | gpio_free(EGPIO_MAGICIAN_CABLE_STATE_USB); | ||
605 | gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC); | 567 | gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC); |
606 | } | 568 | } |
607 | 569 | ||
@@ -612,8 +574,6 @@ static char *magician_supplicants[] = { | |||
612 | static struct pda_power_pdata power_supply_info = { | 574 | static struct pda_power_pdata power_supply_info = { |
613 | .init = power_supply_init, | 575 | .init = power_supply_init, |
614 | .is_ac_online = magician_is_ac_online, | 576 | .is_ac_online = magician_is_ac_online, |
615 | .is_usb_online = magician_is_usb_online, | ||
616 | .set_charge = magician_set_charge, | ||
617 | .exit = power_supply_exit, | 577 | .exit = power_supply_exit, |
618 | .supplied_to = magician_supplicants, | 578 | .supplied_to = magician_supplicants, |
619 | .num_supplicants = ARRAY_SIZE(magician_supplicants), | 579 | .num_supplicants = ARRAY_SIZE(magician_supplicants), |
@@ -646,6 +606,43 @@ static struct platform_device power_supply = { | |||
646 | .num_resources = ARRAY_SIZE(power_supply_resources), | 606 | .num_resources = ARRAY_SIZE(power_supply_resources), |
647 | }; | 607 | }; |
648 | 608 | ||
609 | /* | ||
610 | * Battery charger | ||
611 | */ | ||
612 | |||
613 | static struct regulator_consumer_supply bq24022_consumers[] = { | ||
614 | { | ||
615 | .dev = &gpio_vbus.dev, | ||
616 | .supply = "vbus_draw", | ||
617 | }, | ||
618 | { | ||
619 | .dev = &power_supply.dev, | ||
620 | .supply = "ac_draw", | ||
621 | }, | ||
622 | }; | ||
623 | |||
624 | static struct regulator_init_data bq24022_init_data = { | ||
625 | .constraints = { | ||
626 | .max_uA = 500000, | ||
627 | .valid_ops_mask = REGULATOR_CHANGE_CURRENT, | ||
628 | }, | ||
629 | .num_consumer_supplies = ARRAY_SIZE(bq24022_consumers), | ||
630 | .consumer_supplies = bq24022_consumers, | ||
631 | }; | ||
632 | |||
633 | static struct bq24022_mach_info bq24022_info = { | ||
634 | .gpio_nce = GPIO30_MAGICIAN_BQ24022_nCHARGE_EN, | ||
635 | .gpio_iset2 = EGPIO_MAGICIAN_BQ24022_ISET2, | ||
636 | .init_data = &bq24022_init_data, | ||
637 | }; | ||
638 | |||
639 | static struct platform_device bq24022 = { | ||
640 | .name = "bq24022", | ||
641 | .id = -1, | ||
642 | .dev = { | ||
643 | .platform_data = &bq24022_info, | ||
644 | }, | ||
645 | }; | ||
649 | 646 | ||
650 | /* | 647 | /* |
651 | * MMC/SD | 648 | * MMC/SD |
@@ -756,6 +753,7 @@ static struct platform_device *devices[] __initdata = { | |||
756 | &egpio, | 753 | &egpio, |
757 | &backlight, | 754 | &backlight, |
758 | &pasic3, | 755 | &pasic3, |
756 | &bq24022, | ||
759 | &gpio_vbus, | 757 | &gpio_vbus, |
760 | &power_supply, | 758 | &power_supply, |
761 | &strataflash, | 759 | &strataflash, |
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c index 97c93a7a285c..9203b069b35c 100644 --- a/arch/arm/mach-pxa/mioa701.c +++ b/arch/arm/mach-pxa/mioa701.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <mach/pxa27x-udc.h> | 50 | #include <mach/pxa27x-udc.h> |
51 | #include <mach/i2c.h> | 51 | #include <mach/i2c.h> |
52 | #include <mach/camera.h> | 52 | #include <mach/camera.h> |
53 | #include <mach/audio.h> | ||
53 | #include <media/soc_camera.h> | 54 | #include <media/soc_camera.h> |
54 | 55 | ||
55 | #include <mach/mioa701.h> | 56 | #include <mach/mioa701.h> |
@@ -763,8 +764,6 @@ MIO_PARENT_DEV(mioa701_backlight, "pwm-backlight", &pxa27x_device_pwm0.dev, | |||
763 | &mioa701_backlight_data); | 764 | &mioa701_backlight_data); |
764 | MIO_SIMPLE_DEV(mioa701_led, "leds-gpio", &gpio_led_info) | 765 | MIO_SIMPLE_DEV(mioa701_led, "leds-gpio", &gpio_led_info) |
765 | MIO_SIMPLE_DEV(pxa2xx_pcm, "pxa2xx-pcm", NULL) | 766 | MIO_SIMPLE_DEV(pxa2xx_pcm, "pxa2xx-pcm", NULL) |
766 | MIO_SIMPLE_DEV(pxa2xx_ac97, "pxa2xx-ac97", NULL) | ||
767 | MIO_PARENT_DEV(mio_wm9713_codec, "wm9713-codec", &pxa2xx_ac97.dev, NULL) | ||
768 | MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL) | 767 | MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL) |
769 | MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL) | 768 | MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL) |
770 | MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data); | 769 | MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data); |
@@ -774,8 +773,6 @@ static struct platform_device *devices[] __initdata = { | |||
774 | &mioa701_backlight, | 773 | &mioa701_backlight, |
775 | &mioa701_led, | 774 | &mioa701_led, |
776 | &pxa2xx_pcm, | 775 | &pxa2xx_pcm, |
777 | &pxa2xx_ac97, | ||
778 | &mio_wm9713_codec, | ||
779 | &mioa701_sound, | 776 | &mioa701_sound, |
780 | &power_dev, | 777 | &power_dev, |
781 | &strataflash, | 778 | &strataflash, |
@@ -818,6 +815,7 @@ static void __init mioa701_machine_init(void) | |||
818 | pxa_set_keypad_info(&mioa701_keypad_info); | 815 | pxa_set_keypad_info(&mioa701_keypad_info); |
819 | wm97xx_bat_set_pdata(&mioa701_battery_data); | 816 | wm97xx_bat_set_pdata(&mioa701_battery_data); |
820 | pxa_set_udc_info(&mioa701_udc_info); | 817 | pxa_set_udc_info(&mioa701_udc_info); |
818 | pxa_set_ac97_info(NULL); | ||
821 | pm_power_off = mioa701_poweroff; | 819 | pm_power_off = mioa701_poweroff; |
822 | arm_pm_restart = mioa701_restart; | 820 | arm_pm_restart = mioa701_restart; |
823 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 821 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c index 8587477a9bb7..ecf5910e39d7 100644 --- a/arch/arm/mach-pxa/palmld.c +++ b/arch/arm/mach-pxa/palmld.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
25 | #include <linux/wm97xx_batt.h> | 25 | #include <linux/wm97xx_batt.h> |
26 | #include <linux/power_supply.h> | 26 | #include <linux/power_supply.h> |
27 | #include <linux/sysdev.h> | ||
27 | 28 | ||
28 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
29 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
@@ -68,10 +69,10 @@ static unsigned long palmld_pin_config[] __initdata = { | |||
68 | GPIO47_FICP_TXD, | 69 | GPIO47_FICP_TXD, |
69 | 70 | ||
70 | /* MATRIX KEYPAD */ | 71 | /* MATRIX KEYPAD */ |
71 | GPIO100_KP_MKIN_0, | 72 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
72 | GPIO101_KP_MKIN_1, | 73 | GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH, |
73 | GPIO102_KP_MKIN_2, | 74 | GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH, |
74 | GPIO97_KP_MKIN_3, | 75 | GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH, |
75 | GPIO103_KP_MKOUT_0, | 76 | GPIO103_KP_MKOUT_0, |
76 | GPIO104_KP_MKOUT_1, | 77 | GPIO104_KP_MKOUT_1, |
77 | GPIO105_KP_MKOUT_2, | 78 | GPIO105_KP_MKOUT_2, |
@@ -507,6 +508,33 @@ static struct pxafb_mach_info palmld_lcd_screen = { | |||
507 | }; | 508 | }; |
508 | 509 | ||
509 | /****************************************************************************** | 510 | /****************************************************************************** |
511 | * Power management - standby | ||
512 | ******************************************************************************/ | ||
513 | #ifdef CONFIG_PM | ||
514 | static u32 *addr __initdata; | ||
515 | static u32 resume[3] __initdata = { | ||
516 | 0xe3a00101, /* mov r0, #0x40000000 */ | ||
517 | 0xe380060f, /* orr r0, r0, #0x00f00000 */ | ||
518 | 0xe590f008, /* ldr pc, [r0, #0x08] */ | ||
519 | }; | ||
520 | |||
521 | static int __init palmld_pm_init(void) | ||
522 | { | ||
523 | int i; | ||
524 | |||
525 | /* this is where the bootloader jumps */ | ||
526 | addr = phys_to_virt(PALMLD_STR_BASE); | ||
527 | |||
528 | for (i = 0; i < 3; i++) | ||
529 | addr[i] = resume[i]; | ||
530 | |||
531 | return 0; | ||
532 | } | ||
533 | |||
534 | device_initcall(palmld_pm_init); | ||
535 | #endif | ||
536 | |||
537 | /****************************************************************************** | ||
510 | * Machine init | 538 | * Machine init |
511 | ******************************************************************************/ | 539 | ******************************************************************************/ |
512 | static struct platform_device *devices[] __initdata = { | 540 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c index 9521c7b33492..0680f1a575a3 100644 --- a/arch/arm/mach-pxa/palmt5.c +++ b/arch/arm/mach-pxa/palmt5.c | |||
@@ -75,10 +75,10 @@ static unsigned long palmt5_pin_config[] __initdata = { | |||
75 | GPIO95_GPIO, /* usb power */ | 75 | GPIO95_GPIO, /* usb power */ |
76 | 76 | ||
77 | /* MATRIX KEYPAD */ | 77 | /* MATRIX KEYPAD */ |
78 | GPIO100_KP_MKIN_0, | 78 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
79 | GPIO101_KP_MKIN_1, | 79 | GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH, |
80 | GPIO102_KP_MKIN_2, | 80 | GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH, |
81 | GPIO97_KP_MKIN_3, | 81 | GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH, |
82 | GPIO103_KP_MKOUT_0, | 82 | GPIO103_KP_MKOUT_0, |
83 | GPIO104_KP_MKOUT_1, | 83 | GPIO104_KP_MKOUT_1, |
84 | GPIO105_KP_MKOUT_2, | 84 | GPIO105_KP_MKOUT_2, |
@@ -450,6 +450,33 @@ static struct pxafb_mach_info palmt5_lcd_screen = { | |||
450 | }; | 450 | }; |
451 | 451 | ||
452 | /****************************************************************************** | 452 | /****************************************************************************** |
453 | * Power management - standby | ||
454 | ******************************************************************************/ | ||
455 | #ifdef CONFIG_PM | ||
456 | static u32 *addr __initdata; | ||
457 | static u32 resume[3] __initdata = { | ||
458 | 0xe3a00101, /* mov r0, #0x40000000 */ | ||
459 | 0xe380060f, /* orr r0, r0, #0x00f00000 */ | ||
460 | 0xe590f008, /* ldr pc, [r0, #0x08] */ | ||
461 | }; | ||
462 | |||
463 | static int __init palmt5_pm_init(void) | ||
464 | { | ||
465 | int i; | ||
466 | |||
467 | /* this is where the bootloader jumps */ | ||
468 | addr = phys_to_virt(PALMT5_STR_BASE); | ||
469 | |||
470 | for (i = 0; i < 3; i++) | ||
471 | addr[i] = resume[i]; | ||
472 | |||
473 | return 0; | ||
474 | } | ||
475 | |||
476 | device_initcall(palmt5_pm_init); | ||
477 | #endif | ||
478 | |||
479 | /****************************************************************************** | ||
453 | * Machine init | 480 | * Machine init |
454 | ******************************************************************************/ | 481 | ******************************************************************************/ |
455 | static struct platform_device *devices[] __initdata = { | 482 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm/mach-pxa/palmte2.c b/arch/arm/mach-pxa/palmte2.c new file mode 100644 index 000000000000..43fcf2e86887 --- /dev/null +++ b/arch/arm/mach-pxa/palmte2.c | |||
@@ -0,0 +1,466 @@ | |||
1 | /* | ||
2 | * Hardware definitions for Palm Tungsten|E2 | ||
3 | * | ||
4 | * Author: | ||
5 | * Carlos Eduardo Medaglia Dyonisio <cadu@nerdfeliz.com> | ||
6 | * | ||
7 | * Rewrite for mainline: | ||
8 | * Marek Vasut <marek.vasut@gmail.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * (find more info at www.hackndev.com) | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/delay.h> | ||
20 | #include <linux/irq.h> | ||
21 | #include <linux/gpio_keys.h> | ||
22 | #include <linux/input.h> | ||
23 | #include <linux/pda_power.h> | ||
24 | #include <linux/pwm_backlight.h> | ||
25 | #include <linux/gpio.h> | ||
26 | #include <linux/wm97xx_batt.h> | ||
27 | #include <linux/power_supply.h> | ||
28 | |||
29 | #include <asm/mach-types.h> | ||
30 | #include <asm/mach/arch.h> | ||
31 | #include <asm/mach/map.h> | ||
32 | |||
33 | #include <mach/audio.h> | ||
34 | #include <mach/palmte2.h> | ||
35 | #include <mach/mmc.h> | ||
36 | #include <mach/pxafb.h> | ||
37 | #include <mach/mfp-pxa25x.h> | ||
38 | #include <mach/irda.h> | ||
39 | #include <mach/udc.h> | ||
40 | |||
41 | #include "generic.h" | ||
42 | #include "devices.h" | ||
43 | |||
44 | /****************************************************************************** | ||
45 | * Pin configuration | ||
46 | ******************************************************************************/ | ||
47 | static unsigned long palmte2_pin_config[] __initdata = { | ||
48 | /* MMC */ | ||
49 | GPIO6_MMC_CLK, | ||
50 | GPIO8_MMC_CS0, | ||
51 | GPIO10_GPIO, /* SD detect */ | ||
52 | GPIO55_GPIO, /* SD power */ | ||
53 | GPIO51_GPIO, /* SD r/o switch */ | ||
54 | |||
55 | /* AC97 */ | ||
56 | GPIO28_AC97_BITCLK, | ||
57 | GPIO29_AC97_SDATA_IN_0, | ||
58 | GPIO30_AC97_SDATA_OUT, | ||
59 | GPIO31_AC97_SYNC, | ||
60 | |||
61 | /* PWM */ | ||
62 | GPIO16_PWM0_OUT, | ||
63 | |||
64 | /* USB */ | ||
65 | GPIO15_GPIO, /* usb detect */ | ||
66 | GPIO53_GPIO, /* usb power */ | ||
67 | |||
68 | /* IrDA */ | ||
69 | GPIO48_GPIO, /* ir disable */ | ||
70 | GPIO46_FICP_RXD, | ||
71 | GPIO47_FICP_TXD, | ||
72 | |||
73 | /* LCD */ | ||
74 | GPIO58_LCD_LDD_0, | ||
75 | GPIO59_LCD_LDD_1, | ||
76 | GPIO60_LCD_LDD_2, | ||
77 | GPIO61_LCD_LDD_3, | ||
78 | GPIO62_LCD_LDD_4, | ||
79 | GPIO63_LCD_LDD_5, | ||
80 | GPIO64_LCD_LDD_6, | ||
81 | GPIO65_LCD_LDD_7, | ||
82 | GPIO66_LCD_LDD_8, | ||
83 | GPIO67_LCD_LDD_9, | ||
84 | GPIO68_LCD_LDD_10, | ||
85 | GPIO69_LCD_LDD_11, | ||
86 | GPIO70_LCD_LDD_12, | ||
87 | GPIO71_LCD_LDD_13, | ||
88 | GPIO72_LCD_LDD_14, | ||
89 | GPIO73_LCD_LDD_15, | ||
90 | GPIO74_LCD_FCLK, | ||
91 | GPIO75_LCD_LCLK, | ||
92 | GPIO76_LCD_PCLK, | ||
93 | GPIO77_LCD_BIAS, | ||
94 | |||
95 | /* GPIO KEYS */ | ||
96 | GPIO5_GPIO, /* notes */ | ||
97 | GPIO7_GPIO, /* tasks */ | ||
98 | GPIO11_GPIO, /* calendar */ | ||
99 | GPIO13_GPIO, /* contacts */ | ||
100 | GPIO14_GPIO, /* center */ | ||
101 | GPIO19_GPIO, /* left */ | ||
102 | GPIO20_GPIO, /* right */ | ||
103 | GPIO21_GPIO, /* down */ | ||
104 | GPIO22_GPIO, /* up */ | ||
105 | |||
106 | /* MISC */ | ||
107 | GPIO1_RST, /* reset */ | ||
108 | GPIO4_GPIO, /* Hotsync button */ | ||
109 | GPIO9_GPIO, /* power detect */ | ||
110 | GPIO37_GPIO, /* LCD power */ | ||
111 | GPIO56_GPIO, /* Backlight power */ | ||
112 | }; | ||
113 | |||
114 | /****************************************************************************** | ||
115 | * SD/MMC card controller | ||
116 | ******************************************************************************/ | ||
117 | static int palmte2_mci_init(struct device *dev, | ||
118 | irq_handler_t palmte2_detect_int, void *data) | ||
119 | { | ||
120 | int err = 0; | ||
121 | |||
122 | /* Setup an interrupt for detecting card insert/remove events */ | ||
123 | err = gpio_request(GPIO_NR_PALMTE2_SD_DETECT_N, "SD IRQ"); | ||
124 | if (err) | ||
125 | goto err; | ||
126 | err = gpio_direction_input(GPIO_NR_PALMTE2_SD_DETECT_N); | ||
127 | if (err) | ||
128 | goto err2; | ||
129 | err = request_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), | ||
130 | palmte2_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM | | ||
131 | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, | ||
132 | "SD/MMC card detect", data); | ||
133 | if (err) { | ||
134 | printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n", | ||
135 | __func__); | ||
136 | goto err2; | ||
137 | } | ||
138 | |||
139 | err = gpio_request(GPIO_NR_PALMTE2_SD_POWER, "SD_POWER"); | ||
140 | if (err) | ||
141 | goto err3; | ||
142 | err = gpio_direction_output(GPIO_NR_PALMTE2_SD_POWER, 0); | ||
143 | if (err) | ||
144 | goto err4; | ||
145 | |||
146 | err = gpio_request(GPIO_NR_PALMTE2_SD_READONLY, "SD_READONLY"); | ||
147 | if (err) | ||
148 | goto err4; | ||
149 | err = gpio_direction_input(GPIO_NR_PALMTE2_SD_READONLY); | ||
150 | if (err) | ||
151 | goto err5; | ||
152 | |||
153 | printk(KERN_DEBUG "%s: irq registered\n", __func__); | ||
154 | |||
155 | return 0; | ||
156 | |||
157 | err5: | ||
158 | gpio_free(GPIO_NR_PALMTE2_SD_READONLY); | ||
159 | err4: | ||
160 | gpio_free(GPIO_NR_PALMTE2_SD_POWER); | ||
161 | err3: | ||
162 | free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data); | ||
163 | err2: | ||
164 | gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N); | ||
165 | err: | ||
166 | return err; | ||
167 | } | ||
168 | |||
169 | static void palmte2_mci_exit(struct device *dev, void *data) | ||
170 | { | ||
171 | gpio_free(GPIO_NR_PALMTE2_SD_READONLY); | ||
172 | gpio_free(GPIO_NR_PALMTE2_SD_POWER); | ||
173 | free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data); | ||
174 | gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N); | ||
175 | } | ||
176 | |||
177 | static void palmte2_mci_power(struct device *dev, unsigned int vdd) | ||
178 | { | ||
179 | struct pxamci_platform_data *p_d = dev->platform_data; | ||
180 | gpio_set_value(GPIO_NR_PALMTE2_SD_POWER, p_d->ocr_mask & (1 << vdd)); | ||
181 | } | ||
182 | |||
183 | static int palmte2_mci_get_ro(struct device *dev) | ||
184 | { | ||
185 | return gpio_get_value(GPIO_NR_PALMTE2_SD_READONLY); | ||
186 | } | ||
187 | |||
188 | static struct pxamci_platform_data palmte2_mci_platform_data = { | ||
189 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, | ||
190 | .setpower = palmte2_mci_power, | ||
191 | .get_ro = palmte2_mci_get_ro, | ||
192 | .init = palmte2_mci_init, | ||
193 | .exit = palmte2_mci_exit, | ||
194 | }; | ||
195 | |||
196 | /****************************************************************************** | ||
197 | * GPIO keys | ||
198 | ******************************************************************************/ | ||
199 | static struct gpio_keys_button palmte2_pxa_buttons[] = { | ||
200 | {KEY_F1, GPIO_NR_PALMTE2_KEY_CONTACTS, 1, "Contacts" }, | ||
201 | {KEY_F2, GPIO_NR_PALMTE2_KEY_CALENDAR, 1, "Calendar" }, | ||
202 | {KEY_F3, GPIO_NR_PALMTE2_KEY_TASKS, 1, "Tasks" }, | ||
203 | {KEY_F4, GPIO_NR_PALMTE2_KEY_NOTES, 1, "Notes" }, | ||
204 | {KEY_ENTER, GPIO_NR_PALMTE2_KEY_CENTER, 1, "Center" }, | ||
205 | {KEY_LEFT, GPIO_NR_PALMTE2_KEY_LEFT, 1, "Left" }, | ||
206 | {KEY_RIGHT, GPIO_NR_PALMTE2_KEY_RIGHT, 1, "Right" }, | ||
207 | {KEY_DOWN, GPIO_NR_PALMTE2_KEY_DOWN, 1, "Down" }, | ||
208 | {KEY_UP, GPIO_NR_PALMTE2_KEY_UP, 1, "Up" }, | ||
209 | }; | ||
210 | |||
211 | static struct gpio_keys_platform_data palmte2_pxa_keys_data = { | ||
212 | .buttons = palmte2_pxa_buttons, | ||
213 | .nbuttons = ARRAY_SIZE(palmte2_pxa_buttons), | ||
214 | }; | ||
215 | |||
216 | static struct platform_device palmte2_pxa_keys = { | ||
217 | .name = "gpio-keys", | ||
218 | .id = -1, | ||
219 | .dev = { | ||
220 | .platform_data = &palmte2_pxa_keys_data, | ||
221 | }, | ||
222 | }; | ||
223 | |||
224 | /****************************************************************************** | ||
225 | * Backlight | ||
226 | ******************************************************************************/ | ||
227 | static int palmte2_backlight_init(struct device *dev) | ||
228 | { | ||
229 | int ret; | ||
230 | |||
231 | ret = gpio_request(GPIO_NR_PALMTE2_BL_POWER, "BL POWER"); | ||
232 | if (ret) | ||
233 | goto err; | ||
234 | ret = gpio_direction_output(GPIO_NR_PALMTE2_BL_POWER, 0); | ||
235 | if (ret) | ||
236 | goto err2; | ||
237 | ret = gpio_request(GPIO_NR_PALMTE2_LCD_POWER, "LCD POWER"); | ||
238 | if (ret) | ||
239 | goto err2; | ||
240 | ret = gpio_direction_output(GPIO_NR_PALMTE2_LCD_POWER, 0); | ||
241 | if (ret) | ||
242 | goto err3; | ||
243 | |||
244 | return 0; | ||
245 | err3: | ||
246 | gpio_free(GPIO_NR_PALMTE2_LCD_POWER); | ||
247 | err2: | ||
248 | gpio_free(GPIO_NR_PALMTE2_BL_POWER); | ||
249 | err: | ||
250 | return ret; | ||
251 | } | ||
252 | |||
253 | static int palmte2_backlight_notify(int brightness) | ||
254 | { | ||
255 | gpio_set_value(GPIO_NR_PALMTE2_BL_POWER, brightness); | ||
256 | gpio_set_value(GPIO_NR_PALMTE2_LCD_POWER, brightness); | ||
257 | return brightness; | ||
258 | } | ||
259 | |||
260 | static void palmte2_backlight_exit(struct device *dev) | ||
261 | { | ||
262 | gpio_free(GPIO_NR_PALMTE2_BL_POWER); | ||
263 | gpio_free(GPIO_NR_PALMTE2_LCD_POWER); | ||
264 | } | ||
265 | |||
266 | static struct platform_pwm_backlight_data palmte2_backlight_data = { | ||
267 | .pwm_id = 0, | ||
268 | .max_brightness = PALMTE2_MAX_INTENSITY, | ||
269 | .dft_brightness = PALMTE2_MAX_INTENSITY, | ||
270 | .pwm_period_ns = PALMTE2_PERIOD_NS, | ||
271 | .init = palmte2_backlight_init, | ||
272 | .notify = palmte2_backlight_notify, | ||
273 | .exit = palmte2_backlight_exit, | ||
274 | }; | ||
275 | |||
276 | static struct platform_device palmte2_backlight = { | ||
277 | .name = "pwm-backlight", | ||
278 | .dev = { | ||
279 | .parent = &pxa25x_device_pwm0.dev, | ||
280 | .platform_data = &palmte2_backlight_data, | ||
281 | }, | ||
282 | }; | ||
283 | |||
284 | /****************************************************************************** | ||
285 | * IrDA | ||
286 | ******************************************************************************/ | ||
287 | static int palmte2_irda_startup(struct device *dev) | ||
288 | { | ||
289 | int err; | ||
290 | err = gpio_request(GPIO_NR_PALMTE2_IR_DISABLE, "IR DISABLE"); | ||
291 | if (err) | ||
292 | goto err; | ||
293 | err = gpio_direction_output(GPIO_NR_PALMTE2_IR_DISABLE, 1); | ||
294 | if (err) | ||
295 | gpio_free(GPIO_NR_PALMTE2_IR_DISABLE); | ||
296 | err: | ||
297 | return err; | ||
298 | } | ||
299 | |||
300 | static void palmte2_irda_shutdown(struct device *dev) | ||
301 | { | ||
302 | gpio_free(GPIO_NR_PALMTE2_IR_DISABLE); | ||
303 | } | ||
304 | |||
305 | static void palmte2_irda_transceiver_mode(struct device *dev, int mode) | ||
306 | { | ||
307 | gpio_set_value(GPIO_NR_PALMTE2_IR_DISABLE, mode & IR_OFF); | ||
308 | pxa2xx_transceiver_mode(dev, mode); | ||
309 | } | ||
310 | |||
311 | static struct pxaficp_platform_data palmte2_ficp_platform_data = { | ||
312 | .startup = palmte2_irda_startup, | ||
313 | .shutdown = palmte2_irda_shutdown, | ||
314 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
315 | .transceiver_mode = palmte2_irda_transceiver_mode, | ||
316 | }; | ||
317 | |||
318 | /****************************************************************************** | ||
319 | * UDC | ||
320 | ******************************************************************************/ | ||
321 | static struct pxa2xx_udc_mach_info palmte2_udc_info __initdata = { | ||
322 | .gpio_vbus = GPIO_NR_PALMTE2_USB_DETECT_N, | ||
323 | .gpio_vbus_inverted = 1, | ||
324 | .gpio_pullup = GPIO_NR_PALMTE2_USB_PULLUP, | ||
325 | .gpio_pullup_inverted = 0, | ||
326 | }; | ||
327 | |||
328 | /****************************************************************************** | ||
329 | * Power supply | ||
330 | ******************************************************************************/ | ||
331 | static int power_supply_init(struct device *dev) | ||
332 | { | ||
333 | int ret; | ||
334 | |||
335 | ret = gpio_request(GPIO_NR_PALMTE2_POWER_DETECT, "CABLE_STATE_AC"); | ||
336 | if (ret) | ||
337 | goto err1; | ||
338 | ret = gpio_direction_input(GPIO_NR_PALMTE2_POWER_DETECT); | ||
339 | if (ret) | ||
340 | goto err2; | ||
341 | |||
342 | return 0; | ||
343 | |||
344 | err2: | ||
345 | gpio_free(GPIO_NR_PALMTE2_POWER_DETECT); | ||
346 | err1: | ||
347 | return ret; | ||
348 | } | ||
349 | |||
350 | static int palmte2_is_ac_online(void) | ||
351 | { | ||
352 | return gpio_get_value(GPIO_NR_PALMTE2_POWER_DETECT); | ||
353 | } | ||
354 | |||
355 | static void power_supply_exit(struct device *dev) | ||
356 | { | ||
357 | gpio_free(GPIO_NR_PALMTE2_POWER_DETECT); | ||
358 | } | ||
359 | |||
360 | static char *palmte2_supplicants[] = { | ||
361 | "main-battery", | ||
362 | }; | ||
363 | |||
364 | static struct pda_power_pdata power_supply_info = { | ||
365 | .init = power_supply_init, | ||
366 | .is_ac_online = palmte2_is_ac_online, | ||
367 | .exit = power_supply_exit, | ||
368 | .supplied_to = palmte2_supplicants, | ||
369 | .num_supplicants = ARRAY_SIZE(palmte2_supplicants), | ||
370 | }; | ||
371 | |||
372 | static struct platform_device power_supply = { | ||
373 | .name = "pda-power", | ||
374 | .id = -1, | ||
375 | .dev = { | ||
376 | .platform_data = &power_supply_info, | ||
377 | }, | ||
378 | }; | ||
379 | |||
380 | /****************************************************************************** | ||
381 | * WM97xx battery | ||
382 | ******************************************************************************/ | ||
383 | static struct wm97xx_batt_info wm97xx_batt_pdata = { | ||
384 | .batt_aux = WM97XX_AUX_ID3, | ||
385 | .temp_aux = WM97XX_AUX_ID2, | ||
386 | .charge_gpio = -1, | ||
387 | .max_voltage = PALMTE2_BAT_MAX_VOLTAGE, | ||
388 | .min_voltage = PALMTE2_BAT_MIN_VOLTAGE, | ||
389 | .batt_mult = 1000, | ||
390 | .batt_div = 414, | ||
391 | .temp_mult = 1, | ||
392 | .temp_div = 1, | ||
393 | .batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO, | ||
394 | .batt_name = "main-batt", | ||
395 | }; | ||
396 | |||
397 | /****************************************************************************** | ||
398 | * Framebuffer | ||
399 | ******************************************************************************/ | ||
400 | static struct pxafb_mode_info palmte2_lcd_modes[] = { | ||
401 | { | ||
402 | .pixclock = 77757, | ||
403 | .xres = 320, | ||
404 | .yres = 320, | ||
405 | .bpp = 16, | ||
406 | |||
407 | .left_margin = 28, | ||
408 | .right_margin = 7, | ||
409 | .upper_margin = 7, | ||
410 | .lower_margin = 5, | ||
411 | |||
412 | .hsync_len = 4, | ||
413 | .vsync_len = 1, | ||
414 | }, | ||
415 | }; | ||
416 | |||
417 | static struct pxafb_mach_info palmte2_lcd_screen = { | ||
418 | .modes = palmte2_lcd_modes, | ||
419 | .num_modes = ARRAY_SIZE(palmte2_lcd_modes), | ||
420 | .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL, | ||
421 | }; | ||
422 | |||
423 | /****************************************************************************** | ||
424 | * Machine init | ||
425 | ******************************************************************************/ | ||
426 | static struct platform_device *devices[] __initdata = { | ||
427 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
428 | &palmte2_pxa_keys, | ||
429 | #endif | ||
430 | &palmte2_backlight, | ||
431 | &power_supply, | ||
432 | }; | ||
433 | |||
434 | /* setup udc GPIOs initial state */ | ||
435 | static void __init palmte2_udc_init(void) | ||
436 | { | ||
437 | if (!gpio_request(GPIO_NR_PALMTE2_USB_PULLUP, "UDC Vbus")) { | ||
438 | gpio_direction_output(GPIO_NR_PALMTE2_USB_PULLUP, 1); | ||
439 | gpio_free(GPIO_NR_PALMTE2_USB_PULLUP); | ||
440 | } | ||
441 | } | ||
442 | |||
443 | static void __init palmte2_init(void) | ||
444 | { | ||
445 | pxa2xx_mfp_config(ARRAY_AND_SIZE(palmte2_pin_config)); | ||
446 | |||
447 | set_pxa_fb_info(&palmte2_lcd_screen); | ||
448 | pxa_set_mci_info(&palmte2_mci_platform_data); | ||
449 | palmte2_udc_init(); | ||
450 | pxa_set_udc_info(&palmte2_udc_info); | ||
451 | pxa_set_ac97_info(NULL); | ||
452 | pxa_set_ficp_info(&palmte2_ficp_platform_data); | ||
453 | wm97xx_bat_set_pdata(&wm97xx_batt_pdata); | ||
454 | |||
455 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
456 | } | ||
457 | |||
458 | MACHINE_START(PALMTE2, "Palm Tungsten|E2") | ||
459 | .phys_io = 0x40000000, | ||
460 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | ||
461 | .boot_params = 0xa0000100, | ||
462 | .map_io = pxa_map_io, | ||
463 | .init_irq = pxa25x_init_irq, | ||
464 | .timer = &pxa_timer, | ||
465 | .init_machine = palmte2_init | ||
466 | MACHINE_END | ||
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c index b490c0924619..59d0c1cba556 100644 --- a/arch/arm/mach-pxa/palmtx.c +++ b/arch/arm/mach-pxa/palmtx.c | |||
@@ -93,10 +93,10 @@ static unsigned long palmtx_pin_config[] __initdata = { | |||
93 | GPIO116_GPIO, /* wifi ready */ | 93 | GPIO116_GPIO, /* wifi ready */ |
94 | 94 | ||
95 | /* MATRIX KEYPAD */ | 95 | /* MATRIX KEYPAD */ |
96 | GPIO100_KP_MKIN_0, | 96 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
97 | GPIO101_KP_MKIN_1, | 97 | GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH, |
98 | GPIO102_KP_MKIN_2, | 98 | GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH, |
99 | GPIO97_KP_MKIN_3, | 99 | GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH, |
100 | GPIO103_KP_MKOUT_0, | 100 | GPIO103_KP_MKOUT_0, |
101 | GPIO104_KP_MKOUT_1, | 101 | GPIO104_KP_MKOUT_1, |
102 | GPIO105_KP_MKOUT_2, | 102 | GPIO105_KP_MKOUT_2, |
@@ -459,6 +459,33 @@ static struct pxafb_mach_info palmtx_lcd_screen = { | |||
459 | }; | 459 | }; |
460 | 460 | ||
461 | /****************************************************************************** | 461 | /****************************************************************************** |
462 | * Power management - standby | ||
463 | ******************************************************************************/ | ||
464 | #ifdef CONFIG_PM | ||
465 | static u32 *addr __initdata; | ||
466 | static u32 resume[3] __initdata = { | ||
467 | 0xe3a00101, /* mov r0, #0x40000000 */ | ||
468 | 0xe380060f, /* orr r0, r0, #0x00f00000 */ | ||
469 | 0xe590f008, /* ldr pc, [r0, #0x08] */ | ||
470 | }; | ||
471 | |||
472 | static int __init palmtx_pm_init(void) | ||
473 | { | ||
474 | int i; | ||
475 | |||
476 | /* this is where the bootloader jumps */ | ||
477 | addr = phys_to_virt(PALMTX_STR_BASE); | ||
478 | |||
479 | for (i = 0; i < 3; i++) | ||
480 | addr[i] = resume[i]; | ||
481 | |||
482 | return 0; | ||
483 | } | ||
484 | |||
485 | device_initcall(palmtx_pm_init); | ||
486 | #endif | ||
487 | |||
488 | /****************************************************************************** | ||
462 | * Machine init | 489 | * Machine init |
463 | ******************************************************************************/ | 490 | ******************************************************************************/ |
464 | static struct platform_device *devices[] __initdata = { | 491 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 6e8ade6ae339..afac5b6d3d78 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <mach/udc.h> | 45 | #include <mach/udc.h> |
46 | #include <mach/tosa_bt.h> | 46 | #include <mach/tosa_bt.h> |
47 | #include <mach/pxa2xx_spi.h> | 47 | #include <mach/pxa2xx_spi.h> |
48 | #include <mach/audio.h> | ||
48 | 49 | ||
49 | #include <asm/mach/arch.h> | 50 | #include <asm/mach/arch.h> |
50 | #include <mach/tosa.h> | 51 | #include <mach/tosa.h> |
@@ -914,6 +915,7 @@ static void __init tosa_init(void) | |||
914 | pxa_set_udc_info(&udc_info); | 915 | pxa_set_udc_info(&udc_info); |
915 | pxa_set_ficp_info(&tosa_ficp_platform_data); | 916 | pxa_set_ficp_info(&tosa_ficp_platform_data); |
916 | pxa_set_i2c_info(NULL); | 917 | pxa_set_i2c_info(NULL); |
918 | pxa_set_ac97_info(NULL); | ||
917 | platform_scoop_config = &tosa_pcmcia_config; | 919 | platform_scoop_config = &tosa_pcmcia_config; |
918 | 920 | ||
919 | pxa2xx_set_spi_info(2, &pxa_ssp_master_info); | 921 | pxa2xx_set_spi_info(2, &pxa_ssp_master_info); |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index b438fc4fb77b..e6344ece00ce 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -828,6 +828,17 @@ void __init reserve_node_zero(pg_data_t *pgdat) | |||
828 | BOOTMEM_DEFAULT); | 828 | BOOTMEM_DEFAULT); |
829 | } | 829 | } |
830 | 830 | ||
831 | if (machine_is_palmld() || machine_is_palmtx()) { | ||
832 | reserve_bootmem_node(pgdat, 0xa0000000, 0x1000, | ||
833 | BOOTMEM_EXCLUSIVE); | ||
834 | reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, | ||
835 | BOOTMEM_EXCLUSIVE); | ||
836 | } | ||
837 | |||
838 | if (machine_is_palmt5()) | ||
839 | reserve_bootmem_node(pgdat, 0xa0200000, 0x1000, | ||
840 | BOOTMEM_EXCLUSIVE); | ||
841 | |||
831 | #ifdef CONFIG_SA1111 | 842 | #ifdef CONFIG_SA1111 |
832 | /* | 843 | /* |
833 | * Because of the SA1111 DMA bug, we want to preserve our | 844 | * Because of the SA1111 DMA bug, we want to preserve our |