diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2011-08-03 03:42:39 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-08-03 03:42:39 -0400 |
commit | c61daf6b0a2f7048c6e74d52b043fa6a779b128a (patch) | |
tree | a4a38656ac79775f38ce5fd6b00dd9b89cd5ccec /arch/arm/mach-mx5 | |
parent | 786c89f7a24b4ed8b68dfb136347267875315c30 (diff) | |
parent | 160a84cfc975f4aaec1cb32a48bba23ccaf43761 (diff) |
Merge branch 'imx-cleanup' of git://git.pengutronix.de/git/ukl/linux-2.6 into imx-cleanup
Diffstat (limited to 'arch/arm/mach-mx5')
26 files changed, 679 insertions, 366 deletions
diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig index 3b5aed2bb58..b4f5ab669e4 100644 --- a/arch/arm/mach-mx5/Kconfig +++ b/arch/arm/mach-mx5/Kconfig | |||
@@ -64,9 +64,11 @@ comment "i.MX51 machines:" | |||
64 | config MACH_MX51_BABBAGE | 64 | config MACH_MX51_BABBAGE |
65 | bool "Support MX51 BABBAGE platforms" | 65 | bool "Support MX51 BABBAGE platforms" |
66 | select SOC_IMX51 | 66 | select SOC_IMX51 |
67 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||
67 | select IMX_HAVE_PLATFORM_IMX2_WDT | 68 | select IMX_HAVE_PLATFORM_IMX2_WDT |
68 | select IMX_HAVE_PLATFORM_IMX_I2C | 69 | select IMX_HAVE_PLATFORM_IMX_I2C |
69 | select IMX_HAVE_PLATFORM_IMX_UART | 70 | select IMX_HAVE_PLATFORM_IMX_UART |
71 | select IMX_HAVE_PLATFORM_MXC_EHCI | ||
70 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 72 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
71 | select IMX_HAVE_PLATFORM_SPI_IMX | 73 | select IMX_HAVE_PLATFORM_SPI_IMX |
72 | help | 74 | help |
@@ -90,8 +92,10 @@ config MACH_MX51_3DS | |||
90 | config MACH_EUKREA_CPUIMX51 | 92 | config MACH_EUKREA_CPUIMX51 |
91 | bool "Support Eukrea CPUIMX51 module" | 93 | bool "Support Eukrea CPUIMX51 module" |
92 | select SOC_IMX51 | 94 | select SOC_IMX51 |
95 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||
93 | select IMX_HAVE_PLATFORM_IMX_I2C | 96 | select IMX_HAVE_PLATFORM_IMX_I2C |
94 | select IMX_HAVE_PLATFORM_IMX_UART | 97 | select IMX_HAVE_PLATFORM_IMX_UART |
98 | select IMX_HAVE_PLATFORM_MXC_EHCI | ||
95 | select IMX_HAVE_PLATFORM_MXC_NAND | 99 | select IMX_HAVE_PLATFORM_MXC_NAND |
96 | select IMX_HAVE_PLATFORM_SPI_IMX | 100 | select IMX_HAVE_PLATFORM_SPI_IMX |
97 | help | 101 | help |
@@ -108,6 +112,7 @@ config MACH_EUKREA_MBIMX51_BASEBOARD | |||
108 | bool | 112 | bool |
109 | select IMX_HAVE_PLATFORM_IMX_KEYPAD | 113 | select IMX_HAVE_PLATFORM_IMX_KEYPAD |
110 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 114 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
115 | select LEDS_GPIO_REGISTER | ||
111 | help | 116 | help |
112 | This adds board specific devices that can be found on Eukrea's | 117 | This adds board specific devices that can be found on Eukrea's |
113 | MBIMX51 evaluation board. | 118 | MBIMX51 evaluation board. |
@@ -117,10 +122,12 @@ endchoice | |||
117 | config MACH_EUKREA_CPUIMX51SD | 122 | config MACH_EUKREA_CPUIMX51SD |
118 | bool "Support Eukrea CPUIMX51SD module" | 123 | bool "Support Eukrea CPUIMX51SD module" |
119 | select SOC_IMX51 | 124 | select SOC_IMX51 |
125 | select IMX_HAVE_PLATFORM_FSL_USB2_UDC | ||
120 | select IMX_HAVE_PLATFORM_IMX_I2C | 126 | select IMX_HAVE_PLATFORM_IMX_I2C |
121 | select IMX_HAVE_PLATFORM_SPI_IMX | ||
122 | select IMX_HAVE_PLATFORM_IMX_UART | 127 | select IMX_HAVE_PLATFORM_IMX_UART |
128 | select IMX_HAVE_PLATFORM_MXC_EHCI | ||
123 | select IMX_HAVE_PLATFORM_MXC_NAND | 129 | select IMX_HAVE_PLATFORM_MXC_NAND |
130 | select IMX_HAVE_PLATFORM_SPI_IMX | ||
124 | help | 131 | help |
125 | Include support for Eukrea CPUIMX51SD platform. This includes | 132 | Include support for Eukrea CPUIMX51SD platform. This includes |
126 | specific configurations for the module and its peripherals. | 133 | specific configurations for the module and its peripherals. |
@@ -134,6 +141,7 @@ config MACH_EUKREA_MBIMXSD51_BASEBOARD | |||
134 | prompt "Eukrea MBIMXSD development board" | 141 | prompt "Eukrea MBIMXSD development board" |
135 | bool | 142 | bool |
136 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 143 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
144 | select LEDS_GPIO_REGISTER | ||
137 | help | 145 | help |
138 | This adds board specific devices that can be found on Eukrea's | 146 | This adds board specific devices that can be found on Eukrea's |
139 | MBIMXSD evaluation board. | 147 | MBIMXSD evaluation board. |
@@ -144,12 +152,14 @@ config MX51_EFIKA_COMMON | |||
144 | bool | 152 | bool |
145 | select SOC_IMX51 | 153 | select SOC_IMX51 |
146 | select IMX_HAVE_PLATFORM_IMX_UART | 154 | select IMX_HAVE_PLATFORM_IMX_UART |
155 | select IMX_HAVE_PLATFORM_MXC_EHCI | ||
147 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 156 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
148 | select IMX_HAVE_PLATFORM_SPI_IMX | 157 | select IMX_HAVE_PLATFORM_SPI_IMX |
149 | select MXC_ULPI if USB_ULPI | 158 | select MXC_ULPI if USB_ULPI |
150 | 159 | ||
151 | config MACH_MX51_EFIKAMX | 160 | config MACH_MX51_EFIKAMX |
152 | bool "Support MX51 Genesi Efika MX nettop" | 161 | bool "Support MX51 Genesi Efika MX nettop" |
162 | select LEDS_GPIO_REGISTER | ||
153 | select MX51_EFIKA_COMMON | 163 | select MX51_EFIKA_COMMON |
154 | help | 164 | help |
155 | Include support for Genesi Efika MX nettop. This includes specific | 165 | Include support for Genesi Efika MX nettop. This includes specific |
@@ -157,6 +167,7 @@ config MACH_MX51_EFIKAMX | |||
157 | 167 | ||
158 | config MACH_MX51_EFIKASB | 168 | config MACH_MX51_EFIKASB |
159 | bool "Support MX51 Genesi Efika Smartbook" | 169 | bool "Support MX51 Genesi Efika Smartbook" |
170 | select LEDS_GPIO_REGISTER | ||
160 | select MX51_EFIKA_COMMON | 171 | select MX51_EFIKA_COMMON |
161 | help | 172 | help |
162 | Include support for Genesi Efika Smartbook. This includes specific | 173 | Include support for Genesi Efika Smartbook. This includes specific |
@@ -175,6 +186,7 @@ config MACH_MX53_EVK | |||
175 | select IMX_HAVE_PLATFORM_IMX_I2C | 186 | select IMX_HAVE_PLATFORM_IMX_I2C |
176 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 187 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
177 | select IMX_HAVE_PLATFORM_SPI_IMX | 188 | select IMX_HAVE_PLATFORM_SPI_IMX |
189 | select LEDS_GPIO_REGISTER | ||
178 | help | 190 | help |
179 | Include support for MX53 EVK platform. This includes specific | 191 | Include support for MX53 EVK platform. This includes specific |
180 | configurations for the board and its peripherals. | 192 | configurations for the board and its peripherals. |
@@ -198,10 +210,23 @@ config MACH_MX53_LOCO | |||
198 | select IMX_HAVE_PLATFORM_IMX_UART | 210 | select IMX_HAVE_PLATFORM_IMX_UART |
199 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | 211 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX |
200 | select IMX_HAVE_PLATFORM_GPIO_KEYS | 212 | select IMX_HAVE_PLATFORM_GPIO_KEYS |
213 | select LEDS_GPIO_REGISTER | ||
201 | help | 214 | help |
202 | Include support for MX53 LOCO platform. This includes specific | 215 | Include support for MX53 LOCO platform. This includes specific |
203 | configurations for the board and its peripherals. | 216 | configurations for the board and its peripherals. |
204 | 217 | ||
218 | config MACH_MX53_ARD | ||
219 | bool "Support MX53 ARD platforms" | ||
220 | select SOC_IMX53 | ||
221 | select IMX_HAVE_PLATFORM_IMX2_WDT | ||
222 | select IMX_HAVE_PLATFORM_IMX_I2C | ||
223 | select IMX_HAVE_PLATFORM_IMX_UART | ||
224 | select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX | ||
225 | select IMX_HAVE_PLATFORM_GPIO_KEYS | ||
226 | help | ||
227 | Include support for MX53 ARD platform. This includes specific | ||
228 | configurations for the board and its peripherals. | ||
229 | |||
205 | endif # ARCH_MX53_SUPPORTED | 230 | endif # ARCH_MX53_SUPPORTED |
206 | 231 | ||
207 | endif | 232 | endif |
diff --git a/arch/arm/mach-mx5/Makefile b/arch/arm/mach-mx5/Makefile index 0b9338cec51..7f452433a69 100644 --- a/arch/arm/mach-mx5/Makefile +++ b/arch/arm/mach-mx5/Makefile | |||
@@ -3,15 +3,17 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Object file lists. | 5 | # Object file lists. |
6 | obj-y := cpu.o mm.o clock-mx51-mx53.o devices.o ehci.o system.o | 6 | obj-y := cpu.o mm.o clock-mx51-mx53.o ehci.o system.o |
7 | obj-$(CONFIG_SOC_IMX50) += mm-mx50.o | 7 | obj-$(CONFIG_SOC_IMX50) += mm-mx50.o |
8 | 8 | ||
9 | obj-$(CONFIG_PM) += pm-imx5.o | ||
9 | obj-$(CONFIG_CPU_FREQ_IMX) += cpu_op-mx51.o | 10 | obj-$(CONFIG_CPU_FREQ_IMX) += cpu_op-mx51.o |
10 | obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o | 11 | obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o |
11 | obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o | 12 | obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o |
12 | obj-$(CONFIG_MACH_MX53_EVK) += board-mx53_evk.o | 13 | obj-$(CONFIG_MACH_MX53_EVK) += board-mx53_evk.o |
13 | obj-$(CONFIG_MACH_MX53_SMD) += board-mx53_smd.o | 14 | obj-$(CONFIG_MACH_MX53_SMD) += board-mx53_smd.o |
14 | obj-$(CONFIG_MACH_MX53_LOCO) += board-mx53_loco.o | 15 | obj-$(CONFIG_MACH_MX53_LOCO) += board-mx53_loco.o |
16 | obj-$(CONFIG_MACH_MX53_ARD) += board-mx53_ard.o | ||
15 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o | 17 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o |
16 | obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o | 18 | obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o |
17 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o | 19 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o |
diff --git a/arch/arm/mach-mx5/board-cpuimx51.c b/arch/arm/mach-mx5/board-cpuimx51.c index 4efa02ee163..e2afe0c2a12 100644 --- a/arch/arm/mach-mx5/board-cpuimx51.c +++ b/arch/arm/mach-mx5/board-cpuimx51.c | |||
@@ -36,17 +36,12 @@ | |||
36 | #include <asm/mach/time.h> | 36 | #include <asm/mach/time.h> |
37 | 37 | ||
38 | #include "devices-imx51.h" | 38 | #include "devices-imx51.h" |
39 | #include "devices.h" | ||
40 | 39 | ||
41 | #define CPUIMX51_USBH1_STP IMX_GPIO_NR(1, 27) | 40 | #define CPUIMX51_USBH1_STP IMX_GPIO_NR(1, 27) |
42 | #define CPUIMX51_QUARTA_GPIO IMX_GPIO_NR(3, 28) | 41 | #define CPUIMX51_QUARTA_GPIO IMX_GPIO_NR(3, 28) |
43 | #define CPUIMX51_QUARTB_GPIO IMX_GPIO_NR(3, 25) | 42 | #define CPUIMX51_QUARTB_GPIO IMX_GPIO_NR(3, 25) |
44 | #define CPUIMX51_QUARTC_GPIO IMX_GPIO_NR(3, 26) | 43 | #define CPUIMX51_QUARTC_GPIO IMX_GPIO_NR(3, 26) |
45 | #define CPUIMX51_QUARTD_GPIO IMX_GPIO_NR(3, 27) | 44 | #define CPUIMX51_QUARTD_GPIO IMX_GPIO_NR(3, 27) |
46 | #define CPUIMX51_QUARTA_IRQ (MXC_INTERNAL_IRQS + CPUIMX51_QUARTA_GPIO) | ||
47 | #define CPUIMX51_QUARTB_IRQ (MXC_INTERNAL_IRQS + CPUIMX51_QUARTB_GPIO) | ||
48 | #define CPUIMX51_QUARTC_IRQ (MXC_INTERNAL_IRQS + CPUIMX51_QUARTC_GPIO) | ||
49 | #define CPUIMX51_QUARTD_IRQ (MXC_INTERNAL_IRQS + CPUIMX51_QUARTD_GPIO) | ||
50 | #define CPUIMX51_QUART_XTAL 14745600 | 45 | #define CPUIMX51_QUART_XTAL 14745600 |
51 | #define CPUIMX51_QUART_REGSHIFT 17 | 46 | #define CPUIMX51_QUART_REGSHIFT 17 |
52 | 47 | ||
@@ -61,7 +56,7 @@ | |||
61 | static struct plat_serial8250_port serial_platform_data[] = { | 56 | static struct plat_serial8250_port serial_platform_data[] = { |
62 | { | 57 | { |
63 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x400000), | 58 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x400000), |
64 | .irq = CPUIMX51_QUARTA_IRQ, | 59 | .irq = gpio_to_irq(CPUIMX51_QUARTA_GPIO), |
65 | .irqflags = IRQF_TRIGGER_HIGH, | 60 | .irqflags = IRQF_TRIGGER_HIGH, |
66 | .uartclk = CPUIMX51_QUART_XTAL, | 61 | .uartclk = CPUIMX51_QUART_XTAL, |
67 | .regshift = CPUIMX51_QUART_REGSHIFT, | 62 | .regshift = CPUIMX51_QUART_REGSHIFT, |
@@ -69,7 +64,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
69 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | 64 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, |
70 | }, { | 65 | }, { |
71 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x800000), | 66 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x800000), |
72 | .irq = CPUIMX51_QUARTB_IRQ, | 67 | .irq = gpio_to_irq(CPUIMX51_QUARTB_GPIO), |
73 | .irqflags = IRQF_TRIGGER_HIGH, | 68 | .irqflags = IRQF_TRIGGER_HIGH, |
74 | .uartclk = CPUIMX51_QUART_XTAL, | 69 | .uartclk = CPUIMX51_QUART_XTAL, |
75 | .regshift = CPUIMX51_QUART_REGSHIFT, | 70 | .regshift = CPUIMX51_QUART_REGSHIFT, |
@@ -77,7 +72,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
77 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | 72 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, |
78 | }, { | 73 | }, { |
79 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x1000000), | 74 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x1000000), |
80 | .irq = CPUIMX51_QUARTC_IRQ, | 75 | .irq = gpio_to_irq(CPUIMX51_QUARTC_GPIO), |
81 | .irqflags = IRQF_TRIGGER_HIGH, | 76 | .irqflags = IRQF_TRIGGER_HIGH, |
82 | .uartclk = CPUIMX51_QUART_XTAL, | 77 | .uartclk = CPUIMX51_QUART_XTAL, |
83 | .regshift = CPUIMX51_QUART_REGSHIFT, | 78 | .regshift = CPUIMX51_QUART_REGSHIFT, |
@@ -85,7 +80,7 @@ static struct plat_serial8250_port serial_platform_data[] = { | |||
85 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, | 80 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, |
86 | }, { | 81 | }, { |
87 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x2000000), | 82 | .mapbase = (unsigned long)(MX51_CS1_BASE_ADDR + 0x2000000), |
88 | .irq = CPUIMX51_QUARTD_IRQ, | 83 | .irq = irq_to_gpio(CPUIMX51_QUARTD_GPIO), |
89 | .irqflags = IRQF_TRIGGER_HIGH, | 84 | .irqflags = IRQF_TRIGGER_HIGH, |
90 | .uartclk = CPUIMX51_QUART_XTAL, | 85 | .uartclk = CPUIMX51_QUART_XTAL, |
91 | .regshift = CPUIMX51_QUART_REGSHIFT, | 86 | .regshift = CPUIMX51_QUART_REGSHIFT, |
@@ -171,7 +166,7 @@ static int initialize_otg_port(struct platform_device *pdev) | |||
171 | void __iomem *usb_base; | 166 | void __iomem *usb_base; |
172 | void __iomem *usbother_base; | 167 | void __iomem *usbother_base; |
173 | 168 | ||
174 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 169 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
175 | if (!usb_base) | 170 | if (!usb_base) |
176 | return -ENOMEM; | 171 | return -ENOMEM; |
177 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 172 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -194,7 +189,7 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
194 | void __iomem *usb_base; | 189 | void __iomem *usb_base; |
195 | void __iomem *usbother_base; | 190 | void __iomem *usbother_base; |
196 | 191 | ||
197 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 192 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
198 | if (!usb_base) | 193 | if (!usb_base) |
199 | return -ENOMEM; | 194 | return -ENOMEM; |
200 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 195 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -210,17 +205,17 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
210 | MXC_EHCI_ITC_NO_THRESHOLD); | 205 | MXC_EHCI_ITC_NO_THRESHOLD); |
211 | } | 206 | } |
212 | 207 | ||
213 | static struct mxc_usbh_platform_data dr_utmi_config = { | 208 | static const struct mxc_usbh_platform_data dr_utmi_config __initconst = { |
214 | .init = initialize_otg_port, | 209 | .init = initialize_otg_port, |
215 | .portsc = MXC_EHCI_UTMI_16BIT, | 210 | .portsc = MXC_EHCI_UTMI_16BIT, |
216 | }; | 211 | }; |
217 | 212 | ||
218 | static struct fsl_usb2_platform_data usb_pdata = { | 213 | static const struct fsl_usb2_platform_data usb_pdata __initconst = { |
219 | .operating_mode = FSL_USB2_DR_DEVICE, | 214 | .operating_mode = FSL_USB2_DR_DEVICE, |
220 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, | 215 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, |
221 | }; | 216 | }; |
222 | 217 | ||
223 | static struct mxc_usbh_platform_data usbh1_config = { | 218 | static const struct mxc_usbh_platform_data usbh1_config __initconst = { |
224 | .init = initialize_usbh1_port, | 219 | .init = initialize_usbh1_port, |
225 | .portsc = MXC_EHCI_MODE_ULPI, | 220 | .portsc = MXC_EHCI_MODE_ULPI, |
226 | }; | 221 | }; |
@@ -245,6 +240,8 @@ __setup("otg_mode=", eukrea_cpuimx51_otg_mode); | |||
245 | */ | 240 | */ |
246 | static void __init eukrea_cpuimx51_init(void) | 241 | static void __init eukrea_cpuimx51_init(void) |
247 | { | 242 | { |
243 | imx51_soc_init(); | ||
244 | |||
248 | mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51_pads, | 245 | mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51_pads, |
249 | ARRAY_SIZE(eukrea_cpuimx51_pads)); | 246 | ARRAY_SIZE(eukrea_cpuimx51_pads)); |
250 | 247 | ||
@@ -272,12 +269,12 @@ static void __init eukrea_cpuimx51_init(void) | |||
272 | ARRAY_SIZE(eukrea_cpuimx51_i2c_devices)); | 269 | ARRAY_SIZE(eukrea_cpuimx51_i2c_devices)); |
273 | 270 | ||
274 | if (otg_mode_host) | 271 | if (otg_mode_host) |
275 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | 272 | imx51_add_mxc_ehci_otg(&dr_utmi_config); |
276 | else { | 273 | else { |
277 | initialize_otg_port(NULL); | 274 | initialize_otg_port(NULL); |
278 | mxc_register_device(&mxc_usbdr_udc_device, &usb_pdata); | 275 | imx51_add_fsl_usb2_udc(&usb_pdata); |
279 | } | 276 | } |
280 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 277 | imx51_add_mxc_ehci_hs(1, &usbh1_config); |
281 | 278 | ||
282 | #ifdef CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD | 279 | #ifdef CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD |
283 | eukrea_mbimx51_baseboard_init(); | 280 | eukrea_mbimx51_baseboard_init(); |
diff --git a/arch/arm/mach-mx5/board-cpuimx51sd.c b/arch/arm/mach-mx5/board-cpuimx51sd.c index 5ef25a59614..71a5832d092 100644 --- a/arch/arm/mach-mx5/board-cpuimx51sd.c +++ b/arch/arm/mach-mx5/board-cpuimx51sd.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #include <asm/mach/time.h> | 39 | #include <asm/mach/time.h> |
40 | 40 | ||
41 | #include "devices-imx51.h" | 41 | #include "devices-imx51.h" |
42 | #include "devices.h" | ||
43 | #include "cpu_op-mx51.h" | 42 | #include "cpu_op-mx51.h" |
44 | 43 | ||
45 | #define USBH1_RST IMX_GPIO_NR(2, 28) | 44 | #define USBH1_RST IMX_GPIO_NR(2, 28) |
@@ -149,7 +148,7 @@ static int initialize_otg_port(struct platform_device *pdev) | |||
149 | void __iomem *usb_base; | 148 | void __iomem *usb_base; |
150 | void __iomem *usbother_base; | 149 | void __iomem *usbother_base; |
151 | 150 | ||
152 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 151 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
153 | if (!usb_base) | 152 | if (!usb_base) |
154 | return -ENOMEM; | 153 | return -ENOMEM; |
155 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 154 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -172,7 +171,7 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
172 | void __iomem *usb_base; | 171 | void __iomem *usb_base; |
173 | void __iomem *usbother_base; | 172 | void __iomem *usbother_base; |
174 | 173 | ||
175 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 174 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
176 | if (!usb_base) | 175 | if (!usb_base) |
177 | return -ENOMEM; | 176 | return -ENOMEM; |
178 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 177 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -189,17 +188,17 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
189 | MXC_EHCI_ITC_NO_THRESHOLD); | 188 | MXC_EHCI_ITC_NO_THRESHOLD); |
190 | } | 189 | } |
191 | 190 | ||
192 | static struct mxc_usbh_platform_data dr_utmi_config = { | 191 | static const struct mxc_usbh_platform_data dr_utmi_config __initconst = { |
193 | .init = initialize_otg_port, | 192 | .init = initialize_otg_port, |
194 | .portsc = MXC_EHCI_UTMI_16BIT, | 193 | .portsc = MXC_EHCI_UTMI_16BIT, |
195 | }; | 194 | }; |
196 | 195 | ||
197 | static struct fsl_usb2_platform_data usb_pdata = { | 196 | static const struct fsl_usb2_platform_data usb_pdata __initconst = { |
198 | .operating_mode = FSL_USB2_DR_DEVICE, | 197 | .operating_mode = FSL_USB2_DR_DEVICE, |
199 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, | 198 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, |
200 | }; | 199 | }; |
201 | 200 | ||
202 | static struct mxc_usbh_platform_data usbh1_config = { | 201 | static const struct mxc_usbh_platform_data usbh1_config __initconst = { |
203 | .init = initialize_usbh1_port, | 202 | .init = initialize_usbh1_port, |
204 | .portsc = MXC_EHCI_MODE_ULPI, | 203 | .portsc = MXC_EHCI_MODE_ULPI, |
205 | }; | 204 | }; |
@@ -264,6 +263,8 @@ static struct platform_device *platform_devices[] __initdata = { | |||
264 | 263 | ||
265 | static void __init eukrea_cpuimx51sd_init(void) | 264 | static void __init eukrea_cpuimx51sd_init(void) |
266 | { | 265 | { |
266 | imx51_soc_init(); | ||
267 | |||
267 | mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51sd_pads, | 268 | mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51sd_pads, |
268 | ARRAY_SIZE(eukrea_cpuimx51sd_pads)); | 269 | ARRAY_SIZE(eukrea_cpuimx51sd_pads)); |
269 | 270 | ||
@@ -301,17 +302,17 @@ static void __init eukrea_cpuimx51sd_init(void) | |||
301 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | 302 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); |
302 | 303 | ||
303 | if (otg_mode_host) | 304 | if (otg_mode_host) |
304 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | 305 | imx51_add_mxc_ehci_otg(&dr_utmi_config); |
305 | else { | 306 | else { |
306 | initialize_otg_port(NULL); | 307 | initialize_otg_port(NULL); |
307 | mxc_register_device(&mxc_usbdr_udc_device, &usb_pdata); | 308 | imx51_add_fsl_usb2_udc(&usb_pdata); |
308 | } | 309 | } |
309 | 310 | ||
310 | gpio_request(USBH1_RST, "usb_rst"); | 311 | gpio_request(USBH1_RST, "usb_rst"); |
311 | gpio_direction_output(USBH1_RST, 0); | 312 | gpio_direction_output(USBH1_RST, 0); |
312 | msleep(20); | 313 | msleep(20); |
313 | gpio_set_value(USBH1_RST, 1); | 314 | gpio_set_value(USBH1_RST, 1); |
314 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 315 | imx51_add_mxc_ehci_hs(1, &usbh1_config); |
315 | 316 | ||
316 | #ifdef CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD | 317 | #ifdef CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD |
317 | eukrea_mbimxsd51_baseboard_init(); | 318 | eukrea_mbimxsd51_baseboard_init(); |
diff --git a/arch/arm/mach-mx5/board-mx50_rdp.c b/arch/arm/mach-mx5/board-mx50_rdp.c index 11210e1ae42..7de25c6712e 100644 --- a/arch/arm/mach-mx5/board-mx50_rdp.c +++ b/arch/arm/mach-mx5/board-mx50_rdp.c | |||
@@ -192,6 +192,8 @@ static const struct imxi2c_platform_data i2c_data __initconst = { | |||
192 | */ | 192 | */ |
193 | static void __init mx50_rdp_board_init(void) | 193 | static void __init mx50_rdp_board_init(void) |
194 | { | 194 | { |
195 | imx50_soc_init(); | ||
196 | |||
195 | mxc_iomux_v3_setup_multiple_pads(mx50_rdp_pads, | 197 | mxc_iomux_v3_setup_multiple_pads(mx50_rdp_pads, |
196 | ARRAY_SIZE(mx50_rdp_pads)); | 198 | ARRAY_SIZE(mx50_rdp_pads)); |
197 | 199 | ||
diff --git a/arch/arm/mach-mx5/board-mx51_3ds.c b/arch/arm/mach-mx5/board-mx51_3ds.c index 63dfbeafbc1..e5db7c1af5d 100644 --- a/arch/arm/mach-mx5/board-mx51_3ds.c +++ b/arch/arm/mach-mx5/board-mx51_3ds.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/irq.h> | 13 | #include <linux/irq.h> |
14 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
15 | #include <linux/spi/spi.h> | 15 | #include <linux/spi/spi.h> |
16 | #include <linux/gpio.h> | ||
16 | 17 | ||
17 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
18 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
@@ -24,9 +25,8 @@ | |||
24 | #include <mach/3ds_debugboard.h> | 25 | #include <mach/3ds_debugboard.h> |
25 | 26 | ||
26 | #include "devices-imx51.h" | 27 | #include "devices-imx51.h" |
27 | #include "devices.h" | ||
28 | 28 | ||
29 | #define EXPIO_PARENT_INT (MXC_INTERNAL_IRQS + GPIO_PORTA + 6) | 29 | #define EXPIO_PARENT_INT gpio_to_irq(IMX_GPIO_NR(1, 6)) |
30 | #define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28) | 30 | #define MX51_3DS_ECSPI2_CS (GPIO_PORTC + 28) |
31 | 31 | ||
32 | static iomux_v3_cfg_t mx51_3ds_pads[] = { | 32 | static iomux_v3_cfg_t mx51_3ds_pads[] = { |
@@ -135,6 +135,8 @@ static struct spi_board_info mx51_3ds_spi_nor_device[] = { | |||
135 | */ | 135 | */ |
136 | static void __init mx51_3ds_init(void) | 136 | static void __init mx51_3ds_init(void) |
137 | { | 137 | { |
138 | imx51_soc_init(); | ||
139 | |||
138 | mxc_iomux_v3_setup_multiple_pads(mx51_3ds_pads, | 140 | mxc_iomux_v3_setup_multiple_pads(mx51_3ds_pads, |
139 | ARRAY_SIZE(mx51_3ds_pads)); | 141 | ARRAY_SIZE(mx51_3ds_pads)); |
140 | 142 | ||
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c index c7b3fabf50f..41a911f50e6 100644 --- a/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/arch/arm/mach-mx5/board-mx51_babbage.c | |||
@@ -31,16 +31,17 @@ | |||
31 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
32 | 32 | ||
33 | #include "devices-imx51.h" | 33 | #include "devices-imx51.h" |
34 | #include "devices.h" | ||
35 | #include "cpu_op-mx51.h" | 34 | #include "cpu_op-mx51.h" |
36 | 35 | ||
37 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) | 36 | #define BABBAGE_USB_HUB_RESET IMX_GPIO_NR(1, 7) |
38 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) | 37 | #define BABBAGE_USBH1_STP IMX_GPIO_NR(1, 27) |
39 | #define BABBAGE_PHY_RESET IMX_GPIO_NR(2, 5) | 38 | #define BABBAGE_USB_PHY_RESET IMX_GPIO_NR(2, 5) |
40 | #define BABBAGE_FEC_PHY_RESET IMX_GPIO_NR(2, 14) | 39 | #define BABBAGE_FEC_PHY_RESET IMX_GPIO_NR(2, 14) |
41 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) | 40 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) |
42 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) | 41 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) |
43 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) | 42 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) |
43 | #define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6) | ||
44 | #define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5) | ||
44 | 45 | ||
45 | /* USB_CTRL_1 */ | 46 | /* USB_CTRL_1 */ |
46 | #define MX51_USB_CTRL_1_OFFSET 0x10 | 47 | #define MX51_USB_CTRL_1_OFFSET 0x10 |
@@ -110,6 +111,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
110 | /* USB HUB reset line*/ | 111 | /* USB HUB reset line*/ |
111 | MX51_PAD_GPIO1_7__GPIO1_7, | 112 | MX51_PAD_GPIO1_7__GPIO1_7, |
112 | 113 | ||
114 | /* USB PHY reset line */ | ||
115 | MX51_PAD_EIM_D21__GPIO2_5, | ||
116 | |||
113 | /* FEC */ | 117 | /* FEC */ |
114 | MX51_PAD_EIM_EB2__FEC_MDIO, | 118 | MX51_PAD_EIM_EB2__FEC_MDIO, |
115 | MX51_PAD_EIM_EB3__FEC_RDATA1, | 119 | MX51_PAD_EIM_EB3__FEC_RDATA1, |
@@ -139,6 +143,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
139 | MX51_PAD_SD1_DATA1__SD1_DATA1, | 143 | MX51_PAD_SD1_DATA1__SD1_DATA1, |
140 | MX51_PAD_SD1_DATA2__SD1_DATA2, | 144 | MX51_PAD_SD1_DATA2__SD1_DATA2, |
141 | MX51_PAD_SD1_DATA3__SD1_DATA3, | 145 | MX51_PAD_SD1_DATA3__SD1_DATA3, |
146 | /* CD/WP from controller */ | ||
147 | MX51_PAD_GPIO1_0__SD1_CD, | ||
148 | MX51_PAD_GPIO1_1__SD1_WP, | ||
142 | 149 | ||
143 | /* SD 2 */ | 150 | /* SD 2 */ |
144 | MX51_PAD_SD2_CMD__SD2_CMD, | 151 | MX51_PAD_SD2_CMD__SD2_CMD, |
@@ -147,6 +154,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
147 | MX51_PAD_SD2_DATA1__SD2_DATA1, | 154 | MX51_PAD_SD2_DATA1__SD2_DATA1, |
148 | MX51_PAD_SD2_DATA2__SD2_DATA2, | 155 | MX51_PAD_SD2_DATA2__SD2_DATA2, |
149 | MX51_PAD_SD2_DATA3__SD2_DATA3, | 156 | MX51_PAD_SD2_DATA3__SD2_DATA3, |
157 | /* CD/WP gpio */ | ||
158 | MX51_PAD_GPIO1_6__GPIO1_6, | ||
159 | MX51_PAD_GPIO1_5__GPIO1_5, | ||
150 | 160 | ||
151 | /* eCSPI1 */ | 161 | /* eCSPI1 */ |
152 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, | 162 | MX51_PAD_CSPI1_MISO__ECSPI1_MISO, |
@@ -165,38 +175,35 @@ static const struct imxi2c_platform_data babbage_i2c_data __initconst = { | |||
165 | .bitrate = 100000, | 175 | .bitrate = 100000, |
166 | }; | 176 | }; |
167 | 177 | ||
168 | static struct imxi2c_platform_data babbage_hsi2c_data = { | 178 | static const struct imxi2c_platform_data babbage_hsi2c_data __initconst = { |
169 | .bitrate = 400000, | 179 | .bitrate = 400000, |
170 | }; | 180 | }; |
171 | 181 | ||
182 | static struct gpio mx51_babbage_usbh1_gpios[] = { | ||
183 | { BABBAGE_USBH1_STP, GPIOF_OUT_INIT_LOW, "usbh1_stp" }, | ||
184 | { BABBAGE_USB_PHY_RESET, GPIOF_OUT_INIT_LOW, "usbh1_phy_reset" }, | ||
185 | }; | ||
186 | |||
172 | static int gpio_usbh1_active(void) | 187 | static int gpio_usbh1_active(void) |
173 | { | 188 | { |
174 | iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27; | 189 | iomux_v3_cfg_t usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO1_27; |
175 | iomux_v3_cfg_t phyreset_gpio = MX51_PAD_EIM_D21__GPIO2_5; | ||
176 | int ret; | 190 | int ret; |
177 | 191 | ||
178 | /* Set USBH1_STP to GPIO and toggle it */ | 192 | /* Set USBH1_STP to GPIO and toggle it */ |
179 | mxc_iomux_v3_setup_pad(usbh1stp_gpio); | 193 | mxc_iomux_v3_setup_pad(usbh1stp_gpio); |
180 | ret = gpio_request(BABBAGE_USBH1_STP, "usbh1_stp"); | 194 | ret = gpio_request_array(mx51_babbage_usbh1_gpios, |
195 | ARRAY_SIZE(mx51_babbage_usbh1_gpios)); | ||
181 | 196 | ||
182 | if (ret) { | 197 | if (ret) { |
183 | pr_debug("failed to get MX51_PAD_USBH1_STP__GPIO_1_27: %d\n", ret); | 198 | pr_debug("failed to get USBH1 pins: %d\n", ret); |
184 | return ret; | 199 | return ret; |
185 | } | 200 | } |
186 | gpio_direction_output(BABBAGE_USBH1_STP, 0); | ||
187 | gpio_set_value(BABBAGE_USBH1_STP, 1); | ||
188 | msleep(100); | ||
189 | gpio_free(BABBAGE_USBH1_STP); | ||
190 | |||
191 | /* De-assert USB PHY RESETB */ | ||
192 | mxc_iomux_v3_setup_pad(phyreset_gpio); | ||
193 | ret = gpio_request(BABBAGE_PHY_RESET, "phy_reset"); | ||
194 | 201 | ||
195 | if (ret) { | 202 | msleep(100); |
196 | pr_debug("failed to get MX51_PAD_EIM_D21__GPIO_2_5: %d\n", ret); | 203 | gpio_set_value(BABBAGE_USBH1_STP, 1); |
197 | return ret; | 204 | gpio_set_value(BABBAGE_USB_PHY_RESET, 1); |
198 | } | 205 | gpio_free_array(mx51_babbage_usbh1_gpios, |
199 | gpio_direction_output(BABBAGE_PHY_RESET, 1); | 206 | ARRAY_SIZE(mx51_babbage_usbh1_gpios)); |
200 | return 0; | 207 | return 0; |
201 | } | 208 | } |
202 | 209 | ||
@@ -241,7 +248,7 @@ static int initialize_otg_port(struct platform_device *pdev) | |||
241 | void __iomem *usb_base; | 248 | void __iomem *usb_base; |
242 | void __iomem *usbother_base; | 249 | void __iomem *usbother_base; |
243 | 250 | ||
244 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 251 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
245 | if (!usb_base) | 252 | if (!usb_base) |
246 | return -ENOMEM; | 253 | return -ENOMEM; |
247 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 254 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -264,7 +271,7 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
264 | void __iomem *usb_base; | 271 | void __iomem *usb_base; |
265 | void __iomem *usbother_base; | 272 | void __iomem *usbother_base; |
266 | 273 | ||
267 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 274 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
268 | if (!usb_base) | 275 | if (!usb_base) |
269 | return -ENOMEM; | 276 | return -ENOMEM; |
270 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; | 277 | usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET; |
@@ -280,17 +287,17 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
280 | MXC_EHCI_ITC_NO_THRESHOLD); | 287 | MXC_EHCI_ITC_NO_THRESHOLD); |
281 | } | 288 | } |
282 | 289 | ||
283 | static struct mxc_usbh_platform_data dr_utmi_config = { | 290 | static const struct mxc_usbh_platform_data dr_utmi_config __initconst = { |
284 | .init = initialize_otg_port, | 291 | .init = initialize_otg_port, |
285 | .portsc = MXC_EHCI_UTMI_16BIT, | 292 | .portsc = MXC_EHCI_UTMI_16BIT, |
286 | }; | 293 | }; |
287 | 294 | ||
288 | static struct fsl_usb2_platform_data usb_pdata = { | 295 | static const struct fsl_usb2_platform_data usb_pdata __initconst = { |
289 | .operating_mode = FSL_USB2_DR_DEVICE, | 296 | .operating_mode = FSL_USB2_DR_DEVICE, |
290 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, | 297 | .phy_mode = FSL_USB2_PHY_UTMI_WIDE, |
291 | }; | 298 | }; |
292 | 299 | ||
293 | static struct mxc_usbh_platform_data usbh1_config = { | 300 | static const struct mxc_usbh_platform_data usbh1_config __initconst = { |
294 | .init = initialize_usbh1_port, | 301 | .init = initialize_usbh1_port, |
295 | .portsc = MXC_EHCI_MODE_ULPI, | 302 | .portsc = MXC_EHCI_MODE_ULPI, |
296 | }; | 303 | }; |
@@ -331,6 +338,18 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = { | |||
331 | .num_chipselect = ARRAY_SIZE(mx51_babbage_spi_cs), | 338 | .num_chipselect = ARRAY_SIZE(mx51_babbage_spi_cs), |
332 | }; | 339 | }; |
333 | 340 | ||
341 | static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = { | ||
342 | .cd_type = ESDHC_CD_CONTROLLER, | ||
343 | .wp_type = ESDHC_WP_CONTROLLER, | ||
344 | }; | ||
345 | |||
346 | static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = { | ||
347 | .cd_gpio = BABBAGE_SD2_CD, | ||
348 | .wp_gpio = BABBAGE_SD2_WP, | ||
349 | .cd_type = ESDHC_CD_GPIO, | ||
350 | .wp_type = ESDHC_WP_GPIO, | ||
351 | }; | ||
352 | |||
334 | /* | 353 | /* |
335 | * Board specific initialization. | 354 | * Board specific initialization. |
336 | */ | 355 | */ |
@@ -340,6 +359,8 @@ static void __init mx51_babbage_init(void) | |||
340 | iomux_v3_cfg_t power_key = _MX51_PAD_EIM_A27__GPIO2_21 | | 359 | iomux_v3_cfg_t power_key = _MX51_PAD_EIM_A27__GPIO2_21 | |
341 | MUX_PAD_CTRL(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | PAD_CTL_PUS_100K_UP); | 360 | MUX_PAD_CTRL(PAD_CTL_SRE_FAST | PAD_CTL_DSE_HIGH | PAD_CTL_PUS_100K_UP); |
342 | 361 | ||
362 | imx51_soc_init(); | ||
363 | |||
343 | #if defined(CONFIG_CPU_FREQ_IMX) | 364 | #if defined(CONFIG_CPU_FREQ_IMX) |
344 | get_cpu_op = mx51_get_cpu_op; | 365 | get_cpu_op = mx51_get_cpu_op; |
345 | #endif | 366 | #endif |
@@ -359,23 +380,23 @@ static void __init mx51_babbage_init(void) | |||
359 | 380 | ||
360 | imx51_add_imx_i2c(0, &babbage_i2c_data); | 381 | imx51_add_imx_i2c(0, &babbage_i2c_data); |
361 | imx51_add_imx_i2c(1, &babbage_i2c_data); | 382 | imx51_add_imx_i2c(1, &babbage_i2c_data); |
362 | mxc_register_device(&mxc_hsi2c_device, &babbage_hsi2c_data); | 383 | imx51_add_hsi2c(&babbage_hsi2c_data); |
363 | 384 | ||
364 | if (otg_mode_host) | 385 | if (otg_mode_host) |
365 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | 386 | imx51_add_mxc_ehci_otg(&dr_utmi_config); |
366 | else { | 387 | else { |
367 | initialize_otg_port(NULL); | 388 | initialize_otg_port(NULL); |
368 | mxc_register_device(&mxc_usbdr_udc_device, &usb_pdata); | 389 | imx51_add_fsl_usb2_udc(&usb_pdata); |
369 | } | 390 | } |
370 | 391 | ||
371 | gpio_usbh1_active(); | 392 | gpio_usbh1_active(); |
372 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 393 | imx51_add_mxc_ehci_hs(1, &usbh1_config); |
373 | /* setback USBH1_STP to be function */ | 394 | /* setback USBH1_STP to be function */ |
374 | mxc_iomux_v3_setup_pad(usbh1stp); | 395 | mxc_iomux_v3_setup_pad(usbh1stp); |
375 | babbage_usbhub_reset(); | 396 | babbage_usbhub_reset(); |
376 | 397 | ||
377 | imx51_add_sdhci_esdhc_imx(0, NULL); | 398 | imx51_add_sdhci_esdhc_imx(0, &mx51_babbage_sd1_data); |
378 | imx51_add_sdhci_esdhc_imx(1, NULL); | 399 | imx51_add_sdhci_esdhc_imx(1, &mx51_babbage_sd2_data); |
379 | 400 | ||
380 | spi_register_board_info(mx51_babbage_spi_board_info, | 401 | spi_register_board_info(mx51_babbage_spi_board_info, |
381 | ARRAY_SIZE(mx51_babbage_spi_board_info)); | 402 | ARRAY_SIZE(mx51_babbage_spi_board_info)); |
diff --git a/arch/arm/mach-mx5/board-mx51_efikamx.c b/arch/arm/mach-mx5/board-mx51_efikamx.c index 6e362315291..43ac100cfba 100644 --- a/arch/arm/mach-mx5/board-mx51_efikamx.c +++ b/arch/arm/mach-mx5/board-mx51_efikamx.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #include <asm/mach/time.h> | 39 | #include <asm/mach/time.h> |
40 | 40 | ||
41 | #include "devices-imx51.h" | 41 | #include "devices-imx51.h" |
42 | #include "devices.h" | ||
43 | #include "efika.h" | 42 | #include "efika.h" |
44 | 43 | ||
45 | #define EFIKAMX_PCBID0 IMX_GPIO_NR(3, 16) | 44 | #define EFIKAMX_PCBID0 IMX_GPIO_NR(3, 16) |
@@ -139,7 +138,7 @@ static void __init mx51_efikamx_board_id(void) | |||
139 | } | 138 | } |
140 | } | 139 | } |
141 | 140 | ||
142 | static struct gpio_led mx51_efikamx_leds[] = { | 141 | static struct gpio_led mx51_efikamx_leds[] __initdata = { |
143 | { | 142 | { |
144 | .name = "efikamx:green", | 143 | .name = "efikamx:green", |
145 | .default_trigger = "default-on", | 144 | .default_trigger = "default-on", |
@@ -157,19 +156,12 @@ static struct gpio_led mx51_efikamx_leds[] = { | |||
157 | }, | 156 | }, |
158 | }; | 157 | }; |
159 | 158 | ||
160 | static struct gpio_led_platform_data mx51_efikamx_leds_data = { | 159 | static const struct gpio_led_platform_data |
160 | mx51_efikamx_leds_data __initconst = { | ||
161 | .leds = mx51_efikamx_leds, | 161 | .leds = mx51_efikamx_leds, |
162 | .num_leds = ARRAY_SIZE(mx51_efikamx_leds), | 162 | .num_leds = ARRAY_SIZE(mx51_efikamx_leds), |
163 | }; | 163 | }; |
164 | 164 | ||
165 | static struct platform_device mx51_efikamx_leds_device = { | ||
166 | .name = "leds-gpio", | ||
167 | .id = -1, | ||
168 | .dev = { | ||
169 | .platform_data = &mx51_efikamx_leds_data, | ||
170 | }, | ||
171 | }; | ||
172 | |||
173 | static struct gpio_keys_button mx51_efikamx_powerkey[] = { | 165 | static struct gpio_keys_button mx51_efikamx_powerkey[] = { |
174 | { | 166 | { |
175 | .code = KEY_POWER, | 167 | .code = KEY_POWER, |
@@ -236,6 +228,8 @@ late_initcall(mx51_efikamx_power_init); | |||
236 | 228 | ||
237 | static void __init mx51_efikamx_init(void) | 229 | static void __init mx51_efikamx_init(void) |
238 | { | 230 | { |
231 | imx51_soc_init(); | ||
232 | |||
239 | mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads, | 233 | mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads, |
240 | ARRAY_SIZE(mx51efikamx_pads)); | 234 | ARRAY_SIZE(mx51efikamx_pads)); |
241 | efika_board_common_init(); | 235 | efika_board_common_init(); |
@@ -248,7 +242,7 @@ static void __init mx51_efikamx_init(void) | |||
248 | mx51_efikamx_leds[2].default_trigger = "mmc1"; | 242 | mx51_efikamx_leds[2].default_trigger = "mmc1"; |
249 | } | 243 | } |
250 | 244 | ||
251 | platform_device_register(&mx51_efikamx_leds_device); | 245 | gpio_led_register_device(-1, &mx51_efikamx_leds_data); |
252 | imx_add_gpio_keys(&mx51_efikamx_powerkey_data); | 246 | imx_add_gpio_keys(&mx51_efikamx_powerkey_data); |
253 | 247 | ||
254 | if (system_rev == 0x11) { | 248 | if (system_rev == 0x11) { |
diff --git a/arch/arm/mach-mx5/board-mx51_efikasb.c b/arch/arm/mach-mx5/board-mx51_efikasb.c index 474fc6e4c6d..10f0562c3c4 100644 --- a/arch/arm/mach-mx5/board-mx51_efikasb.c +++ b/arch/arm/mach-mx5/board-mx51_efikasb.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <asm/mach/time.h> | 42 | #include <asm/mach/time.h> |
43 | 43 | ||
44 | #include "devices-imx51.h" | 44 | #include "devices-imx51.h" |
45 | #include "devices.h" | ||
46 | #include "efika.h" | 45 | #include "efika.h" |
47 | 46 | ||
48 | #define EFIKASB_USBH2_STP IMX_GPIO_NR(2, 20) | 47 | #define EFIKASB_USBH2_STP IMX_GPIO_NR(2, 20) |
@@ -119,7 +118,7 @@ static int initialize_usbh2_port(struct platform_device *pdev) | |||
119 | return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_ITC_NO_THRESHOLD); | 118 | return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_ITC_NO_THRESHOLD); |
120 | } | 119 | } |
121 | 120 | ||
122 | static struct mxc_usbh_platform_data usbh2_config = { | 121 | static struct mxc_usbh_platform_data usbh2_config __initdata = { |
123 | .init = initialize_usbh2_port, | 122 | .init = initialize_usbh2_port, |
124 | .portsc = MXC_EHCI_MODE_ULPI, | 123 | .portsc = MXC_EHCI_MODE_ULPI, |
125 | }; | 124 | }; |
@@ -129,10 +128,10 @@ static void __init mx51_efikasb_usb(void) | |||
129 | usbh2_config.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | | 128 | usbh2_config.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | |
130 | ULPI_OTG_DRVVBUS_EXT | ULPI_OTG_EXTVBUSIND); | 129 | ULPI_OTG_DRVVBUS_EXT | ULPI_OTG_EXTVBUSIND); |
131 | if (usbh2_config.otg) | 130 | if (usbh2_config.otg) |
132 | mxc_register_device(&mxc_usbh2_device, &usbh2_config); | 131 | imx51_add_mxc_ehci_hs(2, &usbh2_config); |
133 | } | 132 | } |
134 | 133 | ||
135 | static struct gpio_led mx51_efikasb_leds[] = { | 134 | static const struct gpio_led mx51_efikasb_leds[] __initconst = { |
136 | { | 135 | { |
137 | .name = "efikasb:green", | 136 | .name = "efikasb:green", |
138 | .default_trigger = "default-on", | 137 | .default_trigger = "default-on", |
@@ -146,19 +145,12 @@ static struct gpio_led mx51_efikasb_leds[] = { | |||
146 | }, | 145 | }, |
147 | }; | 146 | }; |
148 | 147 | ||
149 | static struct gpio_led_platform_data mx51_efikasb_leds_data = { | 148 | static const struct gpio_led_platform_data |
149 | mx51_efikasb_leds_data __initconst = { | ||
150 | .leds = mx51_efikasb_leds, | 150 | .leds = mx51_efikasb_leds, |
151 | .num_leds = ARRAY_SIZE(mx51_efikasb_leds), | 151 | .num_leds = ARRAY_SIZE(mx51_efikasb_leds), |
152 | }; | 152 | }; |
153 | 153 | ||
154 | static struct platform_device mx51_efikasb_leds_device = { | ||
155 | .name = "leds-gpio", | ||
156 | .id = -1, | ||
157 | .dev = { | ||
158 | .platform_data = &mx51_efikasb_leds_data, | ||
159 | }, | ||
160 | }; | ||
161 | |||
162 | static struct gpio_keys_button mx51_efikasb_keys[] = { | 154 | static struct gpio_keys_button mx51_efikasb_keys[] = { |
163 | { | 155 | { |
164 | .code = KEY_POWER, | 156 | .code = KEY_POWER, |
@@ -248,6 +240,8 @@ static void __init mx51_efikasb_board_id(void) | |||
248 | 240 | ||
249 | static void __init efikasb_board_init(void) | 241 | static void __init efikasb_board_init(void) |
250 | { | 242 | { |
243 | imx51_soc_init(); | ||
244 | |||
251 | mxc_iomux_v3_setup_multiple_pads(mx51efikasb_pads, | 245 | mxc_iomux_v3_setup_multiple_pads(mx51efikasb_pads, |
252 | ARRAY_SIZE(mx51efikasb_pads)); | 246 | ARRAY_SIZE(mx51efikasb_pads)); |
253 | efika_board_common_init(); | 247 | efika_board_common_init(); |
@@ -256,9 +250,8 @@ static void __init efikasb_board_init(void) | |||
256 | mx51_efikasb_usb(); | 250 | mx51_efikasb_usb(); |
257 | imx51_add_sdhci_esdhc_imx(1, NULL); | 251 | imx51_add_sdhci_esdhc_imx(1, NULL); |
258 | 252 | ||
259 | platform_device_register(&mx51_efikasb_leds_device); | 253 | gpio_led_register_device(-1, &mx51_efikasb_leds_data); |
260 | imx_add_gpio_keys(&mx51_efikasb_keys_data); | 254 | imx_add_gpio_keys(&mx51_efikasb_keys_data); |
261 | |||
262 | } | 255 | } |
263 | 256 | ||
264 | static void __init mx51_efikasb_timer_init(void) | 257 | static void __init mx51_efikasb_timer_init(void) |
diff --git a/arch/arm/mach-mx5/board-mx53_ard.c b/arch/arm/mach-mx5/board-mx53_ard.c new file mode 100644 index 00000000000..76a67c4a2a0 --- /dev/null +++ b/arch/arm/mach-mx5/board-mx53_ard.c | |||
@@ -0,0 +1,254 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | */ | ||
4 | |||
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 as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | |||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | |||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | |||
21 | #include <linux/init.h> | ||
22 | #include <linux/clk.h> | ||
23 | #include <linux/delay.h> | ||
24 | #include <linux/gpio.h> | ||
25 | #include <linux/smsc911x.h> | ||
26 | |||
27 | #include <mach/common.h> | ||
28 | #include <mach/hardware.h> | ||
29 | #include <mach/iomux-mx53.h> | ||
30 | |||
31 | #include <asm/mach-types.h> | ||
32 | #include <asm/mach/arch.h> | ||
33 | #include <asm/mach/time.h> | ||
34 | |||
35 | #include "crm_regs.h" | ||
36 | #include "devices-imx53.h" | ||
37 | |||
38 | #define ARD_ETHERNET_INT_B IMX_GPIO_NR(2, 31) | ||
39 | #define ARD_SD1_CD IMX_GPIO_NR(1, 1) | ||
40 | #define ARD_SD1_WP IMX_GPIO_NR(1, 9) | ||
41 | #define ARD_I2CPORTEXP_B IMX_GPIO_NR(2, 3) | ||
42 | #define ARD_VOLUMEDOWN IMX_GPIO_NR(4, 0) | ||
43 | #define ARD_HOME IMX_GPIO_NR(5, 10) | ||
44 | #define ARD_BACK IMX_GPIO_NR(5, 11) | ||
45 | #define ARD_PROG IMX_GPIO_NR(5, 12) | ||
46 | #define ARD_VOLUMEUP IMX_GPIO_NR(5, 13) | ||
47 | |||
48 | static iomux_v3_cfg_t mx53_ard_pads[] = { | ||
49 | /* UART1 */ | ||
50 | MX53_PAD_PATA_DIOW__UART1_TXD_MUX, | ||
51 | MX53_PAD_PATA_DMACK__UART1_RXD_MUX, | ||
52 | /* WEIM for CS1 */ | ||
53 | MX53_PAD_EIM_EB3__GPIO2_31, /* ETHERNET_INT_B */ | ||
54 | MX53_PAD_EIM_D16__EMI_WEIM_D_16, | ||
55 | MX53_PAD_EIM_D17__EMI_WEIM_D_17, | ||
56 | MX53_PAD_EIM_D18__EMI_WEIM_D_18, | ||
57 | MX53_PAD_EIM_D19__EMI_WEIM_D_19, | ||
58 | MX53_PAD_EIM_D20__EMI_WEIM_D_20, | ||
59 | MX53_PAD_EIM_D21__EMI_WEIM_D_21, | ||
60 | MX53_PAD_EIM_D22__EMI_WEIM_D_22, | ||
61 | MX53_PAD_EIM_D23__EMI_WEIM_D_23, | ||
62 | MX53_PAD_EIM_D24__EMI_WEIM_D_24, | ||
63 | MX53_PAD_EIM_D25__EMI_WEIM_D_25, | ||
64 | MX53_PAD_EIM_D26__EMI_WEIM_D_26, | ||
65 | MX53_PAD_EIM_D27__EMI_WEIM_D_27, | ||
66 | MX53_PAD_EIM_D28__EMI_WEIM_D_28, | ||
67 | MX53_PAD_EIM_D29__EMI_WEIM_D_29, | ||
68 | MX53_PAD_EIM_D30__EMI_WEIM_D_30, | ||
69 | MX53_PAD_EIM_D31__EMI_WEIM_D_31, | ||
70 | MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0, | ||
71 | MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1, | ||
72 | MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2, | ||
73 | MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3, | ||
74 | MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4, | ||
75 | MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5, | ||
76 | MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6, | ||
77 | MX53_PAD_EIM_OE__EMI_WEIM_OE, | ||
78 | MX53_PAD_EIM_RW__EMI_WEIM_RW, | ||
79 | MX53_PAD_EIM_CS1__EMI_WEIM_CS_1, | ||
80 | /* SDHC1 */ | ||
81 | MX53_PAD_SD1_CMD__ESDHC1_CMD, | ||
82 | MX53_PAD_SD1_CLK__ESDHC1_CLK, | ||
83 | MX53_PAD_SD1_DATA0__ESDHC1_DAT0, | ||
84 | MX53_PAD_SD1_DATA1__ESDHC1_DAT1, | ||
85 | MX53_PAD_SD1_DATA2__ESDHC1_DAT2, | ||
86 | MX53_PAD_SD1_DATA3__ESDHC1_DAT3, | ||
87 | MX53_PAD_PATA_DATA8__ESDHC1_DAT4, | ||
88 | MX53_PAD_PATA_DATA9__ESDHC1_DAT5, | ||
89 | MX53_PAD_PATA_DATA10__ESDHC1_DAT6, | ||
90 | MX53_PAD_PATA_DATA11__ESDHC1_DAT7, | ||
91 | MX53_PAD_GPIO_1__GPIO1_1, | ||
92 | MX53_PAD_GPIO_9__GPIO1_9, | ||
93 | /* I2C2 */ | ||
94 | MX53_PAD_EIM_EB2__I2C2_SCL, | ||
95 | MX53_PAD_KEY_ROW3__I2C2_SDA, | ||
96 | /* I2C3 */ | ||
97 | MX53_PAD_GPIO_3__I2C3_SCL, | ||
98 | MX53_PAD_GPIO_16__I2C3_SDA, | ||
99 | /* GPIO */ | ||
100 | MX53_PAD_DISP0_DAT16__GPIO5_10, /* home */ | ||
101 | MX53_PAD_DISP0_DAT17__GPIO5_11, /* back */ | ||
102 | MX53_PAD_DISP0_DAT18__GPIO5_12, /* prog */ | ||
103 | MX53_PAD_DISP0_DAT19__GPIO5_13, /* vol up */ | ||
104 | MX53_PAD_GPIO_10__GPIO4_0, /* vol down */ | ||
105 | }; | ||
106 | |||
107 | #define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake) \ | ||
108 | { \ | ||
109 | .gpio = gpio_num, \ | ||
110 | .type = EV_KEY, \ | ||
111 | .code = ev_code, \ | ||
112 | .active_low = act_low, \ | ||
113 | .desc = "btn " descr, \ | ||
114 | .wakeup = wake, \ | ||
115 | } | ||
116 | |||
117 | static struct gpio_keys_button ard_buttons[] = { | ||
118 | GPIO_BUTTON(ARD_HOME, KEY_HOME, 1, "home", 0), | ||
119 | GPIO_BUTTON(ARD_BACK, KEY_BACK, 1, "back", 0), | ||
120 | GPIO_BUTTON(ARD_PROG, KEY_PROGRAM, 1, "program", 0), | ||
121 | GPIO_BUTTON(ARD_VOLUMEUP, KEY_VOLUMEUP, 1, "volume-up", 0), | ||
122 | GPIO_BUTTON(ARD_VOLUMEDOWN, KEY_VOLUMEDOWN, 1, "volume-down", 0), | ||
123 | }; | ||
124 | |||
125 | static const struct gpio_keys_platform_data ard_button_data __initconst = { | ||
126 | .buttons = ard_buttons, | ||
127 | .nbuttons = ARRAY_SIZE(ard_buttons), | ||
128 | }; | ||
129 | |||
130 | static struct resource ard_smsc911x_resources[] = { | ||
131 | { | ||
132 | .start = MX53_CS1_64MB_BASE_ADDR, | ||
133 | .end = MX53_CS1_64MB_BASE_ADDR + SZ_32M - 1, | ||
134 | .flags = IORESOURCE_MEM, | ||
135 | }, | ||
136 | { | ||
137 | .start = gpio_to_irq(ARD_ETHERNET_INT_B), | ||
138 | .end = gpio_to_irq(ARD_ETHERNET_INT_B), | ||
139 | .flags = IORESOURCE_IRQ, | ||
140 | }, | ||
141 | }; | ||
142 | |||
143 | struct smsc911x_platform_config ard_smsc911x_config = { | ||
144 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
145 | .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL, | ||
146 | .flags = SMSC911X_USE_32BIT, | ||
147 | }; | ||
148 | |||
149 | static struct platform_device ard_smsc_lan9220_device = { | ||
150 | .name = "smsc911x", | ||
151 | .id = -1, | ||
152 | .num_resources = ARRAY_SIZE(ard_smsc911x_resources), | ||
153 | .resource = ard_smsc911x_resources, | ||
154 | .dev = { | ||
155 | .platform_data = &ard_smsc911x_config, | ||
156 | }, | ||
157 | }; | ||
158 | |||
159 | static const struct esdhc_platform_data mx53_ard_sd1_data __initconst = { | ||
160 | .cd_gpio = ARD_SD1_CD, | ||
161 | .wp_gpio = ARD_SD1_WP, | ||
162 | }; | ||
163 | |||
164 | static struct imxi2c_platform_data mx53_ard_i2c2_data = { | ||
165 | .bitrate = 50000, | ||
166 | }; | ||
167 | |||
168 | static struct imxi2c_platform_data mx53_ard_i2c3_data = { | ||
169 | .bitrate = 400000, | ||
170 | }; | ||
171 | |||
172 | static void __init mx53_ard_io_init(void) | ||
173 | { | ||
174 | mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads, | ||
175 | ARRAY_SIZE(mx53_ard_pads)); | ||
176 | |||
177 | gpio_request(ARD_ETHERNET_INT_B, "eth-int-b"); | ||
178 | gpio_direction_input(ARD_ETHERNET_INT_B); | ||
179 | |||
180 | gpio_request(ARD_I2CPORTEXP_B, "i2cptexp-rst"); | ||
181 | gpio_direction_output(ARD_I2CPORTEXP_B, 1); | ||
182 | } | ||
183 | |||
184 | /* Config CS1 settings for ethernet controller */ | ||
185 | static int weim_cs_config(void) | ||
186 | { | ||
187 | u32 reg; | ||
188 | void __iomem *weim_base, *iomuxc_base; | ||
189 | |||
190 | weim_base = ioremap(MX53_WEIM_BASE_ADDR, SZ_4K); | ||
191 | if (!weim_base) | ||
192 | return -ENOMEM; | ||
193 | |||
194 | iomuxc_base = ioremap(MX53_IOMUXC_BASE_ADDR, SZ_4K); | ||
195 | if (!iomuxc_base) | ||
196 | return -ENOMEM; | ||
197 | |||
198 | /* CS1 timings for LAN9220 */ | ||
199 | writel(0x20001, (weim_base + 0x18)); | ||
200 | writel(0x0, (weim_base + 0x1C)); | ||
201 | writel(0x16000202, (weim_base + 0x20)); | ||
202 | writel(0x00000002, (weim_base + 0x24)); | ||
203 | writel(0x16002082, (weim_base + 0x28)); | ||
204 | writel(0x00000000, (weim_base + 0x2C)); | ||
205 | writel(0x00000000, (weim_base + 0x90)); | ||
206 | |||
207 | /* specify 64 MB on CS1 and CS0 on GPR1 */ | ||
208 | reg = readl(iomuxc_base + 0x4); | ||
209 | reg &= ~0x3F; | ||
210 | reg |= 0x1B; | ||
211 | writel(reg, (iomuxc_base + 0x4)); | ||
212 | |||
213 | iounmap(iomuxc_base); | ||
214 | iounmap(weim_base); | ||
215 | |||
216 | return 0; | ||
217 | } | ||
218 | |||
219 | static struct platform_device *devices[] __initdata = { | ||
220 | &ard_smsc_lan9220_device, | ||
221 | }; | ||
222 | |||
223 | static void __init mx53_ard_board_init(void) | ||
224 | { | ||
225 | imx53_soc_init(); | ||
226 | imx53_add_imx_uart(0, NULL); | ||
227 | |||
228 | mx53_ard_io_init(); | ||
229 | weim_cs_config(); | ||
230 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
231 | |||
232 | imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data); | ||
233 | imx53_add_imx2_wdt(0, NULL); | ||
234 | imx53_add_imx_i2c(1, &mx53_ard_i2c2_data); | ||
235 | imx53_add_imx_i2c(2, &mx53_ard_i2c3_data); | ||
236 | imx_add_gpio_keys(&ard_button_data); | ||
237 | } | ||
238 | |||
239 | static void __init mx53_ard_timer_init(void) | ||
240 | { | ||
241 | mx53_clocks_init(32768, 24000000, 22579200, 0); | ||
242 | } | ||
243 | |||
244 | static struct sys_timer mx53_ard_timer = { | ||
245 | .init = mx53_ard_timer_init, | ||
246 | }; | ||
247 | |||
248 | MACHINE_START(MX53_ARD, "Freescale MX53 ARD Board") | ||
249 | .map_io = mx53_map_io, | ||
250 | .init_early = imx53_init_early, | ||
251 | .init_irq = mx53_init_irq, | ||
252 | .timer = &mx53_ard_timer, | ||
253 | .init_machine = mx53_ard_board_init, | ||
254 | MACHINE_END | ||
diff --git a/arch/arm/mach-mx5/board-mx53_evk.c b/arch/arm/mach-mx5/board-mx53_evk.c index f87d571882c..1b417b06b73 100644 --- a/arch/arm/mach-mx5/board-mx53_evk.c +++ b/arch/arm/mach-mx5/board-mx53_evk.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #define MX53_EVK_FEC_PHY_RST IMX_GPIO_NR(7, 6) | 35 | #define MX53_EVK_FEC_PHY_RST IMX_GPIO_NR(7, 6) |
36 | #define EVK_ECSPI1_CS0 IMX_GPIO_NR(2, 30) | 36 | #define EVK_ECSPI1_CS0 IMX_GPIO_NR(2, 30) |
37 | #define EVK_ECSPI1_CS1 IMX_GPIO_NR(3, 19) | 37 | #define EVK_ECSPI1_CS1 IMX_GPIO_NR(3, 19) |
38 | #define MX53EVK_LED IMX_GPIO_NR(7, 7) | ||
38 | 39 | ||
39 | #include "crm_regs.h" | 40 | #include "crm_regs.h" |
40 | #include "devices-imx53.h" | 41 | #include "devices-imx53.h" |
@@ -58,12 +59,27 @@ static iomux_v3_cfg_t mx53_evk_pads[] = { | |||
58 | /* ecspi chip select lines */ | 59 | /* ecspi chip select lines */ |
59 | MX53_PAD_EIM_EB2__GPIO2_30, | 60 | MX53_PAD_EIM_EB2__GPIO2_30, |
60 | MX53_PAD_EIM_D19__GPIO3_19, | 61 | MX53_PAD_EIM_D19__GPIO3_19, |
62 | /* LED */ | ||
63 | MX53_PAD_PATA_DA_1__GPIO7_7, | ||
61 | }; | 64 | }; |
62 | 65 | ||
63 | static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = { | 66 | static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = { |
64 | .flags = IMXUART_HAVE_RTSCTS, | 67 | .flags = IMXUART_HAVE_RTSCTS, |
65 | }; | 68 | }; |
66 | 69 | ||
70 | static const struct gpio_led mx53evk_leds[] __initconst = { | ||
71 | { | ||
72 | .name = "green", | ||
73 | .default_trigger = "heartbeat", | ||
74 | .gpio = MX53EVK_LED, | ||
75 | }, | ||
76 | }; | ||
77 | |||
78 | static const struct gpio_led_platform_data mx53evk_leds_data __initconst = { | ||
79 | .leds = mx53evk_leds, | ||
80 | .num_leds = ARRAY_SIZE(mx53evk_leds), | ||
81 | }; | ||
82 | |||
67 | static inline void mx53_evk_init_uart(void) | 83 | static inline void mx53_evk_init_uart(void) |
68 | { | 84 | { |
69 | imx53_add_imx_uart(0, NULL); | 85 | imx53_add_imx_uart(0, NULL); |
@@ -117,6 +133,8 @@ static const struct spi_imx_master mx53_evk_spi_data __initconst = { | |||
117 | 133 | ||
118 | static void __init mx53_evk_board_init(void) | 134 | static void __init mx53_evk_board_init(void) |
119 | { | 135 | { |
136 | imx53_soc_init(); | ||
137 | |||
120 | mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads, | 138 | mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads, |
121 | ARRAY_SIZE(mx53_evk_pads)); | 139 | ARRAY_SIZE(mx53_evk_pads)); |
122 | mx53_evk_init_uart(); | 140 | mx53_evk_init_uart(); |
@@ -133,6 +151,7 @@ static void __init mx53_evk_board_init(void) | |||
133 | ARRAY_SIZE(mx53_evk_spi_board_info)); | 151 | ARRAY_SIZE(mx53_evk_spi_board_info)); |
134 | imx53_add_ecspi(0, &mx53_evk_spi_data); | 152 | imx53_add_ecspi(0, &mx53_evk_spi_data); |
135 | imx53_add_imx2_wdt(0, NULL); | 153 | imx53_add_imx2_wdt(0, NULL); |
154 | gpio_led_register_device(-1, &mx53evk_leds_data); | ||
136 | } | 155 | } |
137 | 156 | ||
138 | static void __init mx53_evk_timer_init(void) | 157 | static void __init mx53_evk_timer_init(void) |
diff --git a/arch/arm/mach-mx5/board-mx53_loco.c b/arch/arm/mach-mx5/board-mx53_loco.c index 1b947e8c9c0..4e1d51d252d 100644 --- a/arch/arm/mach-mx5/board-mx53_loco.c +++ b/arch/arm/mach-mx5/board-mx53_loco.c | |||
@@ -38,6 +38,10 @@ | |||
38 | #define MX53_LOCO_UI1 IMX_GPIO_NR(2, 14) | 38 | #define MX53_LOCO_UI1 IMX_GPIO_NR(2, 14) |
39 | #define MX53_LOCO_UI2 IMX_GPIO_NR(2, 15) | 39 | #define MX53_LOCO_UI2 IMX_GPIO_NR(2, 15) |
40 | #define LOCO_FEC_PHY_RST IMX_GPIO_NR(7, 6) | 40 | #define LOCO_FEC_PHY_RST IMX_GPIO_NR(7, 6) |
41 | #define LOCO_LED IMX_GPIO_NR(7, 7) | ||
42 | #define LOCO_SD3_CD IMX_GPIO_NR(3, 11) | ||
43 | #define LOCO_SD3_WP IMX_GPIO_NR(3, 12) | ||
44 | #define LOCO_SD1_CD IMX_GPIO_NR(3, 13) | ||
41 | 45 | ||
42 | static iomux_v3_cfg_t mx53_loco_pads[] = { | 46 | static iomux_v3_cfg_t mx53_loco_pads[] = { |
43 | /* FEC */ | 47 | /* FEC */ |
@@ -70,6 +74,8 @@ static iomux_v3_cfg_t mx53_loco_pads[] = { | |||
70 | MX53_PAD_SD1_DATA1__ESDHC1_DAT1, | 74 | MX53_PAD_SD1_DATA1__ESDHC1_DAT1, |
71 | MX53_PAD_SD1_DATA2__ESDHC1_DAT2, | 75 | MX53_PAD_SD1_DATA2__ESDHC1_DAT2, |
72 | MX53_PAD_SD1_DATA3__ESDHC1_DAT3, | 76 | MX53_PAD_SD1_DATA3__ESDHC1_DAT3, |
77 | /* SD1_CD */ | ||
78 | MX53_PAD_EIM_DA13__GPIO3_13, | ||
73 | /* SD3 */ | 79 | /* SD3 */ |
74 | MX53_PAD_PATA_DATA8__ESDHC3_DAT0, | 80 | MX53_PAD_PATA_DATA8__ESDHC3_DAT0, |
75 | MX53_PAD_PATA_DATA9__ESDHC3_DAT1, | 81 | MX53_PAD_PATA_DATA9__ESDHC3_DAT1, |
@@ -163,7 +169,7 @@ static iomux_v3_cfg_t mx53_loco_pads[] = { | |||
163 | MX53_PAD_GPIO_7__SPDIF_PLOCK, | 169 | MX53_PAD_GPIO_7__SPDIF_PLOCK, |
164 | MX53_PAD_GPIO_17__SPDIF_OUT1, | 170 | MX53_PAD_GPIO_17__SPDIF_OUT1, |
165 | /* GPIO */ | 171 | /* GPIO */ |
166 | MX53_PAD_PATA_DA_1__GPIO7_7, | 172 | MX53_PAD_PATA_DA_1__GPIO7_7, /* LED */ |
167 | MX53_PAD_PATA_DA_2__GPIO7_8, | 173 | MX53_PAD_PATA_DA_2__GPIO7_8, |
168 | MX53_PAD_PATA_DATA5__GPIO2_5, | 174 | MX53_PAD_PATA_DATA5__GPIO2_5, |
169 | MX53_PAD_PATA_DATA6__GPIO2_6, | 175 | MX53_PAD_PATA_DATA6__GPIO2_6, |
@@ -202,6 +208,19 @@ static const struct gpio_keys_platform_data loco_button_data __initconst = { | |||
202 | .nbuttons = ARRAY_SIZE(loco_buttons), | 208 | .nbuttons = ARRAY_SIZE(loco_buttons), |
203 | }; | 209 | }; |
204 | 210 | ||
211 | static const struct esdhc_platform_data mx53_loco_sd1_data __initconst = { | ||
212 | .cd_gpio = LOCO_SD1_CD, | ||
213 | .cd_type = ESDHC_CD_GPIO, | ||
214 | .wp_type = ESDHC_WP_NONE, | ||
215 | }; | ||
216 | |||
217 | static const struct esdhc_platform_data mx53_loco_sd3_data __initconst = { | ||
218 | .cd_gpio = LOCO_SD3_CD, | ||
219 | .wp_gpio = LOCO_SD3_WP, | ||
220 | .cd_type = ESDHC_CD_GPIO, | ||
221 | .wp_type = ESDHC_WP_GPIO, | ||
222 | }; | ||
223 | |||
205 | static inline void mx53_loco_fec_reset(void) | 224 | static inline void mx53_loco_fec_reset(void) |
206 | { | 225 | { |
207 | int ret; | 226 | int ret; |
@@ -225,8 +244,23 @@ static const struct imxi2c_platform_data mx53_loco_i2c_data __initconst = { | |||
225 | .bitrate = 100000, | 244 | .bitrate = 100000, |
226 | }; | 245 | }; |
227 | 246 | ||
247 | static const struct gpio_led mx53loco_leds[] __initconst = { | ||
248 | { | ||
249 | .name = "green", | ||
250 | .default_trigger = "heartbeat", | ||
251 | .gpio = LOCO_LED, | ||
252 | }, | ||
253 | }; | ||
254 | |||
255 | static const struct gpio_led_platform_data mx53loco_leds_data __initconst = { | ||
256 | .leds = mx53loco_leds, | ||
257 | .num_leds = ARRAY_SIZE(mx53loco_leds), | ||
258 | }; | ||
259 | |||
228 | static void __init mx53_loco_board_init(void) | 260 | static void __init mx53_loco_board_init(void) |
229 | { | 261 | { |
262 | imx53_soc_init(); | ||
263 | |||
230 | mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads, | 264 | mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads, |
231 | ARRAY_SIZE(mx53_loco_pads)); | 265 | ARRAY_SIZE(mx53_loco_pads)); |
232 | imx53_add_imx_uart(0, NULL); | 266 | imx53_add_imx_uart(0, NULL); |
@@ -235,9 +269,10 @@ static void __init mx53_loco_board_init(void) | |||
235 | imx53_add_imx2_wdt(0, NULL); | 269 | imx53_add_imx2_wdt(0, NULL); |
236 | imx53_add_imx_i2c(0, &mx53_loco_i2c_data); | 270 | imx53_add_imx_i2c(0, &mx53_loco_i2c_data); |
237 | imx53_add_imx_i2c(1, &mx53_loco_i2c_data); | 271 | imx53_add_imx_i2c(1, &mx53_loco_i2c_data); |
238 | imx53_add_sdhci_esdhc_imx(0, NULL); | 272 | imx53_add_sdhci_esdhc_imx(0, &mx53_loco_sd1_data); |
239 | imx53_add_sdhci_esdhc_imx(2, NULL); | 273 | imx53_add_sdhci_esdhc_imx(2, &mx53_loco_sd3_data); |
240 | imx_add_gpio_keys(&loco_button_data); | 274 | imx_add_gpio_keys(&loco_button_data); |
275 | gpio_led_register_device(-1, &mx53loco_leds_data); | ||
241 | } | 276 | } |
242 | 277 | ||
243 | static void __init mx53_loco_timer_init(void) | 278 | static void __init mx53_loco_timer_init(void) |
diff --git a/arch/arm/mach-mx5/board-mx53_smd.c b/arch/arm/mach-mx5/board-mx53_smd.c index 817c08938f5..bc02894eafe 100644 --- a/arch/arm/mach-mx5/board-mx53_smd.c +++ b/arch/arm/mach-mx5/board-mx53_smd.c | |||
@@ -113,6 +113,8 @@ static const struct imxi2c_platform_data mx53_smd_i2c_data __initconst = { | |||
113 | 113 | ||
114 | static void __init mx53_smd_board_init(void) | 114 | static void __init mx53_smd_board_init(void) |
115 | { | 115 | { |
116 | imx53_soc_init(); | ||
117 | |||
116 | mxc_iomux_v3_setup_multiple_pads(mx53_smd_pads, | 118 | mxc_iomux_v3_setup_multiple_pads(mx53_smd_pads, |
117 | ARRAY_SIZE(mx53_smd_pads)); | 119 | ARRAY_SIZE(mx53_smd_pads)); |
118 | mx53_smd_init_uart(); | 120 | mx53_smd_init_uart(); |
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 6b89c1bf4eb..bd5f697db0e 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c | |||
@@ -1254,12 +1254,20 @@ DEFINE_CLOCK(uart2_ipg_clk, 1, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG5_OFFSET, | |||
1254 | NULL, NULL, &ipg_clk, &aips_tz1_clk); | 1254 | NULL, NULL, &ipg_clk, &aips_tz1_clk); |
1255 | DEFINE_CLOCK(uart3_ipg_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG7_OFFSET, | 1255 | DEFINE_CLOCK(uart3_ipg_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG7_OFFSET, |
1256 | NULL, NULL, &ipg_clk, &spba_clk); | 1256 | NULL, NULL, &ipg_clk, &spba_clk); |
1257 | DEFINE_CLOCK(uart4_ipg_clk, 3, MXC_CCM_CCGR7, MXC_CCM_CCGRx_CG4_OFFSET, | ||
1258 | NULL, NULL, &ipg_clk, &spba_clk); | ||
1259 | DEFINE_CLOCK(uart5_ipg_clk, 4, MXC_CCM_CCGR7, MXC_CCM_CCGRx_CG6_OFFSET, | ||
1260 | NULL, NULL, &ipg_clk, &spba_clk); | ||
1257 | DEFINE_CLOCK(uart1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG4_OFFSET, | 1261 | DEFINE_CLOCK(uart1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG4_OFFSET, |
1258 | NULL, NULL, &uart_root_clk, &uart1_ipg_clk); | 1262 | NULL, NULL, &uart_root_clk, &uart1_ipg_clk); |
1259 | DEFINE_CLOCK(uart2_clk, 1, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG6_OFFSET, | 1263 | DEFINE_CLOCK(uart2_clk, 1, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG6_OFFSET, |
1260 | NULL, NULL, &uart_root_clk, &uart2_ipg_clk); | 1264 | NULL, NULL, &uart_root_clk, &uart2_ipg_clk); |
1261 | DEFINE_CLOCK(uart3_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG8_OFFSET, | 1265 | DEFINE_CLOCK(uart3_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG8_OFFSET, |
1262 | NULL, NULL, &uart_root_clk, &uart3_ipg_clk); | 1266 | NULL, NULL, &uart_root_clk, &uart3_ipg_clk); |
1267 | DEFINE_CLOCK(uart4_clk, 3, MXC_CCM_CCGR7, MXC_CCM_CCGRx_CG5_OFFSET, | ||
1268 | NULL, NULL, &uart_root_clk, &uart4_ipg_clk); | ||
1269 | DEFINE_CLOCK(uart5_clk, 4, MXC_CCM_CCGR7, MXC_CCM_CCGRx_CG7_OFFSET, | ||
1270 | NULL, NULL, &uart_root_clk, &uart5_ipg_clk); | ||
1263 | 1271 | ||
1264 | /* GPT */ | 1272 | /* GPT */ |
1265 | DEFINE_CLOCK(gpt_ipg_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG10_OFFSET, | 1273 | DEFINE_CLOCK(gpt_ipg_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG10_OFFSET, |
@@ -1274,11 +1282,13 @@ DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET, | |||
1274 | 1282 | ||
1275 | /* I2C */ | 1283 | /* I2C */ |
1276 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, | 1284 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, |
1277 | NULL, NULL, &ipg_clk, NULL); | 1285 | NULL, NULL, &ipg_perclk, NULL); |
1278 | DEFINE_CLOCK(i2c2_clk, 1, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG10_OFFSET, | 1286 | DEFINE_CLOCK(i2c2_clk, 1, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG10_OFFSET, |
1279 | NULL, NULL, &ipg_clk, NULL); | 1287 | NULL, NULL, &ipg_perclk, NULL); |
1280 | DEFINE_CLOCK(hsi2c_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG11_OFFSET, | 1288 | DEFINE_CLOCK(hsi2c_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG11_OFFSET, |
1281 | NULL, NULL, &ipg_clk, NULL); | 1289 | NULL, NULL, &ipg_clk, NULL); |
1290 | DEFINE_CLOCK(i2c3_mx53_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG11_OFFSET, | ||
1291 | NULL, NULL, &ipg_perclk, NULL); | ||
1282 | 1292 | ||
1283 | /* FEC */ | 1293 | /* FEC */ |
1284 | DEFINE_CLOCK(fec_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG12_OFFSET, | 1294 | DEFINE_CLOCK(fec_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG12_OFFSET, |
@@ -1412,11 +1422,13 @@ DEFINE_CLOCK(ipu_di1_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG6_OFFSET, | |||
1412 | }, | 1422 | }, |
1413 | 1423 | ||
1414 | static struct clk_lookup mx51_lookups[] = { | 1424 | static struct clk_lookup mx51_lookups[] = { |
1415 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 1425 | /* i.mx51 has the i.mx21 type uart */ |
1416 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 1426 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
1417 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 1427 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
1428 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) | ||
1418 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1429 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1419 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 1430 | /* i.mx51 has the i.mx27 type fec */ |
1431 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) | ||
1420 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) | 1432 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) |
1421 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) | 1433 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) |
1422 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1434 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
@@ -1436,17 +1448,19 @@ static struct clk_lookup mx51_lookups[] = { | |||
1436 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | 1448 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) |
1437 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | 1449 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) |
1438 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) | 1450 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) |
1439 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) | 1451 | /* i.mx51 has the i.mx35 type sdma */ |
1452 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) | ||
1440 | _REGISTER_CLOCK(NULL, "ckih", ckih_clk) | 1453 | _REGISTER_CLOCK(NULL, "ckih", ckih_clk) |
1441 | _REGISTER_CLOCK(NULL, "ckih2", ckih2_clk) | 1454 | _REGISTER_CLOCK(NULL, "ckih2", ckih2_clk) |
1442 | _REGISTER_CLOCK(NULL, "gpt_32k", gpt_32k_clk) | 1455 | _REGISTER_CLOCK(NULL, "gpt_32k", gpt_32k_clk) |
1443 | _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) | 1456 | _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) |
1444 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) | 1457 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) |
1445 | _REGISTER_CLOCK("imx51-cspi.0", NULL, cspi_clk) | 1458 | /* i.mx51 has the i.mx35 type cspi */ |
1446 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 1459 | _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) |
1447 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) | 1460 | _REGISTER_CLOCK("sdhci-esdhc-imx51.0", NULL, esdhc1_clk) |
1448 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) | 1461 | _REGISTER_CLOCK("sdhci-esdhc-imx51.1", NULL, esdhc2_clk) |
1449 | _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_clk) | 1462 | _REGISTER_CLOCK("sdhci-esdhc-imx51.2", NULL, esdhc3_clk) |
1463 | _REGISTER_CLOCK("sdhci-esdhc-imx51.3", NULL, esdhc4_clk) | ||
1450 | _REGISTER_CLOCK(NULL, "cpu_clk", cpu_clk) | 1464 | _REGISTER_CLOCK(NULL, "cpu_clk", cpu_clk) |
1451 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) | 1465 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) |
1452 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) | 1466 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) |
@@ -1459,23 +1473,36 @@ static struct clk_lookup mx51_lookups[] = { | |||
1459 | }; | 1473 | }; |
1460 | 1474 | ||
1461 | static struct clk_lookup mx53_lookups[] = { | 1475 | static struct clk_lookup mx53_lookups[] = { |
1462 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 1476 | /* i.mx53 has the i.mx21 type uart */ |
1463 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 1477 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
1464 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 1478 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
1479 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) | ||
1480 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) | ||
1481 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) | ||
1465 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1482 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1466 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 1483 | /* i.mx53 has the i.mx25 type fec */ |
1484 | _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) | ||
1467 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) | 1485 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) |
1468 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1486 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
1469 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | 1487 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) |
1470 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 1488 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_mx53_clk) |
1471 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_mx53_clk) | 1489 | /* i.mx53 has the i.mx51 type ecspi */ |
1472 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_mx53_clk) | 1490 | _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) |
1473 | _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_mx53_clk) | 1491 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) |
1474 | _REGISTER_CLOCK("imx53-ecspi.0", NULL, ecspi1_clk) | 1492 | /* i.mx53 has the i.mx25 type cspi */ |
1475 | _REGISTER_CLOCK("imx53-ecspi.1", NULL, ecspi2_clk) | 1493 | _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) |
1476 | _REGISTER_CLOCK("imx53-cspi.0", NULL, cspi_clk) | 1494 | _REGISTER_CLOCK("sdhci-esdhc-imx53.0", NULL, esdhc1_clk) |
1495 | _REGISTER_CLOCK("sdhci-esdhc-imx53.1", NULL, esdhc2_mx53_clk) | ||
1496 | _REGISTER_CLOCK("sdhci-esdhc-imx53.2", NULL, esdhc3_mx53_clk) | ||
1497 | _REGISTER_CLOCK("sdhci-esdhc-imx53.3", NULL, esdhc4_mx53_clk) | ||
1477 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) | 1498 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) |
1478 | _REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk) | 1499 | _REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk) |
1500 | /* i.mx53 has the i.mx35 type sdma */ | ||
1501 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) | ||
1502 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | ||
1503 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | ||
1504 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) | ||
1505 | _REGISTER_CLOCK("imx-keypad", NULL, dummy_clk) | ||
1479 | }; | 1506 | }; |
1480 | 1507 | ||
1481 | static void clk_tree_init(void) | 1508 | static void clk_tree_init(void) |
@@ -1537,7 +1564,7 @@ int __init mx51_clocks_init(unsigned long ckil, unsigned long osc, | |||
1537 | 1564 | ||
1538 | /* System timer */ | 1565 | /* System timer */ |
1539 | mxc_timer_init(&gpt_clk, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR), | 1566 | mxc_timer_init(&gpt_clk, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR), |
1540 | MX51_MXC_INT_GPT); | 1567 | MX51_INT_GPT); |
1541 | return 0; | 1568 | return 0; |
1542 | } | 1569 | } |
1543 | 1570 | ||
diff --git a/arch/arm/mach-mx5/crm_regs.h b/arch/arm/mach-mx5/crm_regs.h index 87c0c58f27a..5e11ba7daee 100644 --- a/arch/arm/mach-mx5/crm_regs.h +++ b/arch/arm/mach-mx5/crm_regs.h | |||
@@ -114,6 +114,8 @@ | |||
114 | #define MXC_CCM_CCGR4 (MX51_CCM_BASE + 0x78) | 114 | #define MXC_CCM_CCGR4 (MX51_CCM_BASE + 0x78) |
115 | #define MXC_CCM_CCGR5 (MX51_CCM_BASE + 0x7C) | 115 | #define MXC_CCM_CCGR5 (MX51_CCM_BASE + 0x7C) |
116 | #define MXC_CCM_CCGR6 (MX51_CCM_BASE + 0x80) | 116 | #define MXC_CCM_CCGR6 (MX51_CCM_BASE + 0x80) |
117 | #define MXC_CCM_CCGR7 (MX51_CCM_BASE + 0x84) | ||
118 | |||
117 | #define MXC_CCM_CMEOR (MX51_CCM_BASE + 0x84) | 119 | #define MXC_CCM_CMEOR (MX51_CCM_BASE + 0x84) |
118 | 120 | ||
119 | /* Define the bits in register CCR */ | 121 | /* Define the bits in register CCR */ |
diff --git a/arch/arm/mach-mx5/devices-imx51.h b/arch/arm/mach-mx5/devices-imx51.h index e11bc0e0ec4..f311c9616bb 100644 --- a/arch/arm/mach-mx5/devices-imx51.h +++ b/arch/arm/mach-mx5/devices-imx51.h | |||
@@ -13,9 +13,15 @@ extern const struct imx_fec_data imx51_fec_data; | |||
13 | #define imx51_add_fec(pdata) \ | 13 | #define imx51_add_fec(pdata) \ |
14 | imx_add_fec(&imx51_fec_data, pdata) | 14 | imx_add_fec(&imx51_fec_data, pdata) |
15 | 15 | ||
16 | extern const struct imx_fsl_usb2_udc_data imx51_fsl_usb2_udc_data; | ||
17 | #define imx51_add_fsl_usb2_udc(pdata) \ | ||
18 | imx_add_fsl_usb2_udc(&imx51_fsl_usb2_udc_data, pdata) | ||
19 | |||
16 | extern const struct imx_imx_i2c_data imx51_imx_i2c_data[]; | 20 | extern const struct imx_imx_i2c_data imx51_imx_i2c_data[]; |
17 | #define imx51_add_imx_i2c(id, pdata) \ | 21 | #define imx51_add_imx_i2c(id, pdata) \ |
18 | imx_add_imx_i2c(&imx51_imx_i2c_data[id], pdata) | 22 | imx_add_imx_i2c(&imx51_imx_i2c_data[id], pdata) |
23 | #define imx51_add_hsi2c(pdata) \ | ||
24 | imx51_add_imx_i2c(2, pdata) | ||
19 | 25 | ||
20 | extern const struct imx_imx_ssi_data imx51_imx_ssi_data[]; | 26 | extern const struct imx_imx_ssi_data imx51_imx_ssi_data[]; |
21 | #define imx51_add_imx_ssi(id, pdata) \ | 27 | #define imx51_add_imx_ssi(id, pdata) \ |
@@ -25,6 +31,13 @@ extern const struct imx_imx_uart_1irq_data imx51_imx_uart_data[]; | |||
25 | #define imx51_add_imx_uart(id, pdata) \ | 31 | #define imx51_add_imx_uart(id, pdata) \ |
26 | imx_add_imx_uart_1irq(&imx51_imx_uart_data[id], pdata) | 32 | imx_add_imx_uart_1irq(&imx51_imx_uart_data[id], pdata) |
27 | 33 | ||
34 | extern const struct imx_mxc_ehci_data imx51_mxc_ehci_otg_data; | ||
35 | #define imx51_add_mxc_ehci_otg(pdata) \ | ||
36 | imx_add_mxc_ehci(&imx51_mxc_ehci_otg_data, pdata) | ||
37 | extern const struct imx_mxc_ehci_data imx51_mxc_ehci_hs_data[]; | ||
38 | #define imx51_add_mxc_ehci_hs(id, pdata) \ | ||
39 | imx_add_mxc_ehci(&imx51_mxc_ehci_hs_data[id - 1], pdata) | ||
40 | |||
28 | extern const struct imx_mxc_nand_data imx51_mxc_nand_data; | 41 | extern const struct imx_mxc_nand_data imx51_mxc_nand_data; |
29 | #define imx51_add_mxc_nand(pdata) \ | 42 | #define imx51_add_mxc_nand(pdata) \ |
30 | imx_add_mxc_nand(&imx51_mxc_nand_data, pdata) | 43 | imx_add_mxc_nand(&imx51_mxc_nand_data, pdata) |
diff --git a/arch/arm/mach-mx5/devices-imx53.h b/arch/arm/mach-mx5/devices-imx53.h index 48f4c8cc42f..c27fe8bb476 100644 --- a/arch/arm/mach-mx5/devices-imx53.h +++ b/arch/arm/mach-mx5/devices-imx53.h | |||
@@ -32,3 +32,11 @@ extern const struct imx_spi_imx_data imx53_ecspi_data[]; | |||
32 | extern const struct imx_imx2_wdt_data imx53_imx2_wdt_data[]; | 32 | extern const struct imx_imx2_wdt_data imx53_imx2_wdt_data[]; |
33 | #define imx53_add_imx2_wdt(id, pdata) \ | 33 | #define imx53_add_imx2_wdt(id, pdata) \ |
34 | imx_add_imx2_wdt(&imx53_imx2_wdt_data[id]) | 34 | imx_add_imx2_wdt(&imx53_imx2_wdt_data[id]) |
35 | |||
36 | extern const struct imx_imx_ssi_data imx53_imx_ssi_data[]; | ||
37 | #define imx53_add_imx_ssi(id, pdata) \ | ||
38 | imx_add_imx_ssi(&imx53_imx_ssi_data[id], pdata) | ||
39 | |||
40 | extern const struct imx_imx_keypad_data imx53_imx_keypad_data; | ||
41 | #define imx53_add_imx_keypad(pdata) \ | ||
42 | imx_add_imx_keypad(&imx53_imx_keypad_data, pdata) | ||
diff --git a/arch/arm/mach-mx5/devices.c b/arch/arm/mach-mx5/devices.c deleted file mode 100644 index 153ada53e57..00000000000 --- a/arch/arm/mach-mx5/devices.c +++ /dev/null | |||
@@ -1,184 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2009 Amit Kucheria <amit.kucheria@canonical.com> | ||
3 | * Copyright (C) 2010 Freescale Semiconductor, Inc. | ||
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/platform_device.h> | ||
14 | #include <linux/dma-mapping.h> | ||
15 | #include <linux/gpio.h> | ||
16 | #include <mach/hardware.h> | ||
17 | #include <mach/imx-uart.h> | ||
18 | #include <mach/irqs.h> | ||
19 | |||
20 | static struct resource mxc_hsi2c_resources[] = { | ||
21 | { | ||
22 | .start = MX51_HSI2C_DMA_BASE_ADDR, | ||
23 | .end = MX51_HSI2C_DMA_BASE_ADDR + SZ_16K - 1, | ||
24 | .flags = IORESOURCE_MEM, | ||
25 | }, | ||
26 | { | ||
27 | .start = MX51_MXC_INT_HS_I2C, | ||
28 | .end = MX51_MXC_INT_HS_I2C, | ||
29 | .flags = IORESOURCE_IRQ, | ||
30 | }, | ||
31 | }; | ||
32 | |||
33 | struct platform_device mxc_hsi2c_device = { | ||
34 | .name = "imx-i2c", | ||
35 | .id = 2, | ||
36 | .num_resources = ARRAY_SIZE(mxc_hsi2c_resources), | ||
37 | .resource = mxc_hsi2c_resources | ||
38 | }; | ||
39 | |||
40 | static u64 usb_dma_mask = DMA_BIT_MASK(32); | ||
41 | |||
42 | static struct resource usbotg_resources[] = { | ||
43 | { | ||
44 | .start = MX51_OTG_BASE_ADDR, | ||
45 | .end = MX51_OTG_BASE_ADDR + 0x1ff, | ||
46 | .flags = IORESOURCE_MEM, | ||
47 | }, | ||
48 | { | ||
49 | .start = MX51_MXC_INT_USB_OTG, | ||
50 | .flags = IORESOURCE_IRQ, | ||
51 | }, | ||
52 | }; | ||
53 | |||
54 | /* OTG gadget device */ | ||
55 | struct platform_device mxc_usbdr_udc_device = { | ||
56 | .name = "fsl-usb2-udc", | ||
57 | .id = -1, | ||
58 | .num_resources = ARRAY_SIZE(usbotg_resources), | ||
59 | .resource = usbotg_resources, | ||
60 | .dev = { | ||
61 | .dma_mask = &usb_dma_mask, | ||
62 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
63 | }, | ||
64 | }; | ||
65 | |||
66 | struct platform_device mxc_usbdr_host_device = { | ||
67 | .name = "mxc-ehci", | ||
68 | .id = 0, | ||
69 | .num_resources = ARRAY_SIZE(usbotg_resources), | ||
70 | .resource = usbotg_resources, | ||
71 | .dev = { | ||
72 | .dma_mask = &usb_dma_mask, | ||
73 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
74 | }, | ||
75 | }; | ||
76 | |||
77 | static struct resource usbh1_resources[] = { | ||
78 | { | ||
79 | .start = MX51_OTG_BASE_ADDR + 0x200, | ||
80 | .end = MX51_OTG_BASE_ADDR + 0x200 + 0x1ff, | ||
81 | .flags = IORESOURCE_MEM, | ||
82 | }, | ||
83 | { | ||
84 | .start = MX51_MXC_INT_USB_H1, | ||
85 | .flags = IORESOURCE_IRQ, | ||
86 | }, | ||
87 | }; | ||
88 | |||
89 | struct platform_device mxc_usbh1_device = { | ||
90 | .name = "mxc-ehci", | ||
91 | .id = 1, | ||
92 | .num_resources = ARRAY_SIZE(usbh1_resources), | ||
93 | .resource = usbh1_resources, | ||
94 | .dev = { | ||
95 | .dma_mask = &usb_dma_mask, | ||
96 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
97 | }, | ||
98 | }; | ||
99 | |||
100 | static struct resource usbh2_resources[] = { | ||
101 | { | ||
102 | .start = MX51_OTG_BASE_ADDR + 0x400, | ||
103 | .end = MX51_OTG_BASE_ADDR + 0x400 + 0x1ff, | ||
104 | .flags = IORESOURCE_MEM, | ||
105 | }, | ||
106 | { | ||
107 | .start = MX51_MXC_INT_USB_H2, | ||
108 | .flags = IORESOURCE_IRQ, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | struct platform_device mxc_usbh2_device = { | ||
113 | .name = "mxc-ehci", | ||
114 | .id = 2, | ||
115 | .num_resources = ARRAY_SIZE(usbh2_resources), | ||
116 | .resource = usbh2_resources, | ||
117 | .dev = { | ||
118 | .dma_mask = &usb_dma_mask, | ||
119 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
120 | }, | ||
121 | }; | ||
122 | |||
123 | static struct mxc_gpio_port mxc_gpio_ports[] = { | ||
124 | { | ||
125 | .chip.label = "gpio-0", | ||
126 | .base = MX51_IO_ADDRESS(MX51_GPIO1_BASE_ADDR), | ||
127 | .irq = MX51_MXC_INT_GPIO1_LOW, | ||
128 | .irq_high = MX51_MXC_INT_GPIO1_HIGH, | ||
129 | .virtual_irq_start = MXC_GPIO_IRQ_START | ||
130 | }, | ||
131 | { | ||
132 | .chip.label = "gpio-1", | ||
133 | .base = MX51_IO_ADDRESS(MX51_GPIO2_BASE_ADDR), | ||
134 | .irq = MX51_MXC_INT_GPIO2_LOW, | ||
135 | .irq_high = MX51_MXC_INT_GPIO2_HIGH, | ||
136 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 1 | ||
137 | }, | ||
138 | { | ||
139 | .chip.label = "gpio-2", | ||
140 | .base = MX51_IO_ADDRESS(MX51_GPIO3_BASE_ADDR), | ||
141 | .irq = MX51_MXC_INT_GPIO3_LOW, | ||
142 | .irq_high = MX51_MXC_INT_GPIO3_HIGH, | ||
143 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 2 | ||
144 | }, | ||
145 | { | ||
146 | .chip.label = "gpio-3", | ||
147 | .base = MX51_IO_ADDRESS(MX51_GPIO4_BASE_ADDR), | ||
148 | .irq = MX51_MXC_INT_GPIO4_LOW, | ||
149 | .irq_high = MX51_MXC_INT_GPIO4_HIGH, | ||
150 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 3 | ||
151 | }, | ||
152 | { | ||
153 | .chip.label = "gpio-4", | ||
154 | .base = MX53_IO_ADDRESS(MX53_GPIO5_BASE_ADDR), | ||
155 | .irq = MX53_INT_GPIO5_LOW, | ||
156 | .irq_high = MX53_INT_GPIO5_HIGH, | ||
157 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 4 | ||
158 | }, | ||
159 | { | ||
160 | .chip.label = "gpio-5", | ||
161 | .base = MX53_IO_ADDRESS(MX53_GPIO6_BASE_ADDR), | ||
162 | .irq = MX53_INT_GPIO6_LOW, | ||
163 | .irq_high = MX53_INT_GPIO6_HIGH, | ||
164 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 5 | ||
165 | }, | ||
166 | { | ||
167 | .chip.label = "gpio-6", | ||
168 | .base = MX53_IO_ADDRESS(MX53_GPIO7_BASE_ADDR), | ||
169 | .irq = MX53_INT_GPIO7_LOW, | ||
170 | .irq_high = MX53_INT_GPIO7_HIGH, | ||
171 | .virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 6 | ||
172 | }, | ||
173 | }; | ||
174 | |||
175 | int __init imx51_register_gpios(void) | ||
176 | { | ||
177 | return mxc_gpio_init(mxc_gpio_ports, 4); | ||
178 | } | ||
179 | |||
180 | int __init imx53_register_gpios(void) | ||
181 | { | ||
182 | return mxc_gpio_init(mxc_gpio_ports, ARRAY_SIZE(mxc_gpio_ports)); | ||
183 | } | ||
184 | |||
diff --git a/arch/arm/mach-mx5/devices.h b/arch/arm/mach-mx5/devices.h deleted file mode 100644 index 55a5129bc29..00000000000 --- a/arch/arm/mach-mx5/devices.h +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | extern struct platform_device mxc_usbdr_host_device; | ||
2 | extern struct platform_device mxc_usbh1_device; | ||
3 | extern struct platform_device mxc_usbh2_device; | ||
4 | extern struct platform_device mxc_usbdr_udc_device; | ||
5 | extern struct platform_device mxc_hsi2c_device; | ||
diff --git a/arch/arm/mach-mx5/ehci.c b/arch/arm/mach-mx5/ehci.c index 7ce12c804a3..c17fa131728 100644 --- a/arch/arm/mach-mx5/ehci.c +++ b/arch/arm/mach-mx5/ehci.c | |||
@@ -52,7 +52,7 @@ int mx51_initialize_usb_hw(int port, unsigned int flags) | |||
52 | void __iomem *usbother_base; | 52 | void __iomem *usbother_base; |
53 | int ret = 0; | 53 | int ret = 0; |
54 | 54 | ||
55 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 55 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
56 | if (!usb_base) { | 56 | if (!usb_base) { |
57 | printk(KERN_ERR "%s(): ioremap failed\n", __func__); | 57 | printk(KERN_ERR "%s(): ioremap failed\n", __func__); |
58 | return -ENOMEM; | 58 | return -ENOMEM; |
diff --git a/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c b/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c index 97292d20f1f..72ce75505b1 100644 --- a/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c +++ b/arch/arm/mach-mx5/eukrea_mbimx51-baseboard.c | |||
@@ -28,16 +28,14 @@ | |||
28 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
29 | 29 | ||
30 | #include "devices-imx51.h" | 30 | #include "devices-imx51.h" |
31 | #include "devices.h" | ||
32 | 31 | ||
33 | #define MBIMX51_TSC2007_GPIO IMX_GPIO_NR(3, 30) | 32 | #define MBIMX51_TSC2007_GPIO IMX_GPIO_NR(3, 30) |
34 | #define MBIMX51_TSC2007_IRQ (MXC_INTERNAL_IRQS + MBIMX51_TSC2007_GPIO) | ||
35 | #define MBIMX51_LED0 IMX_GPIO_NR(3, 5) | 33 | #define MBIMX51_LED0 IMX_GPIO_NR(3, 5) |
36 | #define MBIMX51_LED1 IMX_GPIO_NR(3, 6) | 34 | #define MBIMX51_LED1 IMX_GPIO_NR(3, 6) |
37 | #define MBIMX51_LED2 IMX_GPIO_NR(3, 7) | 35 | #define MBIMX51_LED2 IMX_GPIO_NR(3, 7) |
38 | #define MBIMX51_LED3 IMX_GPIO_NR(3, 8) | 36 | #define MBIMX51_LED3 IMX_GPIO_NR(3, 8) |
39 | 37 | ||
40 | static struct gpio_led mbimx51_leds[] = { | 38 | static const struct gpio_led mbimx51_leds[] __initconst = { |
41 | { | 39 | { |
42 | .name = "led0", | 40 | .name = "led0", |
43 | .default_trigger = "heartbeat", | 41 | .default_trigger = "heartbeat", |
@@ -64,23 +62,11 @@ static struct gpio_led mbimx51_leds[] = { | |||
64 | }, | 62 | }, |
65 | }; | 63 | }; |
66 | 64 | ||
67 | static struct gpio_led_platform_data mbimx51_leds_info = { | 65 | static const struct gpio_led_platform_data mbimx51_leds_info __initconst = { |
68 | .leds = mbimx51_leds, | 66 | .leds = mbimx51_leds, |
69 | .num_leds = ARRAY_SIZE(mbimx51_leds), | 67 | .num_leds = ARRAY_SIZE(mbimx51_leds), |
70 | }; | 68 | }; |
71 | 69 | ||
72 | static struct platform_device mbimx51_leds_gpio = { | ||
73 | .name = "leds-gpio", | ||
74 | .id = -1, | ||
75 | .dev = { | ||
76 | .platform_data = &mbimx51_leds_info, | ||
77 | }, | ||
78 | }; | ||
79 | |||
80 | static struct platform_device *devices[] __initdata = { | ||
81 | &mbimx51_leds_gpio, | ||
82 | }; | ||
83 | |||
84 | static iomux_v3_cfg_t mbimx51_pads[] = { | 70 | static iomux_v3_cfg_t mbimx51_pads[] = { |
85 | /* UART2 */ | 71 | /* UART2 */ |
86 | MX51_PAD_UART2_RXD__UART2_RXD, | 72 | MX51_PAD_UART2_RXD__UART2_RXD, |
@@ -173,7 +159,7 @@ struct tsc2007_platform_data tsc2007_data = { | |||
173 | static struct i2c_board_info mbimx51_i2c_devices[] = { | 159 | static struct i2c_board_info mbimx51_i2c_devices[] = { |
174 | { | 160 | { |
175 | I2C_BOARD_INFO("tsc2007", 0x49), | 161 | I2C_BOARD_INFO("tsc2007", 0x49), |
176 | .irq = MBIMX51_TSC2007_IRQ, | 162 | .irq = gpio_to_irq(MBIMX51_TSC2007_GPIO), |
177 | .platform_data = &tsc2007_data, | 163 | .platform_data = &tsc2007_data, |
178 | }, { | 164 | }, { |
179 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | 165 | I2C_BOARD_INFO("tlv320aic23", 0x1a), |
@@ -204,13 +190,14 @@ void __init eukrea_mbimx51_baseboard_init(void) | |||
204 | gpio_direction_output(MBIMX51_LED3, 1); | 190 | gpio_direction_output(MBIMX51_LED3, 1); |
205 | gpio_free(MBIMX51_LED3); | 191 | gpio_free(MBIMX51_LED3); |
206 | 192 | ||
207 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 193 | gpio_led_register_device(-1, &mbimx51_leds_info); |
208 | 194 | ||
209 | imx51_add_imx_keypad(&mbimx51_map_data); | 195 | imx51_add_imx_keypad(&mbimx51_map_data); |
210 | 196 | ||
211 | gpio_request(MBIMX51_TSC2007_GPIO, "tsc2007_irq"); | 197 | gpio_request(MBIMX51_TSC2007_GPIO, "tsc2007_irq"); |
212 | gpio_direction_input(MBIMX51_TSC2007_GPIO); | 198 | gpio_direction_input(MBIMX51_TSC2007_GPIO); |
213 | irq_set_irq_type(MBIMX51_TSC2007_IRQ, IRQF_TRIGGER_FALLING); | 199 | irq_set_irq_type(gpio_to_irq(MBIMX51_TSC2007_GPIO), |
200 | IRQF_TRIGGER_FALLING); | ||
214 | i2c_register_board_info(1, mbimx51_i2c_devices, | 201 | i2c_register_board_info(1, mbimx51_i2c_devices, |
215 | ARRAY_SIZE(mbimx51_i2c_devices)); | 202 | ARRAY_SIZE(mbimx51_i2c_devices)); |
216 | 203 | ||
diff --git a/arch/arm/mach-mx5/eukrea_mbimxsd-baseboard.c b/arch/arm/mach-mx5/eukrea_mbimxsd-baseboard.c index 31c871ec46a..90f5c9c6306 100644 --- a/arch/arm/mach-mx5/eukrea_mbimxsd-baseboard.c +++ b/arch/arm/mach-mx5/eukrea_mbimxsd-baseboard.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <mach/audmux.h> | 41 | #include <mach/audmux.h> |
42 | 42 | ||
43 | #include "devices-imx51.h" | 43 | #include "devices-imx51.h" |
44 | #include "devices.h" | ||
45 | 44 | ||
46 | static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | 45 | static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { |
47 | /* LED */ | 46 | /* LED */ |
@@ -74,7 +73,7 @@ static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { | |||
74 | #define GPIO_LED1 IMX_GPIO_NR(3, 30) | 73 | #define GPIO_LED1 IMX_GPIO_NR(3, 30) |
75 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 31) | 74 | #define GPIO_SWITCH1 IMX_GPIO_NR(3, 31) |
76 | 75 | ||
77 | static struct gpio_led eukrea_mbimxsd_leds[] = { | 76 | static const struct gpio_led eukrea_mbimxsd_leds[] __initconst = { |
78 | { | 77 | { |
79 | .name = "led1", | 78 | .name = "led1", |
80 | .default_trigger = "heartbeat", | 79 | .default_trigger = "heartbeat", |
@@ -83,19 +82,12 @@ static struct gpio_led eukrea_mbimxsd_leds[] = { | |||
83 | }, | 82 | }, |
84 | }; | 83 | }; |
85 | 84 | ||
86 | static struct gpio_led_platform_data eukrea_mbimxsd_led_info = { | 85 | static const struct gpio_led_platform_data |
86 | eukrea_mbimxsd_led_info __initconst = { | ||
87 | .leds = eukrea_mbimxsd_leds, | 87 | .leds = eukrea_mbimxsd_leds, |
88 | .num_leds = ARRAY_SIZE(eukrea_mbimxsd_leds), | 88 | .num_leds = ARRAY_SIZE(eukrea_mbimxsd_leds), |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static struct platform_device eukrea_mbimxsd_leds_gpio = { | ||
92 | .name = "leds-gpio", | ||
93 | .id = -1, | ||
94 | .dev = { | ||
95 | .platform_data = &eukrea_mbimxsd_led_info, | ||
96 | }, | ||
97 | }; | ||
98 | |||
99 | static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = { | 91 | static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = { |
100 | { | 92 | { |
101 | .gpio = GPIO_SWITCH1, | 93 | .gpio = GPIO_SWITCH1, |
@@ -112,10 +104,6 @@ static const struct gpio_keys_platform_data | |||
112 | .nbuttons = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons), | 104 | .nbuttons = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons), |
113 | }; | 105 | }; |
114 | 106 | ||
115 | static struct platform_device *platform_devices[] __initdata = { | ||
116 | &eukrea_mbimxsd_leds_gpio, | ||
117 | }; | ||
118 | |||
119 | static const struct imxuart_platform_data uart_pdata __initconst = { | 107 | static const struct imxuart_platform_data uart_pdata __initconst = { |
120 | .flags = IMXUART_HAVE_RTSCTS, | 108 | .flags = IMXUART_HAVE_RTSCTS, |
121 | }; | 109 | }; |
@@ -154,6 +142,6 @@ void __init eukrea_mbimxsd51_baseboard_init(void) | |||
154 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, | 142 | i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices, |
155 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); | 143 | ARRAY_SIZE(eukrea_mbimxsd_i2c_devices)); |
156 | 144 | ||
157 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); | 145 | gpio_led_register_device(-1, &eukrea_mbimxsd_led_info); |
158 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); | 146 | imx_add_gpio_keys(&eukrea_mbimxsd_button_data); |
159 | } | 147 | } |
diff --git a/arch/arm/mach-mx5/mm-mx50.c b/arch/arm/mach-mx5/mm-mx50.c index b9c363b514a..77e374c726f 100644 --- a/arch/arm/mach-mx5/mm-mx50.c +++ b/arch/arm/mach-mx5/mm-mx50.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
27 | #include <mach/common.h> | 27 | #include <mach/common.h> |
28 | #include <mach/iomux-v3.h> | 28 | #include <mach/iomux-v3.h> |
29 | #include <mach/gpio.h> | ||
30 | #include <mach/irqs.h> | 29 | #include <mach/irqs.h> |
31 | 30 | ||
32 | /* | 31 | /* |
@@ -56,17 +55,18 @@ void __init imx50_init_early(void) | |||
56 | mxc_arch_reset_init(MX50_IO_ADDRESS(MX50_WDOG_BASE_ADDR)); | 55 | mxc_arch_reset_init(MX50_IO_ADDRESS(MX50_WDOG_BASE_ADDR)); |
57 | } | 56 | } |
58 | 57 | ||
59 | static struct mxc_gpio_port imx50_gpio_ports[] = { | ||
60 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 0, 1, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH), | ||
61 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 1, 2, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH), | ||
62 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 2, 3, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH), | ||
63 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 3, 4, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH), | ||
64 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 4, 5, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH), | ||
65 | DEFINE_IMX_GPIO_PORT_IRQ_HIGH(MX50, 5, 6, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH), | ||
66 | }; | ||
67 | |||
68 | void __init mx50_init_irq(void) | 58 | void __init mx50_init_irq(void) |
69 | { | 59 | { |
70 | tzic_init_irq(MX50_IO_ADDRESS(MX50_TZIC_BASE_ADDR)); | 60 | tzic_init_irq(MX50_IO_ADDRESS(MX50_TZIC_BASE_ADDR)); |
71 | mxc_gpio_init(imx50_gpio_ports, ARRAY_SIZE(imx50_gpio_ports)); | 61 | } |
62 | |||
63 | void __init imx50_soc_init(void) | ||
64 | { | ||
65 | /* i.mx50 has the i.mx31 type gpio */ | ||
66 | mxc_register_gpio("imx31-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH); | ||
67 | mxc_register_gpio("imx31-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); | ||
68 | mxc_register_gpio("imx31-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH); | ||
69 | mxc_register_gpio("imx31-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH); | ||
70 | mxc_register_gpio("imx31-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH); | ||
71 | mxc_register_gpio("imx31-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH); | ||
72 | } | 72 | } |
diff --git a/arch/arm/mach-mx5/mm.c b/arch/arm/mach-mx5/mm.c index ff557301b42..fcc5c4ce53f 100644 --- a/arch/arm/mach-mx5/mm.c +++ b/arch/arm/mach-mx5/mm.c | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include <mach/hardware.h> | 19 | #include <mach/hardware.h> |
20 | #include <mach/common.h> | 20 | #include <mach/common.h> |
21 | #include <mach/devices-common.h> | ||
21 | #include <mach/iomux-v3.h> | 22 | #include <mach/iomux-v3.h> |
22 | 23 | ||
23 | /* | 24 | /* |
@@ -69,8 +70,6 @@ void __init imx53_init_early(void) | |||
69 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); | 70 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); |
70 | } | 71 | } |
71 | 72 | ||
72 | int imx51_register_gpios(void); | ||
73 | |||
74 | void __init mx51_init_irq(void) | 73 | void __init mx51_init_irq(void) |
75 | { | 74 | { |
76 | unsigned long tzic_addr; | 75 | unsigned long tzic_addr; |
@@ -86,11 +85,8 @@ void __init mx51_init_irq(void) | |||
86 | panic("unable to map TZIC interrupt controller\n"); | 85 | panic("unable to map TZIC interrupt controller\n"); |
87 | 86 | ||
88 | tzic_init_irq(tzic_virt); | 87 | tzic_init_irq(tzic_virt); |
89 | imx51_register_gpios(); | ||
90 | } | 88 | } |
91 | 89 | ||
92 | int imx53_register_gpios(void); | ||
93 | |||
94 | void __init mx53_init_irq(void) | 90 | void __init mx53_init_irq(void) |
95 | { | 91 | { |
96 | unsigned long tzic_addr; | 92 | unsigned long tzic_addr; |
@@ -103,5 +99,68 @@ void __init mx53_init_irq(void) | |||
103 | panic("unable to map TZIC interrupt controller\n"); | 99 | panic("unable to map TZIC interrupt controller\n"); |
104 | 100 | ||
105 | tzic_init_irq(tzic_virt); | 101 | tzic_init_irq(tzic_virt); |
106 | imx53_register_gpios(); | 102 | } |
103 | |||
104 | static struct sdma_script_start_addrs imx51_sdma_script __initdata = { | ||
105 | .ap_2_ap_addr = 642, | ||
106 | .uart_2_mcu_addr = 817, | ||
107 | .mcu_2_app_addr = 747, | ||
108 | .mcu_2_shp_addr = 961, | ||
109 | .ata_2_mcu_addr = 1473, | ||
110 | .mcu_2_ata_addr = 1392, | ||
111 | .app_2_per_addr = 1033, | ||
112 | .app_2_mcu_addr = 683, | ||
113 | .shp_2_per_addr = 1251, | ||
114 | .shp_2_mcu_addr = 892, | ||
115 | }; | ||
116 | |||
117 | static struct sdma_platform_data imx51_sdma_pdata __initdata = { | ||
118 | .fw_name = "sdma-imx51.bin", | ||
119 | .script_addrs = &imx51_sdma_script, | ||
120 | }; | ||
121 | |||
122 | static struct sdma_script_start_addrs imx53_sdma_script __initdata = { | ||
123 | .ap_2_ap_addr = 642, | ||
124 | .app_2_mcu_addr = 683, | ||
125 | .mcu_2_app_addr = 747, | ||
126 | .uart_2_mcu_addr = 817, | ||
127 | .shp_2_mcu_addr = 891, | ||
128 | .mcu_2_shp_addr = 960, | ||
129 | .uartsh_2_mcu_addr = 1032, | ||
130 | .spdif_2_mcu_addr = 1100, | ||
131 | .mcu_2_spdif_addr = 1134, | ||
132 | .firi_2_mcu_addr = 1193, | ||
133 | .mcu_2_firi_addr = 1290, | ||
134 | }; | ||
135 | |||
136 | static struct sdma_platform_data imx53_sdma_pdata __initdata = { | ||
137 | .fw_name = "sdma-imx53.bin", | ||
138 | .script_addrs = &imx53_sdma_script, | ||
139 | }; | ||
140 | |||
141 | void __init imx51_soc_init(void) | ||
142 | { | ||
143 | /* i.mx51 has the i.mx31 type gpio */ | ||
144 | mxc_register_gpio("imx31-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH); | ||
145 | mxc_register_gpio("imx31-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH); | ||
146 | mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_INT_GPIO3_LOW, MX51_INT_GPIO3_HIGH); | ||
147 | mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_INT_GPIO4_LOW, MX51_INT_GPIO4_HIGH); | ||
148 | |||
149 | /* i.mx51 has the i.mx35 type sdma */ | ||
150 | imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); | ||
151 | } | ||
152 | |||
153 | void __init imx53_soc_init(void) | ||
154 | { | ||
155 | /* i.mx53 has the i.mx31 type gpio */ | ||
156 | mxc_register_gpio("imx31-gpio", 0, MX53_GPIO1_BASE_ADDR, SZ_16K, MX53_INT_GPIO1_LOW, MX53_INT_GPIO1_HIGH); | ||
157 | mxc_register_gpio("imx31-gpio", 1, MX53_GPIO2_BASE_ADDR, SZ_16K, MX53_INT_GPIO2_LOW, MX53_INT_GPIO2_HIGH); | ||
158 | mxc_register_gpio("imx31-gpio", 2, MX53_GPIO3_BASE_ADDR, SZ_16K, MX53_INT_GPIO3_LOW, MX53_INT_GPIO3_HIGH); | ||
159 | mxc_register_gpio("imx31-gpio", 3, MX53_GPIO4_BASE_ADDR, SZ_16K, MX53_INT_GPIO4_LOW, MX53_INT_GPIO4_HIGH); | ||
160 | mxc_register_gpio("imx31-gpio", 4, MX53_GPIO5_BASE_ADDR, SZ_16K, MX53_INT_GPIO5_LOW, MX53_INT_GPIO5_HIGH); | ||
161 | mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH); | ||
162 | mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH); | ||
163 | |||
164 | /* i.mx53 has the i.mx35 type sdma */ | ||
165 | imx_add_imx_sdma("imx35-sdma", MX53_SDMA_BASE_ADDR, MX53_INT_SDMA, &imx53_sdma_pdata); | ||
107 | } | 166 | } |
diff --git a/arch/arm/mach-mx5/mx51_efika.c b/arch/arm/mach-mx5/mx51_efika.c index 56739c23aca..e99dead65b3 100644 --- a/arch/arm/mach-mx5/mx51_efika.c +++ b/arch/arm/mach-mx5/mx51_efika.c | |||
@@ -41,7 +41,6 @@ | |||
41 | #include <asm/mach/time.h> | 41 | #include <asm/mach/time.h> |
42 | 42 | ||
43 | #include "devices-imx51.h" | 43 | #include "devices-imx51.h" |
44 | #include "devices.h" | ||
45 | #include "efika.h" | 44 | #include "efika.h" |
46 | #include "cpu_op-mx51.h" | 45 | #include "cpu_op-mx51.h" |
47 | 46 | ||
@@ -133,7 +132,7 @@ static int initialize_otg_port(struct platform_device *pdev) | |||
133 | u32 v; | 132 | u32 v; |
134 | void __iomem *usb_base; | 133 | void __iomem *usb_base; |
135 | void __iomem *usbother_base; | 134 | void __iomem *usbother_base; |
136 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 135 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
137 | if (!usb_base) | 136 | if (!usb_base) |
138 | return -ENOMEM; | 137 | return -ENOMEM; |
139 | usbother_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET); | 138 | usbother_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET); |
@@ -150,7 +149,7 @@ static int initialize_otg_port(struct platform_device *pdev) | |||
150 | return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY); | 149 | return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY); |
151 | } | 150 | } |
152 | 151 | ||
153 | static struct mxc_usbh_platform_data dr_utmi_config = { | 152 | static const struct mxc_usbh_platform_data dr_utmi_config __initconst = { |
154 | .init = initialize_otg_port, | 153 | .init = initialize_otg_port, |
155 | .portsc = MXC_EHCI_UTMI_16BIT, | 154 | .portsc = MXC_EHCI_UTMI_16BIT, |
156 | }; | 155 | }; |
@@ -170,7 +169,7 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
170 | gpio_set_value(EFIKAMX_USBH1_STP, 1); | 169 | gpio_set_value(EFIKAMX_USBH1_STP, 1); |
171 | msleep(1); | 170 | msleep(1); |
172 | 171 | ||
173 | usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K); | 172 | usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K); |
174 | socregs_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET); | 173 | socregs_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET); |
175 | 174 | ||
176 | /* The clock for the USBH1 ULPI port will come externally */ | 175 | /* The clock for the USBH1 ULPI port will come externally */ |
@@ -189,7 +188,7 @@ static int initialize_usbh1_port(struct platform_device *pdev) | |||
189 | return mx51_initialize_usb_hw(0, MXC_EHCI_ITC_NO_THRESHOLD); | 188 | return mx51_initialize_usb_hw(0, MXC_EHCI_ITC_NO_THRESHOLD); |
190 | } | 189 | } |
191 | 190 | ||
192 | static struct mxc_usbh_platform_data usbh1_config = { | 191 | static struct mxc_usbh_platform_data usbh1_config __initdata = { |
193 | .init = initialize_usbh1_port, | 192 | .init = initialize_usbh1_port, |
194 | .portsc = MXC_EHCI_MODE_ULPI, | 193 | .portsc = MXC_EHCI_MODE_ULPI, |
195 | }; | 194 | }; |
@@ -217,9 +216,9 @@ static void __init mx51_efika_usb(void) | |||
217 | usbh1_config.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | | 216 | usbh1_config.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | |
218 | ULPI_OTG_DRVVBUS_EXT | ULPI_OTG_EXTVBUSIND); | 217 | ULPI_OTG_DRVVBUS_EXT | ULPI_OTG_EXTVBUSIND); |
219 | 218 | ||
220 | mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config); | 219 | imx51_add_mxc_ehci_otg(&dr_utmi_config); |
221 | if (usbh1_config.otg) | 220 | if (usbh1_config.otg) |
222 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 221 | imx51_add_mxc_ehci_hs(1, &usbh1_config); |
223 | } | 222 | } |
224 | 223 | ||
225 | static struct mtd_partition mx51_efika_spi_nor_partitions[] = { | 224 | static struct mtd_partition mx51_efika_spi_nor_partitions[] = { |
@@ -260,8 +259,8 @@ static struct regulator_consumer_supply vvideo_consumers[] = { | |||
260 | }; | 259 | }; |
261 | 260 | ||
262 | static struct regulator_consumer_supply vsd_consumers[] = { | 261 | static struct regulator_consumer_supply vsd_consumers[] = { |
263 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.0"), | 262 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.0"), |
264 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.1"), | 263 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.1"), |
265 | }; | 264 | }; |
266 | 265 | ||
267 | static struct regulator_consumer_supply pwgt1_consumer[] = { | 266 | static struct regulator_consumer_supply pwgt1_consumer[] = { |
@@ -631,4 +630,3 @@ void __init efika_board_common_init(void) | |||
631 | get_cpu_op = mx51_get_cpu_op; | 630 | get_cpu_op = mx51_get_cpu_op; |
632 | #endif | 631 | #endif |
633 | } | 632 | } |
634 | |||
diff --git a/arch/arm/mach-mx5/pm-imx5.c b/arch/arm/mach-mx5/pm-imx5.c new file mode 100644 index 00000000000..e4529af0da7 --- /dev/null +++ b/arch/arm/mach-mx5/pm-imx5.c | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | #include <linux/suspend.h> | ||
12 | #include <linux/clk.h> | ||
13 | #include <linux/io.h> | ||
14 | #include <linux/err.h> | ||
15 | #include <asm/cacheflush.h> | ||
16 | #include <asm/tlbflush.h> | ||
17 | #include <mach/system.h> | ||
18 | #include "crm_regs.h" | ||
19 | |||
20 | static struct clk *gpc_dvfs_clk; | ||
21 | |||
22 | static int mx5_suspend_enter(suspend_state_t state) | ||
23 | { | ||
24 | clk_enable(gpc_dvfs_clk); | ||
25 | switch (state) { | ||
26 | case PM_SUSPEND_MEM: | ||
27 | mx5_cpu_lp_set(STOP_POWER_OFF); | ||
28 | break; | ||
29 | case PM_SUSPEND_STANDBY: | ||
30 | mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); | ||
31 | break; | ||
32 | default: | ||
33 | return -EINVAL; | ||
34 | } | ||
35 | |||
36 | if (state == PM_SUSPEND_MEM) { | ||
37 | local_flush_tlb_all(); | ||
38 | flush_cache_all(); | ||
39 | |||
40 | /*clear the EMPGC0/1 bits */ | ||
41 | __raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR); | ||
42 | __raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR); | ||
43 | } | ||
44 | cpu_do_idle(); | ||
45 | clk_disable(gpc_dvfs_clk); | ||
46 | |||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | static int mx5_pm_valid(suspend_state_t state) | ||
51 | { | ||
52 | return (state > PM_SUSPEND_ON && state <= PM_SUSPEND_MAX); | ||
53 | } | ||
54 | |||
55 | static const struct platform_suspend_ops mx5_suspend_ops = { | ||
56 | .valid = mx5_pm_valid, | ||
57 | .enter = mx5_suspend_enter, | ||
58 | }; | ||
59 | |||
60 | static int __init mx5_pm_init(void) | ||
61 | { | ||
62 | if (gpc_dvfs_clk == NULL) | ||
63 | gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs"); | ||
64 | |||
65 | if (!IS_ERR(gpc_dvfs_clk)) { | ||
66 | if (cpu_is_mx51()) | ||
67 | suspend_set_ops(&mx5_suspend_ops); | ||
68 | } else | ||
69 | return -EPERM; | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | device_initcall(mx5_pm_init); | ||