diff options
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r-- | arch/arm/mach-ux500/board-mop500-sdi.c | 42 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-mop500-stuib.c | 12 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-mop500.c | 23 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-mop500.h | 14 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/uncompress.h | 6 |
5 files changed, 81 insertions, 16 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-sdi.c b/arch/arm/mach-ux500/board-mop500-sdi.c index 68c8375e45c6..bf0b02414e5b 100644 --- a/arch/arm/mach-ux500/board-mop500-sdi.c +++ b/arch/arm/mach-ux500/board-mop500-sdi.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/mmc/host.h> | 12 | #include <linux/mmc/host.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | 14 | ||
15 | #include <asm/mach-types.h> | ||
15 | #include <plat/ste_dma40.h> | 16 | #include <plat/ste_dma40.h> |
16 | #include <mach/devices.h> | 17 | #include <mach/devices.h> |
17 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
@@ -68,7 +69,6 @@ static struct mmci_platform_data mop500_sdi0_data = { | |||
68 | .ocr_mask = MMC_VDD_29_30, | 69 | .ocr_mask = MMC_VDD_29_30, |
69 | .f_max = 100000000, | 70 | .f_max = 100000000, |
70 | .capabilities = MMC_CAP_4_BIT_DATA, | 71 | .capabilities = MMC_CAP_4_BIT_DATA, |
71 | .gpio_cd = GPIO_SDMMC_CD, | ||
72 | .gpio_wp = -1, | 72 | .gpio_wp = -1, |
73 | #ifdef CONFIG_STE_DMA40 | 73 | #ifdef CONFIG_STE_DMA40 |
74 | .dma_filter = stedma40_filter, | 74 | .dma_filter = stedma40_filter, |
@@ -77,23 +77,40 @@ static struct mmci_platform_data mop500_sdi0_data = { | |||
77 | #endif | 77 | #endif |
78 | }; | 78 | }; |
79 | 79 | ||
80 | void mop500_sdi_tc35892_init(void) | 80 | /* GPIO pins used by the sdi0 level shifter */ |
81 | static int sdi0_en = -1; | ||
82 | static int sdi0_vsel = -1; | ||
83 | |||
84 | static void sdi0_configure(void) | ||
81 | { | 85 | { |
82 | int ret; | 86 | int ret; |
83 | 87 | ||
84 | ret = gpio_request(GPIO_SDMMC_EN, "SDMMC_EN"); | 88 | ret = gpio_request(sdi0_en, "level shifter enable"); |
85 | if (!ret) | 89 | if (!ret) |
86 | ret = gpio_request(GPIO_SDMMC_1V8_3V_SEL, | 90 | ret = gpio_request(sdi0_vsel, |
87 | "GPIO_SDMMC_1V8_3V_SEL"); | 91 | "level shifter 1v8-3v select"); |
88 | if (ret) | 92 | |
93 | if (ret) { | ||
94 | pr_warning("unable to config sdi0 gpios for level shifter.\n"); | ||
89 | return; | 95 | return; |
96 | } | ||
90 | 97 | ||
91 | gpio_direction_output(GPIO_SDMMC_1V8_3V_SEL, 0); | 98 | /* Select the default 2.9V and enable level shifter */ |
92 | gpio_direction_output(GPIO_SDMMC_EN, 1); | 99 | gpio_direction_output(sdi0_vsel, 0); |
100 | gpio_direction_output(sdi0_en, 1); | ||
93 | 101 | ||
102 | /* Add the device */ | ||
94 | db8500_add_sdi0(&mop500_sdi0_data); | 103 | db8500_add_sdi0(&mop500_sdi0_data); |
95 | } | 104 | } |
96 | 105 | ||
106 | void mop500_sdi_tc35892_init(void) | ||
107 | { | ||
108 | mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD; | ||
109 | sdi0_en = GPIO_SDMMC_EN; | ||
110 | sdi0_vsel = GPIO_SDMMC_1V8_3V_SEL; | ||
111 | sdi0_configure(); | ||
112 | } | ||
113 | |||
97 | /* | 114 | /* |
98 | * SDI 2 (POP eMMC, not on DB8500ed) | 115 | * SDI 2 (POP eMMC, not on DB8500ed) |
99 | */ | 116 | */ |
@@ -179,8 +196,15 @@ void __init mop500_sdi_init(void) | |||
179 | /* On-board eMMC */ | 196 | /* On-board eMMC */ |
180 | db8500_add_sdi4(&mop500_sdi4_data); | 197 | db8500_add_sdi4(&mop500_sdi4_data); |
181 | 198 | ||
199 | if (machine_is_hrefv60()) { | ||
200 | mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO; | ||
201 | sdi0_en = HREFV60_SDMMC_EN_GPIO; | ||
202 | sdi0_vsel = HREFV60_SDMMC_1V8_3V_GPIO; | ||
203 | sdi0_configure(); | ||
204 | } | ||
182 | /* | 205 | /* |
183 | * sdi0 will finally be added when the TC35892 initializes and calls | 206 | * On boards with the TC35892 GPIO expander, sdi0 will finally |
207 | * be added when the TC35892 initializes and calls | ||
184 | * mop500_sdi_tc35892_init() above. | 208 | * mop500_sdi_tc35892_init() above. |
185 | */ | 209 | */ |
186 | } | 210 | } |
diff --git a/arch/arm/mach-ux500/board-mop500-stuib.c b/arch/arm/mach-ux500/board-mop500-stuib.c index 8b6323e229ff..8c979770d872 100644 --- a/arch/arm/mach-ux500/board-mop500-stuib.c +++ b/arch/arm/mach-ux500/board-mop500-stuib.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/i2c.h> | 13 | #include <linux/i2c.h> |
14 | #include <linux/input/matrix_keypad.h> | 14 | #include <linux/input/matrix_keypad.h> |
15 | #include <asm/mach-types.h> | ||
15 | 16 | ||
16 | #include "board-mop500.h" | 17 | #include "board-mop500.h" |
17 | 18 | ||
@@ -154,7 +155,6 @@ static struct bu21013_platform_device tsc_plat_device = { | |||
154 | .cs_dis = bu21013_gpio_board_exit, | 155 | .cs_dis = bu21013_gpio_board_exit, |
155 | .irq_read_val = bu21013_read_pin_val, | 156 | .irq_read_val = bu21013_read_pin_val, |
156 | .irq = NOMADIK_GPIO_TO_IRQ(TOUCH_GPIO_PIN), | 157 | .irq = NOMADIK_GPIO_TO_IRQ(TOUCH_GPIO_PIN), |
157 | .cs_pin = GPIO_BU21013_CS, | ||
158 | .touch_x_max = TOUCH_XMAX, | 158 | .touch_x_max = TOUCH_XMAX, |
159 | .touch_y_max = TOUCH_YMAX, | 159 | .touch_y_max = TOUCH_YMAX, |
160 | .ext_clk = false, | 160 | .ext_clk = false, |
@@ -167,7 +167,6 @@ static struct bu21013_platform_device tsc_plat2_device = { | |||
167 | .cs_dis = bu21013_gpio_board_exit, | 167 | .cs_dis = bu21013_gpio_board_exit, |
168 | .irq_read_val = bu21013_read_pin_val, | 168 | .irq_read_val = bu21013_read_pin_val, |
169 | .irq = NOMADIK_GPIO_TO_IRQ(TOUCH_GPIO_PIN), | 169 | .irq = NOMADIK_GPIO_TO_IRQ(TOUCH_GPIO_PIN), |
170 | .cs_pin = GPIO_BU21013_CS, | ||
171 | .touch_x_max = TOUCH_XMAX, | 170 | .touch_x_max = TOUCH_XMAX, |
172 | .touch_y_max = TOUCH_YMAX, | 171 | .touch_y_max = TOUCH_YMAX, |
173 | .ext_clk = false, | 172 | .ext_clk = false, |
@@ -189,6 +188,15 @@ static struct i2c_board_info __initdata u8500_i2c3_devices_stuib[] = { | |||
189 | 188 | ||
190 | void __init mop500_stuib_init(void) | 189 | void __init mop500_stuib_init(void) |
191 | { | 190 | { |
191 | if (machine_is_hrefv60()) { | ||
192 | tsc_plat_device.cs_pin = HREFV60_TOUCH_RST_GPIO; | ||
193 | tsc_plat2_device.cs_pin = HREFV60_TOUCH_RST_GPIO; | ||
194 | } else { | ||
195 | tsc_plat_device.cs_pin = GPIO_BU21013_CS; | ||
196 | tsc_plat2_device.cs_pin = GPIO_BU21013_CS; | ||
197 | |||
198 | } | ||
199 | |||
192 | mop500_uib_i2c_add(0, mop500_i2c0_devices_stuib, | 200 | mop500_uib_i2c_add(0, mop500_i2c0_devices_stuib, |
193 | ARRAY_SIZE(mop500_i2c0_devices_stuib)); | 201 | ARRAY_SIZE(mop500_i2c0_devices_stuib)); |
194 | 202 | ||
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index 72448e17260f..8790d984cac8 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -202,7 +202,6 @@ static struct gpio_keys_button mop500_gpio_keys[] = { | |||
202 | .desc = "SFH7741 Proximity Sensor", | 202 | .desc = "SFH7741 Proximity Sensor", |
203 | .type = EV_SW, | 203 | .type = EV_SW, |
204 | .code = SW_FRONT_PROXIMITY, | 204 | .code = SW_FRONT_PROXIMITY, |
205 | .gpio = GPIO_PROX_SENSOR, | ||
206 | .active_low = 0, | 205 | .active_low = 0, |
207 | .can_disable = 1, | 206 | .can_disable = 1, |
208 | } | 207 | } |
@@ -379,8 +378,18 @@ static void __init mop500_uart_init(void) | |||
379 | db8500_add_uart2(&uart2_plat); | 378 | db8500_add_uart2(&uart2_plat); |
380 | } | 379 | } |
381 | 380 | ||
382 | static void __init u8500_init_machine(void) | 381 | static void __init mop500_init_machine(void) |
383 | { | 382 | { |
383 | /* | ||
384 | * The HREFv60 board removed a GPIO expander and routed | ||
385 | * all these GPIO pins to the internal GPIO controller | ||
386 | * instead. | ||
387 | */ | ||
388 | if (machine_is_hrefv60()) | ||
389 | mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO; | ||
390 | else | ||
391 | mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; | ||
392 | |||
384 | u8500_init_devices(); | 393 | u8500_init_devices(); |
385 | 394 | ||
386 | mop500_pins_init(); | 395 | mop500_pins_init(); |
@@ -407,5 +416,13 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | |||
407 | .init_irq = ux500_init_irq, | 416 | .init_irq = ux500_init_irq, |
408 | /* we re-use nomadik timer here */ | 417 | /* we re-use nomadik timer here */ |
409 | .timer = &ux500_timer, | 418 | .timer = &ux500_timer, |
410 | .init_machine = u8500_init_machine, | 419 | .init_machine = mop500_init_machine, |
420 | MACHINE_END | ||
421 | |||
422 | MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | ||
423 | .boot_params = 0x100, | ||
424 | .map_io = u8500_map_io, | ||
425 | .init_irq = ux500_init_irq, | ||
426 | .timer = &ux500_timer, | ||
427 | .init_machine = mop500_init_machine, | ||
411 | MACHINE_END | 428 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/board-mop500.h b/arch/arm/mach-ux500/board-mop500.h index 48abca77335c..56722f4be71b 100644 --- a/arch/arm/mach-ux500/board-mop500.h +++ b/arch/arm/mach-ux500/board-mop500.h | |||
@@ -7,9 +7,21 @@ | |||
7 | #ifndef __BOARD_MOP500_H | 7 | #ifndef __BOARD_MOP500_H |
8 | #define __BOARD_MOP500_H | 8 | #define __BOARD_MOP500_H |
9 | 9 | ||
10 | #define MOP500_EGPIO(x) (NOMADIK_NR_GPIO + (x)) | 10 | /* HREFv60-specific GPIO assignments, this board has no GPIO expander */ |
11 | #define HREFV60_TOUCH_RST_GPIO 143 | ||
12 | #define HREFV60_PROX_SENSE_GPIO 217 | ||
13 | #define HREFV60_HAL_SW_GPIO 145 | ||
14 | #define HREFV60_SDMMC_EN_GPIO 169 | ||
15 | #define HREFV60_SDMMC_1V8_3V_GPIO 5 | ||
16 | #define HREFV60_SDMMC_CD_GPIO 95 | ||
17 | #define HREFV60_ACCEL_INT1_GPIO 82 | ||
18 | #define HREFV60_ACCEL_INT2_GPIO 83 | ||
19 | #define HREFV60_MAGNET_DRDY_GPIO 32 | ||
20 | #define HREFV60_DISP1_RST_GPIO 65 | ||
21 | #define HREFV60_DISP2_RST_GPIO 66 | ||
11 | 22 | ||
12 | /* GPIOs on the TC35892 expander */ | 23 | /* GPIOs on the TC35892 expander */ |
24 | #define MOP500_EGPIO(x) (NOMADIK_NR_GPIO + (x)) | ||
13 | #define GPIO_SDMMC_CD MOP500_EGPIO(3) | 25 | #define GPIO_SDMMC_CD MOP500_EGPIO(3) |
14 | #define GPIO_PROX_SENSOR MOP500_EGPIO(7) | 26 | #define GPIO_PROX_SENSOR MOP500_EGPIO(7) |
15 | #define GPIO_BU21013_CS MOP500_EGPIO(13) | 27 | #define GPIO_BU21013_CS MOP500_EGPIO(13) |
diff --git a/arch/arm/mach-ux500/include/mach/uncompress.h b/arch/arm/mach-ux500/include/mach/uncompress.h index 9a6614c6808e..ab0fe1432fae 100644 --- a/arch/arm/mach-ux500/include/mach/uncompress.h +++ b/arch/arm/mach-ux500/include/mach/uncompress.h | |||
@@ -50,7 +50,11 @@ static void flush(void) | |||
50 | 50 | ||
51 | static inline void arch_decomp_setup(void) | 51 | static inline void arch_decomp_setup(void) |
52 | { | 52 | { |
53 | if (machine_is_u8500()) | 53 | /* Check in run time if we run on an U8500 or U5500 */ |
54 | if (machine_is_u8500() || | ||
55 | machine_is_svp8500v1() || | ||
56 | machine_is_svp8500v2() || | ||
57 | machine_is_hrefv60()) | ||
54 | ux500_uart_base = U8500_UART2_BASE; | 58 | ux500_uart_base = U8500_UART2_BASE; |
55 | else if (machine_is_u5500()) | 59 | else if (machine_is_u5500()) |
56 | ux500_uart_base = U5500_UART0_BASE; | 60 | ux500_uart_base = U5500_UART0_BASE; |