aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-06-01 18:46:46 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-06-01 18:46:46 -0400
commitefff0471b0dd8b08ca3830b06a9083f6d6cef44e (patch)
tree44e99900de7a8677e9fdabe871600ddf98d22c23 /arch
parent3ded7acfddb3d8dad4a1490a3a75e9d8bc975c35 (diff)
parent5910de9e2de453956c3a18816f4838d96ac86988 (diff)
Merge branch 'ux500/hickup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull arm fixes for ux500 mismerge mishap from Arnd Bergmann: "The device tree conversion for arm/ux500 in 3.5 turns out to be incomplete because of a mismerge done by Linus Walleij that I failed to notice early enough and that Lee Jones as the original author of those patches did not manage to fix during the -next cycle. While we originally to get a much larger set of ux500 device tree enablement patches merged, this did not happen in time. After some discussion at Linaro Connect conference this week, Lee has been able to do damage control and provide a series to put the broken platform back into usable shape for both DT and non-DT based booting. This series has not been part of linux-next and is based on top of the current state of the upstream kernel rather than an -rc, but this is the best we could manage given the earlier breakage." * 'ux500/hickup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: ARM: ux500: Enable probing of pinctrl through Device Tree ARM: ux500: Add support for ab8500 regulators into the Device Tree ARM: ux500: Provide regulator support for SMSC911x via Device Tree ARM: ux500: Allow PRCMU regulator to be probed during a DT enabled boot ARM: ux500: Apply db8500-prcmu regulator information to db8500 Device Tree ARM: ux500: Only initialise STE's UIBs on boards which support them ARM: ux500: Disable platform setup of the ab8500 when DT is enabled ARM: ux500: Use correct format for dynamic IRQ assignment ARM: ux500: Re-enable SMSC911x platform code registration during non-DT boots ARM: ux500: PRCMU related configuration and layout corrections for Device Tree ARM: ux500: Remove DB8500 PRCMU platform registration when DT is enabled ARM: ux500: Disable SMSC911x platform code registration when DT is enabled ARM: ux500: New DT:ed u8500_init_devices for one-by-one device enablement ARM: ux500: New DT:ed snowball_platform_devs for one-by-one device enablement pinctrl-nomadik: Allow Device Tree driver probing
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boot/dts/db8500.dtsi204
-rw-r--r--arch/arm/boot/dts/snowball.dts32
-rw-r--r--arch/arm/configs/u8500_defconfig1
-rw-r--r--arch/arm/mach-ux500/board-mop500-uib.c4
-rw-r--r--arch/arm/mach-ux500/board-mop500.c32
-rw-r--r--arch/arm/mach-ux500/board-mop500.h4
-rw-r--r--arch/arm/mach-ux500/cpu-db8500.c25
7 files changed, 281 insertions, 21 deletions
diff --git a/arch/arm/boot/dts/db8500.dtsi b/arch/arm/boot/dts/db8500.dtsi
index 881bc3987844..4ad5160018cb 100644
--- a/arch/arm/boot/dts/db8500.dtsi
+++ b/arch/arm/boot/dts/db8500.dtsi
@@ -58,6 +58,8 @@
58 "st,nomadik-gpio"; 58 "st,nomadik-gpio";
59 reg = <0x8012e000 0x80>; 59 reg = <0x8012e000 0x80>;
60 interrupts = <0 119 0x4>; 60 interrupts = <0 119 0x4>;
61 interrupt-controller;
62 #interrupt-cells = <2>;
61 supports-sleepmode; 63 supports-sleepmode;
62 gpio-controller; 64 gpio-controller;
63 #gpio-cells = <2>; 65 #gpio-cells = <2>;
@@ -69,6 +71,8 @@
69 "st,nomadik-gpio"; 71 "st,nomadik-gpio";
70 reg = <0x8012e080 0x80>; 72 reg = <0x8012e080 0x80>;
71 interrupts = <0 120 0x4>; 73 interrupts = <0 120 0x4>;
74 interrupt-controller;
75 #interrupt-cells = <2>;
72 supports-sleepmode; 76 supports-sleepmode;
73 gpio-controller; 77 gpio-controller;
74 #gpio-cells = <2>; 78 #gpio-cells = <2>;
@@ -80,6 +84,8 @@
80 "st,nomadik-gpio"; 84 "st,nomadik-gpio";
81 reg = <0x8000e000 0x80>; 85 reg = <0x8000e000 0x80>;
82 interrupts = <0 121 0x4>; 86 interrupts = <0 121 0x4>;
87 interrupt-controller;
88 #interrupt-cells = <2>;
83 supports-sleepmode; 89 supports-sleepmode;
84 gpio-controller; 90 gpio-controller;
85 #gpio-cells = <2>; 91 #gpio-cells = <2>;
@@ -91,6 +97,8 @@
91 "st,nomadik-gpio"; 97 "st,nomadik-gpio";
92 reg = <0x8000e080 0x80>; 98 reg = <0x8000e080 0x80>;
93 interrupts = <0 122 0x4>; 99 interrupts = <0 122 0x4>;
100 interrupt-controller;
101 #interrupt-cells = <2>;
94 supports-sleepmode; 102 supports-sleepmode;
95 gpio-controller; 103 gpio-controller;
96 #gpio-cells = <2>; 104 #gpio-cells = <2>;
@@ -102,6 +110,8 @@
102 "st,nomadik-gpio"; 110 "st,nomadik-gpio";
103 reg = <0x8000e100 0x80>; 111 reg = <0x8000e100 0x80>;
104 interrupts = <0 123 0x4>; 112 interrupts = <0 123 0x4>;
113 interrupt-controller;
114 #interrupt-cells = <2>;
105 supports-sleepmode; 115 supports-sleepmode;
106 gpio-controller; 116 gpio-controller;
107 #gpio-cells = <2>; 117 #gpio-cells = <2>;
@@ -113,6 +123,8 @@
113 "st,nomadik-gpio"; 123 "st,nomadik-gpio";
114 reg = <0x8000e180 0x80>; 124 reg = <0x8000e180 0x80>;
115 interrupts = <0 124 0x4>; 125 interrupts = <0 124 0x4>;
126 interrupt-controller;
127 #interrupt-cells = <2>;
116 supports-sleepmode; 128 supports-sleepmode;
117 gpio-controller; 129 gpio-controller;
118 #gpio-cells = <2>; 130 #gpio-cells = <2>;
@@ -124,6 +136,8 @@
124 "st,nomadik-gpio"; 136 "st,nomadik-gpio";
125 reg = <0x8011e000 0x80>; 137 reg = <0x8011e000 0x80>;
126 interrupts = <0 125 0x4>; 138 interrupts = <0 125 0x4>;
139 interrupt-controller;
140 #interrupt-cells = <2>;
127 supports-sleepmode; 141 supports-sleepmode;
128 gpio-controller; 142 gpio-controller;
129 #gpio-cells = <2>; 143 #gpio-cells = <2>;
@@ -135,6 +149,8 @@
135 "st,nomadik-gpio"; 149 "st,nomadik-gpio";
136 reg = <0x8011e080 0x80>; 150 reg = <0x8011e080 0x80>;
137 interrupts = <0 126 0x4>; 151 interrupts = <0 126 0x4>;
152 interrupt-controller;
153 #interrupt-cells = <2>;
138 supports-sleepmode; 154 supports-sleepmode;
139 gpio-controller; 155 gpio-controller;
140 #gpio-cells = <2>; 156 #gpio-cells = <2>;
@@ -146,12 +162,18 @@
146 "st,nomadik-gpio"; 162 "st,nomadik-gpio";
147 reg = <0xa03fe000 0x80>; 163 reg = <0xa03fe000 0x80>;
148 interrupts = <0 127 0x4>; 164 interrupts = <0 127 0x4>;
165 interrupt-controller;
166 #interrupt-cells = <2>;
149 supports-sleepmode; 167 supports-sleepmode;
150 gpio-controller; 168 gpio-controller;
151 #gpio-cells = <2>; 169 #gpio-cells = <2>;
152 gpio-bank = <8>; 170 gpio-bank = <8>;
153 }; 171 };
154 172
173 pinctrl {
174 compatible = "stericsson,nmk_pinctrl";
175 };
176
155 usb@a03e0000 { 177 usb@a03e0000 {
156 compatible = "stericsson,db8500-musb", 178 compatible = "stericsson,db8500-musb",
157 "mentor,musb"; 179 "mentor,musb";
@@ -169,20 +191,195 @@
169 prcmu@80157000 { 191 prcmu@80157000 {
170 compatible = "stericsson,db8500-prcmu"; 192 compatible = "stericsson,db8500-prcmu";
171 reg = <0x80157000 0x1000>; 193 reg = <0x80157000 0x1000>;
172 interrupts = <46 47>; 194 interrupts = <0 47 0x4>;
173 #address-cells = <1>; 195 #address-cells = <1>;
174 #size-cells = <1>; 196 #size-cells = <1>;
175 ranges; 197 ranges;
176 198
177 prcmu-timer-4@80157450 { 199 prcmu-timer-4@80157450 {
178 compatible = "stericsson,db8500-prcmu-timer-4"; 200 compatible = "stericsson,db8500-prcmu-timer-4";
179 reg = <0x80157450 0xC>; 201 reg = <0x80157450 0xC>;
180 }; 202 };
181 203
204 db8500-prcmu-regulators {
205 compatible = "stericsson,db8500-prcmu-regulator";
206
207 // DB8500_REGULATOR_VAPE
208 db8500_vape_reg: db8500_vape {
209 regulator-name = "db8500-vape";
210 regulator-always-on;
211 };
212
213 // DB8500_REGULATOR_VARM
214 db8500_varm_reg: db8500_varm {
215 regulator-name = "db8500-varm";
216 };
217
218 // DB8500_REGULATOR_VMODEM
219 db8500_vmodem_reg: db8500_vmodem {
220 regulator-name = "db8500-vmodem";
221 };
222
223 // DB8500_REGULATOR_VPLL
224 db8500_vpll_reg: db8500_vpll {
225 regulator-name = "db8500-vpll";
226 };
227
228 // DB8500_REGULATOR_VSMPS1
229 db8500_vsmps1_reg: db8500_vsmps1 {
230 regulator-name = "db8500-vsmps1";
231 };
232
233 // DB8500_REGULATOR_VSMPS2
234 db8500_vsmps2_reg: db8500_vsmps2 {
235 regulator-name = "db8500-vsmps2";
236 };
237
238 // DB8500_REGULATOR_VSMPS3
239 db8500_vsmps3_reg: db8500_vsmps3 {
240 regulator-name = "db8500-vsmps3";
241 };
242
243 // DB8500_REGULATOR_VRF1
244 db8500_vrf1_reg: db8500_vrf1 {
245 regulator-name = "db8500-vrf1";
246 };
247
248 // DB8500_REGULATOR_SWITCH_SVAMMDSP
249 db8500_sva_mmdsp_reg: db8500_sva_mmdsp {
250 regulator-name = "db8500-sva-mmdsp";
251 };
252
253 // DB8500_REGULATOR_SWITCH_SVAMMDSPRET
254 db8500_sva_mmdsp_ret_reg: db8500_sva_mmdsp_ret {
255 regulator-name = "db8500-sva-mmdsp-ret";
256 };
257
258 // DB8500_REGULATOR_SWITCH_SVAPIPE
259 db8500_sva_pipe_reg: db8500_sva_pipe {
260 regulator-name = "db8500_sva_pipe";
261 };
262
263 // DB8500_REGULATOR_SWITCH_SIAMMDSP
264 db8500_sia_mmdsp_reg: db8500_sia_mmdsp {
265 regulator-name = "db8500_sia_mmdsp";
266 };
267
268 // DB8500_REGULATOR_SWITCH_SIAMMDSPRET
269 db8500_sia_mmdsp_ret_reg: db8500_sia_mmdsp_ret {
270 regulator-name = "db8500-sia-mmdsp-ret";
271 };
272
273 // DB8500_REGULATOR_SWITCH_SIAPIPE
274 db8500_sia_pipe_reg: db8500_sia_pipe {
275 regulator-name = "db8500-sia-pipe";
276 };
277
278 // DB8500_REGULATOR_SWITCH_SGA
279 db8500_sga_reg: db8500_sga {
280 regulator-name = "db8500-sga";
281 vin-supply = <&db8500_vape_reg>;
282 };
283
284 // DB8500_REGULATOR_SWITCH_B2R2_MCDE
285 db8500_b2r2_mcde_reg: db8500_b2r2_mcde {
286 regulator-name = "db8500-b2r2-mcde";
287 vin-supply = <&db8500_vape_reg>;
288 };
289
290 // DB8500_REGULATOR_SWITCH_ESRAM12
291 db8500_esram12_reg: db8500_esram12 {
292 regulator-name = "db8500-esram12";
293 };
294
295 // DB8500_REGULATOR_SWITCH_ESRAM12RET
296 db8500_esram12_ret_reg: db8500_esram12_ret {
297 regulator-name = "db8500-esram12-ret";
298 };
299
300 // DB8500_REGULATOR_SWITCH_ESRAM34
301 db8500_esram34_reg: db8500_esram34 {
302 regulator-name = "db8500-esram34";
303 };
304
305 // DB8500_REGULATOR_SWITCH_ESRAM34RET
306 db8500_esram34_ret_reg: db8500_esram34_ret {
307 regulator-name = "db8500-esram34-ret";
308 };
309 };
310
182 ab8500@5 { 311 ab8500@5 {
183 compatible = "stericsson,ab8500"; 312 compatible = "stericsson,ab8500";
184 reg = <5>; /* mailbox 5 is i2c */ 313 reg = <5>; /* mailbox 5 is i2c */
185 interrupts = <0 40 0x4>; 314 interrupts = <0 40 0x4>;
315
316 ab8500-regulators {
317 compatible = "stericsson,ab8500-regulator";
318
319 // supplies to the display/camera
320 ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
321 regulator-name = "V-DISPLAY";
322 regulator-min-microvolt = <2500000>;
323 regulator-max-microvolt = <2900000>;
324 regulator-boot-on;
325 /* BUG: If turned off MMC will be affected. */
326 regulator-always-on;
327 };
328
329 // supplies to the on-board eMMC
330 ab8500_ldo_aux2_reg: ab8500_ldo_aux2 {
331 regulator-name = "V-eMMC1";
332 regulator-min-microvolt = <1100000>;
333 regulator-max-microvolt = <3300000>;
334 };
335
336 // supply for VAUX3; SDcard slots
337 ab8500_ldo_aux3_reg: ab8500_ldo_aux3 {
338 regulator-name = "V-MMC-SD";
339 regulator-min-microvolt = <1100000>;
340 regulator-max-microvolt = <3300000>;
341 };
342
343 // supply for v-intcore12; VINTCORE12 LDO
344 ab8500_ldo_initcore_reg: ab8500_ldo_initcore {
345 regulator-name = "V-INTCORE";
346 };
347
348 // supply for tvout; gpadc; TVOUT LDO
349 ab8500_ldo_tvout_reg: ab8500_ldo_tvout {
350 regulator-name = "V-TVOUT";
351 };
352
353 // supply for ab8500-usb; USB LDO
354 ab8500_ldo_usb_reg: ab8500_ldo_usb {
355 regulator-name = "dummy";
356 };
357
358 // supply for ab8500-vaudio; VAUDIO LDO
359 ab8500_ldo_audio_reg: ab8500_ldo_audio {
360 regulator-name = "V-AUD";
361 };
362
363 // supply for v-anamic1 VAMic1-LDO
364 ab8500_ldo_anamic1_reg: ab8500_ldo_anamic1 {
365 regulator-name = "V-AMIC1";
366 };
367
368 // supply for v-amic2; VAMIC2 LDO; reuse constants for AMIC1
369 ab8500_ldo_amamic2_reg: ab8500_ldo_amamic2 {
370 regulator-name = "V-AMIC2";
371 };
372
373 // supply for v-dmic; VDMIC LDO
374 ab8500_ldo_dmic_reg: ab8500_ldo_dmic {
375 regulator-name = "V-DMIC";
376 };
377
378 // supply for U8500 CSI/DSI; VANA LDO
379 ab8500_ldo_ana_reg: ab8500_ldo_ana {
380 regulator-name = "V-CSI/DSI";
381 };
382 };
186 }; 383 };
187 }; 384 };
188 385
@@ -235,7 +432,8 @@
235 status = "disabled"; 432 status = "disabled";
236 433
237 // Add one of these for each child device 434 // Add one of these for each child device
238 cs-gpios = <&gpio0 31 &gpio4 14 &gpio4 16 &gpio6 22 &gpio7 0>; 435 cs-gpios = <&gpio0 31 0x4 &gpio4 14 0x4 &gpio4 16 0x4
436 &gpio6 22 0x4 &gpio7 0 0x4>;
239 437
240 }; 438 };
241 439
diff --git a/arch/arm/boot/dts/snowball.dts b/arch/arm/boot/dts/snowball.dts
index d99dc04f0d91..ec3c33975110 100644
--- a/arch/arm/boot/dts/snowball.dts
+++ b/arch/arm/boot/dts/snowball.dts
@@ -20,6 +20,16 @@
20 reg = <0x00000000 0x20000000>; 20 reg = <0x00000000 0x20000000>;
21 }; 21 };
22 22
23 en_3v3_reg: en_3v3 {
24 compatible = "regulator-fixed";
25 regulator-name = "en-3v3-fixed-supply";
26 regulator-min-microvolt = <3300000>;
27 regulator-max-microvolt = <3300000>;
28 gpios = <&gpio0 26 0x4>; // 26
29 startup-delay-us = <5000>;
30 enable-active-high;
31 };
32
23 gpio_keys { 33 gpio_keys {
24 compatible = "gpio-keys"; 34 compatible = "gpio-keys";
25 #address-cells = <1>; 35 #address-cells = <1>;
@@ -30,35 +40,35 @@
30 wakeup = <1>; 40 wakeup = <1>;
31 linux,code = <2>; 41 linux,code = <2>;
32 label = "userpb"; 42 label = "userpb";
33 gpios = <&gpio1 0 0>; 43 gpios = <&gpio1 0 0x4>;
34 }; 44 };
35 button@2 { 45 button@2 {
36 debounce_interval = <50>; 46 debounce_interval = <50>;
37 wakeup = <1>; 47 wakeup = <1>;
38 linux,code = <3>; 48 linux,code = <3>;
39 label = "extkb1"; 49 label = "extkb1";
40 gpios = <&gpio4 23 0>; 50 gpios = <&gpio4 23 0x4>;
41 }; 51 };
42 button@3 { 52 button@3 {
43 debounce_interval = <50>; 53 debounce_interval = <50>;
44 wakeup = <1>; 54 wakeup = <1>;
45 linux,code = <4>; 55 linux,code = <4>;
46 label = "extkb2"; 56 label = "extkb2";
47 gpios = <&gpio4 24 0>; 57 gpios = <&gpio4 24 0x4>;
48 }; 58 };
49 button@4 { 59 button@4 {
50 debounce_interval = <50>; 60 debounce_interval = <50>;
51 wakeup = <1>; 61 wakeup = <1>;
52 linux,code = <5>; 62 linux,code = <5>;
53 label = "extkb3"; 63 label = "extkb3";
54 gpios = <&gpio5 1 0>; 64 gpios = <&gpio5 1 0x4>;
55 }; 65 };
56 button@5 { 66 button@5 {
57 debounce_interval = <50>; 67 debounce_interval = <50>;
58 wakeup = <1>; 68 wakeup = <1>;
59 linux,code = <6>; 69 linux,code = <6>;
60 label = "extkb4"; 70 label = "extkb4";
61 gpios = <&gpio5 2 0>; 71 gpios = <&gpio5 2 0x4>;
62 }; 72 };
63 }; 73 };
64 74
@@ -66,12 +76,11 @@
66 compatible = "gpio-leds"; 76 compatible = "gpio-leds";
67 used-led { 77 used-led {
68 label = "user_led"; 78 label = "user_led";
69 gpios = <&gpio4 14>; 79 gpios = <&gpio4 14 0x4>;
70 }; 80 };
71 }; 81 };
72 82
73 soc-u9500 { 83 soc-u9500 {
74
75 external-bus@50000000 { 84 external-bus@50000000 {
76 status = "okay"; 85 status = "okay";
77 86
@@ -80,6 +89,9 @@
80 reg = <0 0x10000>; 89 reg = <0 0x10000>;
81 interrupts = <12 0x1>; 90 interrupts = <12 0x1>;
82 interrupt-parent = <&gpio4>; 91 interrupt-parent = <&gpio4>;
92 vdd33a-supply = <&en_3v3_reg>;
93 vddvario-supply = <&db8500_vape_reg>;
94
83 95
84 reg-shift = <1>; 96 reg-shift = <1>;
85 reg-io-width = <2>; 97 reg-io-width = <2>;
@@ -91,11 +103,13 @@
91 103
92 sdi@80126000 { 104 sdi@80126000 {
93 status = "enabled"; 105 status = "enabled";
94 cd-gpios = <&gpio6 26>; 106 vmmc-supply = <&ab8500_ldo_aux3_reg>;
107 cd-gpios = <&gpio6 26 0x4>; // 218
95 }; 108 };
96 109
97 sdi@80114000 { 110 sdi@80114000 {
98 status = "enabled"; 111 status = "enabled";
112 vmmc-supply = <&ab8500_ldo_aux2_reg>;
99 }; 113 };
100 114
101 uart@80120000 { 115 uart@80120000 {
@@ -114,7 +128,7 @@
114 tc3589x@42 { 128 tc3589x@42 {
115 //compatible = "tc3589x"; 129 //compatible = "tc3589x";
116 reg = <0x42>; 130 reg = <0x42>;
117 interrupts = <25>; 131 gpios = <&gpio6 25 0x4>;
118 interrupt-parent = <&gpio6>; 132 interrupt-parent = <&gpio6>;
119 }; 133 };
120 tps61052@33 { 134 tps61052@33 {
diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig
index 7e84f453e8a6..2d4f661d1cf6 100644
--- a/arch/arm/configs/u8500_defconfig
+++ b/arch/arm/configs/u8500_defconfig
@@ -75,6 +75,7 @@ CONFIG_AB5500_CORE=y
75CONFIG_AB8500_CORE=y 75CONFIG_AB8500_CORE=y
76CONFIG_REGULATOR=y 76CONFIG_REGULATOR=y
77CONFIG_REGULATOR_AB8500=y 77CONFIG_REGULATOR_AB8500=y
78CONFIG_REGULATOR_FIXED_VOLTAGE=y
78# CONFIG_HID_SUPPORT is not set 79# CONFIG_HID_SUPPORT is not set
79CONFIG_USB_GADGET=y 80CONFIG_USB_GADGET=y
80CONFIG_AB8500_USB=y 81CONFIG_AB8500_USB=y
diff --git a/arch/arm/mach-ux500/board-mop500-uib.c b/arch/arm/mach-ux500/board-mop500-uib.c
index b29a788f498c..1f47d962e3a1 100644
--- a/arch/arm/mach-ux500/board-mop500-uib.c
+++ b/arch/arm/mach-ux500/board-mop500-uib.c
@@ -96,7 +96,7 @@ static void __init __mop500_uib_init(struct uib *uib, const char *why)
96/* 96/*
97 * Detect the UIB attached based on the presence or absence of i2c devices. 97 * Detect the UIB attached based on the presence or absence of i2c devices.
98 */ 98 */
99static int __init mop500_uib_init(void) 99int __init mop500_uib_init(void)
100{ 100{
101 struct uib *uib = mop500_uib; 101 struct uib *uib = mop500_uib;
102 struct i2c_adapter *i2c0; 102 struct i2c_adapter *i2c0;
@@ -131,5 +131,3 @@ static int __init mop500_uib_init(void)
131 131
132 return 0; 132 return 0;
133} 133}
134
135module_init(mop500_uib_init);
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index fba8adea421e..9c74ac545849 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -673,9 +673,15 @@ static void __init u8500_cryp1_hash1_init(struct device *parent)
673static struct platform_device *snowball_platform_devs[] __initdata = { 673static struct platform_device *snowball_platform_devs[] __initdata = {
674 &snowball_led_dev, 674 &snowball_led_dev,
675 &snowball_key_dev, 675 &snowball_key_dev,
676 &snowball_sbnet_dev,
676 &ab8500_device, 677 &ab8500_device,
677}; 678};
678 679
680static struct platform_device *snowball_of_platform_devs[] __initdata = {
681 &snowball_led_dev,
682 &snowball_key_dev,
683};
684
679static void __init mop500_init_machine(void) 685static void __init mop500_init_machine(void)
680{ 686{
681 struct device *parent = NULL; 687 struct device *parent = NULL;
@@ -710,6 +716,8 @@ static void __init mop500_init_machine(void)
710 716
711 /* This board has full regulator constraints */ 717 /* This board has full regulator constraints */
712 regulator_has_full_constraints(); 718 regulator_has_full_constraints();
719
720 mop500_uib_init();
713} 721}
714 722
715static void __init snowball_init_machine(void) 723static void __init snowball_init_machine(void)
@@ -774,6 +782,8 @@ static void __init hrefv60_init_machine(void)
774 782
775 /* This board has full regulator constraints */ 783 /* This board has full regulator constraints */
776 regulator_has_full_constraints(); 784 regulator_has_full_constraints();
785
786 mop500_uib_init();
777} 787}
778 788
779MACHINE_START(U8500, "ST-Ericsson MOP500 platform") 789MACHINE_START(U8500, "ST-Ericsson MOP500 platform")
@@ -834,6 +844,10 @@ struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
834static const struct of_device_id u8500_local_bus_nodes[] = { 844static const struct of_device_id u8500_local_bus_nodes[] = {
835 /* only create devices below soc node */ 845 /* only create devices below soc node */
836 { .compatible = "stericsson,db8500", }, 846 { .compatible = "stericsson,db8500", },
847 { .compatible = "stericsson,db8500-prcmu", },
848 { .compatible = "stericsson,db8500-prcmu-regulator", },
849 { .compatible = "stericsson,ab8500", },
850 { .compatible = "stericsson,ab8500-regulator", },
837 { .compatible = "simple-bus"}, 851 { .compatible = "simple-bus"},
838 { }, 852 { },
839}; 853};
@@ -852,7 +866,7 @@ static void __init u8500_init_machine(void)
852 else if (of_machine_is_compatible("st-ericsson,hrefv60+")) 866 else if (of_machine_is_compatible("st-ericsson,hrefv60+"))
853 hrefv60_pinmaps_init(); 867 hrefv60_pinmaps_init();
854 868
855 parent = u8500_init_devices(); 869 parent = u8500_of_init_devices();
856 870
857 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++) 871 for (i = 0; i < ARRAY_SIZE(mop500_platform_devs); i++)
858 mop500_platform_devs[i]->dev.parent = parent; 872 mop500_platform_devs[i]->dev.parent = parent;
@@ -869,15 +883,23 @@ static void __init u8500_init_machine(void)
869 ARRAY_SIZE(mop500_platform_devs)); 883 ARRAY_SIZE(mop500_platform_devs));
870 884
871 mop500_sdi_init(parent); 885 mop500_sdi_init(parent);
872
873 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices); 886 i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices);
874 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs); 887 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs);
875 i2c_register_board_info(2, mop500_i2c2_devices, 888 i2c_register_board_info(2, mop500_i2c2_devices,
876 ARRAY_SIZE(mop500_i2c2_devices)); 889 ARRAY_SIZE(mop500_i2c2_devices));
877 890
891 mop500_uib_init();
892
878 } else if (of_machine_is_compatible("calaosystems,snowball-a9500")) { 893 } else if (of_machine_is_compatible("calaosystems,snowball-a9500")) {
879 platform_add_devices(snowball_platform_devs, 894 /*
880 ARRAY_SIZE(snowball_platform_devs)); 895 * Devices to be DT:ed:
896 * snowball_led_dev = todo
897 * snowball_key_dev = todo
898 * snowball_sbnet_dev = done
899 * ab8500_device = done
900 */
901 platform_add_devices(snowball_of_platform_devs,
902 ARRAY_SIZE(snowball_of_platform_devs));
881 903
882 snowball_sdi_init(parent); 904 snowball_sdi_init(parent);
883 } else if (of_machine_is_compatible("st-ericsson,hrefv60+")) { 905 } else if (of_machine_is_compatible("st-ericsson,hrefv60+")) {
@@ -898,6 +920,8 @@ static void __init u8500_init_machine(void)
898 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs); 920 i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs);
899 i2c_register_board_info(2, mop500_i2c2_devices, 921 i2c_register_board_info(2, mop500_i2c2_devices,
900 ARRAY_SIZE(mop500_i2c2_devices)); 922 ARRAY_SIZE(mop500_i2c2_devices));
923
924 mop500_uib_init();
901 } 925 }
902 mop500_i2c_init(parent); 926 mop500_i2c_init(parent);
903 927
diff --git a/arch/arm/mach-ux500/board-mop500.h b/arch/arm/mach-ux500/board-mop500.h
index bc44c07c71a9..2f87b25a908a 100644
--- a/arch/arm/mach-ux500/board-mop500.h
+++ b/arch/arm/mach-ux500/board-mop500.h
@@ -89,7 +89,11 @@ void __init mop500_pinmaps_init(void);
89void __init snowball_pinmaps_init(void); 89void __init snowball_pinmaps_init(void);
90void __init hrefv60_pinmaps_init(void); 90void __init hrefv60_pinmaps_init(void);
91 91
92int __init mop500_uib_init(void);
92void mop500_uib_i2c_add(int busnum, struct i2c_board_info *info, 93void mop500_uib_i2c_add(int busnum, struct i2c_board_info *info,
93 unsigned n); 94 unsigned n);
94 95
96/* TODO: Once all pieces are DT:ed, remove completely. */
97struct device * __init u8500_of_init_devices(void);
98
95#endif 99#endif
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c
index 16169c4bf6ca..33275eb4c689 100644
--- a/arch/arm/mach-ux500/cpu-db8500.c
+++ b/arch/arm/mach-ux500/cpu-db8500.c
@@ -140,7 +140,6 @@ static struct platform_device *platform_devs[] __initdata = {
140static struct platform_device *of_platform_devs[] __initdata = { 140static struct platform_device *of_platform_devs[] __initdata = {
141 &u8500_dma40_device, 141 &u8500_dma40_device,
142 &db8500_pmu_device, 142 &db8500_pmu_device,
143 &db8500_prcmu_device,
144}; 143};
145 144
146static resource_size_t __initdata db8500_gpio_base[] = { 145static resource_size_t __initdata db8500_gpio_base[] = {
@@ -222,6 +221,28 @@ struct device * __init u8500_init_devices(void)
222 platform_device_register_data(parent, 221 platform_device_register_data(parent,
223 "cpufreq-u8500", -1, NULL, 0); 222 "cpufreq-u8500", -1, NULL, 0);
224 223
224 for (i = 0; i < ARRAY_SIZE(platform_devs); i++)
225 platform_devs[i]->dev.parent = parent;
226
227 platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
228
229 return parent;
230}
231
232/* TODO: Once all pieces are DT:ed, remove completely. */
233struct device * __init u8500_of_init_devices(void)
234{
235 struct device *parent;
236 int i;
237
238 parent = db8500_soc_device_init();
239
240 db8500_add_rtc(parent);
241 db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg);
242
243 platform_device_register_data(parent,
244 "cpufreq-u8500", -1, NULL, 0);
245
225 for (i = 0; i < ARRAY_SIZE(of_platform_devs); i++) 246 for (i = 0; i < ARRAY_SIZE(of_platform_devs); i++)
226 of_platform_devs[i]->dev.parent = parent; 247 of_platform_devs[i]->dev.parent = parent;
227 248
@@ -229,7 +250,7 @@ struct device * __init u8500_init_devices(void)
229 * Devices to be DT:ed: 250 * Devices to be DT:ed:
230 * u8500_dma40_device = todo 251 * u8500_dma40_device = todo
231 * db8500_pmu_device = todo 252 * db8500_pmu_device = todo
232 * db8500_prcmu_device = todo 253 * db8500_prcmu_device = done
233 */ 254 */
234 platform_add_devices(of_platform_devs, ARRAY_SIZE(of_platform_devs)); 255 platform_add_devices(of_platform_devs, ARRAY_SIZE(of_platform_devs));
235 256