diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-10-18 10:20:21 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-10-18 10:20:21 -0400 |
commit | 7f9c7e28119cf21ae1a035240da3705647d0d06a (patch) | |
tree | c0a1568e21c5ce6cd4112e44071040a3e611a9ec /arch/arm | |
parent | 4af8f24d99d119ed68b27d1b0bd6f2ab2b23ed1b (diff) | |
parent | b476ef059ec9e49d4f2a4280b862b446ef3866e8 (diff) |
Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel-stable
Diffstat (limited to 'arch/arm')
70 files changed, 1181 insertions, 159 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ca5aa5aa39e0..7949fe65ecd4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -510,6 +510,7 @@ config ARCH_MMP | |||
510 | select GENERIC_CLOCKEVENTS | 510 | select GENERIC_CLOCKEVENTS |
511 | select TICK_ONESHOT | 511 | select TICK_ONESHOT |
512 | select PLAT_PXA | 512 | select PLAT_PXA |
513 | select SPARSE_IRQ | ||
513 | help | 514 | help |
514 | Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line. | 515 | Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line. |
515 | 516 | ||
@@ -587,6 +588,7 @@ config ARCH_PXA | |||
587 | select GENERIC_CLOCKEVENTS | 588 | select GENERIC_CLOCKEVENTS |
588 | select TICK_ONESHOT | 589 | select TICK_ONESHOT |
589 | select PLAT_PXA | 590 | select PLAT_PXA |
591 | select SPARSE_IRQ | ||
590 | help | 592 | help |
591 | Support for Intel/Marvell's PXA2xx/PXA3xx processor line. | 593 | Support for Intel/Marvell's PXA2xx/PXA3xx processor line. |
592 | 594 | ||
diff --git a/arch/arm/mach-mmp/Kconfig b/arch/arm/mach-mmp/Kconfig index 6ab843eaa35b..0711d3b620ad 100644 --- a/arch/arm/mach-mmp/Kconfig +++ b/arch/arm/mach-mmp/Kconfig | |||
@@ -57,6 +57,13 @@ config MACH_MARVELL_JASPER | |||
57 | PXA910-based development board. Since MMP2 is compatible to | 57 | PXA910-based development board. Since MMP2 is compatible to |
58 | ARMv6 architecture. | 58 | ARMv6 architecture. |
59 | 59 | ||
60 | config MACH_TETON_BGA | ||
61 | bool "Marvell's PXA168 Teton BGA Development Board" | ||
62 | select CPU_PXA168 | ||
63 | help | ||
64 | Say 'Y' here if you want to support the Marvell PXA168-based | ||
65 | Teton BGA Development Board. | ||
66 | |||
60 | endmenu | 67 | endmenu |
61 | 68 | ||
62 | config CPU_PXA168 | 69 | config CPU_PXA168 |
diff --git a/arch/arm/mach-mmp/Makefile b/arch/arm/mach-mmp/Makefile index 8b66d06739c4..751cdbf733c8 100644 --- a/arch/arm/mach-mmp/Makefile +++ b/arch/arm/mach-mmp/Makefile | |||
@@ -17,3 +17,4 @@ obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o | |||
17 | obj-$(CONFIG_MACH_TTC_DKB) += ttc_dkb.o | 17 | obj-$(CONFIG_MACH_TTC_DKB) += ttc_dkb.o |
18 | obj-$(CONFIG_MACH_FLINT) += flint.o | 18 | obj-$(CONFIG_MACH_FLINT) += flint.o |
19 | obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o | 19 | obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o |
20 | obj-$(CONFIG_MACH_TETON_BGA) += teton_bga.o | ||
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index 0629394a5fb9..4681bedbe788 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/mtd/mtd.h> | 16 | #include <linux/mtd/mtd.h> |
17 | #include <linux/mtd/partitions.h> | 17 | #include <linux/mtd/partitions.h> |
18 | #include <linux/mtd/nand.h> | 18 | #include <linux/mtd/nand.h> |
19 | #include <linux/interrupt.h> | ||
19 | 20 | ||
20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
@@ -23,6 +24,9 @@ | |||
23 | #include <mach/mfp-pxa168.h> | 24 | #include <mach/mfp-pxa168.h> |
24 | #include <mach/pxa168.h> | 25 | #include <mach/pxa168.h> |
25 | #include <mach/gpio.h> | 26 | #include <mach/gpio.h> |
27 | #include <video/pxa168fb.h> | ||
28 | #include <linux/input.h> | ||
29 | #include <plat/pxa27x_keypad.h> | ||
26 | 30 | ||
27 | #include "common.h" | 31 | #include "common.h" |
28 | 32 | ||
@@ -66,6 +70,43 @@ static unsigned long common_pin_config[] __initdata = { | |||
66 | GPIO115_I2S_BCLK, | 70 | GPIO115_I2S_BCLK, |
67 | GPIO116_I2S_RXD, | 71 | GPIO116_I2S_RXD, |
68 | GPIO117_I2S_TXD, | 72 | GPIO117_I2S_TXD, |
73 | |||
74 | /* LCD */ | ||
75 | GPIO56_LCD_FCLK_RD, | ||
76 | GPIO57_LCD_LCLK_A0, | ||
77 | GPIO58_LCD_PCLK_WR, | ||
78 | GPIO59_LCD_DENA_BIAS, | ||
79 | GPIO60_LCD_DD0, | ||
80 | GPIO61_LCD_DD1, | ||
81 | GPIO62_LCD_DD2, | ||
82 | GPIO63_LCD_DD3, | ||
83 | GPIO64_LCD_DD4, | ||
84 | GPIO65_LCD_DD5, | ||
85 | GPIO66_LCD_DD6, | ||
86 | GPIO67_LCD_DD7, | ||
87 | GPIO68_LCD_DD8, | ||
88 | GPIO69_LCD_DD9, | ||
89 | GPIO70_LCD_DD10, | ||
90 | GPIO71_LCD_DD11, | ||
91 | GPIO72_LCD_DD12, | ||
92 | GPIO73_LCD_DD13, | ||
93 | GPIO74_LCD_DD14, | ||
94 | GPIO75_LCD_DD15, | ||
95 | GPIO76_LCD_DD16, | ||
96 | GPIO77_LCD_DD17, | ||
97 | GPIO78_LCD_DD18, | ||
98 | GPIO79_LCD_DD19, | ||
99 | GPIO80_LCD_DD20, | ||
100 | GPIO81_LCD_DD21, | ||
101 | GPIO82_LCD_DD22, | ||
102 | GPIO83_LCD_DD23, | ||
103 | |||
104 | /* Keypad */ | ||
105 | GPIO109_KP_MKIN1, | ||
106 | GPIO110_KP_MKIN0, | ||
107 | GPIO111_KP_MKOUT7, | ||
108 | GPIO112_KP_MKOUT6, | ||
109 | GPIO121_KP_MKIN4, | ||
69 | }; | 110 | }; |
70 | 111 | ||
71 | static struct smc91x_platdata smc91x_info = { | 112 | static struct smc91x_platdata smc91x_info = { |
@@ -134,6 +175,51 @@ static struct i2c_board_info aspenite_i2c_info[] __initdata = { | |||
134 | { I2C_BOARD_INFO("wm8753", 0x1b), }, | 175 | { I2C_BOARD_INFO("wm8753", 0x1b), }, |
135 | }; | 176 | }; |
136 | 177 | ||
178 | static struct fb_videomode video_modes[] = { | ||
179 | [0] = { | ||
180 | .pixclock = 30120, | ||
181 | .refresh = 60, | ||
182 | .xres = 800, | ||
183 | .yres = 480, | ||
184 | .hsync_len = 1, | ||
185 | .left_margin = 215, | ||
186 | .right_margin = 40, | ||
187 | .vsync_len = 1, | ||
188 | .upper_margin = 34, | ||
189 | .lower_margin = 10, | ||
190 | .sync = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT, | ||
191 | }, | ||
192 | }; | ||
193 | |||
194 | struct pxa168fb_mach_info aspenite_lcd_info = { | ||
195 | .id = "Graphic Frame", | ||
196 | .modes = video_modes, | ||
197 | .num_modes = ARRAY_SIZE(video_modes), | ||
198 | .pix_fmt = PIX_FMT_RGB565, | ||
199 | .io_pin_allocation_mode = PIN_MODE_DUMB_24, | ||
200 | .dumb_mode = DUMB_MODE_RGB888, | ||
201 | .active = 1, | ||
202 | .panel_rbswap = 0, | ||
203 | .invert_pixclock = 0, | ||
204 | }; | ||
205 | |||
206 | static unsigned int aspenite_matrix_key_map[] = { | ||
207 | KEY(0, 6, KEY_UP), /* SW 4 */ | ||
208 | KEY(0, 7, KEY_DOWN), /* SW 5 */ | ||
209 | KEY(1, 6, KEY_LEFT), /* SW 6 */ | ||
210 | KEY(1, 7, KEY_RIGHT), /* SW 7 */ | ||
211 | KEY(4, 6, KEY_ENTER), /* SW 8 */ | ||
212 | KEY(4, 7, KEY_ESC), /* SW 9 */ | ||
213 | }; | ||
214 | |||
215 | static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = { | ||
216 | .matrix_key_rows = 5, | ||
217 | .matrix_key_cols = 8, | ||
218 | .matrix_key_map = aspenite_matrix_key_map, | ||
219 | .matrix_key_map_size = ARRAY_SIZE(aspenite_matrix_key_map), | ||
220 | .debounce_interval = 30, | ||
221 | }; | ||
222 | |||
137 | static void __init common_init(void) | 223 | static void __init common_init(void) |
138 | { | 224 | { |
139 | mfp_config(ARRAY_AND_SIZE(common_pin_config)); | 225 | mfp_config(ARRAY_AND_SIZE(common_pin_config)); |
@@ -143,6 +229,8 @@ static void __init common_init(void) | |||
143 | pxa168_add_twsi(1, NULL, ARRAY_AND_SIZE(aspenite_i2c_info)); | 229 | pxa168_add_twsi(1, NULL, ARRAY_AND_SIZE(aspenite_i2c_info)); |
144 | pxa168_add_ssp(1); | 230 | pxa168_add_ssp(1); |
145 | pxa168_add_nand(&aspenite_nand_info); | 231 | pxa168_add_nand(&aspenite_nand_info); |
232 | pxa168_add_fb(&aspenite_lcd_info); | ||
233 | pxa168_add_keypad(&aspenite_keypad_info); | ||
146 | 234 | ||
147 | /* off-chip devices */ | 235 | /* off-chip devices */ |
148 | platform_device_register(&smc91x_device); | 236 | platform_device_register(&smc91x_device); |
@@ -152,6 +240,7 @@ MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform") | |||
152 | .phys_io = APB_PHYS_BASE, | 240 | .phys_io = APB_PHYS_BASE, |
153 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | 241 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, |
154 | .map_io = mmp_map_io, | 242 | .map_io = mmp_map_io, |
243 | .nr_irqs = IRQ_BOARD_START, | ||
155 | .init_irq = pxa168_init_irq, | 244 | .init_irq = pxa168_init_irq, |
156 | .timer = &pxa168_timer, | 245 | .timer = &pxa168_timer, |
157 | .init_machine = common_init, | 246 | .init_machine = common_init, |
@@ -161,6 +250,7 @@ MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform") | |||
161 | .phys_io = APB_PHYS_BASE, | 250 | .phys_io = APB_PHYS_BASE, |
162 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | 251 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, |
163 | .map_io = mmp_map_io, | 252 | .map_io = mmp_map_io, |
253 | .nr_irqs = IRQ_BOARD_START, | ||
164 | .init_irq = pxa168_init_irq, | 254 | .init_irq = pxa168_init_irq, |
165 | .timer = &pxa168_timer, | 255 | .timer = &pxa168_timer, |
166 | .init_machine = common_init, | 256 | .init_machine = common_init, |
diff --git a/arch/arm/mach-mmp/common.c b/arch/arm/mach-mmp/common.c index 3b29fa7e9b08..0ec0ca80bb3e 100644 --- a/arch/arm/mach-mmp/common.c +++ b/arch/arm/mach-mmp/common.c | |||
@@ -10,13 +10,20 @@ | |||
10 | 10 | ||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
13 | #include <linux/module.h> | ||
13 | 14 | ||
14 | #include <asm/page.h> | 15 | #include <asm/page.h> |
15 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
16 | #include <mach/addr-map.h> | 17 | #include <mach/addr-map.h> |
18 | #include <mach/cputype.h> | ||
17 | 19 | ||
18 | #include "common.h" | 20 | #include "common.h" |
19 | 21 | ||
22 | #define MMP_CHIPID (AXI_VIRT_BASE + 0x82c00) | ||
23 | |||
24 | unsigned int mmp_chip_id; | ||
25 | EXPORT_SYMBOL(mmp_chip_id); | ||
26 | |||
20 | static struct map_desc standard_io_desc[] __initdata = { | 27 | static struct map_desc standard_io_desc[] __initdata = { |
21 | { | 28 | { |
22 | .pfn = __phys_to_pfn(APB_PHYS_BASE), | 29 | .pfn = __phys_to_pfn(APB_PHYS_BASE), |
@@ -34,4 +41,7 @@ static struct map_desc standard_io_desc[] __initdata = { | |||
34 | void __init mmp_map_io(void) | 41 | void __init mmp_map_io(void) |
35 | { | 42 | { |
36 | iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); | 43 | iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); |
44 | |||
45 | /* this is early, initialize mmp_chip_id here */ | ||
46 | mmp_chip_id = __raw_readl(MMP_CHIPID); | ||
37 | } | 47 | } |
diff --git a/arch/arm/mach-mmp/flint.c b/arch/arm/mach-mmp/flint.c index e4312d238eae..c558425c3613 100644 --- a/arch/arm/mach-mmp/flint.c +++ b/arch/arm/mach-mmp/flint.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/smc91x.h> | 16 | #include <linux/smc91x.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/interrupt.h> | ||
19 | 20 | ||
20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
@@ -25,6 +26,8 @@ | |||
25 | 26 | ||
26 | #include "common.h" | 27 | #include "common.h" |
27 | 28 | ||
29 | #define FLINT_NR_IRQS (IRQ_BOARD_START + 48) | ||
30 | |||
28 | static unsigned long flint_pin_config[] __initdata = { | 31 | static unsigned long flint_pin_config[] __initdata = { |
29 | /* UART1 */ | 32 | /* UART1 */ |
30 | GPIO45_UART1_RXD, | 33 | GPIO45_UART1_RXD, |
@@ -116,6 +119,7 @@ MACHINE_START(FLINT, "Flint Development Platform") | |||
116 | .phys_io = APB_PHYS_BASE, | 119 | .phys_io = APB_PHYS_BASE, |
117 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | 120 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, |
118 | .map_io = mmp_map_io, | 121 | .map_io = mmp_map_io, |
122 | .nr_irqs = FLINT_NR_IRQS, | ||
119 | .init_irq = mmp2_init_irq, | 123 | .init_irq = mmp2_init_irq, |
120 | .timer = &mmp2_timer, | 124 | .timer = &mmp2_timer, |
121 | .init_machine = flint_init, | 125 | .init_machine = flint_init, |
diff --git a/arch/arm/mach-mmp/include/mach/cputype.h b/arch/arm/mach-mmp/include/mach/cputype.h index 83b18721d933..f43a68b213f1 100644 --- a/arch/arm/mach-mmp/include/mach/cputype.h +++ b/arch/arm/mach-mmp/include/mach/cputype.h | |||
@@ -4,36 +4,51 @@ | |||
4 | #include <asm/cputype.h> | 4 | #include <asm/cputype.h> |
5 | 5 | ||
6 | /* | 6 | /* |
7 | * CPU Stepping OLD_ID CPU_ID CHIP_ID | 7 | * CPU Stepping CPU_ID CHIP_ID |
8 | * | 8 | * |
9 | * PXA168 A0 0x41159263 0x56158400 0x00A0A333 | 9 | * PXA168 S0 0x56158400 0x0000C910 |
10 | * PXA910 Y0 0x41159262 0x56158000 0x00F0C910 | 10 | * PXA168 A0 0x56158400 0x00A0A168 |
11 | * MMP2 Z0 0x560f5811 | 11 | * PXA910 Y1 0x56158400 0x00F2C920 |
12 | * PXA910 A0 0x56158400 0x00F2C910 | ||
13 | * PXA910 A1 0x56158400 0x00A0C910 | ||
14 | * PXA920 Y0 0x56158400 0x00F2C920 | ||
15 | * PXA920 A0 0x56158400 0x00A0C920 | ||
16 | * PXA920 A1 0x56158400 0x00A1C920 | ||
17 | * MMP2 Z0 0x560f5811 0x00F00410 | ||
18 | * MMP2 Z1 0x560f5811 0x00E00410 | ||
19 | * MMP2 A0 0x560f5811 0x00A0A610 | ||
12 | */ | 20 | */ |
13 | 21 | ||
22 | extern unsigned int mmp_chip_id; | ||
23 | |||
14 | #ifdef CONFIG_CPU_PXA168 | 24 | #ifdef CONFIG_CPU_PXA168 |
15 | # define __cpu_is_pxa168(id) \ | 25 | static inline int cpu_is_pxa168(void) |
16 | ({ unsigned int _id = ((id) >> 8) & 0xff; _id == 0x84; }) | 26 | { |
27 | return (((read_cpuid_id() >> 8) & 0xff) == 0x84) && | ||
28 | ((mmp_chip_id & 0xfff) == 0x168); | ||
29 | } | ||
17 | #else | 30 | #else |
18 | # define __cpu_is_pxa168(id) (0) | 31 | #define cpu_is_pxa168() (0) |
19 | #endif | 32 | #endif |
20 | 33 | ||
34 | /* cpu_is_pxa910() is shared on both pxa910 and pxa920 */ | ||
21 | #ifdef CONFIG_CPU_PXA910 | 35 | #ifdef CONFIG_CPU_PXA910 |
22 | # define __cpu_is_pxa910(id) \ | 36 | static inline int cpu_is_pxa910(void) |
23 | ({ unsigned int _id = ((id) >> 8) & 0xff; _id == 0x80; }) | 37 | { |
38 | return (((read_cpuid_id() >> 8) & 0xff) == 0x84) && | ||
39 | (((mmp_chip_id & 0xfff) == 0x910) || | ||
40 | ((mmp_chip_id & 0xfff) == 0x920)); | ||
41 | } | ||
24 | #else | 42 | #else |
25 | # define __cpu_is_pxa910(id) (0) | 43 | #define cpu_is_pxa910() (0) |
26 | #endif | 44 | #endif |
27 | 45 | ||
28 | #ifdef CONFIG_CPU_MMP2 | 46 | #ifdef CONFIG_CPU_MMP2 |
29 | # define __cpu_is_mmp2(id) \ | 47 | static inline int cpu_is_mmp2(void) |
30 | ({ unsigned int _id = ((id) >> 8) & 0xff; _id == 0x58; }) | 48 | { |
49 | return (((cpu_readid_id() >> 8) & 0xff) == 0x58); | ||
31 | #else | 50 | #else |
32 | # define __cpu_is_mmp2(id) (0) | 51 | #define cpu_is_mmp2() (0) |
33 | #endif | 52 | #endif |
34 | 53 | ||
35 | #define cpu_is_pxa168() ({ __cpu_is_pxa168(read_cpuid_id()); }) | ||
36 | #define cpu_is_pxa910() ({ __cpu_is_pxa910(read_cpuid_id()); }) | ||
37 | #define cpu_is_mmp2() ({ __cpu_is_mmp2(read_cpuid_id()); }) | ||
38 | |||
39 | #endif /* __ASM_MACH_CPUTYPE_H */ | 54 | #endif /* __ASM_MACH_CPUTYPE_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/irqs.h b/arch/arm/mach-mmp/include/mach/irqs.h index b379cdec4d38..a09d328e2ddd 100644 --- a/arch/arm/mach-mmp/include/mach/irqs.h +++ b/arch/arm/mach-mmp/include/mach/irqs.h | |||
@@ -222,10 +222,8 @@ | |||
222 | #define IRQ_GPIO_NUM 192 | 222 | #define IRQ_GPIO_NUM 192 |
223 | #define IRQ_GPIO(x) (IRQ_GPIO_START + (x)) | 223 | #define IRQ_GPIO(x) (IRQ_GPIO_START + (x)) |
224 | 224 | ||
225 | /* Board IRQ - 64 by default, increase if not enough */ | ||
226 | #define IRQ_BOARD_START (IRQ_GPIO_START + IRQ_GPIO_NUM) | 225 | #define IRQ_BOARD_START (IRQ_GPIO_START + IRQ_GPIO_NUM) |
227 | #define IRQ_BOARD_END (IRQ_BOARD_START + 64) | ||
228 | 226 | ||
229 | #define NR_IRQS (IRQ_BOARD_END) | 227 | #define NR_IRQS (IRQ_BOARD_START) |
230 | 228 | ||
231 | #endif /* __ASM_MACH_IRQS_H */ | 229 | #endif /* __ASM_MACH_IRQS_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h index ded43c455ec3..4621067c7720 100644 --- a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h | |||
@@ -289,4 +289,11 @@ | |||
289 | #define GPIO86_PWM1_OUT MFP_CFG(GPIO86, AF2) | 289 | #define GPIO86_PWM1_OUT MFP_CFG(GPIO86, AF2) |
290 | #define GPIO86_PWM2_OUT MFP_CFG(GPIO86, AF3) | 290 | #define GPIO86_PWM2_OUT MFP_CFG(GPIO86, AF3) |
291 | 291 | ||
292 | /* Keypad */ | ||
293 | #define GPIO109_KP_MKIN1 MFP_CFG(GPIO109, AF7) | ||
294 | #define GPIO110_KP_MKIN0 MFP_CFG(GPIO110, AF7) | ||
295 | #define GPIO111_KP_MKOUT7 MFP_CFG(GPIO111, AF7) | ||
296 | #define GPIO112_KP_MKOUT6 MFP_CFG(GPIO112, AF7) | ||
297 | #define GPIO121_KP_MKIN4 MFP_CFG(GPIO121, AF7) | ||
298 | |||
292 | #endif /* __ASM_MACH_MFP_PXA168_H */ | 299 | #endif /* __ASM_MACH_MFP_PXA168_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h b/arch/arm/mach-mmp/include/mach/pxa168.h index 27e1bc758623..1801e4206232 100644 --- a/arch/arm/mach-mmp/include/mach/pxa168.h +++ b/arch/arm/mach-mmp/include/mach/pxa168.h | |||
@@ -5,11 +5,15 @@ struct sys_timer; | |||
5 | 5 | ||
6 | extern struct sys_timer pxa168_timer; | 6 | extern struct sys_timer pxa168_timer; |
7 | extern void __init pxa168_init_irq(void); | 7 | extern void __init pxa168_init_irq(void); |
8 | extern void pxa168_clear_keypad_wakeup(void); | ||
8 | 9 | ||
9 | #include <linux/i2c.h> | 10 | #include <linux/i2c.h> |
10 | #include <mach/devices.h> | 11 | #include <mach/devices.h> |
11 | #include <plat/i2c.h> | 12 | #include <plat/i2c.h> |
12 | #include <plat/pxa3xx_nand.h> | 13 | #include <plat/pxa3xx_nand.h> |
14 | #include <video/pxa168fb.h> | ||
15 | #include <plat/pxa27x_keypad.h> | ||
16 | #include <mach/cputype.h> | ||
13 | 17 | ||
14 | extern struct pxa_device_desc pxa168_device_uart1; | 18 | extern struct pxa_device_desc pxa168_device_uart1; |
15 | extern struct pxa_device_desc pxa168_device_uart2; | 19 | extern struct pxa_device_desc pxa168_device_uart2; |
@@ -25,6 +29,8 @@ extern struct pxa_device_desc pxa168_device_ssp3; | |||
25 | extern struct pxa_device_desc pxa168_device_ssp4; | 29 | extern struct pxa_device_desc pxa168_device_ssp4; |
26 | extern struct pxa_device_desc pxa168_device_ssp5; | 30 | extern struct pxa_device_desc pxa168_device_ssp5; |
27 | extern struct pxa_device_desc pxa168_device_nand; | 31 | extern struct pxa_device_desc pxa168_device_nand; |
32 | extern struct pxa_device_desc pxa168_device_fb; | ||
33 | extern struct pxa_device_desc pxa168_device_keypad; | ||
28 | 34 | ||
29 | static inline int pxa168_add_uart(int id) | 35 | static inline int pxa168_add_uart(int id) |
30 | { | 36 | { |
@@ -97,4 +103,18 @@ static inline int pxa168_add_nand(struct pxa3xx_nand_platform_data *info) | |||
97 | { | 103 | { |
98 | return pxa_register_device(&pxa168_device_nand, info, sizeof(*info)); | 104 | return pxa_register_device(&pxa168_device_nand, info, sizeof(*info)); |
99 | } | 105 | } |
106 | |||
107 | static inline int pxa168_add_fb(struct pxa168fb_mach_info *mi) | ||
108 | { | ||
109 | return pxa_register_device(&pxa168_device_fb, mi, sizeof(*mi)); | ||
110 | } | ||
111 | |||
112 | static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *data) | ||
113 | { | ||
114 | if (cpu_is_pxa168()) | ||
115 | data->clear_wakeup_event = pxa168_clear_keypad_wakeup; | ||
116 | |||
117 | return pxa_register_device(&pxa168_device_keypad, data, sizeof(*data)); | ||
118 | } | ||
119 | |||
100 | #endif /* __ASM_MACH_PXA168_H */ | 120 | #endif /* __ASM_MACH_PXA168_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/regs-apmu.h b/arch/arm/mach-mmp/include/mach/regs-apmu.h index 919030514120..ac4702357a6e 100644 --- a/arch/arm/mach-mmp/include/mach/regs-apmu.h +++ b/arch/arm/mach-mmp/include/mach/regs-apmu.h | |||
@@ -33,4 +33,16 @@ | |||
33 | #define APMU_FNRST_DIS (1 << 1) | 33 | #define APMU_FNRST_DIS (1 << 1) |
34 | #define APMU_AXIRST_DIS (1 << 0) | 34 | #define APMU_AXIRST_DIS (1 << 0) |
35 | 35 | ||
36 | /* Wake Clear Register */ | ||
37 | #define APMU_WAKE_CLR APMU_REG(0x07c) | ||
38 | |||
39 | #define APMU_PXA168_KP_WAKE_CLR (1 << 7) | ||
40 | #define APMU_PXA168_CFI_WAKE_CLR (1 << 6) | ||
41 | #define APMU_PXA168_XD_WAKE_CLR (1 << 5) | ||
42 | #define APMU_PXA168_MSP_WAKE_CLR (1 << 4) | ||
43 | #define APMU_PXA168_SD4_WAKE_CLR (1 << 3) | ||
44 | #define APMU_PXA168_SD3_WAKE_CLR (1 << 2) | ||
45 | #define APMU_PXA168_SD2_WAKE_CLR (1 << 1) | ||
46 | #define APMU_PXA168_SD1_WAKE_CLR (1 << 0) | ||
47 | |||
36 | #endif /* __ASM_MACH_REGS_APMU_H */ | 48 | #endif /* __ASM_MACH_REGS_APMU_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/teton_bga.h b/arch/arm/mach-mmp/include/mach/teton_bga.h new file mode 100644 index 000000000000..61a539b2cc98 --- /dev/null +++ b/arch/arm/mach-mmp/include/mach/teton_bga.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-mmp/include/mach/teton_bga.h | ||
3 | * | ||
4 | * Support for the Marvell PXA168 Teton BGA Development Platform. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * publishhed by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_MACH_TETON_BGA_H | ||
11 | #define __ASM_MACH_TETON_BGA_H | ||
12 | |||
13 | /* GPIOs */ | ||
14 | #define MMC_PWENA_GPIO 27 | ||
15 | #define USBHPENB_GPIO 55 | ||
16 | #define RTC_INT_GPIO 78 | ||
17 | #define LCD_VBLK_EN_GPIO 79 | ||
18 | #define LCD_DVDD_EN_GPIO 80 | ||
19 | #define RST_WIFI_GPIO 81 | ||
20 | #define CF_PWEN_GPIO 82 | ||
21 | #define USB_OC_GPIO 83 | ||
22 | #define PWM_GPIO 84 | ||
23 | #define USBHPENA_GPIO 85 | ||
24 | #define TS_INT_GPIO 86 | ||
25 | #define CIR_GPIO 108 | ||
26 | |||
27 | #endif /* __ASM_MACH_TETON_BGA_H */ | ||
diff --git a/arch/arm/mach-mmp/jasper.c b/arch/arm/mach-mmp/jasper.c index 80c3e7ab1e17..940ee03e3682 100644 --- a/arch/arm/mach-mmp/jasper.c +++ b/arch/arm/mach-mmp/jasper.c | |||
@@ -18,16 +18,18 @@ | |||
18 | #include <linux/regulator/machine.h> | 18 | #include <linux/regulator/machine.h> |
19 | #include <linux/regulator/max8649.h> | 19 | #include <linux/regulator/max8649.h> |
20 | #include <linux/mfd/max8925.h> | 20 | #include <linux/mfd/max8925.h> |
21 | #include <linux/interrupt.h> | ||
21 | 22 | ||
22 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
23 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
24 | #include <mach/addr-map.h> | 25 | #include <mach/addr-map.h> |
25 | #include <mach/mfp-mmp2.h> | 26 | #include <mach/mfp-mmp2.h> |
26 | #include <mach/mmp2.h> | 27 | #include <mach/mmp2.h> |
27 | #include <mach/irqs.h> | ||
28 | 28 | ||
29 | #include "common.h" | 29 | #include "common.h" |
30 | 30 | ||
31 | #define JASPER_NR_IRQS (IRQ_BOARD_START + 48) | ||
32 | |||
31 | static unsigned long jasper_pin_config[] __initdata = { | 33 | static unsigned long jasper_pin_config[] __initdata = { |
32 | /* UART1 */ | 34 | /* UART1 */ |
33 | GPIO29_UART1_RXD, | 35 | GPIO29_UART1_RXD, |
@@ -137,6 +139,7 @@ MACHINE_START(MARVELL_JASPER, "Jasper Development Platform") | |||
137 | .phys_io = APB_PHYS_BASE, | 139 | .phys_io = APB_PHYS_BASE, |
138 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | 140 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, |
139 | .map_io = mmp_map_io, | 141 | .map_io = mmp_map_io, |
142 | .nr_irqs = JASPER_NR_IRQS, | ||
140 | .init_irq = mmp2_init_irq, | 143 | .init_irq = mmp2_init_irq, |
141 | .timer = &mmp2_timer, | 144 | .timer = &mmp2_timer, |
142 | .init_machine = jasper_init, | 145 | .init_machine = jasper_init, |
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c index 652ae660634c..72b4e7631583 100644 --- a/arch/arm/mach-mmp/pxa168.c +++ b/arch/arm/mach-mmp/pxa168.c | |||
@@ -77,8 +77,10 @@ static APBC_CLK(ssp2, PXA168_SSP2, 4, 0); | |||
77 | static APBC_CLK(ssp3, PXA168_SSP3, 4, 0); | 77 | static APBC_CLK(ssp3, PXA168_SSP3, 4, 0); |
78 | static APBC_CLK(ssp4, PXA168_SSP4, 4, 0); | 78 | static APBC_CLK(ssp4, PXA168_SSP4, 4, 0); |
79 | static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); | 79 | static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); |
80 | static APBC_CLK(keypad, PXA168_KPC, 0, 32000); | ||
80 | 81 | ||
81 | static APMU_CLK(nand, NAND, 0x01db, 208000000); | 82 | static APMU_CLK(nand, NAND, 0x01db, 208000000); |
83 | static APMU_CLK(lcd, LCD, 0x7f, 312000000); | ||
82 | 84 | ||
83 | /* device and clock bindings */ | 85 | /* device and clock bindings */ |
84 | static struct clk_lookup pxa168_clkregs[] = { | 86 | static struct clk_lookup pxa168_clkregs[] = { |
@@ -96,6 +98,8 @@ static struct clk_lookup pxa168_clkregs[] = { | |||
96 | INIT_CLKREG(&clk_ssp4, "pxa168-ssp.3", NULL), | 98 | INIT_CLKREG(&clk_ssp4, "pxa168-ssp.3", NULL), |
97 | INIT_CLKREG(&clk_ssp5, "pxa168-ssp.4", NULL), | 99 | INIT_CLKREG(&clk_ssp5, "pxa168-ssp.4", NULL), |
98 | INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL), | 100 | INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL), |
101 | INIT_CLKREG(&clk_lcd, "pxa168-fb", NULL), | ||
102 | INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL), | ||
99 | }; | 103 | }; |
100 | 104 | ||
101 | static int __init pxa168_init(void) | 105 | static int __init pxa168_init(void) |
@@ -132,6 +136,16 @@ struct sys_timer pxa168_timer = { | |||
132 | .init = pxa168_timer_init, | 136 | .init = pxa168_timer_init, |
133 | }; | 137 | }; |
134 | 138 | ||
139 | void pxa168_clear_keypad_wakeup(void) | ||
140 | { | ||
141 | uint32_t val; | ||
142 | uint32_t mask = APMU_PXA168_KP_WAKE_CLR; | ||
143 | |||
144 | /* wake event clear is needed in order to clear keypad interrupt */ | ||
145 | val = __raw_readl(APMU_WAKE_CLR); | ||
146 | __raw_writel(val | mask, APMU_WAKE_CLR); | ||
147 | } | ||
148 | |||
135 | /* on-chip devices */ | 149 | /* on-chip devices */ |
136 | PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22); | 150 | PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22); |
137 | PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24); | 151 | PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24); |
@@ -147,3 +161,5 @@ PXA168_DEVICE(ssp2, "pxa168-ssp", 1, SSP2, 0xd401c000, 0x40, 54, 55); | |||
147 | PXA168_DEVICE(ssp3, "pxa168-ssp", 2, SSP3, 0xd401f000, 0x40, 56, 57); | 161 | PXA168_DEVICE(ssp3, "pxa168-ssp", 2, SSP3, 0xd401f000, 0x40, 56, 57); |
148 | PXA168_DEVICE(ssp4, "pxa168-ssp", 3, SSP4, 0xd4020000, 0x40, 58, 59); | 162 | PXA168_DEVICE(ssp4, "pxa168-ssp", 3, SSP4, 0xd4020000, 0x40, 58, 59); |
149 | PXA168_DEVICE(ssp5, "pxa168-ssp", 4, SSP5, 0xd4021000, 0x40, 60, 61); | 163 | PXA168_DEVICE(ssp5, "pxa168-ssp", 4, SSP5, 0xd4021000, 0x40, 60, 61); |
164 | PXA168_DEVICE(fb, "pxa168-fb", -1, LCD, 0xd420b000, 0x1c8); | ||
165 | PXA168_DEVICE(keypad, "pxa27x-keypad", -1, KEYPAD, 0xd4012000, 0x4c); | ||
diff --git a/arch/arm/mach-mmp/teton_bga.c b/arch/arm/mach-mmp/teton_bga.c new file mode 100644 index 000000000000..a4a375c58e0c --- /dev/null +++ b/arch/arm/mach-mmp/teton_bga.c | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-mmp/teton_bga.c | ||
3 | * | ||
4 | * Support for the Marvell PXA168 Teton BGA Development Platform. | ||
5 | * | ||
6 | * Author: Mark F. Brown <mark.brown314@gmail.com> | ||
7 | * | ||
8 | * This code is based on aspenite.c | ||
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 | * publishhed by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/init.h> | ||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/platform_device.h> | ||
18 | #include <linux/gpio.h> | ||
19 | #include <linux/input.h> | ||
20 | #include <plat/pxa27x_keypad.h> | ||
21 | #include <linux/i2c.h> | ||
22 | |||
23 | #include <asm/mach-types.h> | ||
24 | #include <asm/mach/arch.h> | ||
25 | #include <mach/addr-map.h> | ||
26 | #include <mach/mfp-pxa168.h> | ||
27 | #include <mach/pxa168.h> | ||
28 | #include <mach/teton_bga.h> | ||
29 | |||
30 | #include "common.h" | ||
31 | |||
32 | static unsigned long teton_bga_pin_config[] __initdata = { | ||
33 | /* UART1 */ | ||
34 | GPIO107_UART1_TXD, | ||
35 | GPIO108_UART1_RXD, | ||
36 | |||
37 | /* Keypad */ | ||
38 | GPIO109_KP_MKIN1, | ||
39 | GPIO110_KP_MKIN0, | ||
40 | GPIO111_KP_MKOUT7, | ||
41 | GPIO112_KP_MKOUT6, | ||
42 | |||
43 | /* I2C Bus */ | ||
44 | GPIO105_CI2C_SDA, | ||
45 | GPIO106_CI2C_SCL, | ||
46 | |||
47 | /* RTC */ | ||
48 | GPIO78_GPIO, | ||
49 | }; | ||
50 | |||
51 | static unsigned int teton_bga_matrix_key_map[] = { | ||
52 | KEY(0, 6, KEY_ESC), | ||
53 | KEY(0, 7, KEY_ENTER), | ||
54 | KEY(1, 6, KEY_LEFT), | ||
55 | KEY(1, 7, KEY_RIGHT), | ||
56 | }; | ||
57 | |||
58 | static struct pxa27x_keypad_platform_data teton_bga_keypad_info __initdata = { | ||
59 | .matrix_key_rows = 2, | ||
60 | .matrix_key_cols = 8, | ||
61 | .matrix_key_map = teton_bga_matrix_key_map, | ||
62 | .matrix_key_map_size = ARRAY_SIZE(teton_bga_matrix_key_map), | ||
63 | .debounce_interval = 30, | ||
64 | }; | ||
65 | |||
66 | static struct i2c_board_info teton_bga_i2c_info[] __initdata = { | ||
67 | { | ||
68 | I2C_BOARD_INFO("ds1337", 0x68), | ||
69 | .irq = gpio_to_irq(RTC_INT_GPIO) | ||
70 | }, | ||
71 | }; | ||
72 | |||
73 | static void __init teton_bga_init(void) | ||
74 | { | ||
75 | mfp_config(ARRAY_AND_SIZE(teton_bga_pin_config)); | ||
76 | |||
77 | /* on-chip devices */ | ||
78 | pxa168_add_uart(1); | ||
79 | pxa168_add_keypad(&teton_bga_keypad_info); | ||
80 | pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(teton_bga_i2c_info)); | ||
81 | } | ||
82 | |||
83 | MACHINE_START(TETON_BGA, "PXA168-based Teton BGA Development Platform") | ||
84 | .phys_io = APB_PHYS_BASE, | ||
85 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | ||
86 | .map_io = mmp_map_io, | ||
87 | .nr_irqs = IRQ_BOARD_START, | ||
88 | .init_irq = pxa168_init_irq, | ||
89 | .timer = &pxa168_timer, | ||
90 | .init_machine = teton_bga_init, | ||
91 | MACHINE_END | ||
diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c index ee65e05f0cf1..54571139dc4b 100644 --- a/arch/arm/mach-mmp/ttc_dkb.c +++ b/arch/arm/mach-mmp/ttc_dkb.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/mtd/mtd.h> | 14 | #include <linux/mtd/mtd.h> |
15 | #include <linux/mtd/partitions.h> | 15 | #include <linux/mtd/partitions.h> |
16 | #include <linux/mtd/onenand.h> | 16 | #include <linux/mtd/onenand.h> |
17 | #include <linux/interrupt.h> | ||
17 | 18 | ||
18 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
19 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
@@ -24,6 +25,8 @@ | |||
24 | 25 | ||
25 | #include "common.h" | 26 | #include "common.h" |
26 | 27 | ||
28 | #define TTCDKB_NR_IRQS (IRQ_BOARD_START + 24) | ||
29 | |||
27 | static unsigned long ttc_dkb_pin_config[] __initdata = { | 30 | static unsigned long ttc_dkb_pin_config[] __initdata = { |
28 | /* UART2 */ | 31 | /* UART2 */ |
29 | GPIO47_UART2_RXD, | 32 | GPIO47_UART2_RXD, |
@@ -125,6 +128,7 @@ MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform") | |||
125 | .phys_io = APB_PHYS_BASE, | 128 | .phys_io = APB_PHYS_BASE, |
126 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, | 129 | .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc, |
127 | .map_io = mmp_map_io, | 130 | .map_io = mmp_map_io, |
131 | .nr_irqs = TTCDKB_NR_IRQS, | ||
128 | .init_irq = pxa910_init_irq, | 132 | .init_irq = pxa910_init_irq, |
129 | .timer = &pxa910_timer, | 133 | .timer = &pxa910_timer, |
130 | .init_machine = ttc_dkb_init, | 134 | .init_machine = ttc_dkb_init, |
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 7aefb9074852..dd235ecc9d6c 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -8,19 +8,16 @@ config ARCH_LUBBOCK | |||
8 | bool "Intel DBPXA250 Development Platform (aka Lubbock)" | 8 | bool "Intel DBPXA250 Development Platform (aka Lubbock)" |
9 | select PXA25x | 9 | select PXA25x |
10 | select SA1111 | 10 | select SA1111 |
11 | select PXA_HAVE_BOARD_IRQS | ||
12 | 11 | ||
13 | config MACH_MAINSTONE | 12 | config MACH_MAINSTONE |
14 | bool "Intel HCDDBBVA0 Development Platform (aka Mainstone)" | 13 | bool "Intel HCDDBBVA0 Development Platform (aka Mainstone)" |
15 | select PXA27x | 14 | select PXA27x |
16 | select HAVE_PWM | 15 | select HAVE_PWM |
17 | select PXA_HAVE_BOARD_IRQS | ||
18 | 16 | ||
19 | config MACH_ZYLONITE | 17 | config MACH_ZYLONITE |
20 | bool | 18 | bool |
21 | select PXA3xx | 19 | select PXA3xx |
22 | select HAVE_PWM | 20 | select HAVE_PWM |
23 | select PXA_HAVE_BOARD_IRQS | ||
24 | 21 | ||
25 | config MACH_ZYLONITE300 | 22 | config MACH_ZYLONITE300 |
26 | bool "PXA3xx Development Platform (aka Zylonite) PXA300/310" | 23 | bool "PXA3xx Development Platform (aka Zylonite) PXA300/310" |
@@ -44,6 +41,10 @@ config MACH_TAVOREVB | |||
44 | select PXA3xx | 41 | select PXA3xx |
45 | select CPU_PXA930 | 42 | select CPU_PXA930 |
46 | 43 | ||
44 | config MACH_TAVOREVB3 | ||
45 | bool "PXA95x Development Platform (aka TavorEVB III)" | ||
46 | select CPU_PXA950 | ||
47 | |||
47 | config MACH_SAAR | 48 | config MACH_SAAR |
48 | bool "PXA930 Handheld Platform (aka SAAR)" | 49 | bool "PXA930 Handheld Platform (aka SAAR)" |
49 | select PXA3xx | 50 | select PXA3xx |
@@ -61,7 +62,6 @@ config ARCH_VIPER | |||
61 | select ISA | 62 | select ISA |
62 | select I2C_GPIO | 63 | select I2C_GPIO |
63 | select HAVE_PWM | 64 | select HAVE_PWM |
64 | select PXA_HAVE_BOARD_IRQS | ||
65 | select PXA_HAVE_ISA_IRQS | 65 | select PXA_HAVE_ISA_IRQS |
66 | select ARCOM_PCMCIA | 66 | select ARCOM_PCMCIA |
67 | 67 | ||
@@ -69,7 +69,6 @@ config MACH_ARCOM_ZEUS | |||
69 | bool "Arcom/Eurotech ZEUS SBC" | 69 | bool "Arcom/Eurotech ZEUS SBC" |
70 | select PXA27x | 70 | select PXA27x |
71 | select ISA | 71 | select ISA |
72 | select PXA_HAVE_BOARD_IRQS | ||
73 | select PXA_HAVE_ISA_IRQS | 72 | select PXA_HAVE_ISA_IRQS |
74 | select ARCOM_PCMCIA | 73 | select ARCOM_PCMCIA |
75 | 74 | ||
@@ -77,7 +76,6 @@ config MACH_BALLOON3 | |||
77 | bool "Balloon 3 board" | 76 | bool "Balloon 3 board" |
78 | select PXA27x | 77 | select PXA27x |
79 | select IWMMXT | 78 | select IWMMXT |
80 | select PXA_HAVE_BOARD_IRQS | ||
81 | 79 | ||
82 | config MACH_CSB726 | 80 | config MACH_CSB726 |
83 | bool "Enable Cogent CSB726 System On a Module" | 81 | bool "Enable Cogent CSB726 System On a Module" |
@@ -140,13 +138,11 @@ config MACH_INTELMOTE2 | |||
140 | bool "Intel Mote 2 Platform" | 138 | bool "Intel Mote 2 Platform" |
141 | select PXA27x | 139 | select PXA27x |
142 | select IWMMXT | 140 | select IWMMXT |
143 | select PXA_HAVE_BOARD_IRQS | ||
144 | 141 | ||
145 | config MACH_STARGATE2 | 142 | config MACH_STARGATE2 |
146 | bool "Intel Stargate 2 Platform" | 143 | bool "Intel Stargate 2 Platform" |
147 | select PXA27x | 144 | select PXA27x |
148 | select IWMMXT | 145 | select IWMMXT |
149 | select PXA_HAVE_BOARD_IRQS | ||
150 | 146 | ||
151 | config MACH_XCEP | 147 | config MACH_XCEP |
152 | bool "Iskratel Electronics XCEP" | 148 | bool "Iskratel Electronics XCEP" |
@@ -206,13 +202,11 @@ config MACH_LOGICPD_PXA270 | |||
206 | bool "LogicPD PXA270 Card Engine Development Platform" | 202 | bool "LogicPD PXA270 Card Engine Development Platform" |
207 | select PXA27x | 203 | select PXA27x |
208 | select HAVE_PWM | 204 | select HAVE_PWM |
209 | select PXA_HAVE_BOARD_IRQS | ||
210 | 205 | ||
211 | config MACH_PCM027 | 206 | config MACH_PCM027 |
212 | bool "Phytec phyCORE-PXA270 CPU module (PCM-027)" | 207 | bool "Phytec phyCORE-PXA270 CPU module (PCM-027)" |
213 | select PXA27x | 208 | select PXA27x |
214 | select IWMMXT | 209 | select IWMMXT |
215 | select PXA_HAVE_BOARD_IRQS | ||
216 | 210 | ||
217 | config MACH_PCM990_BASEBOARD | 211 | config MACH_PCM990_BASEBOARD |
218 | bool "PHYTEC PCM-990 development board" | 212 | bool "PHYTEC PCM-990 development board" |
@@ -247,7 +241,6 @@ config MACH_COLIBRI_PXA270_INCOME | |||
247 | depends on MACH_COLIBRI | 241 | depends on MACH_COLIBRI |
248 | select PXA27x | 242 | select PXA27x |
249 | select HAVE_PWM | 243 | select HAVE_PWM |
250 | select PXA_HAVE_BOARD_IRQS | ||
251 | 244 | ||
252 | config MACH_COLIBRI300 | 245 | config MACH_COLIBRI300 |
253 | bool "Toradex Colibri PXA300/310" | 246 | bool "Toradex Colibri PXA300/310" |
@@ -274,7 +267,6 @@ config MACH_H4700 | |||
274 | select PXA27x | 267 | select PXA27x |
275 | select IWMMXT | 268 | select IWMMXT |
276 | select HAVE_PWM | 269 | select HAVE_PWM |
277 | select PXA_HAVE_BOARD_IRQS | ||
278 | 270 | ||
279 | config MACH_H5000 | 271 | config MACH_H5000 |
280 | bool "HP iPAQ h5000" | 272 | bool "HP iPAQ h5000" |
@@ -289,7 +281,6 @@ config MACH_MAGICIAN | |||
289 | select PXA27x | 281 | select PXA27x |
290 | select IWMMXT | 282 | select IWMMXT |
291 | select HAVE_PWM | 283 | select HAVE_PWM |
292 | select PXA_HAVE_BOARD_IRQS | ||
293 | 284 | ||
294 | config MACH_MIOA701 | 285 | config MACH_MIOA701 |
295 | bool "Mitac Mio A701 Support" | 286 | bool "Mitac Mio A701 Support" |
@@ -307,7 +298,6 @@ config PXA_EZX | |||
307 | select PXA27x | 298 | select PXA27x |
308 | select IWMMXT | 299 | select IWMMXT |
309 | select HAVE_PWM | 300 | select HAVE_PWM |
310 | select PXA_HAVE_BOARD_IRQS | ||
311 | 301 | ||
312 | config MACH_EZX_A780 | 302 | config MACH_EZX_A780 |
313 | bool "Motorola EZX A780" | 303 | bool "Motorola EZX A780" |
@@ -478,7 +468,6 @@ config MACH_POODLE | |||
478 | depends on PXA_SHARPSL | 468 | depends on PXA_SHARPSL |
479 | select PXA25x | 469 | select PXA25x |
480 | select SHARP_LOCOMO | 470 | select SHARP_LOCOMO |
481 | select PXA_HAVE_BOARD_IRQS | ||
482 | 471 | ||
483 | config MACH_CORGI | 472 | config MACH_CORGI |
484 | bool "Enable Sharp SL-C700 (Corgi) Support" | 473 | bool "Enable Sharp SL-C700 (Corgi) Support" |
@@ -523,7 +512,6 @@ config MACH_TOSA | |||
523 | bool "Enable Sharp SL-6000x (Tosa) Support" | 512 | bool "Enable Sharp SL-6000x (Tosa) Support" |
524 | depends on PXA_SHARPSL | 513 | depends on PXA_SHARPSL |
525 | select PXA25x | 514 | select PXA25x |
526 | select PXA_HAVE_BOARD_IRQS | ||
527 | 515 | ||
528 | config TOSA_BT | 516 | config TOSA_BT |
529 | tristate "Control the state of built-in bluetooth chip on Sharp SL-6000" | 517 | tristate "Control the state of built-in bluetooth chip on Sharp SL-6000" |
@@ -552,7 +540,6 @@ config MACH_ICONTROL | |||
552 | config ARCH_PXA_ESERIES | 540 | config ARCH_PXA_ESERIES |
553 | bool "PXA based Toshiba e-series PDAs" | 541 | bool "PXA based Toshiba e-series PDAs" |
554 | select PXA25x | 542 | select PXA25x |
555 | select PXA_HAVE_BOARD_IRQS | ||
556 | 543 | ||
557 | config MACH_E330 | 544 | config MACH_E330 |
558 | bool "Toshiba e330" | 545 | bool "Toshiba e330" |
@@ -606,7 +593,6 @@ config MACH_ZIPIT2 | |||
606 | bool "Zipit Z2 Handheld" | 593 | bool "Zipit Z2 Handheld" |
607 | select PXA27x | 594 | select PXA27x |
608 | select HAVE_PWM | 595 | select HAVE_PWM |
609 | select PXA_HAVE_BOARD_IRQS | ||
610 | 596 | ||
611 | endmenu | 597 | endmenu |
612 | 598 | ||
@@ -643,6 +629,7 @@ config CPU_PXA300 | |||
643 | config CPU_PXA310 | 629 | config CPU_PXA310 |
644 | bool | 630 | bool |
645 | select CPU_PXA300 | 631 | select CPU_PXA300 |
632 | select PXA310_ULPI if USB_ULPI | ||
646 | help | 633 | help |
647 | PXA310 (codename Monahans-LV) | 634 | PXA310 (codename Monahans-LV) |
648 | 635 | ||
@@ -692,10 +679,10 @@ config SHARPSL_PM_MAX1111 | |||
692 | select HWMON | 679 | select HWMON |
693 | select SENSORS_MAX1111 | 680 | select SENSORS_MAX1111 |
694 | 681 | ||
695 | config PXA_HAVE_BOARD_IRQS | 682 | config PXA_HAVE_ISA_IRQS |
696 | bool | 683 | bool |
697 | 684 | ||
698 | config PXA_HAVE_ISA_IRQS | 685 | config PXA310_ULPI |
699 | bool | 686 | bool |
700 | 687 | ||
701 | endif | 688 | endif |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index 85c7fb324dbb..e2f89c2c6f49 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
@@ -18,7 +18,7 @@ endif | |||
18 | # SoC-specific code | 18 | # SoC-specific code |
19 | obj-$(CONFIG_PXA25x) += mfp-pxa2xx.o pxa2xx.o pxa25x.o | 19 | obj-$(CONFIG_PXA25x) += mfp-pxa2xx.o pxa2xx.o pxa25x.o |
20 | obj-$(CONFIG_PXA27x) += mfp-pxa2xx.o pxa2xx.o pxa27x.o | 20 | obj-$(CONFIG_PXA27x) += mfp-pxa2xx.o pxa2xx.o pxa27x.o |
21 | obj-$(CONFIG_PXA3xx) += mfp-pxa3xx.o pxa3xx.o smemc.o | 21 | obj-$(CONFIG_PXA3xx) += mfp-pxa3xx.o pxa3xx.o smemc.o pxa3xx-ulpi.o |
22 | obj-$(CONFIG_CPU_PXA300) += pxa300.o | 22 | obj-$(CONFIG_CPU_PXA300) += pxa300.o |
23 | obj-$(CONFIG_CPU_PXA320) += pxa320.o | 23 | obj-$(CONFIG_CPU_PXA320) += pxa320.o |
24 | obj-$(CONFIG_CPU_PXA930) += pxa930.o | 24 | obj-$(CONFIG_CPU_PXA930) += pxa930.o |
@@ -32,6 +32,7 @@ obj-$(CONFIG_MACH_ZYLONITE300) += zylonite.o zylonite_pxa300.o | |||
32 | obj-$(CONFIG_MACH_ZYLONITE320) += zylonite.o zylonite_pxa320.o | 32 | obj-$(CONFIG_MACH_ZYLONITE320) += zylonite.o zylonite_pxa320.o |
33 | obj-$(CONFIG_MACH_LITTLETON) += littleton.o | 33 | obj-$(CONFIG_MACH_LITTLETON) += littleton.o |
34 | obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o | 34 | obj-$(CONFIG_MACH_TAVOREVB) += tavorevb.o |
35 | obj-$(CONFIG_MACH_TAVOREVB3) += tavorevb3.o | ||
35 | obj-$(CONFIG_MACH_SAAR) += saar.o | 36 | obj-$(CONFIG_MACH_SAAR) += saar.o |
36 | 37 | ||
37 | # 3rd Party Dev Platforms | 38 | # 3rd Party Dev Platforms |
diff --git a/arch/arm/mach-pxa/balloon3.c b/arch/arm/mach-pxa/balloon3.c index 9041340fee1d..79d0f6cf53d7 100644 --- a/arch/arm/mach-pxa/balloon3.c +++ b/arch/arm/mach-pxa/balloon3.c | |||
@@ -68,42 +68,6 @@ static unsigned long balloon3_pin_config[] __initdata = { | |||
68 | 68 | ||
69 | /* Reset, configured as GPIO wakeup source */ | 69 | /* Reset, configured as GPIO wakeup source */ |
70 | GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, | 70 | GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH, |
71 | |||
72 | /* LEDs */ | ||
73 | GPIO9_GPIO, /* NAND activity LED */ | ||
74 | GPIO10_GPIO, /* Heartbeat LED */ | ||
75 | |||
76 | /* AC97 */ | ||
77 | GPIO28_AC97_BITCLK, | ||
78 | GPIO29_AC97_SDATA_IN_0, | ||
79 | GPIO30_AC97_SDATA_OUT, | ||
80 | GPIO31_AC97_SYNC, | ||
81 | GPIO113_AC97_nRESET, | ||
82 | GPIO95_GPIO, | ||
83 | |||
84 | /* MMC */ | ||
85 | GPIO32_MMC_CLK, | ||
86 | GPIO92_MMC_DAT_0, | ||
87 | GPIO109_MMC_DAT_1, | ||
88 | GPIO110_MMC_DAT_2, | ||
89 | GPIO111_MMC_DAT_3, | ||
90 | GPIO112_MMC_CMD, | ||
91 | |||
92 | /* USB Host */ | ||
93 | GPIO88_USBH1_PWR, | ||
94 | GPIO89_USBH1_PEN, | ||
95 | |||
96 | /* PC Card */ | ||
97 | GPIO48_nPOE, | ||
98 | GPIO49_nPWE, | ||
99 | GPIO50_nPIOR, | ||
100 | GPIO51_nPIOW, | ||
101 | GPIO85_nPCE_1, | ||
102 | GPIO54_nPCE_2, | ||
103 | GPIO79_PSKTSEL, | ||
104 | GPIO55_nPREG, | ||
105 | GPIO56_nPWAIT, | ||
106 | GPIO57_nIOIS16, | ||
107 | }; | 71 | }; |
108 | 72 | ||
109 | /****************************************************************************** | 73 | /****************************************************************************** |
@@ -132,6 +96,34 @@ int __init parse_balloon3_features(char *arg) | |||
132 | early_param("balloon3_features", parse_balloon3_features); | 96 | early_param("balloon3_features", parse_balloon3_features); |
133 | 97 | ||
134 | /****************************************************************************** | 98 | /****************************************************************************** |
99 | * Compact Flash slot | ||
100 | ******************************************************************************/ | ||
101 | #if defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE) | ||
102 | static unsigned long balloon3_cf_pin_config[] __initdata = { | ||
103 | GPIO48_nPOE, | ||
104 | GPIO49_nPWE, | ||
105 | GPIO50_nPIOR, | ||
106 | GPIO51_nPIOW, | ||
107 | GPIO85_nPCE_1, | ||
108 | GPIO54_nPCE_2, | ||
109 | GPIO79_PSKTSEL, | ||
110 | GPIO55_nPREG, | ||
111 | GPIO56_nPWAIT, | ||
112 | GPIO57_nIOIS16, | ||
113 | }; | ||
114 | |||
115 | static void __init balloon3_cf_init(void) | ||
116 | { | ||
117 | if (!balloon3_has(BALLOON3_FEATURE_CF)) | ||
118 | return; | ||
119 | |||
120 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_cf_pin_config)); | ||
121 | } | ||
122 | #else | ||
123 | static inline void balloon3_cf_init(void) {} | ||
124 | #endif | ||
125 | |||
126 | /****************************************************************************** | ||
135 | * NOR Flash | 127 | * NOR Flash |
136 | ******************************************************************************/ | 128 | ******************************************************************************/ |
137 | #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE) | 129 | #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE) |
@@ -179,6 +171,15 @@ static inline void balloon3_nor_init(void) {} | |||
179 | ******************************************************************************/ | 171 | ******************************************************************************/ |
180 | #if defined(CONFIG_TOUCHSCREEN_UCB1400) || \ | 172 | #if defined(CONFIG_TOUCHSCREEN_UCB1400) || \ |
181 | defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE) | 173 | defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE) |
174 | static unsigned long balloon3_ac97_pin_config[] __initdata = { | ||
175 | GPIO28_AC97_BITCLK, | ||
176 | GPIO29_AC97_SDATA_IN_0, | ||
177 | GPIO30_AC97_SDATA_OUT, | ||
178 | GPIO31_AC97_SYNC, | ||
179 | GPIO113_AC97_nRESET, | ||
180 | GPIO95_GPIO, | ||
181 | }; | ||
182 | |||
182 | static struct ucb1400_pdata vpac270_ucb1400_pdata = { | 183 | static struct ucb1400_pdata vpac270_ucb1400_pdata = { |
183 | .irq = IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ), | 184 | .irq = IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ), |
184 | }; | 185 | }; |
@@ -197,6 +198,7 @@ static void __init balloon3_ts_init(void) | |||
197 | if (!balloon3_has(BALLOON3_FEATURE_AUDIO)) | 198 | if (!balloon3_has(BALLOON3_FEATURE_AUDIO)) |
198 | return; | 199 | return; |
199 | 200 | ||
201 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ac97_pin_config)); | ||
200 | pxa_set_ac97_info(NULL); | 202 | pxa_set_ac97_info(NULL); |
201 | platform_device_register(&balloon3_ucb1400_device); | 203 | platform_device_register(&balloon3_ucb1400_device); |
202 | } | 204 | } |
@@ -208,6 +210,11 @@ static inline void balloon3_ts_init(void) {} | |||
208 | * Framebuffer | 210 | * Framebuffer |
209 | ******************************************************************************/ | 211 | ******************************************************************************/ |
210 | #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) | 212 | #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) |
213 | static unsigned long balloon3_lcd_pin_config[] __initdata = { | ||
214 | GPIOxx_LCD_TFT_16BPP, | ||
215 | GPIO99_GPIO, | ||
216 | }; | ||
217 | |||
211 | static struct pxafb_mode_info balloon3_lcd_modes[] = { | 218 | static struct pxafb_mode_info balloon3_lcd_modes[] = { |
212 | { | 219 | { |
213 | .pixclock = 38000, | 220 | .pixclock = 38000, |
@@ -242,6 +249,8 @@ static void __init balloon3_lcd_init(void) | |||
242 | if (!balloon3_has(BALLOON3_FEATURE_TOPPOLY)) | 249 | if (!balloon3_has(BALLOON3_FEATURE_TOPPOLY)) |
243 | return; | 250 | return; |
244 | 251 | ||
252 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_lcd_pin_config)); | ||
253 | |||
245 | ret = gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT, "BKL-ON"); | 254 | ret = gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT, "BKL-ON"); |
246 | if (ret) { | 255 | if (ret) { |
247 | pr_err("Requesting BKL-ON GPIO failed!\n"); | 256 | pr_err("Requesting BKL-ON GPIO failed!\n"); |
@@ -271,6 +280,15 @@ static inline void balloon3_lcd_init(void) {} | |||
271 | * SD/MMC card controller | 280 | * SD/MMC card controller |
272 | ******************************************************************************/ | 281 | ******************************************************************************/ |
273 | #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) | 282 | #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) |
283 | static unsigned long balloon3_mmc_pin_config[] __initdata = { | ||
284 | GPIO32_MMC_CLK, | ||
285 | GPIO92_MMC_DAT_0, | ||
286 | GPIO109_MMC_DAT_1, | ||
287 | GPIO110_MMC_DAT_2, | ||
288 | GPIO111_MMC_DAT_3, | ||
289 | GPIO112_MMC_CMD, | ||
290 | }; | ||
291 | |||
274 | static struct pxamci_platform_data balloon3_mci_platform_data = { | 292 | static struct pxamci_platform_data balloon3_mci_platform_data = { |
275 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, | 293 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, |
276 | .gpio_card_detect = -1, | 294 | .gpio_card_detect = -1, |
@@ -281,6 +299,7 @@ static struct pxamci_platform_data balloon3_mci_platform_data = { | |||
281 | 299 | ||
282 | static void __init balloon3_mmc_init(void) | 300 | static void __init balloon3_mmc_init(void) |
283 | { | 301 | { |
302 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_mmc_pin_config)); | ||
284 | pxa_set_mci_info(&balloon3_mci_platform_data); | 303 | pxa_set_mci_info(&balloon3_mci_platform_data); |
285 | } | 304 | } |
286 | #else | 305 | #else |
@@ -339,6 +358,11 @@ static inline void balloon3_irda_init(void) {} | |||
339 | * USB Host | 358 | * USB Host |
340 | ******************************************************************************/ | 359 | ******************************************************************************/ |
341 | #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) | 360 | #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) |
361 | static unsigned long balloon3_uhc_pin_config[] __initdata = { | ||
362 | GPIO88_USBH1_PWR, | ||
363 | GPIO89_USBH1_PEN, | ||
364 | }; | ||
365 | |||
342 | static struct pxaohci_platform_data balloon3_ohci_info = { | 366 | static struct pxaohci_platform_data balloon3_ohci_info = { |
343 | .port_mode = PMM_PERPORT_MODE, | 367 | .port_mode = PMM_PERPORT_MODE, |
344 | .flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW, | 368 | .flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW, |
@@ -348,6 +372,7 @@ static void __init balloon3_uhc_init(void) | |||
348 | { | 372 | { |
349 | if (!balloon3_has(BALLOON3_FEATURE_OHCI)) | 373 | if (!balloon3_has(BALLOON3_FEATURE_OHCI)) |
350 | return; | 374 | return; |
375 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_uhc_pin_config)); | ||
351 | pxa_set_ohci_info(&balloon3_ohci_info); | 376 | pxa_set_ohci_info(&balloon3_ohci_info); |
352 | } | 377 | } |
353 | #else | 378 | #else |
@@ -358,6 +383,11 @@ static inline void balloon3_uhc_init(void) {} | |||
358 | * LEDs | 383 | * LEDs |
359 | ******************************************************************************/ | 384 | ******************************************************************************/ |
360 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | 385 | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) |
386 | static unsigned long balloon3_led_pin_config[] __initdata = { | ||
387 | GPIO9_GPIO, /* NAND activity LED */ | ||
388 | GPIO10_GPIO, /* Heartbeat LED */ | ||
389 | }; | ||
390 | |||
361 | struct gpio_led balloon3_gpio_leds[] = { | 391 | struct gpio_led balloon3_gpio_leds[] = { |
362 | { | 392 | { |
363 | .name = "balloon3:green:idle", | 393 | .name = "balloon3:green:idle", |
@@ -436,6 +466,7 @@ static struct platform_device balloon3_pcf_leds = { | |||
436 | 466 | ||
437 | static void __init balloon3_leds_init(void) | 467 | static void __init balloon3_leds_init(void) |
438 | { | 468 | { |
469 | pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_led_pin_config)); | ||
439 | platform_device_register(&balloon3_leds); | 470 | platform_device_register(&balloon3_leds); |
440 | platform_device_register(&balloon3_pcf_leds); | 471 | platform_device_register(&balloon3_pcf_leds); |
441 | } | 472 | } |
@@ -757,6 +788,7 @@ static void __init balloon3_init(void) | |||
757 | balloon3_ts_init(); | 788 | balloon3_ts_init(); |
758 | balloon3_udc_init(); | 789 | balloon3_udc_init(); |
759 | balloon3_uhc_init(); | 790 | balloon3_uhc_init(); |
791 | balloon3_cf_init(); | ||
760 | } | 792 | } |
761 | 793 | ||
762 | static struct map_desc balloon3_io_desc[] __initdata = { | 794 | static struct map_desc balloon3_io_desc[] __initdata = { |
@@ -779,6 +811,7 @@ MACHINE_START(BALLOON3, "Balloon3") | |||
779 | .phys_io = 0x40000000, | 811 | .phys_io = 0x40000000, |
780 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 812 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
781 | .map_io = balloon3_map_io, | 813 | .map_io = balloon3_map_io, |
814 | .nr_irqs = BALLOON3_NR_IRQS, | ||
782 | .init_irq = balloon3_init_irq, | 815 | .init_irq = balloon3_init_irq, |
783 | .timer = &pxa_timer, | 816 | .timer = &pxa_timer, |
784 | .init_machine = balloon3_init, | 817 | .init_machine = balloon3_init, |
diff --git a/arch/arm/mach-pxa/cm-x2xx.c b/arch/arm/mach-pxa/cm-x2xx.c index bff6e78f033d..ad40e7b141e0 100644 --- a/arch/arm/mach-pxa/cm-x2xx.c +++ b/arch/arm/mach-pxa/cm-x2xx.c | |||
@@ -33,6 +33,9 @@ | |||
33 | extern void cmx255_init(void); | 33 | extern void cmx255_init(void); |
34 | extern void cmx270_init(void); | 34 | extern void cmx270_init(void); |
35 | 35 | ||
36 | /* reserve IRQs for IT8152 */ | ||
37 | #define CMX2XX_NR_IRQS (IRQ_BOARD_START + 40) | ||
38 | |||
36 | /* virtual addresses for statically mapped regions */ | 39 | /* virtual addresses for statically mapped regions */ |
37 | #define CMX2XX_VIRT_BASE (0xe8000000) | 40 | #define CMX2XX_VIRT_BASE (0xe8000000) |
38 | #define CMX2XX_IT8152_VIRT (CMX2XX_VIRT_BASE) | 41 | #define CMX2XX_IT8152_VIRT (CMX2XX_VIRT_BASE) |
@@ -514,6 +517,7 @@ MACHINE_START(ARMCORE, "Compulab CM-X2XX") | |||
514 | .phys_io = 0x40000000, | 517 | .phys_io = 0x40000000, |
515 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 518 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
516 | .map_io = cmx2xx_map_io, | 519 | .map_io = cmx2xx_map_io, |
520 | .nr_irqs = CMX2XX_NR_IRQS, | ||
517 | .init_irq = cmx2xx_init_irq, | 521 | .init_irq = cmx2xx_init_irq, |
518 | .timer = &pxa_timer, | 522 | .timer = &pxa_timer, |
519 | .init_machine = cmx2xx_init, | 523 | .init_machine = cmx2xx_init, |
diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c index c70e6c2f4e7c..8e0b5622b277 100644 --- a/arch/arm/mach-pxa/cm-x300.c +++ b/arch/arm/mach-pxa/cm-x300.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/clk.h> | ||
22 | 23 | ||
23 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
24 | #include <linux/dm9000.h> | 25 | #include <linux/dm9000.h> |
@@ -50,6 +51,7 @@ | |||
50 | #include <plat/i2c.h> | 51 | #include <plat/i2c.h> |
51 | #include <plat/pxa3xx_nand.h> | 52 | #include <plat/pxa3xx_nand.h> |
52 | #include <mach/audio.h> | 53 | #include <mach/audio.h> |
54 | #include <mach/pxa3xx-u2d.h> | ||
53 | 55 | ||
54 | #include <asm/mach/map.h> | 56 | #include <asm/mach/map.h> |
55 | 57 | ||
@@ -68,6 +70,8 @@ | |||
68 | #define GPIO97_RTC_RD (97) | 70 | #define GPIO97_RTC_RD (97) |
69 | #define GPIO98_RTC_IO (98) | 71 | #define GPIO98_RTC_IO (98) |
70 | 72 | ||
73 | #define GPIO_ULPI_PHY_RST (127) | ||
74 | |||
71 | static mfp_cfg_t cm_x3xx_mfp_cfg[] __initdata = { | 75 | static mfp_cfg_t cm_x3xx_mfp_cfg[] __initdata = { |
72 | /* LCD */ | 76 | /* LCD */ |
73 | GPIO54_LCD_LDD_0, | 77 | GPIO54_LCD_LDD_0, |
@@ -472,6 +476,78 @@ static void __init cm_x300_init_mmc(void) | |||
472 | static inline void cm_x300_init_mmc(void) {} | 476 | static inline void cm_x300_init_mmc(void) {} |
473 | #endif | 477 | #endif |
474 | 478 | ||
479 | #if defined(CONFIG_PXA310_ULPI) | ||
480 | static struct clk *pout_clk; | ||
481 | |||
482 | static int cm_x300_ulpi_phy_reset(void) | ||
483 | { | ||
484 | int err; | ||
485 | |||
486 | /* reset the PHY */ | ||
487 | err = gpio_request(GPIO_ULPI_PHY_RST, "ulpi reset"); | ||
488 | if (err) { | ||
489 | pr_err("%s: failed to request ULPI reset GPIO: %d\n", | ||
490 | __func__, err); | ||
491 | return err; | ||
492 | } | ||
493 | |||
494 | gpio_direction_output(GPIO_ULPI_PHY_RST, 0); | ||
495 | msleep(10); | ||
496 | gpio_set_value(GPIO_ULPI_PHY_RST, 1); | ||
497 | msleep(10); | ||
498 | |||
499 | gpio_free(GPIO_ULPI_PHY_RST); | ||
500 | |||
501 | return 0; | ||
502 | } | ||
503 | |||
504 | static inline int cm_x300_u2d_init(struct device *dev) | ||
505 | { | ||
506 | int err = 0; | ||
507 | |||
508 | if (cpu_is_pxa310()) { | ||
509 | /* CLK_POUT is connected to the ULPI PHY */ | ||
510 | pout_clk = clk_get(NULL, "CLK_POUT"); | ||
511 | if (IS_ERR(pout_clk)) { | ||
512 | err = PTR_ERR(pout_clk); | ||
513 | pr_err("%s: failed to get CLK_POUT: %d\n", | ||
514 | __func__, err); | ||
515 | return err; | ||
516 | } | ||
517 | clk_enable(pout_clk); | ||
518 | |||
519 | err = cm_x300_ulpi_phy_reset(); | ||
520 | if (err) { | ||
521 | clk_disable(pout_clk); | ||
522 | clk_put(pout_clk); | ||
523 | } | ||
524 | } | ||
525 | |||
526 | return err; | ||
527 | } | ||
528 | |||
529 | static void cm_x300_u2d_exit(struct device *dev) | ||
530 | { | ||
531 | if (cpu_is_pxa310()) { | ||
532 | clk_disable(pout_clk); | ||
533 | clk_put(pout_clk); | ||
534 | } | ||
535 | } | ||
536 | |||
537 | static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = { | ||
538 | .ulpi_mode = ULPI_SER_6PIN, | ||
539 | .init = cm_x300_u2d_init, | ||
540 | .exit = cm_x300_u2d_exit, | ||
541 | }; | ||
542 | |||
543 | static void cm_x300_init_u2d(void) | ||
544 | { | ||
545 | pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data); | ||
546 | } | ||
547 | #else | ||
548 | static inline void cm_x300_init_u2d(void) {} | ||
549 | #endif | ||
550 | |||
475 | #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) | 551 | #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) |
476 | static int cm_x300_ohci_init(struct device *dev) | 552 | static int cm_x300_ohci_init(struct device *dev) |
477 | { | 553 | { |
@@ -754,6 +830,7 @@ static void __init cm_x300_init(void) | |||
754 | cm_x300_init_da9030(); | 830 | cm_x300_init_da9030(); |
755 | cm_x300_init_dm9000(); | 831 | cm_x300_init_dm9000(); |
756 | cm_x300_init_lcd(); | 832 | cm_x300_init_lcd(); |
833 | cm_x300_init_u2d(); | ||
757 | cm_x300_init_ohci(); | 834 | cm_x300_init_ohci(); |
758 | cm_x300_init_mmc(); | 835 | cm_x300_init_mmc(); |
759 | cm_x300_init_nand(); | 836 | cm_x300_init_nand(); |
diff --git a/arch/arm/mach-pxa/cpufreq-pxa3xx.c b/arch/arm/mach-pxa/cpufreq-pxa3xx.c index 0a0d0fe99220..88fbec05ec50 100644 --- a/arch/arm/mach-pxa/cpufreq-pxa3xx.c +++ b/arch/arm/mach-pxa/cpufreq-pxa3xx.c | |||
@@ -159,7 +159,7 @@ static int pxa3xx_cpufreq_verify(struct cpufreq_policy *policy) | |||
159 | 159 | ||
160 | static unsigned int pxa3xx_cpufreq_get(unsigned int cpu) | 160 | static unsigned int pxa3xx_cpufreq_get(unsigned int cpu) |
161 | { | 161 | { |
162 | return get_clk_frequency_khz(0); | 162 | return pxa3xx_get_clk_frequency_khz(0); |
163 | } | 163 | } |
164 | 164 | ||
165 | static int pxa3xx_cpufreq_set(struct cpufreq_policy *policy, | 165 | static int pxa3xx_cpufreq_set(struct cpufreq_policy *policy, |
@@ -212,7 +212,8 @@ static int pxa3xx_cpufreq_init(struct cpufreq_policy *policy) | |||
212 | policy->cpuinfo.min_freq = 104000; | 212 | policy->cpuinfo.min_freq = 104000; |
213 | policy->cpuinfo.max_freq = (cpu_is_pxa320()) ? 806000 : 624000; | 213 | policy->cpuinfo.max_freq = (cpu_is_pxa320()) ? 806000 : 624000; |
214 | policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ | 214 | policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ |
215 | policy->cur = policy->min = policy->max = get_clk_frequency_khz(0); | 215 | policy->max = pxa3xx_get_clk_frequency_khz(0); |
216 | policy->cur = policy->min = policy->max; | ||
216 | 217 | ||
217 | if (cpu_is_pxa300() || cpu_is_pxa310()) | 218 | if (cpu_is_pxa300() || cpu_is_pxa310()) |
218 | ret = setup_freqs_table(policy, ARRAY_AND_SIZE(pxa300_freqs)); | 219 | ret = setup_freqs_table(policy, ARRAY_AND_SIZE(pxa300_freqs)); |
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c index 65447dc736c2..08b410343870 100644 --- a/arch/arm/mach-pxa/devices.c +++ b/arch/arm/mach-pxa/devices.c | |||
@@ -6,11 +6,12 @@ | |||
6 | 6 | ||
7 | #include <asm/pmu.h> | 7 | #include <asm/pmu.h> |
8 | #include <mach/udc.h> | 8 | #include <mach/udc.h> |
9 | #include <mach/pxa3xx-u2d.h> | ||
9 | #include <mach/pxafb.h> | 10 | #include <mach/pxafb.h> |
10 | #include <mach/mmc.h> | 11 | #include <mach/mmc.h> |
11 | #include <mach/irda.h> | 12 | #include <mach/irda.h> |
12 | #include <mach/ohci.h> | 13 | #include <mach/ohci.h> |
13 | #include <mach/pxa27x_keypad.h> | 14 | #include <plat/pxa27x_keypad.h> |
14 | #include <mach/pxa2xx_spi.h> | 15 | #include <mach/pxa2xx_spi.h> |
15 | #include <mach/camera.h> | 16 | #include <mach/camera.h> |
16 | #include <mach/audio.h> | 17 | #include <mach/audio.h> |
@@ -134,6 +135,33 @@ struct platform_device pxa27x_device_udc = { | |||
134 | } | 135 | } |
135 | }; | 136 | }; |
136 | 137 | ||
138 | #ifdef CONFIG_PXA3xx | ||
139 | static struct resource pxa3xx_u2d_resources[] = { | ||
140 | [0] = { | ||
141 | .start = 0x54100000, | ||
142 | .end = 0x54100fff, | ||
143 | .flags = IORESOURCE_MEM, | ||
144 | }, | ||
145 | [1] = { | ||
146 | .start = IRQ_USB2, | ||
147 | .end = IRQ_USB2, | ||
148 | .flags = IORESOURCE_IRQ, | ||
149 | }, | ||
150 | }; | ||
151 | |||
152 | struct platform_device pxa3xx_device_u2d = { | ||
153 | .name = "pxa3xx-u2d", | ||
154 | .id = -1, | ||
155 | .resource = pxa3xx_u2d_resources, | ||
156 | .num_resources = ARRAY_SIZE(pxa3xx_u2d_resources), | ||
157 | }; | ||
158 | |||
159 | void __init pxa3xx_set_u2d_info(struct pxa3xx_u2d_platform_data *info) | ||
160 | { | ||
161 | pxa_register_device(&pxa3xx_device_u2d, info); | ||
162 | } | ||
163 | #endif /* CONFIG_PXA3xx */ | ||
164 | |||
137 | static struct resource pxafb_resources[] = { | 165 | static struct resource pxafb_resources[] = { |
138 | [0] = { | 166 | [0] = { |
139 | .start = 0x44000000, | 167 | .start = 0x44000000, |
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h index 50353ea49ba4..715e8bd02e24 100644 --- a/arch/arm/mach-pxa/devices.h +++ b/arch/arm/mach-pxa/devices.h | |||
@@ -4,6 +4,7 @@ extern struct platform_device pxa3xx_device_mci2; | |||
4 | extern struct platform_device pxa3xx_device_mci3; | 4 | extern struct platform_device pxa3xx_device_mci3; |
5 | extern struct platform_device pxa25x_device_udc; | 5 | extern struct platform_device pxa25x_device_udc; |
6 | extern struct platform_device pxa27x_device_udc; | 6 | extern struct platform_device pxa27x_device_udc; |
7 | extern struct platform_device pxa3xx_device_u2d; | ||
7 | extern struct platform_device pxa_device_fb; | 8 | extern struct platform_device pxa_device_fb; |
8 | extern struct platform_device pxa_device_ffuart; | 9 | extern struct platform_device pxa_device_ffuart; |
9 | extern struct platform_device pxa_device_btuart; | 10 | extern struct platform_device pxa_device_btuart; |
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c index 0517c17978f3..51286a738a3b 100644 --- a/arch/arm/mach-pxa/em-x270.c +++ b/arch/arm/mach-pxa/em-x270.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include <mach/pxafb.h> | 43 | #include <mach/pxafb.h> |
44 | #include <mach/ohci.h> | 44 | #include <mach/ohci.h> |
45 | #include <mach/mmc.h> | 45 | #include <mach/mmc.h> |
46 | #include <mach/pxa27x_keypad.h> | 46 | #include <plat/pxa27x_keypad.h> |
47 | #include <plat/i2c.h> | 47 | #include <plat/i2c.h> |
48 | #include <mach/camera.h> | 48 | #include <mach/camera.h> |
49 | #include <mach/pxa2xx_spi.h> | 49 | #include <mach/pxa2xx_spi.h> |
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index 349212a1cbd3..4971ce119501 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <mach/pxa25x.h> | 30 | #include <mach/pxa25x.h> |
31 | #include <mach/eseries-gpio.h> | 31 | #include <mach/eseries-gpio.h> |
32 | #include <mach/eseries-irq.h> | ||
32 | #include <mach/audio.h> | 33 | #include <mach/audio.h> |
33 | #include <mach/pxafb.h> | 34 | #include <mach/pxafb.h> |
34 | #include <mach/udc.h> | 35 | #include <mach/udc.h> |
@@ -183,6 +184,7 @@ MACHINE_START(E330, "Toshiba e330") | |||
183 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 184 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
184 | .boot_params = 0xa0000100, | 185 | .boot_params = 0xa0000100, |
185 | .map_io = pxa_map_io, | 186 | .map_io = pxa_map_io, |
187 | .nr_irqs = ESERIES_NR_IRQS, | ||
186 | .init_irq = pxa25x_init_irq, | 188 | .init_irq = pxa25x_init_irq, |
187 | .fixup = eseries_fixup, | 189 | .fixup = eseries_fixup, |
188 | .init_machine = e330_init, | 190 | .init_machine = e330_init, |
@@ -233,6 +235,7 @@ MACHINE_START(E350, "Toshiba e350") | |||
233 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 235 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
234 | .boot_params = 0xa0000100, | 236 | .boot_params = 0xa0000100, |
235 | .map_io = pxa_map_io, | 237 | .map_io = pxa_map_io, |
238 | .nr_irqs = ESERIES_NR_IRQS, | ||
236 | .init_irq = pxa25x_init_irq, | 239 | .init_irq = pxa25x_init_irq, |
237 | .fixup = eseries_fixup, | 240 | .fixup = eseries_fixup, |
238 | .init_machine = e350_init, | 241 | .init_machine = e350_init, |
@@ -356,6 +359,7 @@ MACHINE_START(E400, "Toshiba e400") | |||
356 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 359 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
357 | .boot_params = 0xa0000100, | 360 | .boot_params = 0xa0000100, |
358 | .map_io = pxa_map_io, | 361 | .map_io = pxa_map_io, |
362 | .nr_irqs = ESERIES_NR_IRQS, | ||
359 | .init_irq = pxa25x_init_irq, | 363 | .init_irq = pxa25x_init_irq, |
360 | .fixup = eseries_fixup, | 364 | .fixup = eseries_fixup, |
361 | .init_machine = e400_init, | 365 | .init_machine = e400_init, |
@@ -545,6 +549,7 @@ MACHINE_START(E740, "Toshiba e740") | |||
545 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 549 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
546 | .boot_params = 0xa0000100, | 550 | .boot_params = 0xa0000100, |
547 | .map_io = pxa_map_io, | 551 | .map_io = pxa_map_io, |
552 | .nr_irqs = ESERIES_NR_IRQS, | ||
548 | .init_irq = pxa25x_init_irq, | 553 | .init_irq = pxa25x_init_irq, |
549 | .fixup = eseries_fixup, | 554 | .fixup = eseries_fixup, |
550 | .init_machine = e740_init, | 555 | .init_machine = e740_init, |
@@ -737,6 +742,7 @@ MACHINE_START(E750, "Toshiba e750") | |||
737 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 742 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
738 | .boot_params = 0xa0000100, | 743 | .boot_params = 0xa0000100, |
739 | .map_io = pxa_map_io, | 744 | .map_io = pxa_map_io, |
745 | .nr_irqs = ESERIES_NR_IRQS, | ||
740 | .init_irq = pxa25x_init_irq, | 746 | .init_irq = pxa25x_init_irq, |
741 | .fixup = eseries_fixup, | 747 | .fixup = eseries_fixup, |
742 | .init_machine = e750_init, | 748 | .init_machine = e750_init, |
@@ -933,6 +939,7 @@ MACHINE_START(E800, "Toshiba e800") | |||
933 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 939 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
934 | .boot_params = 0xa0000100, | 940 | .boot_params = 0xa0000100, |
935 | .map_io = pxa_map_io, | 941 | .map_io = pxa_map_io, |
942 | .nr_irqs = ESERIES_NR_IRQS, | ||
936 | .init_irq = pxa25x_init_irq, | 943 | .init_irq = pxa25x_init_irq, |
937 | .fixup = eseries_fixup, | 944 | .fixup = eseries_fixup, |
938 | .init_machine = e800_init, | 945 | .init_machine = e800_init, |
diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c index 626c82b13970..f997e8455557 100644 --- a/arch/arm/mach-pxa/ezx.c +++ b/arch/arm/mach-pxa/ezx.c | |||
@@ -32,12 +32,14 @@ | |||
32 | #include <mach/ohci.h> | 32 | #include <mach/ohci.h> |
33 | #include <plat/i2c.h> | 33 | #include <plat/i2c.h> |
34 | #include <mach/hardware.h> | 34 | #include <mach/hardware.h> |
35 | #include <mach/pxa27x_keypad.h> | 35 | #include <plat/pxa27x_keypad.h> |
36 | #include <mach/camera.h> | 36 | #include <mach/camera.h> |
37 | 37 | ||
38 | #include "devices.h" | 38 | #include "devices.h" |
39 | #include "generic.h" | 39 | #include "generic.h" |
40 | 40 | ||
41 | #define EZX_NR_IRQS (IRQ_BOARD_START + 24) | ||
42 | |||
41 | #define GPIO12_A780_FLIP_LID 12 | 43 | #define GPIO12_A780_FLIP_LID 12 |
42 | #define GPIO15_A1200_FLIP_LID 15 | 44 | #define GPIO15_A1200_FLIP_LID 15 |
43 | #define GPIO15_A910_FLIP_LID 15 | 45 | #define GPIO15_A910_FLIP_LID 15 |
@@ -800,6 +802,7 @@ MACHINE_START(EZX_A780, "Motorola EZX A780") | |||
800 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 802 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
801 | .boot_params = 0xa0000100, | 803 | .boot_params = 0xa0000100, |
802 | .map_io = pxa_map_io, | 804 | .map_io = pxa_map_io, |
805 | .nr_irqs = EZX_NR_IRQS, | ||
803 | .init_irq = pxa27x_init_irq, | 806 | .init_irq = pxa27x_init_irq, |
804 | .timer = &pxa_timer, | 807 | .timer = &pxa_timer, |
805 | .init_machine = a780_init, | 808 | .init_machine = a780_init, |
@@ -866,6 +869,7 @@ MACHINE_START(EZX_E680, "Motorola EZX E680") | |||
866 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 869 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
867 | .boot_params = 0xa0000100, | 870 | .boot_params = 0xa0000100, |
868 | .map_io = pxa_map_io, | 871 | .map_io = pxa_map_io, |
872 | .nr_irqs = EZX_NR_IRQS, | ||
869 | .init_irq = pxa27x_init_irq, | 873 | .init_irq = pxa27x_init_irq, |
870 | .timer = &pxa_timer, | 874 | .timer = &pxa_timer, |
871 | .init_machine = e680_init, | 875 | .init_machine = e680_init, |
@@ -932,6 +936,7 @@ MACHINE_START(EZX_A1200, "Motorola EZX A1200") | |||
932 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 936 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
933 | .boot_params = 0xa0000100, | 937 | .boot_params = 0xa0000100, |
934 | .map_io = pxa_map_io, | 938 | .map_io = pxa_map_io, |
939 | .nr_irqs = EZX_NR_IRQS, | ||
935 | .init_irq = pxa27x_init_irq, | 940 | .init_irq = pxa27x_init_irq, |
936 | .timer = &pxa_timer, | 941 | .timer = &pxa_timer, |
937 | .init_machine = a1200_init, | 942 | .init_machine = a1200_init, |
@@ -1124,6 +1129,7 @@ MACHINE_START(EZX_A910, "Motorola EZX A910") | |||
1124 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 1129 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
1125 | .boot_params = 0xa0000100, | 1130 | .boot_params = 0xa0000100, |
1126 | .map_io = pxa_map_io, | 1131 | .map_io = pxa_map_io, |
1132 | .nr_irqs = EZX_NR_IRQS, | ||
1127 | .init_irq = pxa27x_init_irq, | 1133 | .init_irq = pxa27x_init_irq, |
1128 | .timer = &pxa_timer, | 1134 | .timer = &pxa_timer, |
1129 | .init_machine = a910_init, | 1135 | .init_machine = a910_init, |
@@ -1190,6 +1196,7 @@ MACHINE_START(EZX_E6, "Motorola EZX E6") | |||
1190 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 1196 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
1191 | .boot_params = 0xa0000100, | 1197 | .boot_params = 0xa0000100, |
1192 | .map_io = pxa_map_io, | 1198 | .map_io = pxa_map_io, |
1199 | .nr_irqs = EZX_NR_IRQS, | ||
1193 | .init_irq = pxa27x_init_irq, | 1200 | .init_irq = pxa27x_init_irq, |
1194 | .timer = &pxa_timer, | 1201 | .timer = &pxa_timer, |
1195 | .init_machine = e6_init, | 1202 | .init_machine = e6_init, |
@@ -1230,6 +1237,7 @@ MACHINE_START(EZX_E2, "Motorola EZX E2") | |||
1230 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 1237 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
1231 | .boot_params = 0xa0000100, | 1238 | .boot_params = 0xa0000100, |
1232 | .map_io = pxa_map_io, | 1239 | .map_io = pxa_map_io, |
1240 | .nr_irqs = EZX_NR_IRQS, | ||
1233 | .init_irq = pxa27x_init_irq, | 1241 | .init_irq = pxa27x_init_irq, |
1234 | .timer = &pxa_timer, | 1242 | .timer = &pxa_timer, |
1235 | .init_machine = e2_init, | 1243 | .init_machine = e2_init, |
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index baabb3ce088e..6451e9c3a93f 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
@@ -66,8 +66,7 @@ unsigned int get_clk_frequency_khz(int info) | |||
66 | return pxa25x_get_clk_frequency_khz(info); | 66 | return pxa25x_get_clk_frequency_khz(info); |
67 | else if (cpu_is_pxa27x()) | 67 | else if (cpu_is_pxa27x()) |
68 | return pxa27x_get_clk_frequency_khz(info); | 68 | return pxa27x_get_clk_frequency_khz(info); |
69 | else | 69 | return 0; |
70 | return pxa3xx_get_clk_frequency_khz(info); | ||
71 | } | 70 | } |
72 | EXPORT_SYMBOL(get_clk_frequency_khz); | 71 | EXPORT_SYMBOL(get_clk_frequency_khz); |
73 | 72 | ||
@@ -80,8 +79,7 @@ unsigned int get_memclk_frequency_10khz(void) | |||
80 | return pxa25x_get_memclk_frequency_10khz(); | 79 | return pxa25x_get_memclk_frequency_10khz(); |
81 | else if (cpu_is_pxa27x()) | 80 | else if (cpu_is_pxa27x()) |
82 | return pxa27x_get_memclk_frequency_10khz(); | 81 | return pxa27x_get_memclk_frequency_10khz(); |
83 | else | 82 | return 0; |
84 | return pxa3xx_get_memclk_frequency_10khz(); | ||
85 | } | 83 | } |
86 | EXPORT_SYMBOL(get_memclk_frequency_10khz); | 84 | EXPORT_SYMBOL(get_memclk_frequency_10khz); |
87 | 85 | ||
diff --git a/arch/arm/mach-pxa/generic.h b/arch/arm/mach-pxa/generic.h index c6305c5b8a72..4b1ad2769ed7 100644 --- a/arch/arm/mach-pxa/generic.h +++ b/arch/arm/mach-pxa/generic.h | |||
@@ -54,11 +54,9 @@ static inline void pxa2xx_clear_reset_status(unsigned int mask) {} | |||
54 | 54 | ||
55 | #ifdef CONFIG_PXA3xx | 55 | #ifdef CONFIG_PXA3xx |
56 | extern unsigned pxa3xx_get_clk_frequency_khz(int); | 56 | extern unsigned pxa3xx_get_clk_frequency_khz(int); |
57 | extern unsigned pxa3xx_get_memclk_frequency_10khz(void); | ||
58 | extern void pxa3xx_clear_reset_status(unsigned int); | 57 | extern void pxa3xx_clear_reset_status(unsigned int); |
59 | #else | 58 | #else |
60 | #define pxa3xx_get_clk_frequency_khz(x) (0) | 59 | #define pxa3xx_get_clk_frequency_khz(x) (0) |
61 | #define pxa3xx_get_memclk_frequency_10khz() (0) | ||
62 | static inline void pxa3xx_clear_reset_status(unsigned int mask) {} | 60 | static inline void pxa3xx_clear_reset_status(unsigned int mask) {} |
63 | #endif | 61 | #endif |
64 | 62 | ||
diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c index 848c861dd23f..10104f16e6e4 100644 --- a/arch/arm/mach-pxa/hx4700.c +++ b/arch/arm/mach-pxa/hx4700.c | |||
@@ -874,6 +874,7 @@ MACHINE_START(H4700, "HP iPAQ HX4700") | |||
874 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 874 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
875 | .boot_params = 0xa0000100, | 875 | .boot_params = 0xa0000100, |
876 | .map_io = pxa_map_io, | 876 | .map_io = pxa_map_io, |
877 | .nr_irqs = HX4700_NR_IRQS, | ||
877 | .init_irq = pxa27x_init_irq, | 878 | .init_irq = pxa27x_init_irq, |
878 | .init_machine = hx4700_init, | 879 | .init_machine = hx4700_init, |
879 | .timer = &pxa_timer, | 880 | .timer = &pxa_timer, |
diff --git a/arch/arm/mach-pxa/include/mach/balloon3.h b/arch/arm/mach-pxa/include/mach/balloon3.h index eec92e6fd7cf..561562b4360b 100644 --- a/arch/arm/mach-pxa/include/mach/balloon3.h +++ b/arch/arm/mach-pxa/include/mach/balloon3.h | |||
@@ -174,6 +174,8 @@ enum balloon3_features { | |||
174 | #define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ) | 174 | #define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ) |
175 | #define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD) | 175 | #define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD) |
176 | 176 | ||
177 | #define BALLOON3_NR_IRQS (IRQ_BOARD_START + 4) | ||
178 | |||
177 | extern int balloon3_has(enum balloon3_features feature); | 179 | extern int balloon3_has(enum balloon3_features feature); |
178 | 180 | ||
179 | #endif | 181 | #endif |
diff --git a/arch/arm/mach-pxa/include/mach/eseries-irq.h b/arch/arm/mach-pxa/include/mach/eseries-irq.h index f2a93d5e31d3..de292b269c63 100644 --- a/arch/arm/mach-pxa/include/mach/eseries-irq.h +++ b/arch/arm/mach-pxa/include/mach/eseries-irq.h | |||
@@ -25,3 +25,4 @@ | |||
25 | #define TMIO_SD_IRQ IRQ_TMIO(1) | 25 | #define TMIO_SD_IRQ IRQ_TMIO(1) |
26 | #define TMIO_USB_IRQ IRQ_TMIO(2) | 26 | #define TMIO_USB_IRQ IRQ_TMIO(2) |
27 | 27 | ||
28 | #define ESERIES_NR_IRQS (IRQ_BOARD_START + 16) | ||
diff --git a/arch/arm/mach-pxa/include/mach/hx4700.h b/arch/arm/mach-pxa/include/mach/hx4700.h index 9eaeed1f87f1..37408449ec25 100644 --- a/arch/arm/mach-pxa/include/mach/hx4700.h +++ b/arch/arm/mach-pxa/include/mach/hx4700.h | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #define HX4700_ASIC3_GPIO_BASE NR_BUILTIN_GPIO | 18 | #define HX4700_ASIC3_GPIO_BASE NR_BUILTIN_GPIO |
19 | #define HX4700_EGPIO_BASE (HX4700_ASIC3_GPIO_BASE + ASIC3_NUM_GPIOS) | 19 | #define HX4700_EGPIO_BASE (HX4700_ASIC3_GPIO_BASE + ASIC3_NUM_GPIOS) |
20 | #define HX4700_NR_IRQS (IRQ_BOARD_START + 70) | ||
20 | 21 | ||
21 | /* | 22 | /* |
22 | * PXA GPIOs | 23 | * PXA GPIOs |
diff --git a/arch/arm/mach-pxa/include/mach/irqs.h b/arch/arm/mach-pxa/include/mach/irqs.h index ffc8314520f2..d372caa75dc7 100644 --- a/arch/arm/mach-pxa/include/mach/irqs.h +++ b/arch/arm/mach-pxa/include/mach/irqs.h | |||
@@ -117,48 +117,12 @@ | |||
117 | /* | 117 | /* |
118 | * The following interrupts are for board specific purposes. Since | 118 | * The following interrupts are for board specific purposes. Since |
119 | * the kernel can only run on one machine at a time, we can re-use | 119 | * the kernel can only run on one machine at a time, we can re-use |
120 | * these. There will be 16 IRQs by default. If it is not enough, | 120 | * these. |
121 | * IRQ_BOARD_END is allowed be customized for each board, but keep | 121 | * By default, no board IRQ is reserved. It should be finished in |
122 | * the numbers within sensible limits and in descending order, so | 122 | * custom board since sparse IRQ is already enabled. |
123 | * when multiple config options are selected, the maximum will be | ||
124 | * used. | ||
125 | */ | 123 | */ |
126 | #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM) | 124 | #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM) |
127 | 125 | ||
128 | #if defined(CONFIG_MACH_H4700) | ||
129 | #define IRQ_BOARD_END (IRQ_BOARD_START + 70) | ||
130 | #elif defined(CONFIG_MACH_ZYLONITE) | ||
131 | #define IRQ_BOARD_END (IRQ_BOARD_START + 32) | ||
132 | #elif defined(CONFIG_PXA_EZX) | ||
133 | #define IRQ_BOARD_END (IRQ_BOARD_START + 23) | ||
134 | #else | ||
135 | #define IRQ_BOARD_END (IRQ_BOARD_START + 16) | ||
136 | #endif | ||
137 | |||
138 | /* | ||
139 | * Figure out the MAX IRQ number. | ||
140 | * | ||
141 | * If we have an SA1111, the max IRQ is S1_BVD1_STSCHG+1. | ||
142 | * If we have an LoCoMo, the max IRQ is IRQ_LOCOMO_SPI_TEND+1 | ||
143 | * Otherwise, we have the standard IRQs only. | ||
144 | */ | ||
145 | #ifdef CONFIG_SA1111 | ||
146 | #define NR_IRQS (IRQ_BOARD_END + 55) | ||
147 | #elif defined(CONFIG_PXA_HAVE_BOARD_IRQS) | ||
148 | #define NR_IRQS (IRQ_BOARD_END) | ||
149 | #else | ||
150 | #define NR_IRQS (IRQ_BOARD_START) | 126 | #define NR_IRQS (IRQ_BOARD_START) |
151 | #endif | ||
152 | |||
153 | /* add IT8152 IRQs beyond BOARD_END */ | ||
154 | #ifdef CONFIG_PCI_HOST_ITE8152 | ||
155 | #define IT8152_LAST_IRQ (IRQ_BOARD_END + 40) | ||
156 | |||
157 | #if NR_IRQS < (IT8152_LAST_IRQ+1) | ||
158 | #undef NR_IRQS | ||
159 | #define NR_IRQS (IT8152_LAST_IRQ+1) | ||
160 | #endif | ||
161 | |||
162 | #endif /* CONFIG_PCI_HOST_ITE8152 */ | ||
163 | 127 | ||
164 | #endif /* __ASM_MACH_IRQS_H */ | 128 | #endif /* __ASM_MACH_IRQS_H */ |
diff --git a/arch/arm/mach-pxa/include/mach/littleton.h b/arch/arm/mach-pxa/include/mach/littleton.h index 6c9b21c51322..2a5726c15e0e 100644 --- a/arch/arm/mach-pxa/include/mach/littleton.h +++ b/arch/arm/mach-pxa/include/mach/littleton.h | |||
@@ -10,4 +10,6 @@ | |||
10 | #define EXT0_GPIO_BASE (NR_BUILTIN_GPIO) | 10 | #define EXT0_GPIO_BASE (NR_BUILTIN_GPIO) |
11 | #define EXT0_GPIO(x) (EXT0_GPIO_BASE + (x)) | 11 | #define EXT0_GPIO(x) (EXT0_GPIO_BASE + (x)) |
12 | 12 | ||
13 | #define LITTLETON_NR_IRQS (IRQ_BOARD_START + 8) | ||
14 | |||
13 | #endif /* __ASM_ARCH_LITTLETON_H */ | 15 | #endif /* __ASM_ARCH_LITTLETON_H */ |
diff --git a/arch/arm/mach-pxa/include/mach/lpd270.h b/arch/arm/mach-pxa/include/mach/lpd270.h index 0e6440c81683..cd070092b6eb 100644 --- a/arch/arm/mach-pxa/include/mach/lpd270.h +++ b/arch/arm/mach-pxa/include/mach/lpd270.h | |||
@@ -38,5 +38,6 @@ | |||
38 | #define LPD270_USBC_IRQ LPD270_IRQ(2) | 38 | #define LPD270_USBC_IRQ LPD270_IRQ(2) |
39 | #define LPD270_ETHERNET_IRQ LPD270_IRQ(3) | 39 | #define LPD270_ETHERNET_IRQ LPD270_IRQ(3) |
40 | #define LPD270_AC97_IRQ LPD270_IRQ(4) | 40 | #define LPD270_AC97_IRQ LPD270_IRQ(4) |
41 | #define LPD270_NR_IRQS (IRQ_BOARD_START + 5) | ||
41 | 42 | ||
42 | #endif | 43 | #endif |
diff --git a/arch/arm/mach-pxa/include/mach/lubbock.h b/arch/arm/mach-pxa/include/mach/lubbock.h index a0d4247f08fc..2a086e8373eb 100644 --- a/arch/arm/mach-pxa/include/mach/lubbock.h +++ b/arch/arm/mach-pxa/include/mach/lubbock.h | |||
@@ -45,6 +45,9 @@ | |||
45 | #define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */ | 45 | #define LUBBOCK_USB_DISC_IRQ LUBBOCK_IRQ(6) /* usb disconnect */ |
46 | #define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6) | 46 | #define LUBBOCK_LAST_IRQ LUBBOCK_IRQ(6) |
47 | 47 | ||
48 | #define LUBBOCK_SA1111_IRQ_BASE (IRQ_BOARD_START + 16) | ||
49 | #define LUBBOCK_NR_IRQS (IRQ_BOARD_START + 16 + 55) | ||
50 | |||
48 | #ifndef __ASSEMBLY__ | 51 | #ifndef __ASSEMBLY__ |
49 | extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set); | 52 | extern void lubbock_set_misc_wr(unsigned int mask, unsigned int set); |
50 | #endif | 53 | #endif |
diff --git a/arch/arm/mach-pxa/include/mach/magician.h b/arch/arm/mach-pxa/include/mach/magician.h index 20ef37d4a9a7..0a2efcf7947c 100644 --- a/arch/arm/mach-pxa/include/mach/magician.h +++ b/arch/arm/mach-pxa/include/mach/magician.h | |||
@@ -71,6 +71,8 @@ | |||
71 | #define IRQ_MAGICIAN_BT (IRQ_BOARD_START + 2) | 71 | #define IRQ_MAGICIAN_BT (IRQ_BOARD_START + 2) |
72 | #define IRQ_MAGICIAN_VBUS (IRQ_BOARD_START + 3) | 72 | #define IRQ_MAGICIAN_VBUS (IRQ_BOARD_START + 3) |
73 | 73 | ||
74 | #define MAGICIAN_NR_IRQS (IRQ_BOARD_START + 8) | ||
75 | |||
74 | /* | 76 | /* |
75 | * CPLD EGPIOs | 77 | * CPLD EGPIOs |
76 | */ | 78 | */ |
diff --git a/arch/arm/mach-pxa/include/mach/mainstone.h b/arch/arm/mach-pxa/include/mach/mainstone.h index 86e623abd64d..4c2d11cd824d 100644 --- a/arch/arm/mach-pxa/include/mach/mainstone.h +++ b/arch/arm/mach-pxa/include/mach/mainstone.h | |||
@@ -134,4 +134,6 @@ | |||
134 | #define MAINSTONE_S1_STSCHG_IRQ MAINSTONE_IRQ(14) | 134 | #define MAINSTONE_S1_STSCHG_IRQ MAINSTONE_IRQ(14) |
135 | #define MAINSTONE_S1_IRQ MAINSTONE_IRQ(15) | 135 | #define MAINSTONE_S1_IRQ MAINSTONE_IRQ(15) |
136 | 136 | ||
137 | #define MAINSTONE_NR_IRQS (IRQ_BOARD_START + 16) | ||
138 | |||
137 | #endif | 139 | #endif |
diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa930.h b/arch/arm/mach-pxa/include/mach/mfp-pxa930.h index 0d119d3b9221..04f7c97044f3 100644 --- a/arch/arm/mach-pxa/include/mach/mfp-pxa930.h +++ b/arch/arm/mach-pxa/include/mach/mfp-pxa930.h | |||
@@ -69,6 +69,7 @@ | |||
69 | #define nBE0_GPIO_60 MFP_CFG(nBE0, AF0) | 69 | #define nBE0_GPIO_60 MFP_CFG(nBE0, AF0) |
70 | #define nBE1_GPIO_61 MFP_CFG(nBE1, AF0) | 70 | #define nBE1_GPIO_61 MFP_CFG(nBE1, AF0) |
71 | #define RDY_GPIO_62 MFP_CFG(RDY, AF0) | 71 | #define RDY_GPIO_62 MFP_CFG(RDY, AF0) |
72 | #define PMIC_INT_GPIO83 MFP_CFG_LPM(PMIC_INT, AF0, PULL_HIGH) | ||
72 | 73 | ||
73 | /* Chip Select */ | 74 | /* Chip Select */ |
74 | #define DF_nCS0_nCS2 MFP_CFG_LPM(DF_nCS0, AF3, PULL_HIGH) | 75 | #define DF_nCS0_nCS2 MFP_CFG_LPM(DF_nCS0, AF3, PULL_HIGH) |
@@ -92,6 +93,9 @@ | |||
92 | #define GPIO63_CI2C_SCL MFP_CFG_LPM(GPIO63, AF4, PULL_HIGH) | 93 | #define GPIO63_CI2C_SCL MFP_CFG_LPM(GPIO63, AF4, PULL_HIGH) |
93 | #define GPIO64_CI2C_SDA MFP_CFG_LPM(GPIO64, AF4, PULL_HIGH) | 94 | #define GPIO64_CI2C_SDA MFP_CFG_LPM(GPIO64, AF4, PULL_HIGH) |
94 | 95 | ||
96 | #define GPIO73_CI2C_SCL MFP_CFG_LPM(GPIO73, AF1, PULL_HIGH) | ||
97 | #define GPIO74_CI2C_SDA MFP_CFG_LPM(GPIO74, AF1, PULL_HIGH) | ||
98 | |||
95 | #define GPIO77_CI2C_SCL MFP_CFG_LPM(GPIO77, AF2, PULL_HIGH) | 99 | #define GPIO77_CI2C_SCL MFP_CFG_LPM(GPIO77, AF2, PULL_HIGH) |
96 | #define GPIO78_CI2C_SDA MFP_CFG_LPM(GPIO78, AF2, PULL_HIGH) | 100 | #define GPIO78_CI2C_SDA MFP_CFG_LPM(GPIO78, AF2, PULL_HIGH) |
97 | 101 | ||
@@ -345,6 +349,9 @@ | |||
345 | #define GPIO69_UART1_CTS MFP_CFG(GPIO69, AF2) | 349 | #define GPIO69_UART1_CTS MFP_CFG(GPIO69, AF2) |
346 | #define GPIO70_UART1_RTS MFP_CFG(GPIO70, AF2) | 350 | #define GPIO70_UART1_RTS MFP_CFG(GPIO70, AF2) |
347 | 351 | ||
352 | #define GPIO53_UART1_TXD MFP_CFG(GPIO53, AF2) | ||
353 | #define GPIO54_UART1_RXD MFP_CFG(GPIO54, AF2) | ||
354 | |||
348 | /* UART2 - BTUART */ | 355 | /* UART2 - BTUART */ |
349 | #define GPIO91_UART2_RXD MFP_CFG(GPIO91, AF1) | 356 | #define GPIO91_UART2_RXD MFP_CFG(GPIO91, AF1) |
350 | #define GPIO92_UART2_TXD MFP_CFG(GPIO92, AF1) | 357 | #define GPIO92_UART2_TXD MFP_CFG(GPIO92, AF1) |
diff --git a/arch/arm/mach-pxa/include/mach/pcm027.h b/arch/arm/mach-pxa/include/mach/pcm027.h index 04083263167e..4bac588478a8 100644 --- a/arch/arm/mach-pxa/include/mach/pcm027.h +++ b/arch/arm/mach-pxa/include/mach/pcm027.h | |||
@@ -30,6 +30,8 @@ | |||
30 | #define PCM027_MMCDET_IRQ PCM027_IRQ(2) | 30 | #define PCM027_MMCDET_IRQ PCM027_IRQ(2) |
31 | #define PCM027_PM_5V_IRQ PCM027_IRQ(3) | 31 | #define PCM027_PM_5V_IRQ PCM027_IRQ(3) |
32 | 32 | ||
33 | #define PCM027_NR_IRQS (IRQ_BOARD_START + 32) | ||
34 | |||
33 | /* I2C RTC */ | 35 | /* I2C RTC */ |
34 | #define PCM027_RTC_IRQ_GPIO 0 | 36 | #define PCM027_RTC_IRQ_GPIO 0 |
35 | #define PCM027_RTC_IRQ IRQ_GPIO(PCM027_RTC_IRQ_GPIO) | 37 | #define PCM027_RTC_IRQ IRQ_GPIO(PCM027_RTC_IRQ_GPIO) |
diff --git a/arch/arm/mach-pxa/include/mach/poodle.h b/arch/arm/mach-pxa/include/mach/poodle.h index 0b3e6d051c64..83d1cfd00fc9 100644 --- a/arch/arm/mach-pxa/include/mach/poodle.h +++ b/arch/arm/mach-pxa/include/mach/poodle.h | |||
@@ -85,6 +85,8 @@ | |||
85 | #define POODLE_LOCOMO_GPIO_232VCC_ON LOCOMO_GPIO(12) | 85 | #define POODLE_LOCOMO_GPIO_232VCC_ON LOCOMO_GPIO(12) |
86 | #define POODLE_LOCOMO_GPIO_JK_B LOCOMO_GPIO(13) | 86 | #define POODLE_LOCOMO_GPIO_JK_B LOCOMO_GPIO(13) |
87 | 87 | ||
88 | #define POODLE_NR_IRQS (IRQ_BOARD_START + 4) /* 4 for LoCoMo */ | ||
89 | |||
88 | extern struct platform_device poodle_locomo_device; | 90 | extern struct platform_device poodle_locomo_device; |
89 | 91 | ||
90 | #endif /* __ASM_ARCH_POODLE_H */ | 92 | #endif /* __ASM_ARCH_POODLE_H */ |
diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx-u2d.h b/arch/arm/mach-pxa/include/mach/pxa3xx-u2d.h new file mode 100644 index 000000000000..9d82cb65ea56 --- /dev/null +++ b/arch/arm/mach-pxa/include/mach/pxa3xx-u2d.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * PXA3xx U2D header | ||
3 | * | ||
4 | * Copyright (C) 2010 CompuLab Ltd. | ||
5 | * | ||
6 | * Igor Grinberg <grinberg@compulab.co.il> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | #ifndef __PXA310_U2D__ | ||
13 | #define __PXA310_U2D__ | ||
14 | |||
15 | #include <linux/usb/ulpi.h> | ||
16 | |||
17 | struct pxa3xx_u2d_platform_data { | ||
18 | |||
19 | #define ULPI_SER_6PIN (1 << 0) | ||
20 | #define ULPI_SER_3PIN (1 << 1) | ||
21 | unsigned int ulpi_mode; | ||
22 | |||
23 | int (*init)(struct device *); | ||
24 | void (*exit)(struct device *); | ||
25 | }; | ||
26 | |||
27 | |||
28 | /* Start PXA3xx U2D host */ | ||
29 | int pxa3xx_u2d_start_hc(struct usb_bus *host); | ||
30 | /* Stop PXA3xx U2D host */ | ||
31 | void pxa3xx_u2d_stop_hc(struct usb_bus *host); | ||
32 | |||
33 | extern void pxa3xx_set_u2d_info(struct pxa3xx_u2d_platform_data *info); | ||
34 | |||
35 | #endif /* __PXA310_U2D__ */ | ||
diff --git a/arch/arm/mach-pxa/include/mach/tosa.h b/arch/arm/mach-pxa/include/mach/tosa.h index 1bbd1f2e4beb..1272c4b56ceb 100644 --- a/arch/arm/mach-pxa/include/mach/tosa.h +++ b/arch/arm/mach-pxa/include/mach/tosa.h | |||
@@ -20,6 +20,7 @@ | |||
20 | /* Jacket Scoop */ | 20 | /* Jacket Scoop */ |
21 | #define TOSA_SCOOP_PHYS (PXA_CS5_PHYS + 0x00800000) | 21 | #define TOSA_SCOOP_PHYS (PXA_CS5_PHYS + 0x00800000) |
22 | 22 | ||
23 | #define TOSA_NR_IRQS (IRQ_BOARD_START + TC6393XB_NR_IRQS) | ||
23 | /* | 24 | /* |
24 | * SCOOP2 internal GPIOs | 25 | * SCOOP2 internal GPIOs |
25 | */ | 26 | */ |
diff --git a/arch/arm/mach-pxa/include/mach/zeus.h b/arch/arm/mach-pxa/include/mach/zeus.h index 6e119976003e..faa408ab7ad7 100644 --- a/arch/arm/mach-pxa/include/mach/zeus.h +++ b/arch/arm/mach-pxa/include/mach/zeus.h | |||
@@ -15,6 +15,8 @@ | |||
15 | #ifndef _MACH_ZEUS_H | 15 | #ifndef _MACH_ZEUS_H |
16 | #define _MACH_ZEUS_H | 16 | #define _MACH_ZEUS_H |
17 | 17 | ||
18 | #define ZEUS_NR_IRQS (IRQ_BOARD_START + 48) | ||
19 | |||
18 | /* Physical addresses */ | 20 | /* Physical addresses */ |
19 | #define ZEUS_FLASH_PHYS PXA_CS0_PHYS | 21 | #define ZEUS_FLASH_PHYS PXA_CS0_PHYS |
20 | #define ZEUS_ETH0_PHYS PXA_CS1_PHYS | 22 | #define ZEUS_ETH0_PHYS PXA_CS1_PHYS |
diff --git a/arch/arm/mach-pxa/include/mach/zylonite.h b/arch/arm/mach-pxa/include/mach/zylonite.h index 9edf645368d6..ea24998b923c 100644 --- a/arch/arm/mach-pxa/include/mach/zylonite.h +++ b/arch/arm/mach-pxa/include/mach/zylonite.h | |||
@@ -5,6 +5,8 @@ | |||
5 | 5 | ||
6 | #define EXT_GPIO(x) (128 + (x)) | 6 | #define EXT_GPIO(x) (128 + (x)) |
7 | 7 | ||
8 | #define ZYLONITE_NR_IRQS (IRQ_BOARD_START + 32) | ||
9 | |||
8 | /* the following variables are processor specific and initialized | 10 | /* the following variables are processor specific and initialized |
9 | * by the corresponding zylonite_pxa3xx_init() | 11 | * by the corresponding zylonite_pxa3xx_init() |
10 | */ | 12 | */ |
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c index 9b9046185b00..eb5850624c1d 100644 --- a/arch/arm/mach-pxa/littleton.c +++ b/arch/arm/mach-pxa/littleton.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include <mach/pxafb.h> | 43 | #include <mach/pxafb.h> |
44 | #include <mach/mmc.h> | 44 | #include <mach/mmc.h> |
45 | #include <mach/pxa2xx_spi.h> | 45 | #include <mach/pxa2xx_spi.h> |
46 | #include <mach/pxa27x_keypad.h> | 46 | #include <plat/pxa27x_keypad.h> |
47 | #include <mach/littleton.h> | 47 | #include <mach/littleton.h> |
48 | #include <plat/i2c.h> | 48 | #include <plat/i2c.h> |
49 | #include <plat/pxa3xx_nand.h> | 49 | #include <plat/pxa3xx_nand.h> |
@@ -441,6 +441,7 @@ MACHINE_START(LITTLETON, "Marvell Form Factor Development Platform (aka Littleto | |||
441 | .boot_params = 0xa0000100, | 441 | .boot_params = 0xa0000100, |
442 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 442 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
443 | .map_io = pxa_map_io, | 443 | .map_io = pxa_map_io, |
444 | .nr_irqs = LITTLETON_NR_IRQS, | ||
444 | .init_irq = pxa3xx_init_irq, | 445 | .init_irq = pxa3xx_init_irq, |
445 | .timer = &pxa_timer, | 446 | .timer = &pxa_timer, |
446 | .init_machine = littleton_init, | 447 | .init_machine = littleton_init, |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index d279507fc748..fc9502ef4024 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
@@ -509,6 +509,7 @@ MACHINE_START(LOGICPD_PXA270, "LogicPD PXA270 Card Engine") | |||
509 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 509 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
510 | .boot_params = 0xa0000100, | 510 | .boot_params = 0xa0000100, |
511 | .map_io = lpd270_map_io, | 511 | .map_io = lpd270_map_io, |
512 | .nr_irqs = LPD270_NR_IRQS, | ||
512 | .init_irq = lpd270_init_irq, | 513 | .init_irq = lpd270_init_irq, |
513 | .timer = &pxa_timer, | 514 | .timer = &pxa_timer, |
514 | .init_machine = lpd270_init, | 515 | .init_machine = lpd270_init, |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 330c3282856e..1956c23093d1 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -229,7 +229,7 @@ static struct resource sa1111_resources[] = { | |||
229 | }; | 229 | }; |
230 | 230 | ||
231 | static struct sa1111_platform_data sa1111_info = { | 231 | static struct sa1111_platform_data sa1111_info = { |
232 | .irq_base = IRQ_BOARD_END, | 232 | .irq_base = LUBBOCK_SA1111_IRQ_BASE, |
233 | }; | 233 | }; |
234 | 234 | ||
235 | static struct platform_device sa1111_device = { | 235 | static struct platform_device sa1111_device = { |
@@ -560,6 +560,7 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform (aka Lubbock)") | |||
560 | .phys_io = 0x40000000, | 560 | .phys_io = 0x40000000, |
561 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 561 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
562 | .map_io = lubbock_map_io, | 562 | .map_io = lubbock_map_io, |
563 | .nr_irqs = LUBBOCK_NR_IRQS, | ||
563 | .init_irq = lubbock_init_irq, | 564 | .init_irq = lubbock_init_irq, |
564 | .timer = &pxa_timer, | 565 | .timer = &pxa_timer, |
565 | .init_machine = lubbock_init, | 566 | .init_machine = lubbock_init, |
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index e81dd0c8e40d..42a0c2b41281 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c | |||
@@ -768,6 +768,7 @@ MACHINE_START(MAGICIAN, "HTC Magician") | |||
768 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 768 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
769 | .boot_params = 0xa0000100, | 769 | .boot_params = 0xa0000100, |
770 | .map_io = pxa_map_io, | 770 | .map_io = pxa_map_io, |
771 | .nr_irqs = MAGICIAN_NR_IRQS, | ||
771 | .init_irq = pxa27x_init_irq, | 772 | .init_irq = pxa27x_init_irq, |
772 | .init_machine = magician_init, | 773 | .init_machine = magician_init, |
773 | .timer = &pxa_timer, | 774 | .timer = &pxa_timer, |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 5543c64da9ef..8b710024601c 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -50,7 +50,7 @@ | |||
50 | #include <mach/mmc.h> | 50 | #include <mach/mmc.h> |
51 | #include <mach/irda.h> | 51 | #include <mach/irda.h> |
52 | #include <mach/ohci.h> | 52 | #include <mach/ohci.h> |
53 | #include <mach/pxa27x_keypad.h> | 53 | #include <plat/pxa27x_keypad.h> |
54 | 54 | ||
55 | #include "generic.h" | 55 | #include "generic.h" |
56 | #include "devices.h" | 56 | #include "devices.h" |
@@ -628,6 +628,7 @@ MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)") | |||
628 | .boot_params = 0xa0000100, /* BLOB boot parameter setting */ | 628 | .boot_params = 0xa0000100, /* BLOB boot parameter setting */ |
629 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 629 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
630 | .map_io = mainstone_map_io, | 630 | .map_io = mainstone_map_io, |
631 | .nr_irqs = MAINSTONE_NR_IRQS, | ||
631 | .init_irq = mainstone_init_irq, | 632 | .init_irq = mainstone_init_irq, |
632 | .timer = &pxa_timer, | 633 | .timer = &pxa_timer, |
633 | .init_machine = mainstone_init, | 634 | .init_machine = mainstone_init, |
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c index dc66942ef9ab..ffb3f5a8a086 100644 --- a/arch/arm/mach-pxa/mioa701.c +++ b/arch/arm/mach-pxa/mioa701.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | #include <mach/pxa27x.h> | 46 | #include <mach/pxa27x.h> |
47 | #include <mach/regs-rtc.h> | 47 | #include <mach/regs-rtc.h> |
48 | #include <mach/pxa27x_keypad.h> | 48 | #include <plat/pxa27x_keypad.h> |
49 | #include <mach/pxafb.h> | 49 | #include <mach/pxafb.h> |
50 | #include <mach/mmc.h> | 50 | #include <mach/mmc.h> |
51 | #include <mach/udc.h> | 51 | #include <mach/udc.h> |
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c index 91038eeafe44..3ff0c4a1ca4c 100644 --- a/arch/arm/mach-pxa/palmld.c +++ b/arch/arm/mach-pxa/palmld.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <mach/mmc.h> | 39 | #include <mach/mmc.h> |
40 | #include <mach/pxafb.h> | 40 | #include <mach/pxafb.h> |
41 | #include <mach/irda.h> | 41 | #include <mach/irda.h> |
42 | #include <mach/pxa27x_keypad.h> | 42 | #include <plat/pxa27x_keypad.h> |
43 | #include <mach/palmasoc.h> | 43 | #include <mach/palmasoc.h> |
44 | #include <mach/palm27x.h> | 44 | #include <mach/palm27x.h> |
45 | 45 | ||
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c index 1c281995f658..5b9f766d1468 100644 --- a/arch/arm/mach-pxa/palmt5.c +++ b/arch/arm/mach-pxa/palmt5.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <mach/mmc.h> | 39 | #include <mach/mmc.h> |
40 | #include <mach/pxafb.h> | 40 | #include <mach/pxafb.h> |
41 | #include <mach/irda.h> | 41 | #include <mach/irda.h> |
42 | #include <mach/pxa27x_keypad.h> | 42 | #include <plat/pxa27x_keypad.h> |
43 | #include <mach/udc.h> | 43 | #include <mach/udc.h> |
44 | #include <mach/palmasoc.h> | 44 | #include <mach/palmasoc.h> |
45 | #include <mach/palm27x.h> | 45 | #include <mach/palm27x.h> |
diff --git a/arch/arm/mach-pxa/palmtreo.c b/arch/arm/mach-pxa/palmtreo.c index 52defd5e42e5..f685a600a181 100644 --- a/arch/arm/mach-pxa/palmtreo.c +++ b/arch/arm/mach-pxa/palmtreo.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <mach/mmc.h> | 39 | #include <mach/mmc.h> |
40 | #include <mach/pxafb.h> | 40 | #include <mach/pxafb.h> |
41 | #include <mach/irda.h> | 41 | #include <mach/irda.h> |
42 | #include <mach/pxa27x_keypad.h> | 42 | #include <plat/pxa27x_keypad.h> |
43 | #include <mach/udc.h> | 43 | #include <mach/udc.h> |
44 | #include <mach/ohci.h> | 44 | #include <mach/ohci.h> |
45 | #include <mach/pxa2xx-regs.h> | 45 | #include <mach/pxa2xx-regs.h> |
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c index 144dc2b6911f..89a37922b9d3 100644 --- a/arch/arm/mach-pxa/palmtx.c +++ b/arch/arm/mach-pxa/palmtx.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include <mach/mmc.h> | 43 | #include <mach/mmc.h> |
44 | #include <mach/pxafb.h> | 44 | #include <mach/pxafb.h> |
45 | #include <mach/irda.h> | 45 | #include <mach/irda.h> |
46 | #include <mach/pxa27x_keypad.h> | 46 | #include <plat/pxa27x_keypad.h> |
47 | #include <mach/udc.h> | 47 | #include <mach/udc.h> |
48 | #include <mach/palmasoc.h> | 48 | #include <mach/palmasoc.h> |
49 | #include <mach/palm27x.h> | 49 | #include <mach/palm27x.h> |
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c index 87e4b1044e0b..38f4425bfc95 100644 --- a/arch/arm/mach-pxa/palmz72.c +++ b/arch/arm/mach-pxa/palmz72.c | |||
@@ -41,7 +41,7 @@ | |||
41 | #include <mach/mmc.h> | 41 | #include <mach/mmc.h> |
42 | #include <mach/pxafb.h> | 42 | #include <mach/pxafb.h> |
43 | #include <mach/irda.h> | 43 | #include <mach/irda.h> |
44 | #include <mach/pxa27x_keypad.h> | 44 | #include <plat/pxa27x_keypad.h> |
45 | #include <mach/udc.h> | 45 | #include <mach/udc.h> |
46 | #include <mach/palmasoc.h> | 46 | #include <mach/palmasoc.h> |
47 | #include <mach/palm27x.h> | 47 | #include <mach/palm27x.h> |
diff --git a/arch/arm/mach-pxa/pcm027.c b/arch/arm/mach-pxa/pcm027.c index 2190af066470..90b08ba8ad1a 100644 --- a/arch/arm/mach-pxa/pcm027.c +++ b/arch/arm/mach-pxa/pcm027.c | |||
@@ -262,6 +262,7 @@ MACHINE_START(PCM027, "Phytec Messtechnik GmbH phyCORE-PXA270") | |||
262 | .phys_io = 0x40000000, | 262 | .phys_io = 0x40000000, |
263 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 263 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
264 | .map_io = pcm027_map_io, | 264 | .map_io = pcm027_map_io, |
265 | .nr_irqs = PCM027_NR_IRQS, | ||
265 | .init_irq = pxa27x_init_irq, | 266 | .init_irq = pxa27x_init_irq, |
266 | .timer = &pxa_timer, | 267 | .timer = &pxa_timer, |
267 | .init_machine = pcm027_init, | 268 | .init_machine = pcm027_init, |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 55e8fcde0141..c04e025cd790 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -469,6 +469,7 @@ MACHINE_START(POODLE, "SHARP Poodle") | |||
469 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 469 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
470 | .fixup = fixup_poodle, | 470 | .fixup = fixup_poodle, |
471 | .map_io = pxa_map_io, | 471 | .map_io = pxa_map_io, |
472 | .nr_irqs = POODLE_NR_IRQS, /* 4 for LoCoMo */ | ||
472 | .init_irq = pxa25x_init_irq, | 473 | .init_irq = pxa25x_init_irq, |
473 | .timer = &pxa_timer, | 474 | .timer = &pxa_timer, |
474 | .init_machine = poodle_init, | 475 | .init_machine = poodle_init, |
diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c new file mode 100644 index 000000000000..ce7168b233e2 --- /dev/null +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c | |||
@@ -0,0 +1,400 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-pxa/pxa3xx-ulpi.c | ||
3 | * | ||
4 | * code specific to pxa3xx aka Monahans | ||
5 | * | ||
6 | * Copyright (C) 2010 CompuLab Ltd. | ||
7 | * | ||
8 | * 2010-13-07: Igor Grinberg <grinberg@compulab.co.il> | ||
9 | * initial version: pxa310 USB Host mode support | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify | ||
12 | * it under the terms of the GNU General Public License version 2 as | ||
13 | * published by the Free Software Foundation. | ||
14 | */ | ||
15 | |||
16 | #include <linux/module.h> | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/slab.h> | ||
19 | #include <linux/device.h> | ||
20 | #include <linux/platform_device.h> | ||
21 | #include <linux/err.h> | ||
22 | #include <linux/io.h> | ||
23 | #include <linux/delay.h> | ||
24 | #include <linux/clk.h> | ||
25 | #include <linux/usb.h> | ||
26 | #include <linux/usb/otg.h> | ||
27 | |||
28 | #include <mach/hardware.h> | ||
29 | #include <mach/regs-u2d.h> | ||
30 | #include <mach/pxa3xx-u2d.h> | ||
31 | |||
32 | struct pxa3xx_u2d_ulpi { | ||
33 | struct clk *clk; | ||
34 | void __iomem *mmio_base; | ||
35 | |||
36 | struct otg_transceiver *otg; | ||
37 | unsigned int ulpi_mode; | ||
38 | }; | ||
39 | |||
40 | static struct pxa3xx_u2d_ulpi *u2d; | ||
41 | |||
42 | static inline u32 u2d_readl(u32 reg) | ||
43 | { | ||
44 | return __raw_readl(u2d->mmio_base + reg); | ||
45 | } | ||
46 | |||
47 | static inline void u2d_writel(u32 reg, u32 val) | ||
48 | { | ||
49 | __raw_writel(val, u2d->mmio_base + reg); | ||
50 | } | ||
51 | |||
52 | #if defined(CONFIG_PXA310_ULPI) | ||
53 | enum u2d_ulpi_phy_mode { | ||
54 | SYNCH = 0, | ||
55 | CARKIT = (1 << 0), | ||
56 | SER_3PIN = (1 << 1), | ||
57 | SER_6PIN = (1 << 2), | ||
58 | LOWPOWER = (1 << 3), | ||
59 | }; | ||
60 | |||
61 | static inline enum u2d_ulpi_phy_mode pxa310_ulpi_get_phymode(void) | ||
62 | { | ||
63 | return (u2d_readl(U2DOTGUSR) >> 28) & 0xF; | ||
64 | } | ||
65 | |||
66 | static int pxa310_ulpi_poll(void) | ||
67 | { | ||
68 | int timeout = 50000; | ||
69 | |||
70 | while (timeout--) { | ||
71 | if (!(u2d_readl(U2DOTGUCR) & U2DOTGUCR_RUN)) | ||
72 | return 0; | ||
73 | |||
74 | cpu_relax(); | ||
75 | } | ||
76 | |||
77 | pr_warning("%s: ULPI access timed out!\n", __func__); | ||
78 | |||
79 | return -ETIMEDOUT; | ||
80 | } | ||
81 | |||
82 | static int pxa310_ulpi_read(struct otg_transceiver *otg, u32 reg) | ||
83 | { | ||
84 | int err; | ||
85 | |||
86 | if (pxa310_ulpi_get_phymode() != SYNCH) { | ||
87 | pr_warning("%s: PHY is not in SYNCH mode!\n", __func__); | ||
88 | return -EBUSY; | ||
89 | } | ||
90 | |||
91 | u2d_writel(U2DOTGUCR, U2DOTGUCR_RUN | U2DOTGUCR_RNW | (reg << 16)); | ||
92 | msleep(5); | ||
93 | |||
94 | err = pxa310_ulpi_poll(); | ||
95 | if (err) | ||
96 | return err; | ||
97 | |||
98 | return u2d_readl(U2DOTGUCR) & U2DOTGUCR_RDATA; | ||
99 | } | ||
100 | |||
101 | static int pxa310_ulpi_write(struct otg_transceiver *otg, u32 val, u32 reg) | ||
102 | { | ||
103 | if (pxa310_ulpi_get_phymode() != SYNCH) { | ||
104 | pr_warning("%s: PHY is not in SYNCH mode!\n", __func__); | ||
105 | return -EBUSY; | ||
106 | } | ||
107 | |||
108 | u2d_writel(U2DOTGUCR, U2DOTGUCR_RUN | (reg << 16) | (val << 8)); | ||
109 | msleep(5); | ||
110 | |||
111 | return pxa310_ulpi_poll(); | ||
112 | } | ||
113 | |||
114 | struct otg_io_access_ops pxa310_ulpi_access_ops = { | ||
115 | .read = pxa310_ulpi_read, | ||
116 | .write = pxa310_ulpi_write, | ||
117 | }; | ||
118 | |||
119 | static void pxa310_otg_transceiver_rtsm(void) | ||
120 | { | ||
121 | u32 u2dotgcr; | ||
122 | |||
123 | /* put PHY to sync mode */ | ||
124 | u2dotgcr = u2d_readl(U2DOTGCR); | ||
125 | u2dotgcr |= U2DOTGCR_RTSM | U2DOTGCR_UTMID; | ||
126 | u2d_writel(U2DOTGCR, u2dotgcr); | ||
127 | msleep(10); | ||
128 | |||
129 | /* setup OTG sync mode */ | ||
130 | u2dotgcr = u2d_readl(U2DOTGCR); | ||
131 | u2dotgcr |= U2DOTGCR_ULAF; | ||
132 | u2dotgcr &= ~(U2DOTGCR_SMAF | U2DOTGCR_CKAF); | ||
133 | u2d_writel(U2DOTGCR, u2dotgcr); | ||
134 | } | ||
135 | |||
136 | static int pxa310_start_otg_host_transcvr(struct usb_bus *host) | ||
137 | { | ||
138 | int err; | ||
139 | |||
140 | pxa310_otg_transceiver_rtsm(); | ||
141 | |||
142 | err = otg_init(u2d->otg); | ||
143 | if (err) { | ||
144 | pr_err("OTG transceiver init failed"); | ||
145 | return err; | ||
146 | } | ||
147 | |||
148 | err = otg_set_vbus(u2d->otg, 1); | ||
149 | if (err) { | ||
150 | pr_err("OTG transceiver VBUS set failed"); | ||
151 | return err; | ||
152 | } | ||
153 | |||
154 | err = otg_set_host(u2d->otg, host); | ||
155 | if (err) | ||
156 | pr_err("OTG transceiver Host mode set failed"); | ||
157 | |||
158 | return err; | ||
159 | } | ||
160 | |||
161 | static int pxa310_start_otg_hc(struct usb_bus *host) | ||
162 | { | ||
163 | u32 u2dotgcr; | ||
164 | int err; | ||
165 | |||
166 | /* disable USB device controller */ | ||
167 | u2d_writel(U2DCR, u2d_readl(U2DCR) & ~U2DCR_UDE); | ||
168 | u2d_writel(U2DOTGCR, u2d_readl(U2DOTGCR) | U2DOTGCR_UTMID); | ||
169 | u2d_writel(U2DOTGICR, u2d_readl(U2DOTGICR) & ~0x37F7F); | ||
170 | |||
171 | err = pxa310_start_otg_host_transcvr(host); | ||
172 | if (err) | ||
173 | return err; | ||
174 | |||
175 | /* set xceiver mode */ | ||
176 | if (u2d->ulpi_mode & ULPI_IC_6PIN_SERIAL) | ||
177 | u2d_writel(U2DP3CR, u2d_readl(U2DP3CR) & ~U2DP3CR_P2SS); | ||
178 | else if (u2d->ulpi_mode & ULPI_IC_3PIN_SERIAL) | ||
179 | u2d_writel(U2DP3CR, u2d_readl(U2DP3CR) | U2DP3CR_P2SS); | ||
180 | |||
181 | /* start OTG host controller */ | ||
182 | u2dotgcr = u2d_readl(U2DOTGCR) | U2DOTGCR_SMAF; | ||
183 | u2d_writel(U2DOTGCR, u2dotgcr & ~(U2DOTGCR_ULAF | U2DOTGCR_CKAF)); | ||
184 | |||
185 | return 0; | ||
186 | } | ||
187 | |||
188 | static void pxa310_stop_otg_hc(void) | ||
189 | { | ||
190 | pxa310_otg_transceiver_rtsm(); | ||
191 | |||
192 | otg_set_host(u2d->otg, NULL); | ||
193 | otg_set_vbus(u2d->otg, 0); | ||
194 | otg_shutdown(u2d->otg); | ||
195 | } | ||
196 | |||
197 | static void pxa310_u2d_setup_otg_hc(void) | ||
198 | { | ||
199 | u32 u2dotgcr; | ||
200 | |||
201 | u2dotgcr = u2d_readl(U2DOTGCR); | ||
202 | u2dotgcr |= U2DOTGCR_ULAF | U2DOTGCR_UTMID; | ||
203 | u2dotgcr &= ~(U2DOTGCR_SMAF | U2DOTGCR_CKAF); | ||
204 | u2d_writel(U2DOTGCR, u2dotgcr); | ||
205 | msleep(5); | ||
206 | u2d_writel(U2DOTGCR, u2dotgcr | U2DOTGCR_ULE); | ||
207 | msleep(5); | ||
208 | u2d_writel(U2DOTGICR, u2d_readl(U2DOTGICR) & ~0x37F7F); | ||
209 | } | ||
210 | |||
211 | static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) | ||
212 | { | ||
213 | unsigned int ulpi_mode = ULPI_OTG_DRVVBUS; | ||
214 | |||
215 | if (pdata) { | ||
216 | if (pdata->ulpi_mode & ULPI_SER_6PIN) | ||
217 | ulpi_mode |= ULPI_IC_6PIN_SERIAL; | ||
218 | else if (pdata->ulpi_mode & ULPI_SER_3PIN) | ||
219 | ulpi_mode |= ULPI_IC_3PIN_SERIAL; | ||
220 | } | ||
221 | |||
222 | u2d->ulpi_mode = ulpi_mode; | ||
223 | |||
224 | u2d->otg = otg_ulpi_create(&pxa310_ulpi_access_ops, ulpi_mode); | ||
225 | if (!u2d->otg) | ||
226 | return -ENOMEM; | ||
227 | |||
228 | u2d->otg->io_priv = u2d->mmio_base; | ||
229 | |||
230 | return 0; | ||
231 | } | ||
232 | |||
233 | static void pxa310_otg_exit(void) | ||
234 | { | ||
235 | kfree(u2d->otg); | ||
236 | } | ||
237 | #else | ||
238 | static inline void pxa310_u2d_setup_otg_hc(void) {} | ||
239 | static inline int pxa310_start_otg_hc(struct usb_bus *host) | ||
240 | { | ||
241 | return 0; | ||
242 | } | ||
243 | static inline void pxa310_stop_otg_hc(void) {} | ||
244 | static inline int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) | ||
245 | { | ||
246 | return 0; | ||
247 | } | ||
248 | static inline void pxa310_otg_exit(void) {} | ||
249 | #endif /* CONFIG_PXA310_ULPI */ | ||
250 | |||
251 | int pxa3xx_u2d_start_hc(struct usb_bus *host) | ||
252 | { | ||
253 | int err = 0; | ||
254 | |||
255 | /* In case the PXA3xx ULPI isn't used, do nothing. */ | ||
256 | if (!u2d) | ||
257 | return 0; | ||
258 | |||
259 | clk_enable(u2d->clk); | ||
260 | |||
261 | if (cpu_is_pxa310()) { | ||
262 | pxa310_u2d_setup_otg_hc(); | ||
263 | err = pxa310_start_otg_hc(host); | ||
264 | } | ||
265 | |||
266 | return err; | ||
267 | } | ||
268 | |||
269 | void pxa3xx_u2d_stop_hc(struct usb_bus *host) | ||
270 | { | ||
271 | /* In case the PXA3xx ULPI isn't used, do nothing. */ | ||
272 | if (!u2d) | ||
273 | return; | ||
274 | |||
275 | if (cpu_is_pxa310()) | ||
276 | pxa310_stop_otg_hc(); | ||
277 | |||
278 | clk_disable(u2d->clk); | ||
279 | } | ||
280 | |||
281 | static int pxa3xx_u2d_probe(struct platform_device *pdev) | ||
282 | { | ||
283 | struct pxa3xx_u2d_platform_data *pdata = pdev->dev.platform_data; | ||
284 | struct resource *r; | ||
285 | int err; | ||
286 | |||
287 | u2d = kzalloc(sizeof(struct pxa3xx_u2d_ulpi), GFP_KERNEL); | ||
288 | if (!u2d) { | ||
289 | dev_err(&pdev->dev, "failed to allocate memory\n"); | ||
290 | return -ENOMEM; | ||
291 | } | ||
292 | |||
293 | u2d->clk = clk_get(&pdev->dev, NULL); | ||
294 | if (IS_ERR(u2d->clk)) { | ||
295 | dev_err(&pdev->dev, "failed to get u2d clock\n"); | ||
296 | err = PTR_ERR(u2d->clk); | ||
297 | goto err_free_mem; | ||
298 | } | ||
299 | |||
300 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
301 | if (!r) { | ||
302 | dev_err(&pdev->dev, "no IO memory resource defined\n"); | ||
303 | err = -ENODEV; | ||
304 | goto err_put_clk; | ||
305 | } | ||
306 | |||
307 | r = request_mem_region(r->start, resource_size(r), pdev->name); | ||
308 | if (!r) { | ||
309 | dev_err(&pdev->dev, "failed to request memory resource\n"); | ||
310 | err = -EBUSY; | ||
311 | goto err_put_clk; | ||
312 | } | ||
313 | |||
314 | u2d->mmio_base = ioremap(r->start, resource_size(r)); | ||
315 | if (!u2d->mmio_base) { | ||
316 | dev_err(&pdev->dev, "ioremap() failed\n"); | ||
317 | err = -ENODEV; | ||
318 | goto err_free_res; | ||
319 | } | ||
320 | |||
321 | if (pdata->init) { | ||
322 | err = pdata->init(&pdev->dev); | ||
323 | if (err) | ||
324 | goto err_free_io; | ||
325 | } | ||
326 | |||
327 | /* Only PXA310 U2D has OTG functionality */ | ||
328 | if (cpu_is_pxa310()) { | ||
329 | err = pxa310_otg_init(pdata); | ||
330 | if (err) | ||
331 | goto err_free_plat; | ||
332 | } | ||
333 | |||
334 | platform_set_drvdata(pdev, &u2d); | ||
335 | |||
336 | return 0; | ||
337 | |||
338 | err_free_plat: | ||
339 | if (pdata->exit) | ||
340 | pdata->exit(&pdev->dev); | ||
341 | err_free_io: | ||
342 | iounmap(u2d->mmio_base); | ||
343 | err_free_res: | ||
344 | release_mem_region(r->start, resource_size(r)); | ||
345 | err_put_clk: | ||
346 | clk_put(u2d->clk); | ||
347 | err_free_mem: | ||
348 | kfree(u2d); | ||
349 | return err; | ||
350 | } | ||
351 | |||
352 | static int pxa3xx_u2d_remove(struct platform_device *pdev) | ||
353 | { | ||
354 | struct pxa3xx_u2d_platform_data *pdata = pdev->dev.platform_data; | ||
355 | struct resource *r; | ||
356 | |||
357 | if (cpu_is_pxa310()) { | ||
358 | pxa310_stop_otg_hc(); | ||
359 | pxa310_otg_exit(); | ||
360 | } | ||
361 | |||
362 | if (pdata->exit) | ||
363 | pdata->exit(&pdev->dev); | ||
364 | |||
365 | platform_set_drvdata(pdev, NULL); | ||
366 | iounmap(u2d->mmio_base); | ||
367 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
368 | release_mem_region(r->start, resource_size(r)); | ||
369 | |||
370 | clk_put(u2d->clk); | ||
371 | |||
372 | kfree(u2d); | ||
373 | |||
374 | return 0; | ||
375 | } | ||
376 | |||
377 | static struct platform_driver pxa3xx_u2d_ulpi_driver = { | ||
378 | .driver = { | ||
379 | .name = "pxa3xx-u2d", | ||
380 | .owner = THIS_MODULE, | ||
381 | }, | ||
382 | .probe = pxa3xx_u2d_probe, | ||
383 | .remove = pxa3xx_u2d_remove, | ||
384 | }; | ||
385 | |||
386 | static int pxa3xx_u2d_ulpi_init(void) | ||
387 | { | ||
388 | return platform_driver_register(&pxa3xx_u2d_ulpi_driver); | ||
389 | } | ||
390 | module_init(pxa3xx_u2d_ulpi_init); | ||
391 | |||
392 | static void __exit pxa3xx_u2d_ulpi_exit(void) | ||
393 | { | ||
394 | platform_driver_unregister(&pxa3xx_u2d_ulpi_driver); | ||
395 | } | ||
396 | module_exit(pxa3xx_u2d_ulpi_exit); | ||
397 | |||
398 | MODULE_DESCRIPTION("PXA3xx U2D ULPI driver"); | ||
399 | MODULE_AUTHOR("Igor Grinberg"); | ||
400 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c index fa0014847c71..c85c3a7abd31 100644 --- a/arch/arm/mach-pxa/pxa3xx.c +++ b/arch/arm/mach-pxa/pxa3xx.c | |||
@@ -98,23 +98,6 @@ unsigned int pxa3xx_get_clk_frequency_khz(int info) | |||
98 | return CLK / 1000; | 98 | return CLK / 1000; |
99 | } | 99 | } |
100 | 100 | ||
101 | /* | ||
102 | * Return the current static memory controller clock frequency | ||
103 | * in units of 10kHz | ||
104 | */ | ||
105 | unsigned int pxa3xx_get_memclk_frequency_10khz(void) | ||
106 | { | ||
107 | unsigned long acsr; | ||
108 | unsigned int smcfs, clk = 0; | ||
109 | |||
110 | acsr = ACSR; | ||
111 | |||
112 | smcfs = (acsr >> 23) & 0x7; | ||
113 | clk = (acsr & ACCR_D0CS) ? RO_CLK : smcfs_mult[smcfs] * BASE_CLK; | ||
114 | |||
115 | return (clk / 10000); | ||
116 | } | ||
117 | |||
118 | void pxa3xx_clear_reset_status(unsigned int mask) | 101 | void pxa3xx_clear_reset_status(unsigned int mask) |
119 | { | 102 | { |
120 | /* RESET_STATUS_* has a 1:1 mapping with ARSR */ | 103 | /* RESET_STATUS_* has a 1:1 mapping with ARSR */ |
@@ -265,7 +248,7 @@ static struct clk_lookup pxa3xx_clkregs[] = { | |||
265 | INIT_CLKREG(&clk_pxa3xx_i2c, "pxa2xx-i2c.0", NULL), | 248 | INIT_CLKREG(&clk_pxa3xx_i2c, "pxa2xx-i2c.0", NULL), |
266 | INIT_CLKREG(&clk_pxa3xx_udc, "pxa27x-udc", NULL), | 249 | INIT_CLKREG(&clk_pxa3xx_udc, "pxa27x-udc", NULL), |
267 | INIT_CLKREG(&clk_pxa3xx_usbh, "pxa27x-ohci", NULL), | 250 | INIT_CLKREG(&clk_pxa3xx_usbh, "pxa27x-ohci", NULL), |
268 | INIT_CLKREG(&clk_pxa3xx_u2d, NULL, "U2DCLK"), | 251 | INIT_CLKREG(&clk_pxa3xx_u2d, "pxa3xx-u2d", NULL), |
269 | INIT_CLKREG(&clk_pxa3xx_keypad, "pxa27x-keypad", NULL), | 252 | INIT_CLKREG(&clk_pxa3xx_keypad, "pxa27x-keypad", NULL), |
270 | INIT_CLKREG(&clk_pxa3xx_ssp1, "pxa27x-ssp.0", NULL), | 253 | INIT_CLKREG(&clk_pxa3xx_ssp1, "pxa27x-ssp.0", NULL), |
271 | INIT_CLKREG(&clk_pxa3xx_ssp2, "pxa27x-ssp.1", NULL), | 254 | INIT_CLKREG(&clk_pxa3xx_ssp2, "pxa27x-ssp.1", NULL), |
diff --git a/arch/arm/mach-pxa/pxa930.c b/arch/arm/mach-pxa/pxa930.c index 064292008288..7d29dd3af79d 100644 --- a/arch/arm/mach-pxa/pxa930.c +++ b/arch/arm/mach-pxa/pxa930.c | |||
@@ -192,7 +192,7 @@ static struct mfp_addr_map pxa935_mfp_addr_map[] __initdata = { | |||
192 | 192 | ||
193 | static int __init pxa930_init(void) | 193 | static int __init pxa930_init(void) |
194 | { | 194 | { |
195 | if (cpu_is_pxa930() || cpu_is_pxa935()) { | 195 | if (cpu_is_pxa930() || cpu_is_pxa935() || cpu_is_pxa950()) { |
196 | mfp_init_base(io_p2v(MFPR_BASE)); | 196 | mfp_init_base(io_p2v(MFPR_BASE)); |
197 | mfp_init_addr(pxa930_mfp_addr_map); | 197 | mfp_init_addr(pxa930_mfp_addr_map); |
198 | } | 198 | } |
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c index a654d1e6b38a..62de07341cc6 100644 --- a/arch/arm/mach-pxa/stargate2.c +++ b/arch/arm/mach-pxa/stargate2.c | |||
@@ -56,6 +56,8 @@ | |||
56 | #include "devices.h" | 56 | #include "devices.h" |
57 | #include "generic.h" | 57 | #include "generic.h" |
58 | 58 | ||
59 | #define STARGATE_NR_IRQS (IRQ_BOARD_START + 8) | ||
60 | |||
59 | /* Bluetooth */ | 61 | /* Bluetooth */ |
60 | #define SG2_BT_RESET 81 | 62 | #define SG2_BT_RESET 81 |
61 | 63 | ||
@@ -1011,6 +1013,7 @@ MACHINE_START(STARGATE2, "Stargate 2") | |||
1011 | .phys_io = 0x40000000, | 1013 | .phys_io = 0x40000000, |
1012 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 1014 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
1013 | .map_io = pxa_map_io, | 1015 | .map_io = pxa_map_io, |
1016 | .nr_irqs = STARGATE_NR_IRQS, | ||
1014 | .init_irq = pxa27x_init_irq, | 1017 | .init_irq = pxa27x_init_irq, |
1015 | .timer = &pxa_timer, | 1018 | .timer = &pxa_timer, |
1016 | .init_machine = stargate2_init, | 1019 | .init_machine = stargate2_init, |
diff --git a/arch/arm/mach-pxa/tavorevb.c b/arch/arm/mach-pxa/tavorevb.c index f02dcb5b4e97..0f440c9d7cbd 100644 --- a/arch/arm/mach-pxa/tavorevb.c +++ b/arch/arm/mach-pxa/tavorevb.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include <mach/pxa930.h> | 26 | #include <mach/pxa930.h> |
27 | #include <mach/pxafb.h> | 27 | #include <mach/pxafb.h> |
28 | #include <mach/pxa27x_keypad.h> | 28 | #include <plat/pxa27x_keypad.h> |
29 | 29 | ||
30 | #include "devices.h" | 30 | #include "devices.h" |
31 | #include "generic.h" | 31 | #include "generic.h" |
diff --git a/arch/arm/mach-pxa/tavorevb3.c b/arch/arm/mach-pxa/tavorevb3.c new file mode 100644 index 000000000000..5eeba64515e4 --- /dev/null +++ b/arch/arm/mach-pxa/tavorevb3.c | |||
@@ -0,0 +1,136 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-pxa/tavorevb3.c | ||
3 | * | ||
4 | * Support for the Marvell EVB3 Development Platform. | ||
5 | * | ||
6 | * Copyright: (C) Copyright 2008-2010 Marvell International Ltd. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * publishhed by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/platform_device.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | #include <linux/i2c.h> | ||
18 | #include <linux/gpio.h> | ||
19 | #include <linux/mfd/88pm860x.h> | ||
20 | |||
21 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | |||
24 | #include <mach/pxa930.h> | ||
25 | |||
26 | #include <plat/i2c.h> | ||
27 | |||
28 | #include "devices.h" | ||
29 | #include "generic.h" | ||
30 | |||
31 | #define TAVOREVB3_NR_IRQS (IRQ_BOARD_START + 24) | ||
32 | |||
33 | static mfp_cfg_t evb3_mfp_cfg[] __initdata = { | ||
34 | /* UART */ | ||
35 | GPIO53_UART1_TXD, | ||
36 | GPIO54_UART1_RXD, | ||
37 | |||
38 | /* PMIC */ | ||
39 | PMIC_INT_GPIO83, | ||
40 | }; | ||
41 | |||
42 | #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) | ||
43 | static struct pm860x_touch_pdata evb3_touch = { | ||
44 | .gpadc_prebias = 1, | ||
45 | .slot_cycle = 1, | ||
46 | .tsi_prebias = 6, | ||
47 | .pen_prebias = 16, | ||
48 | .pen_prechg = 2, | ||
49 | .res_x = 300, | ||
50 | }; | ||
51 | |||
52 | static struct pm860x_backlight_pdata evb3_backlight[] = { | ||
53 | { | ||
54 | .id = PM8606_ID_BACKLIGHT, | ||
55 | .iset = PM8606_WLED_CURRENT(24), | ||
56 | .flags = PM8606_BACKLIGHT1, | ||
57 | }, | ||
58 | {}, | ||
59 | }; | ||
60 | |||
61 | static struct pm860x_led_pdata evb3_led[] = { | ||
62 | { | ||
63 | .id = PM8606_ID_LED, | ||
64 | .iset = PM8606_LED_CURRENT(12), | ||
65 | .flags = PM8606_LED1_RED, | ||
66 | }, { | ||
67 | .id = PM8606_ID_LED, | ||
68 | .iset = PM8606_LED_CURRENT(12), | ||
69 | .flags = PM8606_LED1_GREEN, | ||
70 | }, { | ||
71 | .id = PM8606_ID_LED, | ||
72 | .iset = PM8606_LED_CURRENT(12), | ||
73 | .flags = PM8606_LED1_BLUE, | ||
74 | }, { | ||
75 | .id = PM8606_ID_LED, | ||
76 | .iset = PM8606_LED_CURRENT(12), | ||
77 | .flags = PM8606_LED2_RED, | ||
78 | }, { | ||
79 | .id = PM8606_ID_LED, | ||
80 | .iset = PM8606_LED_CURRENT(12), | ||
81 | .flags = PM8606_LED2_GREEN, | ||
82 | }, { | ||
83 | .id = PM8606_ID_LED, | ||
84 | .iset = PM8606_LED_CURRENT(12), | ||
85 | .flags = PM8606_LED2_BLUE, | ||
86 | }, | ||
87 | }; | ||
88 | |||
89 | static struct pm860x_platform_data evb3_pm8607_info = { | ||
90 | .touch = &evb3_touch, | ||
91 | .backlight = &evb3_backlight[0], | ||
92 | .led = &evb3_led[0], | ||
93 | .companion_addr = 0x10, | ||
94 | .irq_mode = 0, | ||
95 | .irq_base = IRQ_BOARD_START, | ||
96 | |||
97 | .i2c_port = GI2C_PORT, | ||
98 | }; | ||
99 | |||
100 | static struct i2c_board_info evb3_i2c_info[] = { | ||
101 | { | ||
102 | .type = "88PM860x", | ||
103 | .addr = 0x34, | ||
104 | .platform_data = &evb3_pm8607_info, | ||
105 | .irq = gpio_to_irq(mfp_to_gpio(MFP_PIN_GPIO83)), | ||
106 | }, | ||
107 | }; | ||
108 | |||
109 | static void __init evb3_init_i2c(void) | ||
110 | { | ||
111 | pxa_set_i2c_info(NULL); | ||
112 | i2c_register_board_info(0, ARRAY_AND_SIZE(evb3_i2c_info)); | ||
113 | } | ||
114 | #else | ||
115 | static inline void evb3_init_i2c(void) {} | ||
116 | #endif | ||
117 | |||
118 | static void __init evb3_init(void) | ||
119 | { | ||
120 | /* initialize MFP configurations */ | ||
121 | pxa3xx_mfp_config(ARRAY_AND_SIZE(evb3_mfp_cfg)); | ||
122 | |||
123 | pxa_set_ffuart_info(NULL); | ||
124 | |||
125 | evb3_init_i2c(); | ||
126 | } | ||
127 | |||
128 | MACHINE_START(TAVOREVB3, "PXA950 Evaluation Board (aka TavorEVB3)") | ||
129 | .phys_io = 0x40000000, | ||
130 | .boot_params = 0xa0000100, | ||
131 | .map_io = pxa_map_io, | ||
132 | .nr_irqs = TAVOREVB3_NR_IRQS, | ||
133 | .init_irq = pxa3xx_init_irq, | ||
134 | .timer = &pxa_timer, | ||
135 | .init_machine = evb3_init, | ||
136 | MACHINE_END | ||
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 83cc3a18c2e9..3a06e98b4920 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -956,6 +956,7 @@ MACHINE_START(TOSA, "SHARP Tosa") | |||
956 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 956 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
957 | .fixup = fixup_tosa, | 957 | .fixup = fixup_tosa, |
958 | .map_io = pxa_map_io, | 958 | .map_io = pxa_map_io, |
959 | .nr_irqs = TOSA_NR_IRQS, | ||
959 | .init_irq = pxa25x_init_irq, | 960 | .init_irq = pxa25x_init_irq, |
960 | .init_machine = tosa_init, | 961 | .init_machine = tosa_init, |
961 | .timer = &pxa_timer, | 962 | .timer = &pxa_timer, |
diff --git a/arch/arm/mach-pxa/z2.c b/arch/arm/mach-pxa/z2.c index f0d02288b4ca..8c44bc4381ba 100644 --- a/arch/arm/mach-pxa/z2.c +++ b/arch/arm/mach-pxa/z2.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <mach/z2.h> | 37 | #include <mach/z2.h> |
38 | #include <mach/pxafb.h> | 38 | #include <mach/pxafb.h> |
39 | #include <mach/mmc.h> | 39 | #include <mach/mmc.h> |
40 | #include <mach/pxa27x_keypad.h> | 40 | #include <plat/pxa27x_keypad.h> |
41 | #include <mach/pxa2xx_spi.h> | 41 | #include <mach/pxa2xx_spi.h> |
42 | 42 | ||
43 | #include <plat/i2c.h> | 43 | #include <plat/i2c.h> |
diff --git a/arch/arm/mach-pxa/zeus.c b/arch/arm/mach-pxa/zeus.c index 03b9cb910e08..9da2b624ba20 100644 --- a/arch/arm/mach-pxa/zeus.c +++ b/arch/arm/mach-pxa/zeus.c | |||
@@ -904,6 +904,7 @@ MACHINE_START(ARCOM_ZEUS, "Arcom/Eurotech ZEUS") | |||
904 | .io_pg_offst = ((io_p2v(0x40000000) >> 18) & 0xfffc), | 904 | .io_pg_offst = ((io_p2v(0x40000000) >> 18) & 0xfffc), |
905 | .boot_params = 0xa0000100, | 905 | .boot_params = 0xa0000100, |
906 | .map_io = zeus_map_io, | 906 | .map_io = zeus_map_io, |
907 | .nr_irqs = ZEUS_NR_IRQS, | ||
907 | .init_irq = zeus_init_irq, | 908 | .init_irq = zeus_init_irq, |
908 | .timer = &pxa_timer, | 909 | .timer = &pxa_timer, |
909 | .init_machine = zeus_init, | 910 | .init_machine = zeus_init, |
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c index c479cbecf784..69df3edcdd98 100644 --- a/arch/arm/mach-pxa/zylonite.c +++ b/arch/arm/mach-pxa/zylonite.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #include <mach/zylonite.h> | 30 | #include <mach/zylonite.h> |
31 | #include <mach/mmc.h> | 31 | #include <mach/mmc.h> |
32 | #include <mach/ohci.h> | 32 | #include <mach/ohci.h> |
33 | #include <mach/pxa27x_keypad.h> | 33 | #include <plat/pxa27x_keypad.h> |
34 | #include <plat/pxa3xx_nand.h> | 34 | #include <plat/pxa3xx_nand.h> |
35 | 35 | ||
36 | #include "devices.h" | 36 | #include "devices.h" |
@@ -415,6 +415,7 @@ MACHINE_START(ZYLONITE, "PXA3xx Platform Development Kit (aka Zylonite)") | |||
415 | .boot_params = 0xa0000100, | 415 | .boot_params = 0xa0000100, |
416 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 416 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
417 | .map_io = pxa_map_io, | 417 | .map_io = pxa_map_io, |
418 | .nr_irqs = ZYLONITE_NR_IRQS, | ||
418 | .init_irq = pxa3xx_init_irq, | 419 | .init_irq = pxa3xx_init_irq, |
419 | .timer = &pxa_timer, | 420 | .timer = &pxa_timer, |
420 | .init_machine = zylonite_init, | 421 | .init_machine = zylonite_init, |
diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h index 7b4eadc6df3a..abcc36eb1242 100644 --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h +++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h | |||
@@ -25,6 +25,13 @@ | |||
25 | * | 25 | * |
26 | * 4. matrix key and direct key will use the same debounce_interval by | 26 | * 4. matrix key and direct key will use the same debounce_interval by |
27 | * default, which should be sufficient in most cases | 27 | * default, which should be sufficient in most cases |
28 | * | ||
29 | * pxa168 keypad platform specific parameter | ||
30 | * | ||
31 | * NOTE: | ||
32 | * clear_wakeup_event callback is a workaround required to clear the | ||
33 | * keypad interrupt. The keypad wake must be cleared in addition to | ||
34 | * reading the MI/DI bits in the KPC register. | ||
28 | */ | 35 | */ |
29 | struct pxa27x_keypad_platform_data { | 36 | struct pxa27x_keypad_platform_data { |
30 | 37 | ||
@@ -52,6 +59,9 @@ struct pxa27x_keypad_platform_data { | |||
52 | 59 | ||
53 | /* key debounce interval */ | 60 | /* key debounce interval */ |
54 | unsigned int debounce_interval; | 61 | unsigned int debounce_interval; |
62 | |||
63 | /* clear wakeup event requirement for pxa168 */ | ||
64 | void (*clear_wakeup_event)(void); | ||
55 | }; | 65 | }; |
56 | 66 | ||
57 | extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); | 67 | extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); |