diff options
Diffstat (limited to 'arch')
47 files changed, 933 insertions, 125 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 09ebf0ba64f..2c71a8f3535 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1716,6 +1716,7 @@ config USE_OF | |||
1716 | bool "Flattened Device Tree support" | 1716 | bool "Flattened Device Tree support" |
1717 | select OF | 1717 | select OF |
1718 | select OF_EARLY_FLATTREE | 1718 | select OF_EARLY_FLATTREE |
1719 | select IRQ_DOMAIN | ||
1719 | help | 1720 | help |
1720 | Include support for flattened device tree machine descriptions. | 1721 | Include support for flattened device tree machine descriptions. |
1721 | 1722 | ||
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 3a4a04b33d0..70c424eaf7b 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -282,6 +282,12 @@ zImage Image xipImage bootpImage uImage: vmlinux | |||
282 | zinstall uinstall install: vmlinux | 282 | zinstall uinstall install: vmlinux |
283 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ | 283 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ |
284 | 284 | ||
285 | %.dtb: | ||
286 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | ||
287 | |||
288 | dtbs: | ||
289 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | ||
290 | |||
285 | # We use MRPROPER_FILES and CLEAN_FILES now | 291 | # We use MRPROPER_FILES and CLEAN_FILES now |
286 | archclean: | 292 | archclean: |
287 | $(Q)$(MAKE) $(clean)=$(boot) | 293 | $(Q)$(MAKE) $(clean)=$(boot) |
@@ -298,6 +304,7 @@ define archhelp | |||
298 | echo ' uImage - U-Boot wrapped zImage' | 304 | echo ' uImage - U-Boot wrapped zImage' |
299 | echo ' bootpImage - Combined zImage and initial RAM disk' | 305 | echo ' bootpImage - Combined zImage and initial RAM disk' |
300 | echo ' (supply initrd image via make variable INITRD=<path>)' | 306 | echo ' (supply initrd image via make variable INITRD=<path>)' |
307 | echo ' dtbs - Build device tree blobs for enabled boards' | ||
301 | echo ' install - Install uncompressed kernel' | 308 | echo ' install - Install uncompressed kernel' |
302 | echo ' zinstall - Install compressed kernel' | 309 | echo ' zinstall - Install compressed kernel' |
303 | echo ' uinstall - Install U-Boot wrapped compressed kernel' | 310 | echo ' uinstall - Install U-Boot wrapped compressed kernel' |
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 9128fddf110..a1edfd5a129 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
@@ -59,6 +59,12 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE | |||
59 | 59 | ||
60 | endif | 60 | endif |
61 | 61 | ||
62 | # Rule to build device tree blobs | ||
63 | $(obj)/%.dtb: $(src)/dts/%.dts | ||
64 | $(call cmd,dtc) | ||
65 | |||
66 | $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) | ||
67 | |||
62 | quiet_cmd_uimage = UIMAGE $@ | 68 | quiet_cmd_uimage = UIMAGE $@ |
63 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \ | 69 | cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \ |
64 | -C none -a $(LOADADDR) -e $(STARTADDR) \ | 70 | -C none -a $(LOADADDR) -e $(STARTADDR) \ |
diff --git a/arch/arm/boot/dts/skeleton.dtsi b/arch/arm/boot/dts/skeleton.dtsi new file mode 100644 index 00000000000..b41d241de2c --- /dev/null +++ b/arch/arm/boot/dts/skeleton.dtsi | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * Skeleton device tree; the bare minimum needed to boot; just include and | ||
3 | * add a compatible value. The bootloader will typically populate the memory | ||
4 | * node. | ||
5 | */ | ||
6 | |||
7 | / { | ||
8 | #address-cells = <1>; | ||
9 | #size-cells = <1>; | ||
10 | chosen { }; | ||
11 | aliases { }; | ||
12 | memory { device_type = "memory"; reg = <0 0>; }; | ||
13 | }; | ||
diff --git a/arch/arm/boot/dts/tegra-harmony.dts b/arch/arm/boot/dts/tegra-harmony.dts new file mode 100644 index 00000000000..4c053340ce3 --- /dev/null +++ b/arch/arm/boot/dts/tegra-harmony.dts | |||
@@ -0,0 +1,70 @@ | |||
1 | /dts-v1/; | ||
2 | |||
3 | /memreserve/ 0x1c000000 0x04000000; | ||
4 | /include/ "tegra20.dtsi" | ||
5 | |||
6 | / { | ||
7 | model = "NVIDIA Tegra2 Harmony evaluation board"; | ||
8 | compatible = "nvidia,harmony", "nvidia,tegra20"; | ||
9 | |||
10 | chosen { | ||
11 | bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootwait"; | ||
12 | }; | ||
13 | |||
14 | memory@0 { | ||
15 | reg = < 0x00000000 0x40000000 >; | ||
16 | }; | ||
17 | |||
18 | i2c@7000c000 { | ||
19 | clock-frequency = <400000>; | ||
20 | |||
21 | codec: wm8903@1a { | ||
22 | compatible = "wlf,wm8903"; | ||
23 | reg = <0x1a>; | ||
24 | interrupts = < 347 >; | ||
25 | |||
26 | gpio-controller; | ||
27 | #gpio-cells = <2>; | ||
28 | |||
29 | /* 0x8000 = Not configured */ | ||
30 | gpio-cfg = < 0x8000 0x8000 0 0x8000 0x8000 >; | ||
31 | }; | ||
32 | }; | ||
33 | |||
34 | i2c@7000c400 { | ||
35 | clock-frequency = <400000>; | ||
36 | }; | ||
37 | |||
38 | i2c@7000c500 { | ||
39 | clock-frequency = <400000>; | ||
40 | }; | ||
41 | |||
42 | i2c@7000d000 { | ||
43 | clock-frequency = <400000>; | ||
44 | }; | ||
45 | |||
46 | sound { | ||
47 | compatible = "nvidia,harmony-sound", "nvidia,tegra-wm8903"; | ||
48 | |||
49 | spkr-en-gpios = <&codec 2 0>; | ||
50 | hp-det-gpios = <&gpio 178 0>; | ||
51 | int-mic-en-gpios = <&gpio 184 0>; | ||
52 | ext-mic-en-gpios = <&gpio 185 0>; | ||
53 | }; | ||
54 | |||
55 | serial@70006300 { | ||
56 | clock-frequency = < 216000000 >; | ||
57 | }; | ||
58 | |||
59 | sdhci@c8000200 { | ||
60 | gpios = <&gpio 69 0>, /* cd, gpio PI5 */ | ||
61 | <&gpio 57 0>, /* wp, gpio PH1 */ | ||
62 | <&gpio 155 0>; /* power, gpio PT3 */ | ||
63 | }; | ||
64 | |||
65 | sdhci@c8000600 { | ||
66 | gpios = <&gpio 58 0>, /* cd, gpio PH2 */ | ||
67 | <&gpio 59 0>, /* wp, gpio PH3 */ | ||
68 | <&gpio 70 0>; /* power, gpio PI6 */ | ||
69 | }; | ||
70 | }; | ||
diff --git a/arch/arm/boot/dts/tegra-seaboard.dts b/arch/arm/boot/dts/tegra-seaboard.dts new file mode 100644 index 00000000000..1940cae0074 --- /dev/null +++ b/arch/arm/boot/dts/tegra-seaboard.dts | |||
@@ -0,0 +1,28 @@ | |||
1 | /dts-v1/; | ||
2 | |||
3 | /memreserve/ 0x1c000000 0x04000000; | ||
4 | /include/ "tegra20.dtsi" | ||
5 | |||
6 | / { | ||
7 | model = "NVIDIA Seaboard"; | ||
8 | compatible = "nvidia,seaboard", "nvidia,tegra20"; | ||
9 | |||
10 | chosen { | ||
11 | bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk1p3 rw rootwait"; | ||
12 | }; | ||
13 | |||
14 | memory { | ||
15 | device_type = "memory"; | ||
16 | reg = < 0x00000000 0x40000000 >; | ||
17 | }; | ||
18 | |||
19 | serial@70006300 { | ||
20 | clock-frequency = < 216000000 >; | ||
21 | }; | ||
22 | |||
23 | sdhci@c8000400 { | ||
24 | gpios = <&gpio 69 0>, /* cd, gpio PI5 */ | ||
25 | <&gpio 57 0>, /* wp, gpio PH1 */ | ||
26 | <&gpio 70 0>; /* power, gpio PI6 */ | ||
27 | }; | ||
28 | }; | ||
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi new file mode 100644 index 00000000000..5727595cde6 --- /dev/null +++ b/arch/arm/boot/dts/tegra20.dtsi | |||
@@ -0,0 +1,139 @@ | |||
1 | /include/ "skeleton.dtsi" | ||
2 | |||
3 | / { | ||
4 | compatible = "nvidia,tegra20"; | ||
5 | interrupt-parent = <&intc>; | ||
6 | |||
7 | intc: interrupt-controller@50041000 { | ||
8 | compatible = "nvidia,tegra20-gic"; | ||
9 | interrupt-controller; | ||
10 | #interrupt-cells = <1>; | ||
11 | reg = < 0x50041000 0x1000 >, | ||
12 | < 0x50040100 0x0100 >; | ||
13 | }; | ||
14 | |||
15 | i2c@7000c000 { | ||
16 | #address-cells = <1>; | ||
17 | #size-cells = <0>; | ||
18 | compatible = "nvidia,tegra20-i2c"; | ||
19 | reg = <0x7000C000 0x100>; | ||
20 | interrupts = < 70 >; | ||
21 | }; | ||
22 | |||
23 | i2c@7000c400 { | ||
24 | #address-cells = <1>; | ||
25 | #size-cells = <0>; | ||
26 | compatible = "nvidia,tegra20-i2c"; | ||
27 | reg = <0x7000C400 0x100>; | ||
28 | interrupts = < 116 >; | ||
29 | }; | ||
30 | |||
31 | i2c@7000c500 { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | compatible = "nvidia,tegra20-i2c"; | ||
35 | reg = <0x7000C500 0x100>; | ||
36 | interrupts = < 124 >; | ||
37 | }; | ||
38 | |||
39 | i2c@7000d000 { | ||
40 | #address-cells = <1>; | ||
41 | #size-cells = <0>; | ||
42 | compatible = "nvidia,tegra20-i2c"; | ||
43 | reg = <0x7000D000 0x200>; | ||
44 | interrupts = < 85 >; | ||
45 | }; | ||
46 | |||
47 | i2s@70002800 { | ||
48 | #address-cells = <1>; | ||
49 | #size-cells = <0>; | ||
50 | compatible = "nvidia,tegra20-i2s"; | ||
51 | reg = <0x70002800 0x200>; | ||
52 | interrupts = < 45 >; | ||
53 | dma-channel = < 2 >; | ||
54 | }; | ||
55 | |||
56 | i2s@70002a00 { | ||
57 | #address-cells = <1>; | ||
58 | #size-cells = <0>; | ||
59 | compatible = "nvidia,tegra20-i2s"; | ||
60 | reg = <0x70002a00 0x200>; | ||
61 | interrupts = < 35 >; | ||
62 | dma-channel = < 1 >; | ||
63 | }; | ||
64 | |||
65 | das@70000c00 { | ||
66 | #address-cells = <1>; | ||
67 | #size-cells = <0>; | ||
68 | compatible = "nvidia,tegra20-das"; | ||
69 | reg = <0x70000c00 0x80>; | ||
70 | }; | ||
71 | |||
72 | gpio: gpio@6000d000 { | ||
73 | compatible = "nvidia,tegra20-gpio"; | ||
74 | reg = < 0x6000d000 0x1000 >; | ||
75 | interrupts = < 64 65 66 67 87 119 121 >; | ||
76 | #gpio-cells = <2>; | ||
77 | gpio-controller; | ||
78 | }; | ||
79 | |||
80 | serial@70006000 { | ||
81 | compatible = "nvidia,tegra20-uart"; | ||
82 | reg = <0x70006000 0x40>; | ||
83 | reg-shift = <2>; | ||
84 | interrupts = < 68 >; | ||
85 | }; | ||
86 | |||
87 | serial@70006040 { | ||
88 | compatible = "nvidia,tegra20-uart"; | ||
89 | reg = <0x70006040 0x40>; | ||
90 | reg-shift = <2>; | ||
91 | interrupts = < 69 >; | ||
92 | }; | ||
93 | |||
94 | serial@70006200 { | ||
95 | compatible = "nvidia,tegra20-uart"; | ||
96 | reg = <0x70006200 0x100>; | ||
97 | reg-shift = <2>; | ||
98 | interrupts = < 78 >; | ||
99 | }; | ||
100 | |||
101 | serial@70006300 { | ||
102 | compatible = "nvidia,tegra20-uart"; | ||
103 | reg = <0x70006300 0x100>; | ||
104 | reg-shift = <2>; | ||
105 | interrupts = < 122 >; | ||
106 | }; | ||
107 | |||
108 | serial@70006400 { | ||
109 | compatible = "nvidia,tegra20-uart"; | ||
110 | reg = <0x70006400 0x100>; | ||
111 | reg-shift = <2>; | ||
112 | interrupts = < 123 >; | ||
113 | }; | ||
114 | |||
115 | sdhci@c8000000 { | ||
116 | compatible = "nvidia,tegra20-sdhci"; | ||
117 | reg = <0xc8000000 0x200>; | ||
118 | interrupts = < 46 >; | ||
119 | }; | ||
120 | |||
121 | sdhci@c8000200 { | ||
122 | compatible = "nvidia,tegra20-sdhci"; | ||
123 | reg = <0xc8000200 0x200>; | ||
124 | interrupts = < 47 >; | ||
125 | }; | ||
126 | |||
127 | sdhci@c8000400 { | ||
128 | compatible = "nvidia,tegra20-sdhci"; | ||
129 | reg = <0xc8000400 0x200>; | ||
130 | interrupts = < 51 >; | ||
131 | }; | ||
132 | |||
133 | sdhci@c8000600 { | ||
134 | compatible = "nvidia,tegra20-sdhci"; | ||
135 | reg = <0xc8000600 0x200>; | ||
136 | interrupts = < 63 >; | ||
137 | }; | ||
138 | }; | ||
139 | |||
diff --git a/arch/arm/boot/dts/versatile-ab.dts b/arch/arm/boot/dts/versatile-ab.dts new file mode 100644 index 00000000000..0b32925f214 --- /dev/null +++ b/arch/arm/boot/dts/versatile-ab.dts | |||
@@ -0,0 +1,192 @@ | |||
1 | /dts-v1/; | ||
2 | /include/ "skeleton.dtsi" | ||
3 | |||
4 | / { | ||
5 | model = "ARM Versatile AB"; | ||
6 | compatible = "arm,versatile-ab"; | ||
7 | #address-cells = <1>; | ||
8 | #size-cells = <1>; | ||
9 | interrupt-parent = <&vic>; | ||
10 | |||
11 | aliases { | ||
12 | serial0 = &uart0; | ||
13 | serial1 = &uart1; | ||
14 | serial2 = &uart2; | ||
15 | i2c0 = &i2c0; | ||
16 | }; | ||
17 | |||
18 | memory { | ||
19 | reg = <0x0 0x08000000>; | ||
20 | }; | ||
21 | |||
22 | flash@34000000 { | ||
23 | compatible = "arm,versatile-flash"; | ||
24 | reg = <0x34000000 0x4000000>; | ||
25 | bank-width = <4>; | ||
26 | }; | ||
27 | |||
28 | i2c0: i2c@10002000 { | ||
29 | #address-cells = <1>; | ||
30 | #size-cells = <0>; | ||
31 | compatible = "arm,versatile-i2c"; | ||
32 | reg = <0x10002000 0x1000>; | ||
33 | |||
34 | rtc@68 { | ||
35 | compatible = "dallas,ds1338"; | ||
36 | reg = <0x68>; | ||
37 | }; | ||
38 | }; | ||
39 | |||
40 | net@10010000 { | ||
41 | compatible = "smsc,lan91c111"; | ||
42 | reg = <0x10010000 0x10000>; | ||
43 | interrupts = <25>; | ||
44 | }; | ||
45 | |||
46 | lcd@10008000 { | ||
47 | compatible = "arm,versatile-lcd"; | ||
48 | reg = <0x10008000 0x1000>; | ||
49 | }; | ||
50 | |||
51 | amba { | ||
52 | compatible = "arm,amba-bus"; | ||
53 | #address-cells = <1>; | ||
54 | #size-cells = <1>; | ||
55 | ranges; | ||
56 | |||
57 | vic: intc@10140000 { | ||
58 | compatible = "arm,versatile-vic"; | ||
59 | interrupt-controller; | ||
60 | #interrupt-cells = <1>; | ||
61 | reg = <0x10140000 0x1000>; | ||
62 | }; | ||
63 | |||
64 | sic: intc@10003000 { | ||
65 | compatible = "arm,versatile-sic"; | ||
66 | interrupt-controller; | ||
67 | #interrupt-cells = <1>; | ||
68 | reg = <0x10003000 0x1000>; | ||
69 | interrupt-parent = <&vic>; | ||
70 | interrupts = <31>; /* Cascaded to vic */ | ||
71 | }; | ||
72 | |||
73 | dma@10130000 { | ||
74 | compatible = "arm,pl081", "arm,primecell"; | ||
75 | reg = <0x10130000 0x1000>; | ||
76 | interrupts = <17>; | ||
77 | }; | ||
78 | |||
79 | uart0: uart@101f1000 { | ||
80 | compatible = "arm,pl011", "arm,primecell"; | ||
81 | reg = <0x101f1000 0x1000>; | ||
82 | interrupts = <12>; | ||
83 | }; | ||
84 | |||
85 | uart1: uart@101f2000 { | ||
86 | compatible = "arm,pl011", "arm,primecell"; | ||
87 | reg = <0x101f2000 0x1000>; | ||
88 | interrupts = <13>; | ||
89 | }; | ||
90 | |||
91 | uart2: uart@101f3000 { | ||
92 | compatible = "arm,pl011", "arm,primecell"; | ||
93 | reg = <0x101f3000 0x1000>; | ||
94 | interrupts = <14>; | ||
95 | }; | ||
96 | |||
97 | smc@10100000 { | ||
98 | compatible = "arm,primecell"; | ||
99 | reg = <0x10100000 0x1000>; | ||
100 | }; | ||
101 | |||
102 | mpmc@10110000 { | ||
103 | compatible = "arm,primecell"; | ||
104 | reg = <0x10110000 0x1000>; | ||
105 | }; | ||
106 | |||
107 | display@10120000 { | ||
108 | compatible = "arm,pl110", "arm,primecell"; | ||
109 | reg = <0x10120000 0x1000>; | ||
110 | interrupts = <16>; | ||
111 | }; | ||
112 | |||
113 | sctl@101e0000 { | ||
114 | compatible = "arm,primecell"; | ||
115 | reg = <0x101e0000 0x1000>; | ||
116 | }; | ||
117 | |||
118 | watchdog@101e1000 { | ||
119 | compatible = "arm,primecell"; | ||
120 | reg = <0x101e1000 0x1000>; | ||
121 | interrupts = <0>; | ||
122 | }; | ||
123 | |||
124 | gpio0: gpio@101e4000 { | ||
125 | compatible = "arm,pl061", "arm,primecell"; | ||
126 | reg = <0x101e4000 0x1000>; | ||
127 | gpio-controller; | ||
128 | interrupts = <6>; | ||
129 | #gpio-cells = <2>; | ||
130 | interrupt-controller; | ||
131 | #interrupt-cells = <2>; | ||
132 | }; | ||
133 | |||
134 | gpio1: gpio@101e5000 { | ||
135 | compatible = "arm,pl061", "arm,primecell"; | ||
136 | reg = <0x101e5000 0x1000>; | ||
137 | interrupts = <7>; | ||
138 | gpio-controller; | ||
139 | #gpio-cells = <2>; | ||
140 | interrupt-controller; | ||
141 | #interrupt-cells = <2>; | ||
142 | }; | ||
143 | |||
144 | rtc@101e8000 { | ||
145 | compatible = "arm,pl030", "arm,primecell"; | ||
146 | reg = <0x101e8000 0x1000>; | ||
147 | interrupts = <10>; | ||
148 | }; | ||
149 | |||
150 | sci@101f0000 { | ||
151 | compatible = "arm,primecell"; | ||
152 | reg = <0x101f0000 0x1000>; | ||
153 | interrupts = <15>; | ||
154 | }; | ||
155 | |||
156 | ssp@101f4000 { | ||
157 | compatible = "arm,pl022", "arm,primecell"; | ||
158 | reg = <0x101f4000 0x1000>; | ||
159 | interrupts = <11>; | ||
160 | }; | ||
161 | |||
162 | fpga { | ||
163 | compatible = "arm,versatile-fpga", "simple-bus"; | ||
164 | #address-cells = <1>; | ||
165 | #size-cells = <1>; | ||
166 | ranges = <0 0x10000000 0x10000>; | ||
167 | |||
168 | aaci@4000 { | ||
169 | compatible = "arm,primecell"; | ||
170 | reg = <0x4000 0x1000>; | ||
171 | interrupts = <24>; | ||
172 | }; | ||
173 | mmc@5000 { | ||
174 | compatible = "arm,primecell"; | ||
175 | reg = < 0x5000 0x1000>; | ||
176 | interrupts = <22>; | ||
177 | }; | ||
178 | kmi@6000 { | ||
179 | compatible = "arm,pl050", "arm,primecell"; | ||
180 | reg = <0x6000 0x1000>; | ||
181 | interrupt-parent = <&sic>; | ||
182 | interrupts = <3>; | ||
183 | }; | ||
184 | kmi@7000 { | ||
185 | compatible = "arm,pl050", "arm,primecell"; | ||
186 | reg = <0x7000 0x1000>; | ||
187 | interrupt-parent = <&sic>; | ||
188 | interrupts = <4>; | ||
189 | }; | ||
190 | }; | ||
191 | }; | ||
192 | }; | ||
diff --git a/arch/arm/boot/dts/versatile-pb.dts b/arch/arm/boot/dts/versatile-pb.dts new file mode 100644 index 00000000000..8a614e39800 --- /dev/null +++ b/arch/arm/boot/dts/versatile-pb.dts | |||
@@ -0,0 +1,48 @@ | |||
1 | /include/ "versatile-ab.dts" | ||
2 | |||
3 | / { | ||
4 | model = "ARM Versatile PB"; | ||
5 | compatible = "arm,versatile-pb"; | ||
6 | |||
7 | amba { | ||
8 | gpio2: gpio@101e6000 { | ||
9 | compatible = "arm,pl061", "arm,primecell"; | ||
10 | reg = <0x101e6000 0x1000>; | ||
11 | interrupts = <8>; | ||
12 | gpio-controller; | ||
13 | #gpio-cells = <2>; | ||
14 | interrupt-controller; | ||
15 | #interrupt-cells = <2>; | ||
16 | }; | ||
17 | |||
18 | gpio3: gpio@101e7000 { | ||
19 | compatible = "arm,pl061", "arm,primecell"; | ||
20 | reg = <0x101e7000 0x1000>; | ||
21 | interrupts = <9>; | ||
22 | gpio-controller; | ||
23 | #gpio-cells = <2>; | ||
24 | interrupt-controller; | ||
25 | #interrupt-cells = <2>; | ||
26 | }; | ||
27 | |||
28 | fpga { | ||
29 | uart@9000 { | ||
30 | compatible = "arm,pl011", "arm,primecell"; | ||
31 | reg = <0x9000 0x1000>; | ||
32 | interrupt-parent = <&sic>; | ||
33 | interrupts = <6>; | ||
34 | }; | ||
35 | sci@a000 { | ||
36 | compatible = "arm,primecell"; | ||
37 | reg = <0xa000 0x1000>; | ||
38 | interrupt-parent = <&sic>; | ||
39 | interrupts = <5>; | ||
40 | }; | ||
41 | mmc@b000 { | ||
42 | compatible = "arm,primecell"; | ||
43 | reg = <0xb000 0x1000>; | ||
44 | interrupts = <23>; | ||
45 | }; | ||
46 | }; | ||
47 | }; | ||
48 | }; | ||
diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index 3281fb4b12e..217aa1911dd 100644 --- a/arch/arm/include/asm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h | |||
@@ -74,4 +74,11 @@ static const struct machine_desc __mach_desc_##_type \ | |||
74 | #define MACHINE_END \ | 74 | #define MACHINE_END \ |
75 | }; | 75 | }; |
76 | 76 | ||
77 | #define DT_MACHINE_START(_name, _namestr) \ | ||
78 | static const struct machine_desc __mach_desc_##_name \ | ||
79 | __used \ | ||
80 | __attribute__((__section__(".arch.info.init"))) = { \ | ||
81 | .nr = ~0, \ | ||
82 | .name = _namestr, | ||
83 | |||
77 | #endif | 84 | #endif |
diff --git a/arch/arm/include/asm/prom.h b/arch/arm/include/asm/prom.h index 11b8708fc4d..6f65ca86a5e 100644 --- a/arch/arm/include/asm/prom.h +++ b/arch/arm/include/asm/prom.h | |||
@@ -16,11 +16,6 @@ | |||
16 | #include <asm/setup.h> | 16 | #include <asm/setup.h> |
17 | #include <asm/irq.h> | 17 | #include <asm/irq.h> |
18 | 18 | ||
19 | static inline void irq_dispose_mapping(unsigned int virq) | ||
20 | { | ||
21 | return; | ||
22 | } | ||
23 | |||
24 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); | 19 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); |
25 | extern void arm_dt_memblock_reserve(void); | 20 | extern void arm_dt_memblock_reserve(void); |
26 | 21 | ||
diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index 0cdd7b456cb..1a33e9d6bb1 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c | |||
@@ -132,17 +132,3 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) | |||
132 | 132 | ||
133 | return mdesc_best; | 133 | return mdesc_best; |
134 | } | 134 | } |
135 | |||
136 | /** | ||
137 | * irq_create_of_mapping - Hook to resolve OF irq specifier into a Linux irq# | ||
138 | * | ||
139 | * Currently the mapping mechanism is trivial; simple flat hwirq numbers are | ||
140 | * mapped 1:1 onto Linux irq numbers. Cascaded irq controllers are not | ||
141 | * supported. | ||
142 | */ | ||
143 | unsigned int irq_create_of_mapping(struct device_node *controller, | ||
144 | const u32 *intspec, unsigned int intsize) | ||
145 | { | ||
146 | return intspec[0]; | ||
147 | } | ||
148 | EXPORT_SYMBOL_GPL(irq_create_of_mapping); | ||
diff --git a/arch/arm/mach-imx/clock-imx1.c b/arch/arm/mach-imx/clock-imx1.c index dcc41728fe7..4aabeb24156 100644 --- a/arch/arm/mach-imx/clock-imx1.c +++ b/arch/arm/mach-imx/clock-imx1.c | |||
@@ -587,9 +587,9 @@ static struct clk_lookup lookups[] __initdata = { | |||
587 | _REGISTER_CLOCK(NULL, "mma", mma_clk) | 587 | _REGISTER_CLOCK(NULL, "mma", mma_clk) |
588 | _REGISTER_CLOCK("imx_udc.0", NULL, usbd_clk) | 588 | _REGISTER_CLOCK("imx_udc.0", NULL, usbd_clk) |
589 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 589 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
590 | _REGISTER_CLOCK("imx-uart.0", NULL, uart_clk) | 590 | _REGISTER_CLOCK("imx1-uart.0", NULL, uart_clk) |
591 | _REGISTER_CLOCK("imx-uart.1", NULL, uart_clk) | 591 | _REGISTER_CLOCK("imx1-uart.1", NULL, uart_clk) |
592 | _REGISTER_CLOCK("imx-uart.2", NULL, uart_clk) | 592 | _REGISTER_CLOCK("imx1-uart.2", NULL, uart_clk) |
593 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) | 593 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) |
594 | _REGISTER_CLOCK("imx1-cspi.0", NULL, spi_clk) | 594 | _REGISTER_CLOCK("imx1-cspi.0", NULL, spi_clk) |
595 | _REGISTER_CLOCK("imx1-cspi.1", NULL, spi_clk) | 595 | _REGISTER_CLOCK("imx1-cspi.1", NULL, spi_clk) |
diff --git a/arch/arm/mach-imx/clock-imx21.c b/arch/arm/mach-imx/clock-imx21.c index bf30a8c7ce6..ee15d8c9db0 100644 --- a/arch/arm/mach-imx/clock-imx21.c +++ b/arch/arm/mach-imx/clock-imx21.c | |||
@@ -1162,10 +1162,10 @@ static struct clk_lookup lookups[] = { | |||
1162 | _REGISTER_CLOCK(NULL, "perclk3", per_clk[2]) | 1162 | _REGISTER_CLOCK(NULL, "perclk3", per_clk[2]) |
1163 | _REGISTER_CLOCK(NULL, "perclk4", per_clk[3]) | 1163 | _REGISTER_CLOCK(NULL, "perclk4", per_clk[3]) |
1164 | _REGISTER_CLOCK(NULL, "clko", clko_clk) | 1164 | _REGISTER_CLOCK(NULL, "clko", clko_clk) |
1165 | _REGISTER_CLOCK("imx-uart.0", NULL, uart_clk[0]) | 1165 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart_clk[0]) |
1166 | _REGISTER_CLOCK("imx-uart.1", NULL, uart_clk[1]) | 1166 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart_clk[1]) |
1167 | _REGISTER_CLOCK("imx-uart.2", NULL, uart_clk[2]) | 1167 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart_clk[2]) |
1168 | _REGISTER_CLOCK("imx-uart.3", NULL, uart_clk[3]) | 1168 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart_clk[3]) |
1169 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[0]) | 1169 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[0]) |
1170 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[1]) | 1170 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[1]) |
1171 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[2]) | 1171 | _REGISTER_CLOCK(NULL, "gpt1", gpt_clk[2]) |
diff --git a/arch/arm/mach-imx/clock-imx25.c b/arch/arm/mach-imx/clock-imx25.c index af1c580b06b..0fc7ba56d61 100644 --- a/arch/arm/mach-imx/clock-imx25.c +++ b/arch/arm/mach-imx/clock-imx25.c | |||
@@ -272,11 +272,12 @@ DEFINE_CLOCK(can2_clk, 1, CCM_CGCR1, 3, get_rate_ipg, NULL, NULL); | |||
272 | }, | 272 | }, |
273 | 273 | ||
274 | static struct clk_lookup lookups[] = { | 274 | static struct clk_lookup lookups[] = { |
275 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 275 | /* i.mx25 has the i.mx21 type uart */ |
276 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 276 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
277 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 277 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
278 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) | 278 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) |
279 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) | 279 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) |
280 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) | ||
280 | _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) | 281 | _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) |
281 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) | 282 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) |
282 | _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) | 283 | _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) |
@@ -295,19 +296,20 @@ static struct clk_lookup lookups[] = { | |||
295 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) | 296 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) |
296 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk) | 297 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk) |
297 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk) | 298 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk) |
298 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 299 | _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) |
299 | _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk) | 300 | _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk) |
300 | _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) | 301 | _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) |
301 | _REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk) | 302 | _REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk) |
302 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | 303 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) |
303 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | 304 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) |
304 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 305 | _REGISTER_CLOCK("sdhci-esdhc-imx25.0", NULL, esdhc1_clk) |
305 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) | 306 | _REGISTER_CLOCK("sdhci-esdhc-imx25.1", NULL, esdhc2_clk) |
306 | _REGISTER_CLOCK("mx2-camera.0", NULL, csi_clk) | 307 | _REGISTER_CLOCK("mx2-camera.0", NULL, csi_clk) |
307 | _REGISTER_CLOCK(NULL, "audmux", audmux_clk) | 308 | _REGISTER_CLOCK(NULL, "audmux", audmux_clk) |
308 | _REGISTER_CLOCK("flexcan.0", NULL, can1_clk) | 309 | _REGISTER_CLOCK("flexcan.0", NULL, can1_clk) |
309 | _REGISTER_CLOCK("flexcan.1", NULL, can2_clk) | 310 | _REGISTER_CLOCK("flexcan.1", NULL, can2_clk) |
310 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) | 311 | /* i.mx25 has the i.mx35 type sdma */ |
312 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) | ||
311 | }; | 313 | }; |
312 | 314 | ||
313 | int __init mx25_clocks_init(void) | 315 | int __init mx25_clocks_init(void) |
diff --git a/arch/arm/mach-imx/clock-imx27.c b/arch/arm/mach-imx/clock-imx27.c index 583f2515c1d..6912b821b37 100644 --- a/arch/arm/mach-imx/clock-imx27.c +++ b/arch/arm/mach-imx/clock-imx27.c | |||
@@ -624,12 +624,13 @@ DEFINE_CLOCK1(csi_clk, 0, NULL, 0, parent, &csi_clk1, &per4_clk); | |||
624 | }, | 624 | }, |
625 | 625 | ||
626 | static struct clk_lookup lookups[] = { | 626 | static struct clk_lookup lookups[] = { |
627 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 627 | /* i.mx27 has the i.mx21 type uart */ |
628 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 628 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
629 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 629 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
630 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) | 630 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) |
631 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) | 631 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) |
632 | _REGISTER_CLOCK("imx-uart.5", NULL, uart6_clk) | 632 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) |
633 | _REGISTER_CLOCK("imx21-uart.5", NULL, uart6_clk) | ||
633 | _REGISTER_CLOCK(NULL, "gpt1", gpt1_clk) | 634 | _REGISTER_CLOCK(NULL, "gpt1", gpt1_clk) |
634 | _REGISTER_CLOCK(NULL, "gpt2", gpt2_clk) | 635 | _REGISTER_CLOCK(NULL, "gpt2", gpt2_clk) |
635 | _REGISTER_CLOCK(NULL, "gpt3", gpt3_clk) | 636 | _REGISTER_CLOCK(NULL, "gpt3", gpt3_clk) |
@@ -662,7 +663,7 @@ static struct clk_lookup lookups[] = { | |||
662 | _REGISTER_CLOCK(NULL, "brom", brom_clk) | 663 | _REGISTER_CLOCK(NULL, "brom", brom_clk) |
663 | _REGISTER_CLOCK(NULL, "emma", emma_clk) | 664 | _REGISTER_CLOCK(NULL, "emma", emma_clk) |
664 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) | 665 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) |
665 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 666 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) |
666 | _REGISTER_CLOCK(NULL, "emi", emi_clk) | 667 | _REGISTER_CLOCK(NULL, "emi", emi_clk) |
667 | _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) | 668 | _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) |
668 | _REGISTER_CLOCK(NULL, "ata", ata_clk) | 669 | _REGISTER_CLOCK(NULL, "ata", ata_clk) |
diff --git a/arch/arm/mach-imx/clock-imx31.c b/arch/arm/mach-imx/clock-imx31.c index 25f343fca2b..d973770b1f9 100644 --- a/arch/arm/mach-imx/clock-imx31.c +++ b/arch/arm/mach-imx/clock-imx31.c | |||
@@ -547,11 +547,12 @@ static struct clk_lookup lookups[] = { | |||
547 | _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) | 547 | _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) |
548 | _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) | 548 | _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) |
549 | _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk) | 549 | _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk) |
550 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 550 | /* i.mx31 has the i.mx21 type uart */ |
551 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 551 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
552 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 552 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
553 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) | 553 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) |
554 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) | 554 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) |
555 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) | ||
555 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 556 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
556 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | 557 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) |
557 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_clk) | 558 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_clk) |
@@ -564,7 +565,7 @@ static struct clk_lookup lookups[] = { | |||
564 | _REGISTER_CLOCK(NULL, "ata", ata_clk) | 565 | _REGISTER_CLOCK(NULL, "ata", ata_clk) |
565 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) | 566 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) |
566 | _REGISTER_CLOCK(NULL, "rng", rng_clk) | 567 | _REGISTER_CLOCK(NULL, "rng", rng_clk) |
567 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk1) | 568 | _REGISTER_CLOCK("imx31-sdma", NULL, sdma_clk1) |
568 | _REGISTER_CLOCK(NULL, "sdma_ipg", sdma_clk2) | 569 | _REGISTER_CLOCK(NULL, "sdma_ipg", sdma_clk2) |
569 | _REGISTER_CLOCK(NULL, "mstick", mstick1_clk) | 570 | _REGISTER_CLOCK(NULL, "mstick", mstick1_clk) |
570 | _REGISTER_CLOCK(NULL, "mstick", mstick2_clk) | 571 | _REGISTER_CLOCK(NULL, "mstick", mstick2_clk) |
diff --git a/arch/arm/mach-imx/clock-imx35.c b/arch/arm/mach-imx/clock-imx35.c index 5a4cc1ea405..88b62a071ae 100644 --- a/arch/arm/mach-imx/clock-imx35.c +++ b/arch/arm/mach-imx/clock-imx35.c | |||
@@ -458,10 +458,11 @@ static struct clk_lookup lookups[] = { | |||
458 | _REGISTER_CLOCK("imx-epit.0", NULL, epit1_clk) | 458 | _REGISTER_CLOCK("imx-epit.0", NULL, epit1_clk) |
459 | _REGISTER_CLOCK("imx-epit.1", NULL, epit2_clk) | 459 | _REGISTER_CLOCK("imx-epit.1", NULL, epit2_clk) |
460 | _REGISTER_CLOCK(NULL, "esai", esai_clk) | 460 | _REGISTER_CLOCK(NULL, "esai", esai_clk) |
461 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 461 | _REGISTER_CLOCK("sdhci-esdhc-imx35.0", NULL, esdhc1_clk) |
462 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) | 462 | _REGISTER_CLOCK("sdhci-esdhc-imx35.1", NULL, esdhc2_clk) |
463 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) | 463 | _REGISTER_CLOCK("sdhci-esdhc-imx35.2", NULL, esdhc3_clk) |
464 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 464 | /* i.mx35 has the i.mx27 type fec */ |
465 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) | ||
465 | _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) | 466 | _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) |
466 | _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) | 467 | _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) |
467 | _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) | 468 | _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) |
@@ -481,14 +482,15 @@ static struct clk_lookup lookups[] = { | |||
481 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) | 482 | _REGISTER_CLOCK(NULL, "rtc", rtc_clk) |
482 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) | 483 | _REGISTER_CLOCK(NULL, "rtic", rtic_clk) |
483 | _REGISTER_CLOCK(NULL, "scc", scc_clk) | 484 | _REGISTER_CLOCK(NULL, "scc", scc_clk) |
484 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) | 485 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) |
485 | _REGISTER_CLOCK(NULL, "spba", spba_clk) | 486 | _REGISTER_CLOCK(NULL, "spba", spba_clk) |
486 | _REGISTER_CLOCK(NULL, "spdif", spdif_clk) | 487 | _REGISTER_CLOCK(NULL, "spdif", spdif_clk) |
487 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | 488 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) |
488 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | 489 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) |
489 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 490 | /* i.mx35 has the i.mx21 type uart */ |
490 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 491 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
491 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 492 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
493 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) | ||
492 | _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) | 494 | _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) |
493 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) | 495 | _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) |
494 | _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) | 496 | _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c index 01ebcb31e48..66e8726253f 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c | |||
@@ -225,7 +225,8 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = { | |||
225 | 225 | ||
226 | static struct esdhc_platform_data sd1_pdata = { | 226 | static struct esdhc_platform_data sd1_pdata = { |
227 | .cd_gpio = GPIO_SD1CD, | 227 | .cd_gpio = GPIO_SD1CD, |
228 | .wp_gpio = -EINVAL, | 228 | .cd_type = ESDHC_CD_GPIO, |
229 | .wp_type = ESDHC_WP_NONE, | ||
229 | }; | 230 | }; |
230 | 231 | ||
231 | /* | 232 | /* |
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c index 558eb526ba5..0f0af02b318 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c | |||
@@ -236,7 +236,8 @@ struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = { | |||
236 | 236 | ||
237 | static struct esdhc_platform_data sd1_pdata = { | 237 | static struct esdhc_platform_data sd1_pdata = { |
238 | .cd_gpio = GPIO_SD1CD, | 238 | .cd_gpio = GPIO_SD1CD, |
239 | .wp_gpio = -EINVAL, | 239 | .cd_type = ESDHC_CD_GPIO, |
240 | .wp_type = ESDHC_WP_NONE, | ||
240 | }; | 241 | }; |
241 | 242 | ||
242 | /* | 243 | /* |
diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index 01534bb6130..7f66a91df36 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c | |||
@@ -215,6 +215,8 @@ static const struct imxi2c_platform_data mx25_3ds_i2c0_data __initconst = { | |||
215 | static const struct esdhc_platform_data mx25pdk_esdhc_pdata __initconst = { | 215 | static const struct esdhc_platform_data mx25pdk_esdhc_pdata __initconst = { |
216 | .wp_gpio = SD1_GPIO_WP, | 216 | .wp_gpio = SD1_GPIO_WP, |
217 | .cd_gpio = SD1_GPIO_CD, | 217 | .cd_gpio = SD1_GPIO_CD, |
218 | .wp_type = ESDHC_WP_GPIO, | ||
219 | .cd_type = ESDHC_CD_GPIO, | ||
218 | }; | 220 | }; |
219 | 221 | ||
220 | static void __init mx25pdk_init(void) | 222 | static void __init mx25pdk_init(void) |
diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c index 163cc318caf..660ec3e80cf 100644 --- a/arch/arm/mach-imx/mach-pcm043.c +++ b/arch/arm/mach-imx/mach-pcm043.c | |||
@@ -349,6 +349,8 @@ __setup("otg_mode=", pcm043_otg_mode); | |||
349 | static struct esdhc_platform_data sd1_pdata = { | 349 | static struct esdhc_platform_data sd1_pdata = { |
350 | .wp_gpio = SD1_GPIO_WP, | 350 | .wp_gpio = SD1_GPIO_WP, |
351 | .cd_gpio = SD1_GPIO_CD, | 351 | .cd_gpio = SD1_GPIO_CD, |
352 | .wp_type = ESDHC_WP_GPIO, | ||
353 | .cd_type = ESDHC_CD_GPIO, | ||
352 | }; | 354 | }; |
353 | 355 | ||
354 | /* | 356 | /* |
diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c index 8bf02916465..cc4d152bd9b 100644 --- a/arch/arm/mach-imx/mm-imx25.c +++ b/arch/arm/mach-imx/mm-imx25.c | |||
@@ -79,7 +79,6 @@ static struct sdma_script_start_addrs imx25_sdma_script __initdata = { | |||
79 | }; | 79 | }; |
80 | 80 | ||
81 | static struct sdma_platform_data imx25_sdma_pdata __initdata = { | 81 | static struct sdma_platform_data imx25_sdma_pdata __initdata = { |
82 | .sdma_version = 2, | ||
83 | .fw_name = "sdma-imx25.bin", | 82 | .fw_name = "sdma-imx25.bin", |
84 | .script_addrs = &imx25_sdma_script, | 83 | .script_addrs = &imx25_sdma_script, |
85 | }; | 84 | }; |
@@ -92,5 +91,6 @@ void __init imx25_soc_init(void) | |||
92 | mxc_register_gpio("imx31-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0); | 91 | mxc_register_gpio("imx31-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0); |
93 | mxc_register_gpio("imx31-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0); | 92 | mxc_register_gpio("imx31-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0); |
94 | 93 | ||
95 | imx_add_imx_sdma(MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata); | 94 | /* i.mx25 has the i.mx35 type sdma */ |
95 | imx_add_imx_sdma("imx35-sdma", MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata); | ||
96 | } | 96 | } |
diff --git a/arch/arm/mach-imx/mm-imx31.c b/arch/arm/mach-imx/mm-imx31.c index 61bff38cb95..b7c55e7db00 100644 --- a/arch/arm/mach-imx/mm-imx31.c +++ b/arch/arm/mach-imx/mm-imx31.c | |||
@@ -69,7 +69,6 @@ static struct sdma_script_start_addrs imx31_to2_sdma_script __initdata = { | |||
69 | }; | 69 | }; |
70 | 70 | ||
71 | static struct sdma_platform_data imx31_sdma_pdata __initdata = { | 71 | static struct sdma_platform_data imx31_sdma_pdata __initdata = { |
72 | .sdma_version = 1, | ||
73 | .fw_name = "sdma-imx31-to2.bin", | 72 | .fw_name = "sdma-imx31-to2.bin", |
74 | .script_addrs = &imx31_to2_sdma_script, | 73 | .script_addrs = &imx31_to2_sdma_script, |
75 | }; | 74 | }; |
@@ -88,5 +87,5 @@ void __init imx31_soc_init(void) | |||
88 | imx31_sdma_pdata.script_addrs = &imx31_to1_sdma_script; | 87 | imx31_sdma_pdata.script_addrs = &imx31_to1_sdma_script; |
89 | } | 88 | } |
90 | 89 | ||
91 | imx_add_imx_sdma(MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata); | 90 | imx_add_imx_sdma("imx31-sdma", MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata); |
92 | } | 91 | } |
diff --git a/arch/arm/mach-imx/mm-imx35.c b/arch/arm/mach-imx/mm-imx35.c index 98769ae3437..f49bac7a1ed 100644 --- a/arch/arm/mach-imx/mm-imx35.c +++ b/arch/arm/mach-imx/mm-imx35.c | |||
@@ -86,7 +86,6 @@ static struct sdma_script_start_addrs imx35_to2_sdma_script __initdata = { | |||
86 | }; | 86 | }; |
87 | 87 | ||
88 | static struct sdma_platform_data imx35_sdma_pdata __initdata = { | 88 | static struct sdma_platform_data imx35_sdma_pdata __initdata = { |
89 | .sdma_version = 2, | ||
90 | .fw_name = "sdma-imx35-to2.bin", | 89 | .fw_name = "sdma-imx35-to2.bin", |
91 | .script_addrs = &imx35_to2_sdma_script, | 90 | .script_addrs = &imx35_to2_sdma_script, |
92 | }; | 91 | }; |
@@ -106,5 +105,5 @@ void __init imx35_soc_init(void) | |||
106 | imx35_sdma_pdata.script_addrs = &imx35_to1_sdma_script; | 105 | imx35_sdma_pdata.script_addrs = &imx35_to1_sdma_script; |
107 | } | 106 | } |
108 | 107 | ||
109 | imx_add_imx_sdma(MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata); | 108 | imx_add_imx_sdma("imx35-sdma", MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata); |
110 | } | 109 | } |
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c index 15c600026ae..e400b09109c 100644 --- a/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/arch/arm/mach-mx5/board-mx51_babbage.c | |||
@@ -41,8 +41,6 @@ | |||
41 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) | 41 | #define BABBAGE_POWER_KEY IMX_GPIO_NR(2, 21) |
42 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) | 42 | #define BABBAGE_ECSPI1_CS0 IMX_GPIO_NR(4, 24) |
43 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) | 43 | #define BABBAGE_ECSPI1_CS1 IMX_GPIO_NR(4, 25) |
44 | #define BABBAGE_SD1_CD IMX_GPIO_NR(1, 0) | ||
45 | #define BABBAGE_SD1_WP IMX_GPIO_NR(1, 1) | ||
46 | #define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6) | 44 | #define BABBAGE_SD2_CD IMX_GPIO_NR(1, 6) |
47 | #define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5) | 45 | #define BABBAGE_SD2_WP IMX_GPIO_NR(1, 5) |
48 | 46 | ||
@@ -146,8 +144,9 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
146 | MX51_PAD_SD1_DATA1__SD1_DATA1, | 144 | MX51_PAD_SD1_DATA1__SD1_DATA1, |
147 | MX51_PAD_SD1_DATA2__SD1_DATA2, | 145 | MX51_PAD_SD1_DATA2__SD1_DATA2, |
148 | MX51_PAD_SD1_DATA3__SD1_DATA3, | 146 | MX51_PAD_SD1_DATA3__SD1_DATA3, |
149 | MX51_PAD_GPIO1_0__GPIO1_0, | 147 | /* CD/WP from controller */ |
150 | MX51_PAD_GPIO1_1__GPIO1_1, | 148 | MX51_PAD_GPIO1_0__SD1_CD, |
149 | MX51_PAD_GPIO1_1__SD1_WP, | ||
151 | 150 | ||
152 | /* SD 2 */ | 151 | /* SD 2 */ |
153 | MX51_PAD_SD2_CMD__SD2_CMD, | 152 | MX51_PAD_SD2_CMD__SD2_CMD, |
@@ -156,6 +155,7 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
156 | MX51_PAD_SD2_DATA1__SD2_DATA1, | 155 | MX51_PAD_SD2_DATA1__SD2_DATA1, |
157 | MX51_PAD_SD2_DATA2__SD2_DATA2, | 156 | MX51_PAD_SD2_DATA2__SD2_DATA2, |
158 | MX51_PAD_SD2_DATA3__SD2_DATA3, | 157 | MX51_PAD_SD2_DATA3__SD2_DATA3, |
158 | /* CD/WP gpio */ | ||
159 | MX51_PAD_GPIO1_6__GPIO1_6, | 159 | MX51_PAD_GPIO1_6__GPIO1_6, |
160 | MX51_PAD_GPIO1_5__GPIO1_5, | 160 | MX51_PAD_GPIO1_5__GPIO1_5, |
161 | 161 | ||
@@ -340,13 +340,15 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = { | |||
340 | }; | 340 | }; |
341 | 341 | ||
342 | static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = { | 342 | static const struct esdhc_platform_data mx51_babbage_sd1_data __initconst = { |
343 | .cd_gpio = BABBAGE_SD1_CD, | 343 | .cd_type = ESDHC_CD_CONTROLLER, |
344 | .wp_gpio = BABBAGE_SD1_WP, | 344 | .wp_type = ESDHC_WP_CONTROLLER, |
345 | }; | 345 | }; |
346 | 346 | ||
347 | static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = { | 347 | static const struct esdhc_platform_data mx51_babbage_sd2_data __initconst = { |
348 | .cd_gpio = BABBAGE_SD2_CD, | 348 | .cd_gpio = BABBAGE_SD2_CD, |
349 | .wp_gpio = BABBAGE_SD2_WP, | 349 | .wp_gpio = BABBAGE_SD2_WP, |
350 | .cd_type = ESDHC_CD_GPIO, | ||
351 | .wp_type = ESDHC_WP_GPIO, | ||
350 | }; | 352 | }; |
351 | 353 | ||
352 | /* | 354 | /* |
diff --git a/arch/arm/mach-mx5/board-mx53_loco.c b/arch/arm/mach-mx5/board-mx53_loco.c index 54be525e2bd..4e1d51d252d 100644 --- a/arch/arm/mach-mx5/board-mx53_loco.c +++ b/arch/arm/mach-mx5/board-mx53_loco.c | |||
@@ -210,11 +210,15 @@ static const struct gpio_keys_platform_data loco_button_data __initconst = { | |||
210 | 210 | ||
211 | static const struct esdhc_platform_data mx53_loco_sd1_data __initconst = { | 211 | static const struct esdhc_platform_data mx53_loco_sd1_data __initconst = { |
212 | .cd_gpio = LOCO_SD1_CD, | 212 | .cd_gpio = LOCO_SD1_CD, |
213 | .cd_type = ESDHC_CD_GPIO, | ||
214 | .wp_type = ESDHC_WP_NONE, | ||
213 | }; | 215 | }; |
214 | 216 | ||
215 | static const struct esdhc_platform_data mx53_loco_sd3_data __initconst = { | 217 | static const struct esdhc_platform_data mx53_loco_sd3_data __initconst = { |
216 | .cd_gpio = LOCO_SD3_CD, | 218 | .cd_gpio = LOCO_SD3_CD, |
217 | .wp_gpio = LOCO_SD3_WP, | 219 | .wp_gpio = LOCO_SD3_WP, |
220 | .cd_type = ESDHC_CD_GPIO, | ||
221 | .wp_type = ESDHC_WP_GPIO, | ||
218 | }; | 222 | }; |
219 | 223 | ||
220 | static inline void mx53_loco_fec_reset(void) | 224 | static inline void mx53_loco_fec_reset(void) |
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 23cd809fa8b..7f20308c4db 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c | |||
@@ -1422,11 +1422,13 @@ DEFINE_CLOCK(ipu_di1_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG6_OFFSET, | |||
1422 | }, | 1422 | }, |
1423 | 1423 | ||
1424 | static struct clk_lookup mx51_lookups[] = { | 1424 | static struct clk_lookup mx51_lookups[] = { |
1425 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 1425 | /* i.mx51 has the i.mx21 type uart */ |
1426 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 1426 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
1427 | _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) | ||
1428 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1429 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1429 | _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) | ||
1430 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) | 1432 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) |
1431 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) | 1433 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) |
1432 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1434 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
@@ -1446,7 +1448,8 @@ static struct clk_lookup mx51_lookups[] = { | |||
1446 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | 1448 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) |
1447 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | 1449 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) |
1448 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) | 1450 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) |
1449 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) | 1451 | /* i.mx51 has the i.mx35 type sdma */ |
1452 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) | ||
1450 | _REGISTER_CLOCK(NULL, "ckih", ckih_clk) | 1453 | _REGISTER_CLOCK(NULL, "ckih", ckih_clk) |
1451 | _REGISTER_CLOCK(NULL, "ckih2", ckih2_clk) | 1454 | _REGISTER_CLOCK(NULL, "ckih2", ckih2_clk) |
1452 | _REGISTER_CLOCK(NULL, "gpt_32k", gpt_32k_clk) | 1455 | _REGISTER_CLOCK(NULL, "gpt_32k", gpt_32k_clk) |
@@ -1454,10 +1457,10 @@ static struct clk_lookup mx51_lookups[] = { | |||
1454 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) | 1457 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) |
1455 | /* i.mx51 has the i.mx35 type cspi */ | 1458 | /* i.mx51 has the i.mx35 type cspi */ |
1456 | _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) | 1459 | _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) |
1457 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 1460 | _REGISTER_CLOCK("sdhci-esdhc-imx51.0", NULL, esdhc1_clk) |
1458 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) | 1461 | _REGISTER_CLOCK("sdhci-esdhc-imx51.1", NULL, esdhc2_clk) |
1459 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) | 1462 | _REGISTER_CLOCK("sdhci-esdhc-imx51.2", NULL, esdhc3_clk) |
1460 | _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_clk) | 1463 | _REGISTER_CLOCK("sdhci-esdhc-imx51.3", NULL, esdhc4_clk) |
1461 | _REGISTER_CLOCK(NULL, "cpu_clk", cpu_clk) | 1464 | _REGISTER_CLOCK(NULL, "cpu_clk", cpu_clk) |
1462 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) | 1465 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) |
1463 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) | 1466 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) |
@@ -1470,29 +1473,32 @@ static struct clk_lookup mx51_lookups[] = { | |||
1470 | }; | 1473 | }; |
1471 | 1474 | ||
1472 | static struct clk_lookup mx53_lookups[] = { | 1475 | static struct clk_lookup mx53_lookups[] = { |
1473 | _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk) | 1476 | /* i.mx53 has the i.mx21 type uart */ |
1474 | _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk) | 1477 | _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) |
1475 | _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk) | 1478 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
1476 | _REGISTER_CLOCK("imx-uart.3", NULL, uart4_clk) | 1479 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) |
1477 | _REGISTER_CLOCK("imx-uart.4", NULL, uart5_clk) | 1480 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) |
1481 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) | ||
1478 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1482 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1479 | _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) | ||
1480 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) | 1485 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) |
1481 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1486 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
1482 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | 1487 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) |
1483 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_mx53_clk) | 1488 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c3_mx53_clk) |
1484 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | ||
1485 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_mx53_clk) | ||
1486 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_mx53_clk) | ||
1487 | _REGISTER_CLOCK("sdhci-esdhc-imx.3", NULL, esdhc4_mx53_clk) | ||
1488 | /* i.mx53 has the i.mx51 type ecspi */ | 1489 | /* i.mx53 has the i.mx51 type ecspi */ |
1489 | _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) | 1490 | _REGISTER_CLOCK("imx51-ecspi.0", NULL, ecspi1_clk) |
1490 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) | 1491 | _REGISTER_CLOCK("imx51-ecspi.1", NULL, ecspi2_clk) |
1491 | /* i.mx53 has the i.mx25 type cspi */ | 1492 | /* i.mx53 has the i.mx25 type cspi */ |
1492 | _REGISTER_CLOCK("imx35-cspi.0", NULL, cspi_clk) | 1493 | _REGISTER_CLOCK("imx35-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) | ||
1493 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) | 1498 | _REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk) |
1494 | _REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk) | 1499 | _REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk) |
1495 | _REGISTER_CLOCK("imx-sdma", NULL, sdma_clk) | 1500 | /* i.mx53 has the i.mx35 type sdma */ |
1501 | _REGISTER_CLOCK("imx35-sdma", NULL, sdma_clk) | ||
1496 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) | 1502 | _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) |
1497 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) | 1503 | _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) |
1498 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) | 1504 | _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk) |
diff --git a/arch/arm/mach-mx5/mm.c b/arch/arm/mach-mx5/mm.c index ef8aec9319b..baea6e5cddd 100644 --- a/arch/arm/mach-mx5/mm.c +++ b/arch/arm/mach-mx5/mm.c | |||
@@ -115,7 +115,6 @@ static struct sdma_script_start_addrs imx51_sdma_script __initdata = { | |||
115 | }; | 115 | }; |
116 | 116 | ||
117 | static struct sdma_platform_data imx51_sdma_pdata __initdata = { | 117 | static struct sdma_platform_data imx51_sdma_pdata __initdata = { |
118 | .sdma_version = 2, | ||
119 | .fw_name = "sdma-imx51.bin", | 118 | .fw_name = "sdma-imx51.bin", |
120 | .script_addrs = &imx51_sdma_script, | 119 | .script_addrs = &imx51_sdma_script, |
121 | }; | 120 | }; |
@@ -135,7 +134,6 @@ static struct sdma_script_start_addrs imx53_sdma_script __initdata = { | |||
135 | }; | 134 | }; |
136 | 135 | ||
137 | static struct sdma_platform_data imx53_sdma_pdata __initdata = { | 136 | static struct sdma_platform_data imx53_sdma_pdata __initdata = { |
138 | .sdma_version = 2, | ||
139 | .fw_name = "sdma-imx53.bin", | 137 | .fw_name = "sdma-imx53.bin", |
140 | .script_addrs = &imx53_sdma_script, | 138 | .script_addrs = &imx53_sdma_script, |
141 | }; | 139 | }; |
@@ -148,7 +146,8 @@ void __init imx51_soc_init(void) | |||
148 | mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH); | 146 | mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH); |
149 | mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH); | 147 | mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH); |
150 | 148 | ||
151 | imx_add_imx_sdma(MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); | 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); | ||
152 | } | 151 | } |
153 | 152 | ||
154 | void __init imx53_soc_init(void) | 153 | void __init imx53_soc_init(void) |
@@ -162,5 +161,6 @@ void __init imx53_soc_init(void) | |||
162 | mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH); | 161 | mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH); |
163 | mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH); | 162 | mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH); |
164 | 163 | ||
165 | imx_add_imx_sdma(MX53_SDMA_BASE_ADDR, MX53_INT_SDMA, &imx53_sdma_pdata); | 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); | ||
166 | } | 166 | } |
diff --git a/arch/arm/mach-mx5/mx51_efika.c b/arch/arm/mach-mx5/mx51_efika.c index 56739c23aca..4435e03cea5 100644 --- a/arch/arm/mach-mx5/mx51_efika.c +++ b/arch/arm/mach-mx5/mx51_efika.c | |||
@@ -260,8 +260,8 @@ static struct regulator_consumer_supply vvideo_consumers[] = { | |||
260 | }; | 260 | }; |
261 | 261 | ||
262 | static struct regulator_consumer_supply vsd_consumers[] = { | 262 | static struct regulator_consumer_supply vsd_consumers[] = { |
263 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.0"), | 263 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.0"), |
264 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx.1"), | 264 | REGULATOR_SUPPLY("vmmc", "sdhci-esdhc-imx51.1"), |
265 | }; | 265 | }; |
266 | 266 | ||
267 | static struct regulator_consumer_supply pwgt1_consumer[] = { | 267 | static struct regulator_consumer_supply pwgt1_consumer[] = { |
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index fec64f3aa68..d82ebab50e1 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig | |||
@@ -51,6 +51,12 @@ config MACH_SEABOARD | |||
51 | also be included for some of the derivative boards that | 51 | also be included for some of the derivative boards that |
52 | have large similarities with the seaboard design. | 52 | have large similarities with the seaboard design. |
53 | 53 | ||
54 | config MACH_TEGRA_DT | ||
55 | bool "Generic Tegra board (FDT support)" | ||
56 | select USE_OF | ||
57 | help | ||
58 | Support for generic nVidia Tegra boards using Flattened Device Tree | ||
59 | |||
54 | config MACH_TRIMSLICE | 60 | config MACH_TRIMSLICE |
55 | bool "TrimSlice board" | 61 | bool "TrimSlice board" |
56 | select TEGRA_PCI | 62 | select TEGRA_PCI |
diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index ed58ef9019b..f11b9100114 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile | |||
@@ -29,5 +29,8 @@ obj-${CONFIG_MACH_PAZ00} += board-paz00-pinmux.o | |||
29 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard.o | 29 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard.o |
30 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o | 30 | obj-${CONFIG_MACH_SEABOARD} += board-seaboard-pinmux.o |
31 | 31 | ||
32 | obj-${CONFIG_MACH_TEGRA_DT} += board-dt.o | ||
33 | obj-${CONFIG_MACH_TEGRA_DT} += board-harmony-pinmux.o | ||
34 | |||
32 | obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice.o | 35 | obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice.o |
33 | obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice-pinmux.o | 36 | obj-${CONFIG_MACH_TRIMSLICE} += board-trimslice-pinmux.o |
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot index db52d61a738..428ad122be0 100644 --- a/arch/arm/mach-tegra/Makefile.boot +++ b/arch/arm/mach-tegra/Makefile.boot | |||
@@ -1,3 +1,6 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00008000 | 1 | zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00008000 |
2 | params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 | 2 | params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 |
3 | initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 | 3 | initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 |
4 | |||
5 | dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb | ||
6 | dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb | ||
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c new file mode 100644 index 00000000000..9f47e04446f --- /dev/null +++ b/arch/arm/mach-tegra/board-dt.c | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * nVidia Tegra device tree board support | ||
3 | * | ||
4 | * Copyright (C) 2010 Secret Lab Technologies, Ltd. | ||
5 | * Copyright (C) 2010 Google, Inc. | ||
6 | * | ||
7 | * This software is licensed under the terms of the GNU General Public | ||
8 | * License version 2, as published by the Free Software Foundation, and | ||
9 | * may be copied, distributed, and modified under those terms. | ||
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 | */ | ||
17 | |||
18 | #include <linux/kernel.h> | ||
19 | #include <linux/init.h> | ||
20 | #include <linux/platform_device.h> | ||
21 | #include <linux/serial_8250.h> | ||
22 | #include <linux/clk.h> | ||
23 | #include <linux/dma-mapping.h> | ||
24 | #include <linux/irqdomain.h> | ||
25 | #include <linux/of.h> | ||
26 | #include <linux/of_address.h> | ||
27 | #include <linux/of_fdt.h> | ||
28 | #include <linux/of_irq.h> | ||
29 | #include <linux/of_platform.h> | ||
30 | #include <linux/pda_power.h> | ||
31 | #include <linux/io.h> | ||
32 | #include <linux/i2c.h> | ||
33 | #include <linux/i2c-tegra.h> | ||
34 | |||
35 | #include <asm/mach-types.h> | ||
36 | #include <asm/mach/arch.h> | ||
37 | #include <asm/mach/time.h> | ||
38 | #include <asm/setup.h> | ||
39 | |||
40 | #include <mach/iomap.h> | ||
41 | #include <mach/irqs.h> | ||
42 | |||
43 | #include "board.h" | ||
44 | #include "board-harmony.h" | ||
45 | #include "clock.h" | ||
46 | #include "devices.h" | ||
47 | |||
48 | void harmony_pinmux_init(void); | ||
49 | void seaboard_pinmux_init(void); | ||
50 | |||
51 | |||
52 | struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = { | ||
53 | OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC1_BASE, "sdhci-tegra.0", NULL), | ||
54 | OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC2_BASE, "sdhci-tegra.1", NULL), | ||
55 | OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC3_BASE, "sdhci-tegra.2", NULL), | ||
56 | OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC4_BASE, "sdhci-tegra.3", NULL), | ||
57 | OF_DEV_AUXDATA("nvidia,tegra20-i2c", TEGRA_I2C_BASE, "tegra-i2c.0", NULL), | ||
58 | OF_DEV_AUXDATA("nvidia,tegra20-i2c", TEGRA_I2C2_BASE, "tegra-i2c.1", NULL), | ||
59 | OF_DEV_AUXDATA("nvidia,tegra20-i2c", TEGRA_I2C3_BASE, "tegra-i2c.2", NULL), | ||
60 | OF_DEV_AUXDATA("nvidia,tegra20-i2c", TEGRA_DVC_BASE, "tegra-i2c.3", NULL), | ||
61 | OF_DEV_AUXDATA("nvidia,tegra20-i2s", TEGRA_I2S1_BASE, "tegra-i2s.0", NULL), | ||
62 | OF_DEV_AUXDATA("nvidia,tegra20-i2s", TEGRA_I2S1_BASE, "tegra-i2s.1", NULL), | ||
63 | OF_DEV_AUXDATA("nvidia,tegra20-das", TEGRA_APB_MISC_DAS_BASE, "tegra-das", NULL), | ||
64 | {} | ||
65 | }; | ||
66 | |||
67 | static __initdata struct tegra_clk_init_table tegra_dt_clk_init_table[] = { | ||
68 | /* name parent rate enabled */ | ||
69 | { "uartd", "pll_p", 216000000, true }, | ||
70 | { NULL, NULL, 0, 0}, | ||
71 | }; | ||
72 | |||
73 | static struct of_device_id tegra_dt_match_table[] __initdata = { | ||
74 | { .compatible = "simple-bus", }, | ||
75 | {} | ||
76 | }; | ||
77 | |||
78 | static struct of_device_id tegra_dt_gic_match[] __initdata = { | ||
79 | { .compatible = "nvidia,tegra20-gic", }, | ||
80 | {} | ||
81 | }; | ||
82 | |||
83 | static void __init tegra_dt_init(void) | ||
84 | { | ||
85 | struct device_node *node; | ||
86 | |||
87 | node = of_find_matching_node_by_address(NULL, tegra_dt_gic_match, | ||
88 | TEGRA_ARM_INT_DIST_BASE); | ||
89 | if (node) | ||
90 | irq_domain_add_simple(node, INT_GIC_BASE); | ||
91 | |||
92 | tegra_clk_init_from_table(tegra_dt_clk_init_table); | ||
93 | |||
94 | if (of_machine_is_compatible("nvidia,harmony")) | ||
95 | harmony_pinmux_init(); | ||
96 | else if (of_machine_is_compatible("nvidia,seaboard")) | ||
97 | seaboard_pinmux_init(); | ||
98 | |||
99 | /* | ||
100 | * Finished with the static registrations now; fill in the missing | ||
101 | * devices | ||
102 | */ | ||
103 | of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL); | ||
104 | } | ||
105 | |||
106 | static const char * tegra_dt_board_compat[] = { | ||
107 | "nvidia,harmony", | ||
108 | "nvidia,seaboard", | ||
109 | NULL | ||
110 | }; | ||
111 | |||
112 | DT_MACHINE_START(TEGRA_DT, "nVidia Tegra (Flattened Device Tree)") | ||
113 | .map_io = tegra_map_common_io, | ||
114 | .init_early = tegra_init_early, | ||
115 | .init_irq = tegra_init_irq, | ||
116 | .timer = &tegra_timer, | ||
117 | .init_machine = tegra_dt_init, | ||
118 | .dt_compat = tegra_dt_board_compat, | ||
119 | MACHINE_END | ||
diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig index 9cdec5aa04a..c1f38f6625b 100644 --- a/arch/arm/mach-versatile/Kconfig +++ b/arch/arm/mach-versatile/Kconfig | |||
@@ -17,4 +17,12 @@ config MACH_VERSATILE_AB | |||
17 | Include support for the ARM(R) Versatile Application Baseboard | 17 | Include support for the ARM(R) Versatile Application Baseboard |
18 | for the ARM926EJ-S. | 18 | for the ARM926EJ-S. |
19 | 19 | ||
20 | config MACH_VERSATILE_DT | ||
21 | bool "Support Versatile platform from device tree" | ||
22 | select USE_OF | ||
23 | select CPU_ARM926T | ||
24 | help | ||
25 | Include support for the ARM(R) Versatile/PB platform, | ||
26 | using the device tree for discovery | ||
27 | |||
20 | endmenu | 28 | endmenu |
diff --git a/arch/arm/mach-versatile/Makefile b/arch/arm/mach-versatile/Makefile index 97cf4d831b0..81fa3fe25e1 100644 --- a/arch/arm/mach-versatile/Makefile +++ b/arch/arm/mach-versatile/Makefile | |||
@@ -5,4 +5,5 @@ | |||
5 | obj-y := core.o | 5 | obj-y := core.o |
6 | obj-$(CONFIG_ARCH_VERSATILE_PB) += versatile_pb.o | 6 | obj-$(CONFIG_ARCH_VERSATILE_PB) += versatile_pb.o |
7 | obj-$(CONFIG_MACH_VERSATILE_AB) += versatile_ab.o | 7 | obj-$(CONFIG_MACH_VERSATILE_AB) += versatile_ab.o |
8 | obj-$(CONFIG_MACH_VERSATILE_DT) += versatile_dt.o | ||
8 | obj-$(CONFIG_PCI) += pci.o | 9 | obj-$(CONFIG_PCI) += pci.o |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 0c99cf076c6..e340a54251d 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -24,6 +24,9 @@ | |||
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/sysdev.h> | 25 | #include <linux/sysdev.h> |
26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
27 | #include <linux/irqdomain.h> | ||
28 | #include <linux/of_address.h> | ||
29 | #include <linux/of_platform.h> | ||
27 | #include <linux/amba/bus.h> | 30 | #include <linux/amba/bus.h> |
28 | #include <linux/amba/clcd.h> | 31 | #include <linux/amba/clcd.h> |
29 | #include <linux/amba/pl061.h> | 32 | #include <linux/amba/pl061.h> |
@@ -83,13 +86,26 @@ static struct fpga_irq_data sic_irq = { | |||
83 | #define PIC_MASK 0 | 86 | #define PIC_MASK 0 |
84 | #endif | 87 | #endif |
85 | 88 | ||
89 | /* Lookup table for finding a DT node that represents the vic instance */ | ||
90 | static const struct of_device_id vic_of_match[] __initconst = { | ||
91 | { .compatible = "arm,versatile-vic", }, | ||
92 | {} | ||
93 | }; | ||
94 | |||
95 | static const struct of_device_id sic_of_match[] __initconst = { | ||
96 | { .compatible = "arm,versatile-sic", }, | ||
97 | {} | ||
98 | }; | ||
99 | |||
86 | void __init versatile_init_irq(void) | 100 | void __init versatile_init_irq(void) |
87 | { | 101 | { |
88 | vic_init(VA_VIC_BASE, IRQ_VIC_START, ~0, 0); | 102 | vic_init(VA_VIC_BASE, IRQ_VIC_START, ~0, 0); |
103 | irq_domain_generate_simple(vic_of_match, VERSATILE_VIC_BASE, IRQ_VIC_START); | ||
89 | 104 | ||
90 | writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR); | 105 | writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR); |
91 | 106 | ||
92 | fpga_irq_init(IRQ_VICSOURCE31, ~PIC_MASK, &sic_irq); | 107 | fpga_irq_init(IRQ_VICSOURCE31, ~PIC_MASK, &sic_irq); |
108 | irq_domain_generate_simple(sic_of_match, VERSATILE_SIC_BASE, IRQ_SIC_START); | ||
93 | 109 | ||
94 | /* | 110 | /* |
95 | * Interrupts on secondary controller from 0 to 8 are routed to | 111 | * Interrupts on secondary controller from 0 to 8 are routed to |
@@ -646,6 +662,52 @@ static struct amba_device *amba_devs[] __initdata = { | |||
646 | &kmi1_device, | 662 | &kmi1_device, |
647 | }; | 663 | }; |
648 | 664 | ||
665 | #ifdef CONFIG_OF | ||
666 | /* | ||
667 | * Lookup table for attaching a specific name and platform_data pointer to | ||
668 | * devices as they get created by of_platform_populate(). Ideally this table | ||
669 | * would not exist, but the current clock implementation depends on some devices | ||
670 | * having a specific name. | ||
671 | */ | ||
672 | struct of_dev_auxdata versatile_auxdata_lookup[] __initdata = { | ||
673 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_MMCI0_BASE, "fpga:05", NULL), | ||
674 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_KMI0_BASE, "fpga:06", NULL), | ||
675 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_KMI1_BASE, "fpga:07", NULL), | ||
676 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_UART3_BASE, "fpga:09", NULL), | ||
677 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_MMCI1_BASE, "fpga:0b", NULL), | ||
678 | |||
679 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_CLCD_BASE, "dev:20", &clcd_plat_data), | ||
680 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_UART0_BASE, "dev:f1", NULL), | ||
681 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_UART1_BASE, "dev:f2", NULL), | ||
682 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_UART2_BASE, "dev:f3", NULL), | ||
683 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_SSP_BASE, "dev:f4", NULL), | ||
684 | |||
685 | #if 0 | ||
686 | /* | ||
687 | * These entries are unnecessary because no clocks referencing | ||
688 | * them. I've left them in for now as place holders in case | ||
689 | * any of them need to be added back, but they should be | ||
690 | * removed before actually committing this patch. --gcl | ||
691 | */ | ||
692 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_AACI_BASE, "fpga:04", NULL), | ||
693 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_SCI1_BASE, "fpga:0a", NULL), | ||
694 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_SMC_BASE, "dev:00", NULL), | ||
695 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_MPMC_BASE, "dev:10", NULL), | ||
696 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_DMAC_BASE, "dev:30", NULL), | ||
697 | |||
698 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_SCTL_BASE, "dev:e0", NULL), | ||
699 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_WATCHDOG_BASE, "dev:e1", NULL), | ||
700 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_GPIO0_BASE, "dev:e4", NULL), | ||
701 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_GPIO1_BASE, "dev:e5", NULL), | ||
702 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_GPIO2_BASE, "dev:e6", NULL), | ||
703 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_GPIO3_BASE, "dev:e7", NULL), | ||
704 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_RTC_BASE, "dev:e8", NULL), | ||
705 | OF_DEV_AUXDATA("arm,primecell", VERSATILE_SCI_BASE, "dev:f0", NULL), | ||
706 | #endif | ||
707 | {} | ||
708 | }; | ||
709 | #endif | ||
710 | |||
649 | #ifdef CONFIG_LEDS | 711 | #ifdef CONFIG_LEDS |
650 | #define VA_LEDS_BASE (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LED_OFFSET) | 712 | #define VA_LEDS_BASE (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LED_OFFSET) |
651 | 713 | ||
diff --git a/arch/arm/mach-versatile/core.h b/arch/arm/mach-versatile/core.h index fd6404e5d78..e01422700eb 100644 --- a/arch/arm/mach-versatile/core.h +++ b/arch/arm/mach-versatile/core.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #define __ASM_ARCH_VERSATILE_H | 23 | #define __ASM_ARCH_VERSATILE_H |
24 | 24 | ||
25 | #include <linux/amba/bus.h> | 25 | #include <linux/amba/bus.h> |
26 | #include <linux/of_platform.h> | ||
26 | 27 | ||
27 | extern void __init versatile_init(void); | 28 | extern void __init versatile_init(void); |
28 | extern void __init versatile_init_early(void); | 29 | extern void __init versatile_init_early(void); |
@@ -30,6 +31,9 @@ extern void __init versatile_init_irq(void); | |||
30 | extern void __init versatile_map_io(void); | 31 | extern void __init versatile_map_io(void); |
31 | extern struct sys_timer versatile_timer; | 32 | extern struct sys_timer versatile_timer; |
32 | extern unsigned int mmc_status(struct device *dev); | 33 | extern unsigned int mmc_status(struct device *dev); |
34 | #ifdef CONFIG_OF | ||
35 | extern struct of_dev_auxdata versatile_auxdata_lookup[]; | ||
36 | #endif | ||
33 | 37 | ||
34 | #define AMBA_DEVICE(name,busid,base,plat) \ | 38 | #define AMBA_DEVICE(name,busid,base,plat) \ |
35 | static struct amba_device name##_device = { \ | 39 | static struct amba_device name##_device = { \ |
diff --git a/arch/arm/mach-versatile/versatile_dt.c b/arch/arm/mach-versatile/versatile_dt.c new file mode 100644 index 00000000000..54e037c090f --- /dev/null +++ b/arch/arm/mach-versatile/versatile_dt.c | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Versatile board support using the device tree | ||
3 | * | ||
4 | * Copyright (C) 2010 Secret Lab Technologies Ltd. | ||
5 | * Copyright (C) 2009 Jeremy Kerr <jeremy.kerr@canonical.com> | ||
6 | * Copyright (C) 2004 ARM Limited | ||
7 | * Copyright (C) 2000 Deep Blue Solutions Ltd | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | #include <linux/init.h> | ||
25 | #include <linux/of_irq.h> | ||
26 | #include <linux/of_platform.h> | ||
27 | #include <asm/mach-types.h> | ||
28 | #include <asm/mach/arch.h> | ||
29 | |||
30 | #include "core.h" | ||
31 | |||
32 | static void __init versatile_dt_init(void) | ||
33 | { | ||
34 | of_platform_populate(NULL, of_default_bus_match_table, | ||
35 | versatile_auxdata_lookup, NULL); | ||
36 | } | ||
37 | |||
38 | static const char *versatile_dt_match[] __initconst = { | ||
39 | "arm,versatile-ab", | ||
40 | "arm,versatile-pb", | ||
41 | NULL, | ||
42 | }; | ||
43 | |||
44 | DT_MACHINE_START(VERSATILE_PB, "ARM-Versatile (Device Tree Support)") | ||
45 | .map_io = versatile_map_io, | ||
46 | .init_early = versatile_init_early, | ||
47 | .init_irq = versatile_init_irq, | ||
48 | .timer = &versatile_timer, | ||
49 | .init_machine = versatile_dt_init, | ||
50 | .dt_compat = versatile_dt_match, | ||
51 | MACHINE_END | ||
diff --git a/arch/arm/plat-mxc/devices/platform-fec.c b/arch/arm/plat-mxc/devices/platform-fec.c index 4fc6ffc2a13..0bae44e890d 100644 --- a/arch/arm/plat-mxc/devices/platform-fec.c +++ b/arch/arm/plat-mxc/devices/platform-fec.c | |||
@@ -11,40 +11,45 @@ | |||
11 | #include <mach/hardware.h> | 11 | #include <mach/hardware.h> |
12 | #include <mach/devices-common.h> | 12 | #include <mach/devices-common.h> |
13 | 13 | ||
14 | #define imx_fec_data_entry_single(soc) \ | 14 | #define imx_fec_data_entry_single(soc, _devid) \ |
15 | { \ | 15 | { \ |
16 | .devid = _devid, \ | ||
16 | .iobase = soc ## _FEC_BASE_ADDR, \ | 17 | .iobase = soc ## _FEC_BASE_ADDR, \ |
17 | .irq = soc ## _INT_FEC, \ | 18 | .irq = soc ## _INT_FEC, \ |
18 | } | 19 | } |
19 | 20 | ||
20 | #ifdef CONFIG_SOC_IMX25 | 21 | #ifdef CONFIG_SOC_IMX25 |
21 | const struct imx_fec_data imx25_fec_data __initconst = | 22 | const struct imx_fec_data imx25_fec_data __initconst = |
22 | imx_fec_data_entry_single(MX25); | 23 | imx_fec_data_entry_single(MX25, "imx25-fec"); |
23 | #endif /* ifdef CONFIG_SOC_IMX25 */ | 24 | #endif /* ifdef CONFIG_SOC_IMX25 */ |
24 | 25 | ||
25 | #ifdef CONFIG_SOC_IMX27 | 26 | #ifdef CONFIG_SOC_IMX27 |
26 | const struct imx_fec_data imx27_fec_data __initconst = | 27 | const struct imx_fec_data imx27_fec_data __initconst = |
27 | imx_fec_data_entry_single(MX27); | 28 | imx_fec_data_entry_single(MX27, "imx27-fec"); |
28 | #endif /* ifdef CONFIG_SOC_IMX27 */ | 29 | #endif /* ifdef CONFIG_SOC_IMX27 */ |
29 | 30 | ||
30 | #ifdef CONFIG_SOC_IMX35 | 31 | #ifdef CONFIG_SOC_IMX35 |
32 | /* i.mx35 has the i.mx27 type fec */ | ||
31 | const struct imx_fec_data imx35_fec_data __initconst = | 33 | const struct imx_fec_data imx35_fec_data __initconst = |
32 | imx_fec_data_entry_single(MX35); | 34 | imx_fec_data_entry_single(MX35, "imx27-fec"); |
33 | #endif | 35 | #endif |
34 | 36 | ||
35 | #ifdef CONFIG_SOC_IMX50 | 37 | #ifdef CONFIG_SOC_IMX50 |
38 | /* i.mx50 has the i.mx25 type fec */ | ||
36 | const struct imx_fec_data imx50_fec_data __initconst = | 39 | const struct imx_fec_data imx50_fec_data __initconst = |
37 | imx_fec_data_entry_single(MX50); | 40 | imx_fec_data_entry_single(MX50, "imx25-fec"); |
38 | #endif | 41 | #endif |
39 | 42 | ||
40 | #ifdef CONFIG_SOC_IMX51 | 43 | #ifdef CONFIG_SOC_IMX51 |
44 | /* i.mx51 has the i.mx27 type fec */ | ||
41 | const struct imx_fec_data imx51_fec_data __initconst = | 45 | const struct imx_fec_data imx51_fec_data __initconst = |
42 | imx_fec_data_entry_single(MX51); | 46 | imx_fec_data_entry_single(MX51, "imx27-fec"); |
43 | #endif | 47 | #endif |
44 | 48 | ||
45 | #ifdef CONFIG_SOC_IMX53 | 49 | #ifdef CONFIG_SOC_IMX53 |
50 | /* i.mx53 has the i.mx25 type fec */ | ||
46 | const struct imx_fec_data imx53_fec_data __initconst = | 51 | const struct imx_fec_data imx53_fec_data __initconst = |
47 | imx_fec_data_entry_single(MX53); | 52 | imx_fec_data_entry_single(MX53, "imx25-fec"); |
48 | #endif | 53 | #endif |
49 | 54 | ||
50 | struct platform_device *__init imx_add_fec( | 55 | struct platform_device *__init imx_add_fec( |
@@ -63,7 +68,7 @@ struct platform_device *__init imx_add_fec( | |||
63 | }, | 68 | }, |
64 | }; | 69 | }; |
65 | 70 | ||
66 | return imx_add_platform_device_dmamask("fec", 0, | 71 | return imx_add_platform_device_dmamask(data->devid, 0, |
67 | res, ARRAY_SIZE(res), | 72 | res, ARRAY_SIZE(res), |
68 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); | 73 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); |
69 | } | 74 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-dma.c b/arch/arm/plat-mxc/devices/platform-imx-dma.c index 2b0fdb23beb..7fa7e9c9246 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-dma.c +++ b/arch/arm/plat-mxc/devices/platform-imx-dma.c | |||
@@ -14,7 +14,7 @@ struct platform_device __init __maybe_unused *imx_add_imx_dma(void) | |||
14 | "imx-dma", -1, NULL, 0, NULL, 0); | 14 | "imx-dma", -1, NULL, 0, NULL, 0); |
15 | } | 15 | } |
16 | 16 | ||
17 | struct platform_device __init __maybe_unused *imx_add_imx_sdma( | 17 | struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name, |
18 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata) | 18 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata) |
19 | { | 19 | { |
20 | struct resource res[] = { | 20 | struct resource res[] = { |
@@ -29,6 +29,6 @@ struct platform_device __init __maybe_unused *imx_add_imx_sdma( | |||
29 | }, | 29 | }, |
30 | }; | 30 | }; |
31 | 31 | ||
32 | return platform_device_register_resndata(&mxc_ahb_bus, "imx-sdma", | 32 | return platform_device_register_resndata(&mxc_ahb_bus, name, |
33 | -1, res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); | 33 | -1, res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
34 | } | 34 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-imx-uart.c b/arch/arm/plat-mxc/devices/platform-imx-uart.c index cfce8c918b7..2020d84956c 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-uart.c +++ b/arch/arm/plat-mxc/devices/platform-imx-uart.c | |||
@@ -152,7 +152,7 @@ struct platform_device *__init imx_add_imx_uart_3irq( | |||
152 | }, | 152 | }, |
153 | }; | 153 | }; |
154 | 154 | ||
155 | return imx_add_platform_device("imx-uart", data->id, res, | 155 | return imx_add_platform_device("imx1-uart", data->id, res, |
156 | ARRAY_SIZE(res), pdata, sizeof(*pdata)); | 156 | ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
157 | } | 157 | } |
158 | 158 | ||
@@ -172,6 +172,7 @@ struct platform_device *__init imx_add_imx_uart_1irq( | |||
172 | }, | 172 | }, |
173 | }; | 173 | }; |
174 | 174 | ||
175 | return imx_add_platform_device("imx-uart", data->id, res, ARRAY_SIZE(res), | 175 | /* i.mx21 type uart runs on all i.mx except i.mx1 */ |
176 | pdata, sizeof(*pdata)); | 176 | return imx_add_platform_device("imx21-uart", data->id, |
177 | res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); | ||
177 | } | 178 | } |
diff --git a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c b/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c index 6b2940b93d9..5955f5da82e 100644 --- a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c +++ b/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c | |||
@@ -10,21 +10,22 @@ | |||
10 | #include <mach/devices-common.h> | 10 | #include <mach/devices-common.h> |
11 | #include <mach/esdhc.h> | 11 | #include <mach/esdhc.h> |
12 | 12 | ||
13 | #define imx_sdhci_esdhc_imx_data_entry_single(soc, _id, hwid) \ | 13 | #define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \ |
14 | { \ | 14 | { \ |
15 | .devid = _devid, \ | ||
15 | .id = _id, \ | 16 | .id = _id, \ |
16 | .iobase = soc ## _ESDHC ## hwid ## _BASE_ADDR, \ | 17 | .iobase = soc ## _ESDHC ## hwid ## _BASE_ADDR, \ |
17 | .irq = soc ## _INT_ESDHC ## hwid, \ | 18 | .irq = soc ## _INT_ESDHC ## hwid, \ |
18 | } | 19 | } |
19 | 20 | ||
20 | #define imx_sdhci_esdhc_imx_data_entry(soc, id, hwid) \ | 21 | #define imx_sdhci_esdhc_imx_data_entry(soc, devid, id, hwid) \ |
21 | [id] = imx_sdhci_esdhc_imx_data_entry_single(soc, id, hwid) | 22 | [id] = imx_sdhci_esdhc_imx_data_entry_single(soc, devid, id, hwid) |
22 | 23 | ||
23 | #ifdef CONFIG_SOC_IMX25 | 24 | #ifdef CONFIG_SOC_IMX25 |
24 | const struct imx_sdhci_esdhc_imx_data | 25 | const struct imx_sdhci_esdhc_imx_data |
25 | imx25_sdhci_esdhc_imx_data[] __initconst = { | 26 | imx25_sdhci_esdhc_imx_data[] __initconst = { |
26 | #define imx25_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | 27 | #define imx25_sdhci_esdhc_imx_data_entry(_id, _hwid) \ |
27 | imx_sdhci_esdhc_imx_data_entry(MX25, _id, _hwid) | 28 | imx_sdhci_esdhc_imx_data_entry(MX25, "sdhci-esdhc-imx25", _id, _hwid) |
28 | imx25_sdhci_esdhc_imx_data_entry(0, 1), | 29 | imx25_sdhci_esdhc_imx_data_entry(0, 1), |
29 | imx25_sdhci_esdhc_imx_data_entry(1, 2), | 30 | imx25_sdhci_esdhc_imx_data_entry(1, 2), |
30 | }; | 31 | }; |
@@ -34,7 +35,7 @@ imx25_sdhci_esdhc_imx_data[] __initconst = { | |||
34 | const struct imx_sdhci_esdhc_imx_data | 35 | const struct imx_sdhci_esdhc_imx_data |
35 | imx35_sdhci_esdhc_imx_data[] __initconst = { | 36 | imx35_sdhci_esdhc_imx_data[] __initconst = { |
36 | #define imx35_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | 37 | #define imx35_sdhci_esdhc_imx_data_entry(_id, _hwid) \ |
37 | imx_sdhci_esdhc_imx_data_entry(MX35, _id, _hwid) | 38 | imx_sdhci_esdhc_imx_data_entry(MX35, "sdhci-esdhc-imx35", _id, _hwid) |
38 | imx35_sdhci_esdhc_imx_data_entry(0, 1), | 39 | imx35_sdhci_esdhc_imx_data_entry(0, 1), |
39 | imx35_sdhci_esdhc_imx_data_entry(1, 2), | 40 | imx35_sdhci_esdhc_imx_data_entry(1, 2), |
40 | imx35_sdhci_esdhc_imx_data_entry(2, 3), | 41 | imx35_sdhci_esdhc_imx_data_entry(2, 3), |
@@ -45,7 +46,7 @@ imx35_sdhci_esdhc_imx_data[] __initconst = { | |||
45 | const struct imx_sdhci_esdhc_imx_data | 46 | const struct imx_sdhci_esdhc_imx_data |
46 | imx51_sdhci_esdhc_imx_data[] __initconst = { | 47 | imx51_sdhci_esdhc_imx_data[] __initconst = { |
47 | #define imx51_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | 48 | #define imx51_sdhci_esdhc_imx_data_entry(_id, _hwid) \ |
48 | imx_sdhci_esdhc_imx_data_entry(MX51, _id, _hwid) | 49 | imx_sdhci_esdhc_imx_data_entry(MX51, "sdhci-esdhc-imx51", _id, _hwid) |
49 | imx51_sdhci_esdhc_imx_data_entry(0, 1), | 50 | imx51_sdhci_esdhc_imx_data_entry(0, 1), |
50 | imx51_sdhci_esdhc_imx_data_entry(1, 2), | 51 | imx51_sdhci_esdhc_imx_data_entry(1, 2), |
51 | imx51_sdhci_esdhc_imx_data_entry(2, 3), | 52 | imx51_sdhci_esdhc_imx_data_entry(2, 3), |
@@ -57,7 +58,7 @@ imx51_sdhci_esdhc_imx_data[] __initconst = { | |||
57 | const struct imx_sdhci_esdhc_imx_data | 58 | const struct imx_sdhci_esdhc_imx_data |
58 | imx53_sdhci_esdhc_imx_data[] __initconst = { | 59 | imx53_sdhci_esdhc_imx_data[] __initconst = { |
59 | #define imx53_sdhci_esdhc_imx_data_entry(_id, _hwid) \ | 60 | #define imx53_sdhci_esdhc_imx_data_entry(_id, _hwid) \ |
60 | imx_sdhci_esdhc_imx_data_entry(MX53, _id, _hwid) | 61 | imx_sdhci_esdhc_imx_data_entry(MX53, "sdhci-esdhc-imx53", _id, _hwid) |
61 | imx53_sdhci_esdhc_imx_data_entry(0, 1), | 62 | imx53_sdhci_esdhc_imx_data_entry(0, 1), |
62 | imx53_sdhci_esdhc_imx_data_entry(1, 2), | 63 | imx53_sdhci_esdhc_imx_data_entry(1, 2), |
63 | imx53_sdhci_esdhc_imx_data_entry(2, 3), | 64 | imx53_sdhci_esdhc_imx_data_entry(2, 3), |
@@ -65,6 +66,11 @@ imx53_sdhci_esdhc_imx_data[] __initconst = { | |||
65 | }; | 66 | }; |
66 | #endif /* ifdef CONFIG_SOC_IMX53 */ | 67 | #endif /* ifdef CONFIG_SOC_IMX53 */ |
67 | 68 | ||
69 | static const struct esdhc_platform_data default_esdhc_pdata __initconst = { | ||
70 | .wp_type = ESDHC_WP_NONE, | ||
71 | .cd_type = ESDHC_CD_NONE, | ||
72 | }; | ||
73 | |||
68 | struct platform_device *__init imx_add_sdhci_esdhc_imx( | 74 | struct platform_device *__init imx_add_sdhci_esdhc_imx( |
69 | const struct imx_sdhci_esdhc_imx_data *data, | 75 | const struct imx_sdhci_esdhc_imx_data *data, |
70 | const struct esdhc_platform_data *pdata) | 76 | const struct esdhc_platform_data *pdata) |
@@ -81,6 +87,13 @@ struct platform_device *__init imx_add_sdhci_esdhc_imx( | |||
81 | }, | 87 | }, |
82 | }; | 88 | }; |
83 | 89 | ||
84 | return imx_add_platform_device("sdhci-esdhc-imx", data->id, res, | 90 | /* |
91 | * If machine does not provide pdata, use the default one | ||
92 | * which means no WP/CD support | ||
93 | */ | ||
94 | if (!pdata) | ||
95 | pdata = &default_esdhc_pdata; | ||
96 | |||
97 | return imx_add_platform_device(data->devid, data->id, res, | ||
85 | ARRAY_SIZE(res), pdata, sizeof(*pdata)); | 98 | ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
86 | } | 99 | } |
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h index bf93820ab61..524538aabc4 100644 --- a/arch/arm/plat-mxc/include/mach/devices-common.h +++ b/arch/arm/plat-mxc/include/mach/devices-common.h | |||
@@ -30,6 +30,7 @@ static inline struct platform_device *imx_add_platform_device( | |||
30 | 30 | ||
31 | #include <linux/fec.h> | 31 | #include <linux/fec.h> |
32 | struct imx_fec_data { | 32 | struct imx_fec_data { |
33 | const char *devid; | ||
33 | resource_size_t iobase; | 34 | resource_size_t iobase; |
34 | resource_size_t irq; | 35 | resource_size_t irq; |
35 | }; | 36 | }; |
@@ -276,6 +277,7 @@ struct platform_device *__init imx_add_mxc_w1( | |||
276 | 277 | ||
277 | #include <mach/esdhc.h> | 278 | #include <mach/esdhc.h> |
278 | struct imx_sdhci_esdhc_imx_data { | 279 | struct imx_sdhci_esdhc_imx_data { |
280 | const char *devid; | ||
279 | int id; | 281 | int id; |
280 | resource_size_t iobase; | 282 | resource_size_t iobase; |
281 | resource_size_t irq; | 283 | resource_size_t irq; |
@@ -297,5 +299,5 @@ struct platform_device *__init imx_add_spi_imx( | |||
297 | const struct spi_imx_master *pdata); | 299 | const struct spi_imx_master *pdata); |
298 | 300 | ||
299 | struct platform_device *imx_add_imx_dma(void); | 301 | struct platform_device *imx_add_imx_dma(void); |
300 | struct platform_device *imx_add_imx_sdma( | 302 | struct platform_device *imx_add_imx_sdma(char *name, |
301 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata); | 303 | resource_size_t iobase, int irq, struct sdma_platform_data *pdata); |
diff --git a/arch/arm/plat-mxc/include/mach/dma.h b/arch/arm/plat-mxc/include/mach/dma.h index ef7751546f5..233d0a5e2d6 100644 --- a/arch/arm/plat-mxc/include/mach/dma.h +++ b/arch/arm/plat-mxc/include/mach/dma.h | |||
@@ -60,7 +60,8 @@ static inline int imx_dma_is_ipu(struct dma_chan *chan) | |||
60 | 60 | ||
61 | static inline int imx_dma_is_general_purpose(struct dma_chan *chan) | 61 | static inline int imx_dma_is_general_purpose(struct dma_chan *chan) |
62 | { | 62 | { |
63 | return !strcmp(dev_name(chan->device->dev), "imx-sdma") || | 63 | return !strcmp(dev_name(chan->device->dev), "imx31-sdma") || |
64 | !strcmp(dev_name(chan->device->dev), "imx35-sdma") || | ||
64 | !strcmp(dev_name(chan->device->dev), "imx-dma"); | 65 | !strcmp(dev_name(chan->device->dev), "imx-dma"); |
65 | } | 66 | } |
66 | 67 | ||
diff --git a/arch/arm/plat-mxc/include/mach/esdhc.h b/arch/arm/plat-mxc/include/mach/esdhc.h index 86003f41175..aaf97481f41 100644 --- a/arch/arm/plat-mxc/include/mach/esdhc.h +++ b/arch/arm/plat-mxc/include/mach/esdhc.h | |||
@@ -10,17 +10,34 @@ | |||
10 | #ifndef __ASM_ARCH_IMX_ESDHC_H | 10 | #ifndef __ASM_ARCH_IMX_ESDHC_H |
11 | #define __ASM_ARCH_IMX_ESDHC_H | 11 | #define __ASM_ARCH_IMX_ESDHC_H |
12 | 12 | ||
13 | enum wp_types { | ||
14 | ESDHC_WP_NONE, /* no WP, neither controller nor gpio */ | ||
15 | ESDHC_WP_CONTROLLER, /* mmc controller internal WP */ | ||
16 | ESDHC_WP_GPIO, /* external gpio pin for WP */ | ||
17 | }; | ||
18 | |||
19 | enum cd_types { | ||
20 | ESDHC_CD_NONE, /* no CD, neither controller nor gpio */ | ||
21 | ESDHC_CD_CONTROLLER, /* mmc controller internal CD */ | ||
22 | ESDHC_CD_GPIO, /* external gpio pin for CD */ | ||
23 | ESDHC_CD_PERMANENT, /* no CD, card permanently wired to host */ | ||
24 | }; | ||
25 | |||
13 | /** | 26 | /** |
14 | * struct esdhc_platform_data - optional platform data for esdhc on i.MX | 27 | * struct esdhc_platform_data - platform data for esdhc on i.MX |
15 | * | 28 | * |
16 | * strongly recommended for i.MX25/35, not needed for other variants | 29 | * ESDHC_WP(CD)_CONTROLLER type is not available on i.MX25/35. |
17 | * | 30 | * |
18 | * @wp_gpio: gpio for write_protect (-EINVAL if unused) | 31 | * @wp_gpio: gpio for write_protect |
19 | * @cd_gpio: gpio for card_detect interrupt (-EINVAL if unused) | 32 | * @cd_gpio: gpio for card_detect interrupt |
33 | * @wp_type: type of write_protect method (see wp_types enum above) | ||
34 | * @cd_type: type of card_detect method (see cd_types enum above) | ||
20 | */ | 35 | */ |
21 | 36 | ||
22 | struct esdhc_platform_data { | 37 | struct esdhc_platform_data { |
23 | unsigned int wp_gpio; | 38 | unsigned int wp_gpio; |
24 | unsigned int cd_gpio; | 39 | unsigned int cd_gpio; |
40 | enum wp_types wp_type; | ||
41 | enum cd_types cd_type; | ||
25 | }; | 42 | }; |
26 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ | 43 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ |
diff --git a/arch/arm/plat-mxc/include/mach/sdma.h b/arch/arm/plat-mxc/include/mach/sdma.h index f495c87c113..3a3942823c2 100644 --- a/arch/arm/plat-mxc/include/mach/sdma.h +++ b/arch/arm/plat-mxc/include/mach/sdma.h | |||
@@ -48,12 +48,10 @@ struct sdma_script_start_addrs { | |||
48 | /** | 48 | /** |
49 | * struct sdma_platform_data - platform specific data for SDMA engine | 49 | * struct sdma_platform_data - platform specific data for SDMA engine |
50 | * | 50 | * |
51 | * @sdma_version The version of this SDMA engine | ||
52 | * @fw_name The firmware name | 51 | * @fw_name The firmware name |
53 | * @script_addrs SDMA scripts addresses in SDMA ROM | 52 | * @script_addrs SDMA scripts addresses in SDMA ROM |
54 | */ | 53 | */ |
55 | struct sdma_platform_data { | 54 | struct sdma_platform_data { |
56 | int sdma_version; | ||
57 | char *fw_name; | 55 | char *fw_name; |
58 | struct sdma_script_start_addrs *script_addrs; | 56 | struct sdma_script_start_addrs *script_addrs; |
59 | }; | 57 | }; |