diff options
| author | Olof Johansson <olof@lixom.net> | 2012-05-09 05:57:26 -0400 |
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2012-05-09 05:57:26 -0400 |
| commit | afeb36f128e387f8ad2cd7cd94020bae984ea9b4 (patch) | |
| tree | 8d8b7db74a1d017d4fd166c00d766a0c9047e8ae | |
| parent | f1a9fa2381d844bca66cefc842cbb65b263d74dc (diff) | |
| parent | 53a02d11f1bc9c2c692908d2eda3f3fb34f9bf9d (diff) | |
Merge tag 'imx-eukrea' of git://git.pengutronix.de/git/imx/linux-2.6 into next/boards
ARM i.MX Eukrea Patches for 3.5
By Eric Bénard (11) and Denis Carikli (1)
via Sascha Hauer
* tag 'imx-eukrea' of git://git.pengutronix.de/git/imx/linux-2.6:
ARM: imx: eukrea_mbimxsd rename to eukrea_mbimxsd51
ARM: imx: eukrea_mbimxsd25: use IMX_GPIO_NR
ARM: imx: eukrea_mbimxsd25: don't free twice GPIO_SWITCH1
ARM: imx: eukrea_mbimxsd: add backlight and lcd support
ARM: imx: eukrea_cpuimx51sd: support rev2 PCB
ARM: imx: eukrea_mbimxsd: add audio support
ARM: imx: eukrea_cpuimx51sd: add watchdog support
ARM: imx: eukrea-cpuimx51: remove board
ARM: imx: eukrea_mbimxsd35: add spi controler and spidev support
ARM: imx: eukrea_cpuimx25: add watchdog support
ARM: imx: eukrea_mbimxsd25: add spi controler and spidev support
ARM: imx: eukrea_cpuimx25: enable workaround ENGcm09152
| -rw-r--r-- | arch/arm/mach-imx/Kconfig | 35 | ||||
| -rw-r--r-- | arch/arm/mach-imx/Makefile | 4 | ||||
| -rw-r--r-- | arch/arm/mach-imx/eukrea_mbimx51-baseboard.c | 206 | ||||
| -rw-r--r-- | arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c | 51 | ||||
| -rw-r--r-- | arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c | 42 | ||||
| -rw-r--r-- | arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c (renamed from arch/arm/mach-imx/eukrea_mbimxsd-baseboard.c) | 120 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mach-cpuimx51.c | 301 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mach-cpuimx51sd.c | 50 | ||||
| -rw-r--r-- | arch/arm/mach-imx/mach-eukrea_cpuimx25.c | 2 |
9 files changed, 241 insertions, 570 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 7561eca131b0..18399d10d170 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig | |||
| @@ -163,6 +163,7 @@ config MACH_EUKREA_CPUIMX25SD | |||
| 163 | select SOC_IMX25 | 163 | select SOC_IMX25 |
| 164 | select IMX_HAVE_PLATFORM_FLEXCAN | 164 | select IMX_HAVE_PLATFORM_FLEXCAN |
| 165 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | 165 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC |
| 166 | select IMX_HAVE_PLATFORM_IMX2_WDT | ||
| 166 | select IMX_HAVE_PLATFORM_IMXDI_RTC | 167 | select IMX_HAVE_PLATFORM_IMXDI_RTC |
| 167 | select IMX_HAVE_PLATFORM_IMX_FB | 168 | select IMX_HAVE_PLATFORM_IMX_FB |
| 168 | select IMX_HAVE_PLATFORM_IMX_I2C | 169 | select IMX_HAVE_PLATFORM_IMX_I2C |
| @@ -181,6 +182,7 @@ config MACH_EUKREA_MBIMXSD25_BASEBOARD | |||
| 181 | bool "Eukrea MBIMXSD development board" | 182 | bool "Eukrea MBIMXSD development board" |
| 182 | select IMX_HAVE_PLATFORM_GPIO_KEYS | 183 | select IMX_HAVE_PLATFORM_GPIO_KEYS |
| 183 | select IMX_HAVE_PLATFORM_IMX_SSI | 184 | select IMX_HAVE_PLATFORM_IMX_SSI |
| 185 | select IMX_HAVE_PLATFORM_SPI_IMX | ||
| 184 | select LEDS_GPIO_REGISTER | 186 | select LEDS_GPIO_REGISTER |
| 185 | help | 187 | help |
| 186 | This adds board specific devices that can be found on Eukrea's | 188 | This adds board specific devices that can be found on Eukrea's |
| @@ -606,6 +608,7 @@ config MACH_EUKREA_MBIMXSD35_BASEBOARD | |||
| 606 | select IMX_HAVE_PLATFORM_GPIO_KEYS | 608 | select IMX_HAVE_PLATFORM_GPIO_KEYS |
| 607 | select IMX_HAVE_PLATFORM_IMX_SSI | 609 | select IMX_HAVE_PLATFORM_IMX_SSI |
| 608 | select IMX_HAVE_PLATFORM_IPU_CORE | 610 | select IMX_HAVE_PLATFORM_IPU_CORE |
| 611 | select IMX_HAVE_PLATFORM_SPI_IMX | ||
| 609 | select LEDS_GPIO_REGISTER | 612 | select LEDS_GPIO_REGISTER |
| 610 | help | 613 | help |
| 611 | This adds board specific devices that can be found on Eukrea's | 614 | This adds board specific devices that can be found on Eukrea's |
| @@ -682,42 +685,13 @@ config MACH_MX51_3DS | |||
| 682 | Include support for MX51PDK (3DS) platform. This includes specific | 685 | Include support for MX51PDK (3DS) platform. This includes specific |
| 683 | configurations for the board and its peripherals. | 686 | configurations for the board and its peripherals. |
| 684 | 687 | ||
| 685 | config MACH_EUKREA_CPUIMX51 | ||
| 686 | bool "Support Eukrea CPUIMX51 module" | ||
| 687 | select SOC_IMX51 | ||
| 688 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||
| 689 | select IMX_HAVE_PLATFORM_IMX_I2C | ||
| 690 | select IMX_HAVE_PLATFORM_IMX_UART | ||
| 691 | select IMX_HAVE_PLATFORM_MXC_EHCI | ||
| 692 | select IMX_HAVE_PLATFORM_MXC_NAND | ||
| 693 | select IMX_HAVE_PLATFORM_SPI_IMX | ||
| 694 | help | ||
| 695 | Include support for Eukrea CPUIMX51 platform. This includes | ||
| 696 | specific configurations for the module and its peripherals. | ||
| 697 | |||
| 698 | choice | ||
| 699 | prompt "Baseboard" | ||
| 700 | depends on MACH_EUKREA_CPUIMX51 | ||
| 701 | default MACH_EUKREA_MBIMX51_BASEBOARD | ||
| 702 | |||
| 703 | config MACH_EUKREA_MBIMX51_BASEBOARD | ||
| 704 | prompt "Eukrea MBIMX51 development board" | ||
| 705 | bool | ||
| 706 | select IMX_HAVE_PLATFORM_IMX_KEYPAD | ||
| 707 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||
| 708 | select LEDS_GPIO_REGISTER | ||
| 709 | help | ||
| 710 | This adds board specific devices that can be found on Eukrea's | ||
| 711 | MBIMX51 evaluation board. | ||
| 712 | |||
| 713 | endchoice | ||
| 714 | |||
| 715 | config MACH_EUKREA_CPUIMX51SD | 688 | config MACH_EUKREA_CPUIMX51SD |
| 716 | bool "Support Eukrea CPUIMX51SD module" | 689 | bool "Support Eukrea CPUIMX51SD module" |
| 717 | select SOC_IMX51 | 690 | select SOC_IMX51 |
| 718 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | 691 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC |
| 719 | select IMX_HAVE_PLATFORM_IMX_I2C | 692 | select IMX_HAVE_PLATFORM_IMX_I2C |
| 720 | select IMX_HAVE_PLATFORM_IMX_UART | 693 | select IMX_HAVE_PLATFORM_IMX_UART |
| 694 | select IMX_HAVE_PLATFORM_IMX2_WDT | ||
| 721 | select IMX_HAVE_PLATFORM_MXC_EHCI | 695 | select IMX_HAVE_PLATFORM_MXC_EHCI |
| 722 | select IMX_HAVE_PLATFORM_MXC_NAND | 696 | select IMX_HAVE_PLATFORM_MXC_NAND |
| 723 | select IMX_HAVE_PLATFORM_SPI_IMX | 697 | select IMX_HAVE_PLATFORM_SPI_IMX |
| @@ -733,6 +707,7 @@ choice | |||
| 733 | config MACH_EUKREA_MBIMXSD51_BASEBOARD | 707 | config MACH_EUKREA_MBIMXSD51_BASEBOARD |
| 734 | prompt "Eukrea MBIMXSD development board" | 708 | prompt "Eukrea MBIMXSD development board" |
| 735 | bool | 709 | bool |
| 710 | select IMX_HAVE_PLATFORM_IMX_SSI | ||
| 736 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 711 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
| 737 | select LEDS_GPIO_REGISTER | 712 | select LEDS_GPIO_REGISTER |
| 738 | help | 713 | help |
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index ab939c5046c3..4937c070a57e 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile | |||
| @@ -83,10 +83,8 @@ obj-$(CONFIG_MACH_MX53_EVK) += mach-mx53_evk.o | |||
| 83 | obj-$(CONFIG_MACH_MX53_SMD) += mach-mx53_smd.o | 83 | obj-$(CONFIG_MACH_MX53_SMD) += mach-mx53_smd.o |
| 84 | obj-$(CONFIG_MACH_MX53_LOCO) += mach-mx53_loco.o | 84 | obj-$(CONFIG_MACH_MX53_LOCO) += mach-mx53_loco.o |
| 85 | obj-$(CONFIG_MACH_MX53_ARD) += mach-mx53_ard.o | 85 | obj-$(CONFIG_MACH_MX53_ARD) += mach-mx53_ard.o |
| 86 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += mach-cpuimx51.o | ||
| 87 | obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o | ||
| 88 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o | 86 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o |
| 89 | obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd-baseboard.o | 87 | obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o |
| 90 | obj-$(CONFIG_MX51_EFIKA_COMMON) += mx51_efika.o | 88 | obj-$(CONFIG_MX51_EFIKA_COMMON) += mx51_efika.o |
| 91 | obj-$(CONFIG_MACH_MX51_EFIKAMX) += mach-mx51_efikamx.o | 89 | obj-$(CONFIG_MACH_MX51_EFIKAMX) += mach-mx51_efikamx.o |
| 92 | obj-$(CONFIG_MACH_MX51_EFIKASB) += mach-mx51_efikasb.o | 90 | obj-$(CONFIG_MACH_MX51_EFIKASB) += mach-mx51_efikasb.o |
diff --git a/arch/arm/mach-imx/eukrea_mbimx51-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx51-baseboard.c deleted file mode 100644 index a6a3ab8f1b1c..000000000000 --- a/arch/arm/mach-imx/eukrea_mbimx51-baseboard.c +++ /dev/null | |||
| @@ -1,206 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Eric Bénard <eric@eukrea.com> | ||
| 4 | * | ||
| 5 | * The code contained herein is licensed under the GNU General Public | ||
| 6 | * License. You may obtain a copy of the GNU General Public License | ||
| 7 | * Version 2 or later at the following locations: | ||
| 8 | * | ||
| 9 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 10 | * http://www.gnu.org/copyleft/gpl.html | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include <linux/init.h> | ||
| 14 | #include <linux/platform_device.h> | ||
| 15 | #include <linux/serial_8250.h> | ||
| 16 | #include <linux/i2c.h> | ||
| 17 | #include <linux/gpio.h> | ||
| 18 | #include <linux/io.h> | ||
| 19 | #include <linux/interrupt.h> | ||
| 20 | #include <linux/irq.h> | ||
| 21 | #include <linux/i2c/tsc2007.h> | ||
| 22 | #include <linux/leds.h> | ||
| 23 | |||
| 24 | #include <mach/common.h> | ||
| 25 | #include <mach/hardware.h> | ||
| 26 | #include <mach/iomux-mx51.h> | ||
| 27 | |||
| 28 | #include <asm/mach/arch.h> | ||
| 29 | |||
| 30 | #include "devices-imx51.h" | ||
| 31 | |||
| 32 | #define MBIMX51_TSC2007_GPIO IMX_GPIO_NR(3, 30) | ||
| 33 | #define MBIMX51_LED0 IMX_GPIO_NR(3, 5) | ||
| 34 | #define MBIMX51_LED1 IMX_GPIO_NR(3, 6) | ||
| 35 | #define MBIMX51_LED2 IMX_GPIO_NR(3, 7) | ||
| 36 | #define MBIMX51_LED3 IMX_GPIO_NR(3, 8) | ||
| 37 | |||
| 38 | static const struct gpio_led mbimx51_leds[] __initconst = { | ||
| 39 | { | ||
| 40 | .name = "led0", | ||
| 41 | .default_trigger = "heartbeat", | ||
| 42 | .active_low = 1, | ||
| 43 | .gpio = MBIMX51_LED0, | ||
| 44 | }, | ||
| 45 | { | ||
| 46 | .name = "led1", | ||
| 47 | .default_trigger = "nand-disk", | ||
| 48 | .active_low = 1, | ||
| 49 | .gpio = MBIMX51_LED1, | ||
| 50 | }, | ||
| 51 | { | ||
| 52 | .name = "led2", | ||
| 53 | .default_trigger = "mmc0", | ||
| 54 | .active_low = 1, | ||
| 55 | .gpio = MBIMX51_LED2, | ||
| 56 | }, | ||
| 57 | { | ||
| 58 | .name = "led3", | ||
| 59 | .default_trigger = "default-on", | ||
| 60 | .active_low = 1, | ||
| 61 | .gpio = MBIMX51_LED3, | ||
| 62 | }, | ||
| 63 | }; | ||
| 64 | |||
| 65 | static const struct gpio_led_platform_data mbimx51_leds_info __initconst = { | ||
| 66 | .leds = mbimx51_leds, | ||
| 67 | .num_leds = ARRAY_SIZE(mbimx51_leds), | ||
| 68 | }; | ||
| 69 | |||
| 70 | static iomux_v3_cfg_t mbimx51_pads[] = { | ||
| 71 | /* UART2 */ | ||
| 72 | MX51_PAD_UART2_RXD__UART2_RXD, | ||
| 73 | MX51_PAD_UART2_TXD__UART2_TXD, | ||
| 74 | |||
| 75 | /* UART3 */ | ||
| 76 | MX51_PAD_UART3_RXD__UART3_RXD, | ||
| 77 | MX51_PAD_UART3_TXD__UART3_TXD, | ||
| 78 | MX51_PAD_KEY_COL4__UART3_RTS, | ||
| 79 | MX51_PAD_KEY_COL5__UART3_CTS, | ||
| 80 | |||
| 81 | /* TSC2007 IRQ */ | ||
| 82 | MX51_PAD_NANDF_D10__GPIO3_30, | ||
| 83 | |||
| 84 | /* LEDS */ | ||
| 85 | MX51_PAD_DISPB2_SER_DIN__GPIO3_5, | ||
| 86 | MX51_PAD_DISPB2_SER_DIO__GPIO3_6, | ||
| 87 | MX51_PAD_DISPB2_SER_CLK__GPIO3_7, | ||
| 88 | MX51_PAD_DISPB2_SER_RS__GPIO3_8, | ||
| 89 | |||
| 90 | /* KPP */ | ||
| 91 | MX51_PAD_KEY_ROW0__KEY_ROW0, | ||
| 92 | MX51_PAD_KEY_ROW1__KEY_ROW1, | ||
| 93 | MX51_PAD_KEY_ROW2__KEY_ROW2, | ||
| 94 | MX51_PAD_KEY_ROW3__KEY_ROW3, | ||
| 95 | MX51_PAD_KEY_COL0__KEY_COL0, | ||
| 96 | MX51_PAD_KEY_COL1__KEY_COL1, | ||
| 97 | MX51_PAD_KEY_COL2__KEY_COL2, | ||
| 98 | MX51_PAD_KEY_COL3__KEY_COL3, | ||
| 99 | |||
| 100 | /* SD 1 */ | ||
| 101 | MX51_PAD_SD1_CMD__SD1_CMD, | ||
| 102 | MX51_PAD_SD1_CLK__SD1_CLK, | ||
| 103 | MX51_PAD_SD1_DATA0__SD1_DATA0, | ||
| 104 | MX51_PAD_SD1_DATA1__SD1_DATA1, | ||
| 105 | MX51_PAD_SD1_DATA2__SD1_DATA2, | ||
| 106 | MX51_PAD_SD1_DATA3__SD1_DATA3, | ||
| 107 | |||
| 108 | /* SD 2 */ | ||
| 109 | MX51_PAD_SD2_CMD__SD2_CMD, | ||
| 110 | MX51_PAD_SD2_CLK__SD2_CLK, | ||
| 111 | MX51_PAD_SD2_DATA0__SD2_DATA0, | ||
| 112 | MX51_PAD_SD2_DATA1__SD2_DATA1, | ||
| 113 | MX51_PAD_SD2_DATA2__SD2_DATA2, | ||
| 114 | MX51_PAD_SD2_DATA3__SD2_DATA3, | ||
| 115 | }; | ||
| 116 | |||
| 117 | static const struct imxuart_platform_data uart_pdata __initconst = { | ||
| 118 | .flags = IMXUART_HAVE_RTSCTS, | ||
| 119 | }; | ||
| 120 | |||
| 121 | static int mbimx51_keymap[] = { | ||
| 122 | KEY(0, 0, KEY_1), | ||
| 123 | KEY(0, 1, KEY_2), | ||
| 124 | KEY(0, 2, KEY_3), | ||
| 125 | KEY(0, 3, KEY_UP), | ||
| 126 | |||
| 127 | KEY(1, 0, KEY_4), | ||
| 128 | KEY(1, 1, KEY_5), | ||
| 129 | KEY(1, 2, KEY_6), | ||
| 130 | KEY(1, 3, KEY_LEFT), | ||
| 131 | |||
| 132 | KEY(2, 0, KEY_7), | ||
| 133 | KEY(2, 1, KEY_8), | ||
| 134 | KEY(2, 2, KEY_9), | ||
| 135 | KEY(2, 3, KEY_RIGHT), | ||
| 136 | |||
| 137 | KEY(3, 0, KEY_0), | ||
| 138 | KEY(3, 1, KEY_DOWN), | ||
| 139 | KEY(3, 2, KEY_ESC), | ||
| 140 | KEY(3, 3, KEY_ENTER), | ||
| 141 | }; | ||
| 142 | |||
| 143 | static const struct matrix_keymap_data mbimx51_map_data __initconst = { | ||
| 144 | .keymap = mbimx51_keymap, | ||
| 145 | .keymap_size = ARRAY_SIZE(mbimx51_keymap), | ||
| 146 | }; | ||
| 147 | |||
| 148 | static int tsc2007_get_pendown_state(void) | ||
| 149 | { | ||
| 150 | return !gpio_get_value(MBIMX51_TSC2007_GPIO); | ||
| 151 | } | ||
| 152 | |||
| 153 | struct tsc2007_platform_data tsc2007_data = { | ||
| 154 | .model = 2007, | ||
| 155 | .x_plate_ohms = 180, | ||
| 156 | .get_pendown_state = tsc2007_get_pendown_state, | ||
| 157 | }; | ||
| 158 | |||
| 159 | static struct i2c_board_info mbimx51_i2c_devices[] = { | ||
| 160 | { | ||
| 161 | I2C_BOARD_INFO("tsc2007", 0x49), | ||
| 162 | .irq = IMX_GPIO_TO_IRQ(MBIMX51_TSC2007_GPIO), | ||
| 163 | .platform_data = &tsc2007_data, | ||
| 164 | }, { | ||
| 165 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | ||
| 166 | }, | ||
| 167 | }; | ||
| 168 | |||
| 169 | /* | ||
| 170 | * baseboard initialization. | ||
| 171 | */ | ||
| 172 | void __init eukrea_mbimx51_baseboard_init(void) | ||
| 173 | { | ||
| 174 | mxc_iomux_v3_setup_multiple_pads(mbimx51_pads, | ||
| 175 | ARRAY_SIZE(mbimx51_pads)); | ||
| 176 | |||
| 177 | imx51_add_imx_uart(1, NULL); | ||
| 178 | imx51_add_imx_uart(2, &uart_pdata); | ||
| 179 | |||
| 180 | gpio_request(MBIMX51_LED0, "LED0"); | ||
| 181 | gpio_direction_output(MBIMX51_LED0, 1); | ||
| 182 | gpio_free(MBIMX51_LED0); | ||
| 183 | gpio_request(MBIMX51_LED1, "LED1"); | ||
| 184 | gpio_direction_output(MBIMX51_LED1, 1); | ||
| 185 | gpio_free(MBIMX51_LED1); | ||
| 186 | gpio_request(MBIMX51_LED2, "LED2"); | ||
| 187 | gpio_direction_output(MBIMX51_LED2, 1); | ||
| 188 | gpio_free(MBIMX51_LED2); | ||
| 189 | gpio_request(MBIMX51_LED3, "LED3"); | ||
| 190 | gpio_direction_output(MBIMX51_LED3, 1); | ||
| 191 | gpio_free(MBIMX51_LED3); | ||
| 192 | |||
| 193 | gpio_led_register_device(-1, &mbimx51_leds_info); | ||
| 194 | |||
| 195 | imx51_add_imx_keypad(&mbimx51_map_data); | ||
| 196 | |||
| 197 | gpio_request(MBIMX51_TSC2007_GPIO, "tsc2007_irq"); | ||
| 198 | gpio_direction_input(MBIMX51_TSC2007_GPIO); | ||
| 199 | irq_set_irq_type(gpio_to_irq(MBIMX51_TSC2007_GPIO), | ||
| 200 | IRQF_TRIGGER_FALLING); | ||
| 201 | i2c_register_board_info(1, mbimx51_i2c_devices, | ||
| 202 | ARRAY_SIZE(mbimx51_i2c_devices)); | ||
| 203 | |||
| 204 | imx51_add_sdhci_esdhc_imx(0, NULL); | ||
| 205 | imx51_add_sdhci_esdhc_imx(1, NULL); | ||
| 206 | } | ||
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c index 2cf603e11c4f..dfd2da87c2df 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/leds.h> | 23 | #include <linux/leds.h> |
| 24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
| 25 | #include <linux/input.h> | 25 | #include <linux/input.h> |
| 26 | #include <linux/spi/spi.h> | ||
| 26 | #include <video/platform_lcd.h> | 27 | #include <video/platform_lcd.h> |
| 27 | 28 | ||
| 28 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
| @@ -87,12 +88,22 @@ static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | |||
| 87 | /* CAN */ | 88 | /* CAN */ |
| 88 | MX25_PAD_GPIO_D__CAN2_RX, | 89 | MX25_PAD_GPIO_D__CAN2_RX, |
| 89 | MX25_PAD_GPIO_C__CAN2_TX, | 90 | MX25_PAD_GPIO_C__CAN2_TX, |
| 91 | /* SPI1 */ | ||
| 92 | MX25_PAD_CSPI1_MOSI__CSPI1_MOSI, | ||
| 93 | MX25_PAD_CSPI1_MISO__CSPI1_MISO, | ||
| 94 | MX25_PAD_CSPI1_SS0__GPIO_1_16, | ||
| 95 | MX25_PAD_CSPI1_SS1__GPIO_1_17, | ||
| 96 | MX25_PAD_CSPI1_SCLK__CSPI1_SCLK, | ||
| 97 | MX25_PAD_CSPI1_RDY__GPIO_2_22, | ||
| 90 | }; | 98 | }; |
| 91 | 99 | ||
| 92 | #define GPIO_LED1 83 | 100 | #define GPIO_LED1 IMX_GPIO_NR(3, 19) |
| 93 | #define GPIO_SWITCH1 82 | 101 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 18) |
| 94 | #define GPIO_SD1CD 52 | 102 | #define GPIO_SD1CD IMX_GPIO_NR(2, 20) |
| 95 | #define GPIO_LCDPWR 26 | 103 | #define GPIO_LCDPWR IMX_GPIO_NR(1, 26) |
| 104 | #define GPIO_SPI1_SS0 IMX_GPIO_NR(1, 16) | ||
| 105 | #define GPIO_SPI1_SS1 IMX_GPIO_NR(1, 17) | ||
| 106 | #define GPIO_SPI1_IRQ IMX_GPIO_NR(2, 22) | ||
| 96 | 107 | ||
| 97 | static struct imx_fb_videomode eukrea_mximxsd_modes[] = { | 108 | static struct imx_fb_videomode eukrea_mximxsd_modes[] = { |
| 98 | { | 109 | { |
| @@ -228,6 +239,30 @@ static struct esdhc_platform_data sd1_pdata = { | |||
| 228 | .wp_type = ESDHC_WP_NONE, | 239 | .wp_type = ESDHC_WP_NONE, |
| 229 | }; | 240 | }; |
| 230 | 241 | ||
| 242 | static struct spi_board_info eukrea_mbimxsd25_spi_board_info[] __initdata = { | ||
| 243 | { | ||
| 244 | .modalias = "spidev", | ||
| 245 | .max_speed_hz = 20000000, | ||
| 246 | .bus_num = 0, | ||
| 247 | .chip_select = 0, | ||
| 248 | .mode = SPI_MODE_0, | ||
| 249 | }, | ||
| 250 | { | ||
| 251 | .modalias = "spidev", | ||
| 252 | .max_speed_hz = 20000000, | ||
| 253 | .bus_num = 0, | ||
| 254 | .chip_select = 1, | ||
| 255 | .mode = SPI_MODE_0, | ||
| 256 | }, | ||
| 257 | }; | ||
| 258 | |||
| 259 | static int eukrea_mbimxsd25_spi_cs[] = {GPIO_SPI1_SS0, GPIO_SPI1_SS1}; | ||
| 260 | |||
| 261 | static const struct spi_imx_master eukrea_mbimxsd25_spi0_data __initconst = { | ||
| 262 | .chipselect = eukrea_mbimxsd25_spi_cs, | ||
| 263 | .num_chipselect = ARRAY_SIZE(eukrea_mbimxsd25_spi_cs), | ||
| 264 | }; | ||
| 265 | |||
| 231 | /* | 266 | /* |
| 232 | * system init for baseboard usage. Will be called by cpuimx25 init. | 267 | * system init for baseboard usage. Will be called by cpuimx25 init. |
| 233 | * | 268 | * |
| @@ -257,11 +292,17 @@ void __init eukrea_mbimxsd25_baseboard_init(void) | |||
| 257 | 292 | ||
| 258 | gpio_request(GPIO_LCDPWR, "LCDPWR"); | 293 | gpio_request(GPIO_LCDPWR, "LCDPWR"); |
| 259 | gpio_direction_output(GPIO_LCDPWR, 1); | 294 | gpio_direction_output(GPIO_LCDPWR, 1); |
| 260 | gpio_free(GPIO_SWITCH1); | ||
| 261 | 295 | ||
| 262 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, | 296 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, |
| 263 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); | 297 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); |
| 264 | 298 | ||
| 299 | gpio_request(GPIO_SPI1_IRQ, "SPI1_IRQ"); | ||
| 300 | gpio_direction_input(GPIO_SPI1_IRQ); | ||
| 301 | gpio_free(GPIO_SPI1_IRQ); | ||
| 302 | imx25_add_spi_imx0(&eukrea_mbimxsd25_spi0_data); | ||
| 303 | spi_register_board_info(eukrea_mbimxsd25_spi_board_info, | ||
| 304 | ARRAY_SIZE(eukrea_mbimxsd25_spi_board_info)); | ||
| 305 | |||
| 265 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | 306 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); |
| 266 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); | 307 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); |
| 267 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); | 308 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c index fd8bf8a425a7..557f6c486053 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/leds.h> | 27 | #include <linux/leds.h> |
| 28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 29 | #include <linux/input.h> | 29 | #include <linux/input.h> |
| 30 | #include <linux/spi/spi.h> | ||
| 30 | #include <video/platform_lcd.h> | 31 | #include <video/platform_lcd.h> |
| 31 | #include <linux/i2c.h> | 32 | #include <linux/i2c.h> |
| 32 | 33 | ||
| @@ -158,12 +159,22 @@ static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | |||
| 158 | MX35_PAD_SD1_DATA3__ESDHC1_DAT3, | 159 | MX35_PAD_SD1_DATA3__ESDHC1_DAT3, |
| 159 | /* SD1 CD */ | 160 | /* SD1 CD */ |
| 160 | MX35_PAD_LD18__GPIO3_24, | 161 | MX35_PAD_LD18__GPIO3_24, |
| 162 | /* SPI */ | ||
| 163 | MX35_PAD_CSPI1_MOSI__CSPI1_MOSI, | ||
| 164 | MX35_PAD_CSPI1_MISO__CSPI1_MISO, | ||
| 165 | MX35_PAD_CSPI1_SS0__GPIO1_18, | ||
| 166 | MX35_PAD_CSPI1_SS1__GPIO1_19, | ||
| 167 | MX35_PAD_CSPI1_SCLK__CSPI1_SCLK, | ||
| 168 | MX35_PAD_CSPI1_SPI_RDY__GPIO3_5, | ||
| 161 | }; | 169 | }; |
| 162 | 170 | ||
| 163 | #define GPIO_LED1 IMX_GPIO_NR(3, 29) | 171 | #define GPIO_LED1 IMX_GPIO_NR(3, 29) |
| 164 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 25) | 172 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 25) |
| 165 | #define GPIO_LCDPWR IMX_GPIO_NR(1, 4) | 173 | #define GPIO_LCDPWR IMX_GPIO_NR(1, 4) |
| 166 | #define GPIO_SD1CD IMX_GPIO_NR(3, 24) | 174 | #define GPIO_SD1CD IMX_GPIO_NR(3, 24) |
| 175 | #define GPIO_SPI1_SS0 IMX_GPIO_NR(1, 18) | ||
| 176 | #define GPIO_SPI1_SS1 IMX_GPIO_NR(1, 19) | ||
| 177 | #define GPIO_SPI1_IRQ IMX_GPIO_NR(3, 5) | ||
| 167 | 178 | ||
| 168 | static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd, | 179 | static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd, |
| 169 | unsigned int power) | 180 | unsigned int power) |
| @@ -239,6 +250,30 @@ static struct esdhc_platform_data sd1_pdata = { | |||
| 239 | .wp_type = ESDHC_WP_NONE, | 250 | .wp_type = ESDHC_WP_NONE, |
| 240 | }; | 251 | }; |
| 241 | 252 | ||
| 253 | static struct spi_board_info eukrea_mbimxsd35_spi_board_info[] __initdata = { | ||
| 254 | { | ||
| 255 | .modalias = "spidev", | ||
| 256 | .max_speed_hz = 20000000, | ||
| 257 | .bus_num = 0, | ||
| 258 | .chip_select = 0, | ||
| 259 | .mode = SPI_MODE_0, | ||
| 260 | }, | ||
| 261 | { | ||
| 262 | .modalias = "spidev", | ||
| 263 | .max_speed_hz = 20000000, | ||
| 264 | .bus_num = 0, | ||
| 265 | .chip_select = 1, | ||
| 266 | .mode = SPI_MODE_0, | ||
| 267 | }, | ||
| 268 | }; | ||
| 269 | |||
| 270 | static int eukrea_mbimxsd35_spi_cs[] = {GPIO_SPI1_SS0, GPIO_SPI1_SS1}; | ||
| 271 | |||
| 272 | static const struct spi_imx_master eukrea_mbimxsd35_spi0_data __initconst = { | ||
| 273 | .chipselect = eukrea_mbimxsd35_spi_cs, | ||
| 274 | .num_chipselect = ARRAY_SIZE(eukrea_mbimxsd35_spi_cs), | ||
| 275 | }; | ||
| 276 | |||
| 242 | /* | 277 | /* |
| 243 | * system init for baseboard usage. Will be called by cpuimx35 init. | 278 | * system init for baseboard usage. Will be called by cpuimx35 init. |
| 244 | * | 279 | * |
| @@ -274,6 +309,13 @@ void __init eukrea_mbimxsd35_baseboard_init(void) | |||
| 274 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, | 309 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, |
| 275 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); | 310 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); |
| 276 | 311 | ||
| 312 | gpio_request(GPIO_SPI1_IRQ, "SPI1_IRQ"); | ||
| 313 | gpio_direction_input(GPIO_SPI1_IRQ); | ||
| 314 | gpio_free(GPIO_SPI1_IRQ); | ||
| 315 | imx35_add_spi_imx0(&eukrea_mbimxsd35_spi0_data); | ||
| 316 | spi_register_board_info(eukrea_mbimxsd35_spi_board_info, | ||
| 317 | ARRAY_SIZE(eukrea_mbimxsd35_spi_board_info)); | ||
| 318 | |||
| 277 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | 319 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); |
| 278 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); | 320 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); |
| 279 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); | 321 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c index aaa592fdb9ce..96a24b73dc23 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c | |||
| @@ -28,6 +28,8 @@ | |||
| 28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 29 | #include <linux/input.h> | 29 | #include <linux/input.h> |
| 30 | #include <linux/i2c.h> | 30 | #include <linux/i2c.h> |
| 31 | #include <video/platform_lcd.h> | ||
| 32 | #include <linux/backlight.h> | ||
| 31 | 33 | ||
| 32 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
| 33 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
| @@ -40,7 +42,7 @@ | |||
| 40 | 42 | ||
| 41 | #include "devices-imx51.h" | 43 | #include "devices-imx51.h" |
| 42 | 44 | ||
| 43 | static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | 45 | static iomux_v3_cfg_t eukrea_mbimxsd51_pads[] = { |
| 44 | /* LED */ | 46 | /* LED */ |
| 45 | MX51_PAD_NANDF_D10__GPIO3_30, | 47 | MX51_PAD_NANDF_D10__GPIO3_30, |
| 46 | /* SWITCH */ | 48 | /* SWITCH */ |
| @@ -66,12 +68,64 @@ static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | |||
| 66 | NEW_PAD_CTRL(MX51_PAD_GPIO1_0__SD1_CD, PAD_CTL_PUS_22K_UP | | 68 | NEW_PAD_CTRL(MX51_PAD_GPIO1_0__SD1_CD, PAD_CTL_PUS_22K_UP | |
| 67 | PAD_CTL_PKE | PAD_CTL_SRE_FAST | | 69 | PAD_CTL_PKE | PAD_CTL_SRE_FAST | |
| 68 | PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), | 70 | PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), |
| 71 | /* SSI */ | ||
| 72 | MX51_PAD_AUD3_BB_TXD__AUD3_TXD, | ||
| 73 | MX51_PAD_AUD3_BB_RXD__AUD3_RXD, | ||
| 74 | MX51_PAD_AUD3_BB_CK__AUD3_TXC, | ||
| 75 | MX51_PAD_AUD3_BB_FS__AUD3_TXFS, | ||
| 76 | /* LCD Backlight */ | ||
| 77 | MX51_PAD_DI1_D1_CS__GPIO3_4, | ||
| 78 | /* LCD RST */ | ||
| 79 | MX51_PAD_CSI1_D9__GPIO3_13, | ||
| 69 | }; | 80 | }; |
| 70 | 81 | ||
| 71 | #define GPIO_LED1 IMX_GPIO_NR(3, 30) | 82 | #define GPIO_LED1 IMX_GPIO_NR(3, 30) |
| 72 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 31) | 83 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 31) |
| 84 | #define GPIO_LCDRST IMX_GPIO_NR(3, 13) | ||
| 85 | #define GPIO_LCDBL IMX_GPIO_NR(3, 4) | ||
| 73 | 86 | ||
| 74 | static const struct gpio_led eukrea_mbimxsd_leds[] __initconst = { | 87 | static void eukrea_mbimxsd51_lcd_power_set(struct plat_lcd_data *pd, |
| 88 | unsigned int power) | ||
| 89 | { | ||
| 90 | if (power) | ||
| 91 | gpio_direction_output(GPIO_LCDRST, 1); | ||
| 92 | else | ||
| 93 | gpio_direction_output(GPIO_LCDRST, 0); | ||
| 94 | } | ||
| 95 | |||
| 96 | static struct plat_lcd_data eukrea_mbimxsd51_lcd_power_data = { | ||
| 97 | .set_power = eukrea_mbimxsd51_lcd_power_set, | ||
| 98 | }; | ||
| 99 | |||
| 100 | static struct platform_device eukrea_mbimxsd51_lcd_powerdev = { | ||
| 101 | .name = "platform-lcd", | ||
| 102 | .dev.platform_data = &eukrea_mbimxsd51_lcd_power_data, | ||
| 103 | }; | ||
| 104 | |||
| 105 | static void eukrea_mbimxsd51_bl_set_intensity(int intensity) | ||
| 106 | { | ||
| 107 | if (intensity) | ||
| 108 | gpio_direction_output(GPIO_LCDBL, 1); | ||
| 109 | else | ||
| 110 | gpio_direction_output(GPIO_LCDBL, 0); | ||
| 111 | } | ||
| 112 | |||
| 113 | static struct generic_bl_info eukrea_mbimxsd51_bl_info = { | ||
| 114 | .name = "eukrea_mbimxsd51-bl", | ||
| 115 | .max_intensity = 0xff, | ||
| 116 | .default_intensity = 0xff, | ||
| 117 | .set_bl_intensity = eukrea_mbimxsd51_bl_set_intensity, | ||
| 118 | }; | ||
| 119 | |||
| 120 | static struct platform_device eukrea_mbimxsd51_bl_dev = { | ||
| 121 | .name = "generic-bl", | ||
| 122 | .id = 1, | ||
| 123 | .dev = { | ||
| 124 | .platform_data = &eukrea_mbimxsd51_bl_info, | ||
| 125 | }, | ||
| 126 | }; | ||
| 127 | |||
| 128 | static const struct gpio_led eukrea_mbimxsd51_leds[] __initconst = { | ||
| 75 | { | 129 | { |
| 76 | .name = "led1", | 130 | .name = "led1", |
| 77 | .default_trigger = "heartbeat", | 131 | .default_trigger = "heartbeat", |
| @@ -81,12 +135,12 @@ static const struct gpio_led eukrea_mbimxsd_leds[] __initconst = { | |||
| 81 | }; | 135 | }; |
| 82 | 136 | ||
| 83 | static const struct gpio_led_platform_data | 137 | static const struct gpio_led_platform_data |
| 84 | eukrea_mbimxsd_led_info __initconst = { | 138 | eukrea_mbimxsd51_led_info __initconst = { |
| 85 | .leds = eukrea_mbimxsd_leds, | 139 | .leds = eukrea_mbimxsd51_leds, |
| 86 | .num_leds = ARRAY_SIZE(eukrea_mbimxsd_leds), | 140 | .num_leds = ARRAY_SIZE(eukrea_mbimxsd51_leds), |
| 87 | }; | 141 | }; |
| 88 | 142 | ||
| 89 | static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = { | 143 | static struct gpio_keys_button eukrea_mbimxsd51_gpio_buttons[] = { |
| 90 | { | 144 | { |
| 91 | .gpio = GPIO_SWITCH1, | 145 | .gpio = GPIO_SWITCH1, |
| 92 | .code = BTN_0, | 146 | .code = BTN_0, |
| @@ -97,21 +151,39 @@ static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = { | |||
| 97 | }; | 151 | }; |
| 98 | 152 | ||
| 99 | static const struct gpio_keys_platform_data | 153 | static const struct gpio_keys_platform_data |
| 100 | eukrea_mbimxsd_button_data __initconst = { | 154 | eukrea_mbimxsd51_button_data __initconst = { |
| 101 | .buttons = eukrea_mbimxsd_gpio_buttons, | 155 | .buttons = eukrea_mbimxsd51_gpio_buttons, |
| 102 | .nbuttons = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons), | 156 | .nbuttons = ARRAY_SIZE(eukrea_mbimxsd51_gpio_buttons), |
| 103 | }; | 157 | }; |
| 104 | 158 | ||
| 105 | static const struct imxuart_platform_data uart_pdata __initconst = { | 159 | static const struct imxuart_platform_data uart_pdata __initconst = { |
| 106 | .flags = IMXUART_HAVE_RTSCTS, | 160 | .flags = IMXUART_HAVE_RTSCTS, |
| 107 | }; | 161 | }; |
| 108 | 162 | ||
| 109 | static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = { | 163 | static struct i2c_board_info eukrea_mbimxsd51_i2c_devices[] = { |
| 110 | { | 164 | { |
| 111 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | 165 | I2C_BOARD_INFO("tlv320aic23", 0x1a), |
| 112 | }, | 166 | }, |
| 113 | }; | 167 | }; |
| 114 | 168 | ||
| 169 | static const | ||
| 170 | struct imx_ssi_platform_data eukrea_mbimxsd51_ssi_pdata __initconst = { | ||
| 171 | .flags = IMX_SSI_SYN | IMX_SSI_NET | IMX_SSI_USE_I2S_SLAVE, | ||
| 172 | }; | ||
| 173 | |||
| 174 | static int screen_type; | ||
| 175 | |||
| 176 | static int __init eukrea_mbimxsd51_screen_type(char *options) | ||
| 177 | { | ||
| 178 | if (!strcmp(options, "dvi")) | ||
| 179 | screen_type = 1; | ||
| 180 | else if (!strcmp(options, "tft")) | ||
| 181 | screen_type = 0; | ||
| 182 | |||
| 183 | return 0; | ||
| 184 | } | ||
| 185 | __setup("screen_type=", eukrea_mbimxsd51_screen_type); | ||
| 186 | |||
| 115 | /* | 187 | /* |
| 116 | * system init for baseboard usage. Will be called by cpuimx51sd init. | 188 | * system init for baseboard usage. Will be called by cpuimx51sd init. |
| 117 | * | 189 | * |
| @@ -120,8 +192,8 @@ static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = { | |||
| 120 | */ | 192 | */ |
| 121 | void __init eukrea_mbimxsd51_baseboard_init(void) | 193 | void __init eukrea_mbimxsd51_baseboard_init(void) |
| 122 | { | 194 | { |
| 123 | if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads, | 195 | if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd51_pads, |
| 124 | ARRAY_SIZE(eukrea_mbimxsd_pads))) | 196 | ARRAY_SIZE(eukrea_mbimxsd51_pads))) |
| 125 | printk(KERN_ERR "error setting mbimxsd pads !\n"); | 197 | printk(KERN_ERR "error setting mbimxsd pads !\n"); |
| 126 | 198 | ||
| 127 | imx51_add_imx_uart(1, NULL); | 199 | imx51_add_imx_uart(1, NULL); |
| @@ -129,6 +201,8 @@ void __init eukrea_mbimxsd51_baseboard_init(void) | |||
| 129 | 201 | ||
| 130 | imx51_add_sdhci_esdhc_imx(0, NULL); | 202 | imx51_add_sdhci_esdhc_imx(0, NULL); |
| 131 | 203 | ||
| 204 | imx51_add_imx_ssi(0, &eukrea_mbimxsd51_ssi_pdata); | ||
| 205 | |||
| 132 | gpio_request(GPIO_LED1, "LED1"); | 206 | gpio_request(GPIO_LED1, "LED1"); |
| 133 | gpio_direction_output(GPIO_LED1, 1); | 207 | gpio_direction_output(GPIO_LED1, 1); |
| 134 | gpio_free(GPIO_LED1); | 208 | gpio_free(GPIO_LED1); |
| @@ -137,9 +211,21 @@ void __init eukrea_mbimxsd51_baseboard_init(void) | |||
| 137 | gpio_direction_input(GPIO_SWITCH1); | 211 | gpio_direction_input(GPIO_SWITCH1); |
| 138 | gpio_free(GPIO_SWITCH1); | 212 | gpio_free(GPIO_SWITCH1); |
| 139 | 213 | ||
| 140 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, | 214 | gpio_request(GPIO_LCDRST, "LCDRST"); |
| 141 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); | 215 | gpio_direction_output(GPIO_LCDRST, 0); |
| 142 | 216 | gpio_request(GPIO_LCDBL, "LCDBL"); | |
| 143 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); | 217 | gpio_direction_output(GPIO_LCDBL, 0); |
| 144 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); | 218 | if (!screen_type) { |
| 219 | platform_device_register(&eukrea_mbimxsd51_bl_dev); | ||
| 220 | platform_device_register(&eukrea_mbimxsd51_lcd_powerdev); | ||
| 221 | } else { | ||
| 222 | gpio_free(GPIO_LCDRST); | ||
| 223 | gpio_free(GPIO_LCDBL); | ||
| 224 | } | ||
| 225 | |||
| 226 | i2c_register_board_info(0, eukrea_mbimxsd51_i2c_devices, | ||
| 227 | ARRAY_SIZE(eukrea_mbimxsd51_i2c_devices)); | ||
| 228 | |||
| 229 | gpio_led_register_device(-1, &eukrea_mbimxsd51_led_info); | ||
| 230 | imx_add_gpio_keys(&eukrea_mbimxsd51_button_data); | ||
| 145 | } | 231 | } |
diff --git a/arch/arm/mach-imx/mach-cpuimx51.c b/arch/arm/mach-imx/mach-cpuimx51.c deleted file mode 100644 index 944025da8333..000000000000 --- a/arch/arm/mach-imx/mach-cpuimx51.c +++ /dev/null | |||
| @@ -1,301 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * | ||
| 3 | * Copyright (C) 2010 Eric Bénard <eric@eukrea.com> | ||
| 4 | * | ||
| 5 | * based on board-mx51_babbage.c which is | ||
| 6 | * Copyright 2009 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 7 | * Copyright (C) 2009-2010 Amit Kucheria <amit.kucheria@canonical.com> | ||
| 8 | * | ||
| 9 | * The code contained herein is licensed under the GNU General Public | ||
| 10 | * License. You may obtain a copy of the GNU General Public License | ||
| 11 | * Version 2 or later at the following locations: | ||
| 12 | * | ||
| 13 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 14 | * http://www.gnu.org/copyleft/gpl.html | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/init.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/serial_8250.h> | ||
| 20 | #include <linux/i2c.h> | ||
| 21 | #include <linux/gpio.h> | ||
| 22 | #include <linux/delay.h> | ||
| 23 | #include <linux/io.h> | ||
| 24 | #include <linux/interrupt.h> | ||
| 25 | |||
| 26 | #include <mach/eukrea-baseboards.h> | ||
| 27 | #include <mach/common.h> | ||
| 28 | #include <mach/hardware.h> | ||
| 29 | #include <mach/iomux-mx51.h> | ||
| 30 | |||
| 31 | #include <asm/setup.h> | ||
| 32 | #include <asm/mach-types.h> | ||
| 33 | #include <asm/mach/arch.h> | ||
| 34 | #include <asm/mach/time.h> | ||
| 35 | |||
| 36 | #include "devices-imx51.h" | ||
| 37 | |||
| 38 | #define CPUIMX51_USBH1_STP IMX_GPIO_NR(1, 27) | ||
| 39 | #define CPUIMX51_QUARTA_GPIO IMX_GPIO_NR(3, 28) | ||
| 40 | #define CPUIMX51_QUARTB_GPIO IMX_GPIO_NR(3, 25) | ||
| 41 | #define CPUIMX51_QUARTC_GPIO IMX_GPIO_NR(3, 26) | ||
| 42 | #define CPUIMX51_QUARTD_GPIO IMX_GPIO_NR(3, 27) | ||
| 43 | #define CPUIMX51_QUART_XTAL 14745600 | ||
| 44 | #define CPUIMX51_QUART_REGSHIFT 17 | ||
| 45 | |||
| 46 | /* USB_CTRL_1 */ | ||
| 47 | #define MX51_USB_CTRL_1_OFFSET 0x10 | ||
| 48 | #define MX51_USB_CTRL_UH1_EXT_CLK_EN (1 << 25) | ||
| 49 | |||
| 50 | #define MX51_USB_PLLDIV_12_MHZ 0x00 | ||
| 51 | #define MX51_USB_PLL_DIV_19_2_MHZ 0x01 | ||
| 52 | #define MX51_USB_PLL_DIV_24_MHZ 0x02 | ||
| 53 | |||
| 54 | static struct plat_serial8250_port serial_platform_data[] = { | ||
| 55 | { | ||
| 56 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x400000), | ||
| 57 | .irq = IMX_GPIO_TO_IRQ(CPUIMX51_QUARTA_GPIO), | ||
| 58 | .irqflags = IRQF_TRIGGER_HIGH, | ||
| 59 | .uartclk = CPUIMX51_QUART_XTAL, | ||
| 60 | .regshift = CPUIMX51_QUART_REGSHIFT, | ||
| 61 | .iotype = UPIO_MEM, | ||
| 62 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | ||
| 63 | }, { | ||
| 64 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x800000), | ||
| 65 | .irq = IMX_GPIO_TO_IRQ(CPUIMX51_QUARTB_GPIO), | ||
| 66 | .irqflags = IRQF_TRIGGER_HIGH, | ||
| 67 | .uartclk = CPUIMX51_QUART_XTAL, | ||
| 68 | .regshift = CPUIMX51_QUART_REGSHIFT, | ||
| 69 | .iotype = UPIO_MEM, | ||
| 70 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | ||
| 71 | }, { | ||
| 72 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x1000000), | ||
| 73 | .irq = IMX_GPIO_TO_IRQ(CPUIMX51_QUARTC_GPIO), | ||
| 74 | .irqflags = IRQF_TRIGGER_HIGH, | ||
| 75 | .uartclk = CPUIMX51_QUART_XTAL, | ||
| 76 | .regshift = CPUIMX51_QUART_REGSHIFT, | ||
| 77 | .iotype = UPIO_MEM, | ||
| 78 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | ||
| 79 | }, { | ||
| 80 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x2000000), | ||
| 81 | .irq = IMX_GPIO_TO_IRQ(CPUIMX51_QUARTD_GPIO), | ||
| 82 | .irqflags = IRQF_TRIGGER_HIGH, | ||
| 83 | .uartclk = CPUIMX51_QUART_XTAL, | ||
| 84 | .regshift = CPUIMX51_QUART_REGSHIFT, | ||
| 85 | .iotype = UPIO_MEM, | ||
| 86 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | ||
| 87 | }, { | ||
| 88 | } | ||
| 89 | }; | ||
| 90 | |||
| 91 | static struct platform_device serial_device = { | ||
| 92 | .name = "serial8250", | ||
| 93 | .id = 0, | ||
| 94 | .dev = { | ||
| 95 | .platform_data = serial_platform_data, | ||
| 96 | }, | ||
| 97 | }; | ||
| 98 | |||
| 99 | static struct platform_device *devices[] __initdata = { | ||
| 100 | &serial_device, | ||
| 101 | }; | ||
| 102 | |||
| 103 | static iomux_v3_cfg_t eukrea_cpuimx51_pads[] = { | ||
| 104 | /* UART1 */ | ||
| 105 | MX51_PAD_UART1_RXD__UART1_RXD, | ||
| 106 | MX51_PAD_UART1_TXD__UART1_TXD, | ||
| 107 | MX51_PAD_UART1_RTS__UART1_RTS, | ||
| 108 | MX51_PAD_UART1_CTS__UART1_CTS, | ||
| 109 | |||
| 110 | /* I2C2 */ | ||
| 111 | MX51_PAD_GPIO1_2__I2C2_SCL, | ||
| 112 | MX51_PAD_GPIO1_3__I2C2_SDA, | ||
| 113 | MX51_PAD_NANDF_D10__GPIO3_30, | ||
| 114 | |||
| 115 | /* QUART IRQ */ | ||
| 116 | MX51_PAD_NANDF_D15__GPIO3_25, | ||
| 117 | MX51_PAD_NANDF_D14__GPIO3_26, | ||
| 118 | MX51_PAD_NANDF_D13__GPIO3_27, | ||
| 119 | MX51_PAD_NANDF_D12__GPIO3_28, | ||
| 120 | |||
| 121 | /* USB HOST1 */ | ||
| 122 | MX51_PAD_USBH1_CLK__USBH1_CLK, | ||
| 123 | MX51_PAD_USBH1_DIR__USBH1_DIR, | ||
| 124 | MX51_PAD_USBH1_NXT__USBH1_NXT, | ||
| 125 | MX51_PAD_USBH1_DATA0__USBH1_DATA0, | ||
| 126 | MX51_PAD_USBH1_DATA1__USBH1_DATA1, | ||
| 127 | MX51_PAD_USBH1_DATA2__USBH1_DATA2, | ||
| 128 | MX51_PAD_USBH1_DATA3__USBH1_DATA3, | ||
| 129 | MX51_PAD_USBH1_DATA4__USBH1_DATA4, | ||
| 130 | MX51_PAD_USBH1_DATA5__USBH1_DATA5, | ||
| 131 | MX51_PAD_USBH1_DATA6__USBH1_DATA6, | ||
| 132 | MX51_PAD_USBH1_DATA7__USBH1_DATA7, | ||
| 133 | MX51_PAD_USBH1_STP__USBH1_STP, | ||
| 134 | }; | ||
| 135 | |||
| 136 | static const struct mxc_nand_platform_data | ||
| 137 | eukrea_cpuimx51_nand_board_info __initconst = { | ||
| 138 | .width = 1, | ||
| 139 | .hw_ecc = 1, | ||
| 140 | .flash_bbt = 1, | ||
| 141 | }; | ||
| 142 | |||
| 143 | static const struct imxuart_platform_data uart_pdata __initconst = { | ||
| 144 | .flags = IMXUART_HAVE_RTSCTS, | ||
| 145 | }; | ||
| 146 | |||
| 147 | static const | ||
| 148 | struct imxi2c_platform_data eukrea_cpuimx51_i2c_data __initconst = { | ||
| 149 | .bitrate = 100000, | ||
| 150 | }; | ||
| 151 | |||
| 152 | static struct i2c_board_info eukrea_cpuimx51_i2c_devices[] = { | ||
| 153 | { | ||
| 154 | I2C_BOARD_INFO("pcf8563", 0x51), | ||
| 155 | }, | ||
| 156 | }; | ||
| 157 | |||
| 158 | /* This function is board specific as the bit mask for the plldiv will also | ||
| 159 | be different for other Freescale SoCs, thus a common bitmask is not | ||
| 160 | possible and cannot get place in /plat-mxc/ehci.c.*/ | ||
| 161 | static int initialize_otg_port(struct platform_device *pdev) | ||
| 162 | { | ||
| 163 | u32 v; | ||
| 164 | void __iomem *usb_base; | ||
| 165 | void __iomem *usbother_base; | ||
| 166 | |||
| 167 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); | ||
| 168 | if (!usb_base) | ||
| 169 | return -ENOMEM; | ||
| 170 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | ||
| 171 | |||
| 172 | /* Set the PHY clock to 19.2MHz */ | ||
| 173 | v = __raw_readl(usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET); | ||
| 174 | v &= ~MX5_USB_UTMI_PHYCTRL1_PLLDIV_MASK; | ||
| 175 | v |= MX51_USB_PLL_DIV_19_2_MHZ; | ||
| 176 | __raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET); | ||
| 177 | iounmap(usb_base); | ||
| 178 | |||
| 179 | mdelay(10); | ||
| 180 | |||
| 181 | return mx51_initialize_usb_hw(0, MXC_EHCI_INTERNAL_PHY); | ||
| 182 | } | ||
| 183 | |||
| 184 | static int initialize_usbh1_port(struct platform_device *pdev) | ||
| 185 | { | ||
| 186 | u32 v; | ||
| 187 | void __iomem *usb_base; | ||
| 188 | void __iomem *usbother_base; | ||
| 189 | |||
| 190 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); | ||
| 191 | if (!usb_base) | ||
| 192 | return -ENOMEM; | ||
| 193 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | ||
| 194 | |||
| 195 | /* The clock for the USBH1 ULPI port will come externally from the PHY. */ | ||
| 196 | v = __raw_readl(usbother_base + MX51_USB_CTRL_1_OFFSET); | ||
| 197 | __raw_writel(v | MX51_USB_CTRL_UH1_EXT_CLK_EN, usbother_base + MX51_USB_CTRL_1_OFFSET); | ||
| 198 | iounmap(usb_base); | ||
| 199 | |||
| 200 | mdelay(10); | ||
| 201 | |||
| 202 | return mx51_initialize_usb_hw(1, MXC_EHCI_POWER_PINS_ENABLED | | ||
| 203 | MXC_EHCI_ITC_NO_THRESHOLD); | ||
| 204 | } | ||
| 205 | |||
| 206 | static const struct mxc_usbh_platform_data dr_utmi_config __initconst = { | ||
| 207 | .init = initialize_otg_port, | ||
| 208 | .portsc = MXC_EHCI_UTMI_16BIT, | ||
| 209 | }; | ||
| 210 | |||
| 211 | static const struct fsl_usb2_platform_data usb_pdata __initconst = { | ||
| 212 | .operating_mode = FSL_USB2_DR_DEVICE, | ||
| 213 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, | ||
| 214 | }; | ||
| 215 | |||
| 216 | static const struct mxc_usbh_platform_data usbh1_config __initconst = { | ||
| 217 | .init = initialize_usbh1_port, | ||
| 218 | .portsc = MXC_EHCI_MODE_ULPI, | ||
| 219 | }; | ||
| 220 | |||
| 221 | static int otg_mode_host; | ||
| 222 | |||
| 223 | static int __init eukrea_cpuimx51_otg_mode(char *options) | ||
| 224 | { | ||
| 225 | if (!strcmp(options, "host")) | ||
| 226 | otg_mode_host = 1; | ||
| 227 | else if (!strcmp(options, "device")) | ||
| 228 | otg_mode_host = 0; | ||
| 229 | else | ||
| 230 | pr_info("otg_mode neither \"host\" nor \"device\". " | ||
| 231 | "Defaulting to device\n"); | ||
| 232 | return 0; | ||
| 233 | } | ||
| 234 | __setup("otg_mode=", eukrea_cpuimx51_otg_mode); | ||
| 235 | |||
| 236 | /* | ||
| 237 | * Board specific initialization. | ||
| 238 | */ | ||
| 239 | static void __init eukrea_cpuimx51_init(void) | ||
| 240 | { | ||
| 241 | imx51_soc_init(); | ||
| 242 | |||
| 243 | mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51_pads, | ||
| 244 | ARRAY_SIZE(eukrea_cpuimx51_pads)); | ||
| 245 | |||
| 246 | imx51_add_imx_uart(0, &uart_pdata); | ||
| 247 | imx51_add_mxc_nand(&eukrea_cpuimx51_nand_board_info); | ||
| 248 | |||
| 249 | gpio_request(CPUIMX51_QUARTA_GPIO, "quarta_irq"); | ||
| 250 | gpio_direction_input(CPUIMX51_QUARTA_GPIO); | ||
| 251 | gpio_free(CPUIMX51_QUARTA_GPIO); | ||
| 252 | gpio_request(CPUIMX51_QUARTB_GPIO, "quartb_irq"); | ||
| 253 | gpio_direction_input(CPUIMX51_QUARTB_GPIO); | ||
| 254 | gpio_free(CPUIMX51_QUARTB_GPIO); | ||
| 255 | gpio_request(CPUIMX51_QUARTC_GPIO, "quartc_irq"); | ||
| 256 | gpio_direction_input(CPUIMX51_QUARTC_GPIO); | ||
| 257 | gpio_free(CPUIMX51_QUARTC_GPIO); | ||
| 258 | gpio_request(CPUIMX51_QUARTD_GPIO, "quartd_irq"); | ||
| 259 | gpio_direction_input(CPUIMX51_QUARTD_GPIO); | ||
| 260 | gpio_free(CPUIMX51_QUARTD_GPIO); | ||
| 261 | |||
| 262 | imx51_add_fec(NULL); | ||
| 263 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
| 264 | |||
| 265 | imx51_add_imx_i2c(1, &eukrea_cpuimx51_i2c_data); | ||
| 266 | i2c_register_board_info(1, eukrea_cpuimx51_i2c_devices, | ||
| 267 | ARRAY_SIZE(eukrea_cpuimx51_i2c_devices)); | ||
| 268 | |||
| 269 | if (otg_mode_host) | ||
| 270 | imx51_add_mxc_ehci_otg(&dr_utmi_config); | ||
| 271 | else { | ||
| 272 | initialize_otg_port(NULL); | ||
| 273 | imx51_add_fsl_usb2_udc(&usb_pdata); | ||
| 274 | } | ||
| 275 | imx51_add_mxc_ehci_hs(1, &usbh1_config); | ||
| 276 | |||
| 277 | #ifdef CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD | ||
| 278 | eukrea_mbimx51_baseboard_init(); | ||
| 279 | #endif | ||
| 280 | } | ||
| 281 | |||
| 282 | static void __init eukrea_cpuimx51_timer_init(void) | ||
| 283 | { | ||
| 284 | mx51_clocks_init(32768, 24000000, 22579200, 0); | ||
| 285 | } | ||
| 286 | |||
| 287 | static struct sys_timer mxc_timer = { | ||
| 288 | .init = eukrea_cpuimx51_timer_init, | ||
| 289 | }; | ||
| 290 | |||
| 291 | MACHINE_START(EUKREA_CPUIMX51, "Eukrea CPUIMX51 Module") | ||
| 292 | /* Maintainer: Eric Bénard <eric@eukrea.com> */ | ||
| 293 | .atag_offset = 0x100, | ||
| 294 | .map_io = mx51_map_io, | ||
| 295 | .init_early = imx51_init_early, | ||
| 296 | .init_irq = mx51_init_irq, | ||
| 297 | .handle_irq = imx51_handle_irq, | ||
| 298 | .timer = &mxc_timer, | ||
| 299 | .init_machine = eukrea_cpuimx51_init, | ||
| 300 | .restart = mxc_restart, | ||
| 301 | MACHINE_END | ||
diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index 9fbe923c8b08..ce341a6874fc 100644 --- a/arch/arm/mach-imx/mach-cpuimx51sd.c +++ b/arch/arm/mach-imx/mach-cpuimx51sd.c | |||
| @@ -41,11 +41,13 @@ | |||
| 41 | 41 | ||
| 42 | #define USBH1_RST IMX_GPIO_NR(2, 28) | 42 | #define USBH1_RST IMX_GPIO_NR(2, 28) |
| 43 | #define ETH_RST IMX_GPIO_NR(2, 31) | 43 | #define ETH_RST IMX_GPIO_NR(2, 31) |
| 44 | #define TSC2007_IRQGPIO IMX_GPIO_NR(3, 12) | 44 | #define TSC2007_IRQGPIO_REV2 IMX_GPIO_NR(3, 12) |
| 45 | #define TSC2007_IRQGPIO_REV3 IMX_GPIO_NR(4, 0) | ||
| 45 | #define CAN_IRQGPIO IMX_GPIO_NR(1, 1) | 46 | #define CAN_IRQGPIO IMX_GPIO_NR(1, 1) |
| 46 | #define CAN_RST IMX_GPIO_NR(4, 15) | 47 | #define CAN_RST IMX_GPIO_NR(4, 15) |
| 47 | #define CAN_NCS IMX_GPIO_NR(4, 24) | 48 | #define CAN_NCS IMX_GPIO_NR(4, 24) |
| 48 | #define CAN_RXOBF IMX_GPIO_NR(1, 4) | 49 | #define CAN_RXOBF_REV2 IMX_GPIO_NR(1, 4) |
| 50 | #define CAN_RXOBF_REV3 IMX_GPIO_NR(3, 12) | ||
| 49 | #define CAN_RX1BF IMX_GPIO_NR(1, 6) | 51 | #define CAN_RX1BF IMX_GPIO_NR(1, 6) |
| 50 | #define CAN_TXORTS IMX_GPIO_NR(1, 7) | 52 | #define CAN_TXORTS IMX_GPIO_NR(1, 7) |
| 51 | #define CAN_TX1RTS IMX_GPIO_NR(1, 8) | 53 | #define CAN_TX1RTS IMX_GPIO_NR(1, 8) |
| @@ -90,6 +92,10 @@ static iomux_v3_cfg_t eukrea_cpuimx51sd_pads[] = { | |||
| 90 | MX51_PAD_I2C1_CLK__GPIO4_16, | 92 | MX51_PAD_I2C1_CLK__GPIO4_16, |
| 91 | MX51_PAD_I2C1_DAT__GPIO4_17, | 93 | MX51_PAD_I2C1_DAT__GPIO4_17, |
| 92 | 94 | ||
| 95 | /* I2C1 */ | ||
| 96 | MX51_PAD_SD2_CMD__I2C1_SCL, | ||
| 97 | MX51_PAD_SD2_CLK__I2C1_SDA, | ||
| 98 | |||
| 93 | /* CAN */ | 99 | /* CAN */ |
| 94 | MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI, | 100 | MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI, |
| 95 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, | 101 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, |
| @@ -108,15 +114,27 @@ static iomux_v3_cfg_t eukrea_cpuimx51sd_pads[] = { | |||
| 108 | NEW_PAD_CTRL(MX51_PAD_GPIO_NAND__GPIO_NAND, PAD_CTL_PUS_22K_UP | | 114 | NEW_PAD_CTRL(MX51_PAD_GPIO_NAND__GPIO_NAND, PAD_CTL_PUS_22K_UP | |
| 109 | PAD_CTL_PKE | PAD_CTL_SRE_FAST | | 115 | PAD_CTL_PKE | PAD_CTL_SRE_FAST | |
| 110 | PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), | 116 | PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), |
| 117 | NEW_PAD_CTRL(MX51_PAD_NANDF_D8__GPIO4_0, PAD_CTL_PUS_22K_UP | | ||
| 118 | PAD_CTL_PKE | PAD_CTL_SRE_FAST | | ||
| 119 | PAD_CTL_DSE_HIGH | PAD_CTL_PUE | PAD_CTL_HYS), | ||
| 111 | }; | 120 | }; |
| 112 | 121 | ||
| 113 | static const struct imxuart_platform_data uart_pdata __initconst = { | 122 | static const struct imxuart_platform_data uart_pdata __initconst = { |
| 114 | .flags = IMXUART_HAVE_RTSCTS, | 123 | .flags = IMXUART_HAVE_RTSCTS, |
| 115 | }; | 124 | }; |
| 116 | 125 | ||
| 126 | static int tsc2007_get_pendown_state(void) | ||
| 127 | { | ||
| 128 | if (mx51_revision() < IMX_CHIP_REVISION_3_0) | ||
| 129 | return !gpio_get_value(TSC2007_IRQGPIO_REV2); | ||
| 130 | else | ||
| 131 | return !gpio_get_value(TSC2007_IRQGPIO_REV3); | ||
| 132 | } | ||
| 133 | |||
| 117 | static struct tsc2007_platform_data tsc2007_info = { | 134 | static struct tsc2007_platform_data tsc2007_info = { |
| 118 | .model = 2007, | 135 | .model = 2007, |
| 119 | .x_plate_ohms = 180, | 136 | .x_plate_ohms = 180, |
| 137 | .get_pendown_state = tsc2007_get_pendown_state, | ||
| 120 | }; | 138 | }; |
| 121 | 139 | ||
| 122 | static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = { | 140 | static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = { |
| @@ -126,7 +144,6 @@ static struct i2c_board_info eukrea_cpuimx51sd_i2c_devices[] = { | |||
| 126 | I2C_BOARD_INFO("tsc2007", 0x49), | 144 | I2C_BOARD_INFO("tsc2007", 0x49), |
| 127 | .type = "tsc2007", | 145 | .type = "tsc2007", |
| 128 | .platform_data = &tsc2007_info, | 146 | .platform_data = &tsc2007_info, |
| 129 | .irq = IMX_GPIO_TO_IRQ(TSC2007_IRQGPIO), | ||
| 130 | }, | 147 | }, |
| 131 | }; | 148 | }; |
| 132 | 149 | ||
| @@ -255,10 +272,14 @@ static const struct spi_imx_master cpuimx51sd_ecspi1_pdata __initconst = { | |||
| 255 | .num_chipselect = ARRAY_SIZE(cpuimx51sd_spi1_cs), | 272 | .num_chipselect = ARRAY_SIZE(cpuimx51sd_spi1_cs), |
| 256 | }; | 273 | }; |
| 257 | 274 | ||
| 258 | static struct platform_device *platform_devices[] __initdata = { | 275 | static struct platform_device *rev2_platform_devices[] __initdata = { |
| 259 | &hsi2c_gpio_device, | 276 | &hsi2c_gpio_device, |
| 260 | }; | 277 | }; |
| 261 | 278 | ||
| 279 | static const struct imxi2c_platform_data cpuimx51sd_i2c_data __initconst = { | ||
| 280 | .bitrate = 100000, | ||
| 281 | }; | ||
| 282 | |||
| 262 | static void __init eukrea_cpuimx51sd_init(void) | 283 | static void __init eukrea_cpuimx51sd_init(void) |
| 263 | { | 284 | { |
| 264 | imx51_soc_init(); | 285 | imx51_soc_init(); |
| @@ -272,6 +293,7 @@ static void __init eukrea_cpuimx51sd_init(void) | |||
| 272 | 293 | ||
| 273 | imx51_add_imx_uart(0, &uart_pdata); | 294 | imx51_add_imx_uart(0, &uart_pdata); |
| 274 | imx51_add_mxc_nand(&eukrea_cpuimx51sd_nand_board_info); | 295 | imx51_add_mxc_nand(&eukrea_cpuimx51sd_nand_board_info); |
| 296 | imx51_add_imx2_wdt(0, NULL); | ||
| 275 | 297 | ||
| 276 | gpio_request(ETH_RST, "eth_rst"); | 298 | gpio_request(ETH_RST, "eth_rst"); |
| 277 | gpio_set_value(ETH_RST, 1); | 299 | gpio_set_value(ETH_RST, 1); |
| @@ -291,13 +313,25 @@ static void __init eukrea_cpuimx51sd_init(void) | |||
| 291 | spi_register_board_info(cpuimx51sd_spi_device, | 313 | spi_register_board_info(cpuimx51sd_spi_device, |
| 292 | ARRAY_SIZE(cpuimx51sd_spi_device)); | 314 | ARRAY_SIZE(cpuimx51sd_spi_device)); |
| 293 | 315 | ||
| 294 | gpio_request(TSC2007_IRQGPIO, "tsc2007_irq"); | 316 | if (mx51_revision() < IMX_CHIP_REVISION_3_0) { |
| 295 | gpio_direction_input(TSC2007_IRQGPIO); | 317 | eukrea_cpuimx51sd_i2c_devices[1].irq = |
| 296 | gpio_free(TSC2007_IRQGPIO); | 318 | gpio_to_irq(TSC2007_IRQGPIO_REV2), |
| 319 | platform_add_devices(rev2_platform_devices, | ||
| 320 | ARRAY_SIZE(rev2_platform_devices)); | ||
| 321 | gpio_request(TSC2007_IRQGPIO_REV2, "tsc2007_irq"); | ||
| 322 | gpio_direction_input(TSC2007_IRQGPIO_REV2); | ||
| 323 | gpio_free(TSC2007_IRQGPIO_REV2); | ||
| 324 | } else { | ||
| 325 | eukrea_cpuimx51sd_i2c_devices[1].irq = | ||
| 326 | gpio_to_irq(TSC2007_IRQGPIO_REV3), | ||
| 327 | imx51_add_imx_i2c(0, &cpuimx51sd_i2c_data); | ||
| 328 | gpio_request(TSC2007_IRQGPIO_REV3, "tsc2007_irq"); | ||
| 329 | gpio_direction_input(TSC2007_IRQGPIO_REV3); | ||
| 330 | gpio_free(TSC2007_IRQGPIO_REV3); | ||
| 331 | } | ||
| 297 | 332 | ||
| 298 | i2c_register_board_info(0, eukrea_cpuimx51sd_i2c_devices, | 333 | i2c_register_board_info(0, eukrea_cpuimx51sd_i2c_devices, |
| 299 | ARRAY_SIZE(eukrea_cpuimx51sd_i2c_devices)); | 334 | ARRAY_SIZE(eukrea_cpuimx51sd_i2c_devices)); |
| 300 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | ||
| 301 | 335 | ||
| 302 | if (otg_mode_host) | 336 | if (otg_mode_host) |
| 303 | imx51_add_mxc_ehci_otg(&dr_utmi_config); | 337 | imx51_add_mxc_ehci_otg(&dr_utmi_config); |
diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c index 76a97a598b9e..d1e04e676e33 100644 --- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c +++ b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c | |||
| @@ -106,6 +106,7 @@ static const struct mxc_usbh_platform_data usbh2_pdata __initconst = { | |||
| 106 | static const struct fsl_usb2_platform_data otg_device_pdata __initconst = { | 106 | static const struct fsl_usb2_platform_data otg_device_pdata __initconst = { |
| 107 | .operating_mode = FSL_USB2_DR_DEVICE, | 107 | .operating_mode = FSL_USB2_DR_DEVICE, |
| 108 | .phy_mode = FSL_USB2_PHY_UTMI, | 108 | .phy_mode = FSL_USB2_PHY_UTMI, |
| 109 | .workaround = FLS_USB2_WORKAROUND_ENGCM09152, | ||
| 109 | }; | 110 | }; |
| 110 | 111 | ||
| 111 | static int otg_mode_host; | 112 | static int otg_mode_host; |
| @@ -135,6 +136,7 @@ static void __init eukrea_cpuimx25_init(void) | |||
| 135 | imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info); | 136 | imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info); |
| 136 | imx25_add_imxdi_rtc(NULL); | 137 | imx25_add_imxdi_rtc(NULL); |
| 137 | imx25_add_fec(&mx25_fec_pdata); | 138 | imx25_add_fec(&mx25_fec_pdata); |
| 139 | imx25_add_imx2_wdt(NULL); | ||
| 138 | 140 | ||
| 139 | i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices, | 141 | i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices, |
| 140 | ARRAY_SIZE(eukrea_cpuimx25_i2c_devices)); | 142 | ARRAY_SIZE(eukrea_cpuimx25_i2c_devices)); |
