blob: e72f0fc91b0287e6f370a2102c25eb612e31cd8f [file] [log] [blame]
Tony Lindgren6a08e1e2013-09-25 15:44:39 -07001/*
2 * Legacy platform_data quirks
3 *
4 * Copyright (C) 2013 Texas Instruments
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#include <linux/clk.h>
Tony Lindgren71900312013-12-06 10:53:04 -080011#include <linux/davinci_emac.h>
Tony Lindgren5f0a2c62013-09-25 15:44:40 -070012#include <linux/gpio.h>
Tony Lindgren6a08e1e2013-09-25 15:44:39 -070013#include <linux/init.h>
14#include <linux/kernel.h>
Tony Lindgren8651bd82013-10-10 15:45:12 -070015#include <linux/of_platform.h>
Enric Balletbo i Serrad565b5f2014-11-06 13:01:51 +010016#include <linux/ti_wilink_st.h>
Tony Lindgren5f0a2c62013-09-25 15:44:40 -070017#include <linux/wl12xx.h>
Tony Lindgren6a08e1e2013-09-25 15:44:39 -070018
Tony Lindgren30a69ef2013-10-10 15:45:13 -070019#include <linux/platform_data/pinctrl-single.h>
Suman Anna910f1672014-03-05 18:24:13 -060020#include <linux/platform_data/iommu-omap.h>
Tony Lindgren30a69ef2013-10-10 15:45:13 -070021
Tony Lindgren71900312013-12-06 10:53:04 -080022#include "am35xx.h"
Tony Lindgren6a08e1e2013-09-25 15:44:39 -070023#include "common.h"
24#include "common-board-devices.h"
25#include "dss-common.h"
Aaro Koskinenfaf4bd42013-09-24 22:28:15 +030026#include "control.h"
Suman Anna910f1672014-03-05 18:24:13 -060027#include "omap_device.h"
Sebastian Reicheldeff82e2014-02-17 22:30:58 +010028#include "omap-secure.h"
29#include "soc.h"
Tony Lindgren6a08e1e2013-09-25 15:44:39 -070030
31struct pdata_init {
32 const char *compatible;
33 void (*fn)(void);
34};
35
Tony Lindgrenfa590c92013-11-25 15:17:10 -080036struct of_dev_auxdata omap_auxdata_lookup[];
Tony Lindgrendad12d12013-12-06 10:52:58 -080037static struct twl4030_gpio_platform_data twl_gpio_auxdata;
Tony Lindgrenfa590c92013-11-25 15:17:10 -080038
Tony Lindgren5f0a2c62013-09-25 15:44:40 -070039#if IS_ENABLED(CONFIG_WL12XX)
40
41static struct wl12xx_platform_data wl12xx __initdata;
42
43static void __init __used legacy_init_wl12xx(unsigned ref_clock,
44 unsigned tcxo_clock,
45 int gpio)
46{
47 int res;
48
49 wl12xx.board_ref_clock = ref_clock;
50 wl12xx.board_tcxo_clock = tcxo_clock;
51 wl12xx.irq = gpio_to_irq(gpio);
52
53 res = wl12xx_set_platform_data(&wl12xx);
54 if (res) {
55 pr_err("error setting wl12xx data: %d\n", res);
56 return;
57 }
58}
59#else
60static inline void legacy_init_wl12xx(unsigned ref_clock,
61 unsigned tcxo_clock,
62 int gpio)
63{
64}
65#endif
66
Tony Lindgrenfa590c92013-11-25 15:17:10 -080067#ifdef CONFIG_MACH_NOKIA_N8X0
68static void __init omap2420_n8x0_legacy_init(void)
69{
70 omap_auxdata_lookup[0].platform_data = n8x0_legacy_init();
71}
72#else
73#define omap2420_n8x0_legacy_init NULL
74#endif
75
Aaro Koskinenfaf4bd42013-09-24 22:28:15 +030076#ifdef CONFIG_ARCH_OMAP3
77static void __init hsmmc2_internal_input_clk(void)
78{
79 u32 reg;
80
81 reg = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1);
82 reg |= OMAP2_MMCSDIO2ADPCLKISEL;
83 omap_ctrl_writel(reg, OMAP343X_CONTROL_DEVCONF1);
84}
Javier Martinez Canillas15c98872013-10-09 11:19:18 +020085
Suman Anna910f1672014-03-05 18:24:13 -060086static struct iommu_platform_data omap3_iommu_pdata = {
87 .reset_name = "mmu",
88 .assert_reset = omap_device_assert_hardreset,
89 .deassert_reset = omap_device_deassert_hardreset,
90};
91
Tony Lindgren0f0cfc62013-12-18 13:13:21 -080092static int omap3_sbc_t3730_twl_callback(struct device *dev,
93 unsigned gpio,
94 unsigned ngpio)
95{
96 int res;
97
98 res = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
Dmitry Lifshitzd234e422014-01-12 15:22:45 +020099 "wlan pwr");
Tony Lindgren0f0cfc62013-12-18 13:13:21 -0800100 if (res)
101 return res;
102
103 gpio_export(gpio, 0);
104
105 return 0;
106}
107
Dmitry Lifshitzb62d91e2014-01-12 15:22:55 +0200108static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name)
109{
110 int err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, hub_name);
111
112 if (err) {
113 pr_err("SBC-T3x: %s reset gpio request failed: %d\n",
114 hub_name, err);
115 return;
116 }
117
118 gpio_export(gpio, 0);
119
120 udelay(10);
121 gpio_set_value(gpio, 1);
122 msleep(1);
123}
124
Tony Lindgren0f0cfc62013-12-18 13:13:21 -0800125static void __init omap3_sbc_t3730_twl_init(void)
126{
127 twl_gpio_auxdata.setup = omap3_sbc_t3730_twl_callback;
128}
129
130static void __init omap3_sbc_t3730_legacy_init(void)
131{
Dmitry Lifshitzb62d91e2014-01-12 15:22:55 +0200132 omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
Tony Lindgren0f0cfc62013-12-18 13:13:21 -0800133 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 136);
134 omap_ads7846_init(1, 57, 0, NULL);
135}
136
Dmitry Lifshitz40ecc022014-01-12 15:22:53 +0200137static void __init omap3_sbc_t3530_legacy_init(void)
138{
Dmitry Lifshitzb62d91e2014-01-12 15:22:55 +0200139 omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
Dmitry Lifshitz40ecc022014-01-12 15:22:53 +0200140 omap_ads7846_init(1, 57, 0, NULL);
141}
142
Enric Balletbo i Serrad565b5f2014-11-06 13:01:51 +0100143struct ti_st_plat_data wilink_pdata = {
144 .nshutdown_gpio = 137,
145 .dev_name = "/dev/ttyO1",
146 .flow_cntrl = 1,
147 .baud_rate = 300000,
148};
149
150static struct platform_device wl18xx_device = {
151 .name = "kim",
152 .id = -1,
153 .dev = {
154 .platform_data = &wilink_pdata,
155 }
156};
157
158static struct platform_device btwilink_device = {
159 .name = "btwilink",
160 .id = -1,
161};
162
163static void __init omap3_igep0020_rev_f_legacy_init(void)
Javier Martinez Canillas15c98872013-10-09 11:19:18 +0200164{
Enric Balletbo i Serrad565b5f2014-11-06 13:01:51 +0100165 legacy_init_wl12xx(0, 0, 177);
166 platform_device_register(&wl18xx_device);
167 platform_device_register(&btwilink_device);
168}
169
170static void __init omap3_igep0030_rev_g_legacy_init(void)
171{
172 legacy_init_wl12xx(0, 0, 136);
173 platform_device_register(&wl18xx_device);
174 platform_device_register(&btwilink_device);
Javier Martinez Canillas15c98872013-10-09 11:19:18 +0200175}
Tony Lindgren79b39f72013-10-11 09:20:54 -0700176
177static void __init omap3_evm_legacy_init(void)
178{
179 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 149);
180}
181
182static void __init omap3_zoom_legacy_init(void)
183{
184 legacy_init_wl12xx(WL12XX_REFCLOCK_26, 0, 162);
185}
Tony Lindgren71900312013-12-06 10:53:04 -0800186
187static void am35xx_enable_emac_int(void)
188{
189 u32 v;
190
191 v = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
192 v |= (AM35XX_CPGMAC_C0_RX_PULSE_CLR | AM35XX_CPGMAC_C0_TX_PULSE_CLR |
193 AM35XX_CPGMAC_C0_MISC_PULSE_CLR | AM35XX_CPGMAC_C0_RX_THRESH_CLR);
194 omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR);
195 omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */
196}
197
198static void am35xx_disable_emac_int(void)
199{
200 u32 v;
201
202 v = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
203 v |= (AM35XX_CPGMAC_C0_RX_PULSE_CLR | AM35XX_CPGMAC_C0_TX_PULSE_CLR);
204 omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR);
205 omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */
206}
207
208static struct emac_platform_data am35xx_emac_pdata = {
209 .interrupt_enable = am35xx_enable_emac_int,
210 .interrupt_disable = am35xx_disable_emac_int,
211};
212
Dmitry Lifshitzfb451052014-01-12 15:22:54 +0200213static void __init am35xx_emac_reset(void)
Tony Lindgren71900312013-12-06 10:53:04 -0800214{
215 u32 v;
216
217 v = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
218 v &= ~AM35XX_CPGMACSS_SW_RST;
219 omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET);
220 omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */
221}
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100222
Dmitry Lifshitzfb451052014-01-12 15:22:54 +0200223static struct gpio cm_t3517_wlan_gpios[] __initdata = {
224 { 56, GPIOF_OUT_INIT_HIGH, "wlan pwr" },
225 { 4, GPIOF_OUT_INIT_HIGH, "xcvr noe" },
226};
227
228static void __init omap3_sbc_t3517_wifi_init(void)
229{
230 int err = gpio_request_array(cm_t3517_wlan_gpios,
231 ARRAY_SIZE(cm_t3517_wlan_gpios));
232 if (err) {
233 pr_err("SBC-T3517: wl12xx gpios request failed: %d\n", err);
234 return;
235 }
236
237 gpio_export(cm_t3517_wlan_gpios[0].gpio, 0);
238 gpio_export(cm_t3517_wlan_gpios[1].gpio, 0);
239
240 msleep(100);
241 gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0);
242}
243
244static void __init omap3_sbc_t3517_legacy_init(void)
245{
Dmitry Lifshitzb62d91e2014-01-12 15:22:55 +0200246 omap3_sbc_t3x_usb_hub_init(152, "cm-t3517 usb hub");
247 omap3_sbc_t3x_usb_hub_init(98, "sb-t35 usb hub");
Dmitry Lifshitzfb451052014-01-12 15:22:54 +0200248 am35xx_emac_reset();
249 hsmmc2_internal_input_clk();
250 omap3_sbc_t3517_wifi_init();
251 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 145);
252 omap_ads7846_init(1, 57, 0, NULL);
253}
254
255static void __init am3517_evm_legacy_init(void)
256{
257 am35xx_emac_reset();
258}
Linus Torvaldsf83ccb92014-04-05 15:29:04 -0700259
Sebastian Reichel14c0a5b2014-04-07 14:28:46 +0200260static struct platform_device omap3_rom_rng_device = {
261 .name = "omap3-rom-rng",
262 .id = -1,
263 .dev = {
264 .platform_data = rx51_secure_rng_call,
265 },
266};
267
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100268static void __init nokia_n900_legacy_init(void)
269{
270 hsmmc2_internal_input_clk();
271
272 if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
273 if (IS_ENABLED(CONFIG_ARM_ERRATA_430973)) {
274 pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
275 /* set IBE to 1 */
276 rx51_secure_update_aux_cr(BIT(6), 0);
277 } else {
Joe Perches3d0cb732014-09-13 11:31:16 -0700278 pr_warn("RX-51: Not enabling ARM errata 430973 workaround\n");
279 pr_warn("Thumb binaries may crash randomly without this workaround\n");
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100280 }
Sebastian Reichel14c0a5b2014-04-07 14:28:46 +0200281
282 pr_info("RX-51: Registring OMAP3 HWRNG device\n");
283 platform_device_register(&omap3_rom_rng_device);
284
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100285 }
Tony Lindgren271d4c62014-09-18 09:03:36 -0700286
287 /* Only on some development boards */
288 gpio_request_one(164, GPIOF_OUT_INIT_LOW, "smc91x reset");
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100289}
Stefan Roese63dd5bc2014-08-29 12:40:03 +0200290
291static void __init omap3_tao3530_legacy_init(void)
292{
293 hsmmc2_internal_input_clk();
Aaro Koskinenfaf4bd42013-09-24 22:28:15 +0300294}
295#endif /* CONFIG_ARCH_OMAP3 */
296
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700297#ifdef CONFIG_ARCH_OMAP4
298static void __init omap4_sdp_legacy_init(void)
299{
Tony Lindgren5f0a2c62013-09-25 15:44:40 -0700300 legacy_init_wl12xx(WL12XX_REFCLOCK_26,
301 WL12XX_TCXOCLOCK_26, 53);
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700302}
303
304static void __init omap4_panda_legacy_init(void)
305{
Tony Lindgren5f0a2c62013-09-25 15:44:40 -0700306 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 53);
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700307}
Joachim Eastwood95eb8942014-05-12 20:32:03 +0200308
309static void __init var_som_om44_legacy_init(void)
310{
311 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 41);
312}
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700313#endif
314
Suman Anna67eb1e62014-03-05 18:24:15 -0600315#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
Suman Anna910f1672014-03-05 18:24:13 -0600316static struct iommu_platform_data omap4_iommu_pdata = {
317 .reset_name = "mmu_cache",
318 .assert_reset = omap_device_assert_hardreset,
319 .deassert_reset = omap_device_deassert_hardreset,
320};
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700321#endif
322
Imre Kaloz90f4f012014-03-03 10:02:56 +0100323#ifdef CONFIG_SOC_AM33XX
324static void __init am335x_evmsk_legacy_init(void)
325{
326 legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 31);
327}
328#endif
329
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700330#ifdef CONFIG_SOC_OMAP5
331static void __init omap5_uevm_legacy_init(void)
332{
Tony Lindgren3e7a3182013-09-25 15:44:39 -0700333}
334#endif
335
Tony Lindgren30a69ef2013-10-10 15:45:13 -0700336static struct pcs_pdata pcs_pdata;
337
338void omap_pcs_legacy_init(int irq, void (*rearm)(void))
339{
340 pcs_pdata.irq = irq;
341 pcs_pdata.rearm = rearm;
342}
343
Tony Lindgren036582f2013-11-25 15:17:09 -0800344/*
Tony Lindgrendad12d12013-12-06 10:52:58 -0800345 * GPIOs for TWL are initialized by the I2C bus and need custom
346 * handing until DSS has device tree bindings.
347 */
348void omap_auxdata_legacy_init(struct device *dev)
349{
350 if (dev->platform_data)
351 return;
352
353 if (strcmp("twl4030-gpio", dev_name(dev)))
354 return;
355
356 dev->platform_data = &twl_gpio_auxdata;
357}
358
359/*
Tony Lindgren036582f2013-11-25 15:17:09 -0800360 * Few boards still need auxdata populated before we populate
361 * the dev entries in of_platform_populate().
362 */
363static struct pdata_init auxdata_quirks[] __initdata = {
Tony Lindgrenfa590c92013-11-25 15:17:10 -0800364#ifdef CONFIG_SOC_OMAP2420
365 { "nokia,n800", omap2420_n8x0_legacy_init, },
366 { "nokia,n810", omap2420_n8x0_legacy_init, },
367 { "nokia,n810-wimax", omap2420_n8x0_legacy_init, },
368#endif
Tony Lindgren0f0cfc62013-12-18 13:13:21 -0800369#ifdef CONFIG_ARCH_OMAP3
370 { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_twl_init, },
371#endif
Tony Lindgren036582f2013-11-25 15:17:09 -0800372 { /* sentinel */ },
373};
374
Tony Lindgren8651bd82013-10-10 15:45:12 -0700375struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
Tony Lindgren036582f2013-11-25 15:17:09 -0800376#ifdef CONFIG_MACH_NOKIA_N8X0
377 OF_DEV_AUXDATA("ti,omap2420-mmc", 0x4809c000, "mmci-omap.0", NULL),
Felipe Balbie92ce892014-09-16 15:31:40 -0500378 OF_DEV_AUXDATA("menelaus", 0x72, "1-0072", &n8x0_menelaus_platform_data),
379 OF_DEV_AUXDATA("tlv320aic3x", 0x18, "2-0018", &n810_aic33_data),
Tony Lindgren036582f2013-11-25 15:17:09 -0800380#endif
Tony Lindgren30a69ef2013-10-10 15:45:13 -0700381#ifdef CONFIG_ARCH_OMAP3
382 OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002030, "48002030.pinmux", &pcs_pdata),
Tony Lindgren4b416362014-02-27 15:35:48 -0800383 OF_DEV_AUXDATA("ti,omap3-padconf", 0x480025a0, "480025a0.pinmux", &pcs_pdata),
Tony Lindgren30a69ef2013-10-10 15:45:13 -0700384 OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002a00, "48002a00.pinmux", &pcs_pdata),
Suman Anna910f1672014-03-05 18:24:13 -0600385 OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu",
386 &omap3_iommu_pdata),
Tony Lindgren71900312013-12-06 10:53:04 -0800387 /* Only on am3517 */
388 OF_DEV_AUXDATA("ti,davinci_mdio", 0x5c030000, "davinci_mdio.0", NULL),
389 OF_DEV_AUXDATA("ti,am3517-emac", 0x5c000000, "davinci_emac.0",
390 &am35xx_emac_pdata),
Tony Lindgren30a69ef2013-10-10 15:45:13 -0700391#endif
392#ifdef CONFIG_ARCH_OMAP4
393 OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a100040, "4a100040.pinmux", &pcs_pdata),
394 OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a31e040, "4a31e040.pinmux", &pcs_pdata),
395#endif
Nishanth Menon874fef72014-05-22 15:19:29 -0500396#ifdef CONFIG_SOC_OMAP5
397 OF_DEV_AUXDATA("ti,omap5-padconf", 0x4a002840, "4a002840.pinmux", &pcs_pdata),
398 OF_DEV_AUXDATA("ti,omap5-padconf", 0x4ae0c840, "4ae0c840.pinmux", &pcs_pdata),
399#endif
Nishanth Menonb0a3d0d2014-05-22 23:39:54 -0500400#ifdef CONFIG_SOC_DRA7XX
401 OF_DEV_AUXDATA("ti,dra7-padconf", 0x4a003400, "4a003400.pinmux", &pcs_pdata),
402#endif
Keerthydbbe9772014-04-07 11:54:49 +0530403#ifdef CONFIG_SOC_AM43XX
404 OF_DEV_AUXDATA("ti,am437-padconf", 0x44e10800, "44e10800.pinmux", &pcs_pdata),
405#endif
Suman Anna67eb1e62014-03-05 18:24:15 -0600406#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
Suman Anna910f1672014-03-05 18:24:13 -0600407 OF_DEV_AUXDATA("ti,omap4-iommu", 0x4a066000, "4a066000.mmu",
408 &omap4_iommu_pdata),
409 OF_DEV_AUXDATA("ti,omap4-iommu", 0x55082000, "55082000.mmu",
410 &omap4_iommu_pdata),
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700411#endif
412 { /* sentinel */ },
Tony Lindgren8651bd82013-10-10 15:45:12 -0700413};
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700414
Tony Lindgren036582f2013-11-25 15:17:09 -0800415/*
416 * Few boards still need to initialize some legacy devices with
417 * platform data until the drivers support device tree.
418 */
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700419static struct pdata_init pdata_quirks[] __initdata = {
420#ifdef CONFIG_ARCH_OMAP3
Dmitry Lifshitzfb451052014-01-12 15:22:54 +0200421 { "compulab,omap3-sbc-t3517", omap3_sbc_t3517_legacy_init, },
Dmitry Lifshitz40ecc022014-01-12 15:22:53 +0200422 { "compulab,omap3-sbc-t3530", omap3_sbc_t3530_legacy_init, },
Tony Lindgren0f0cfc62013-12-18 13:13:21 -0800423 { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, },
Sebastian Reicheldeff82e2014-02-17 22:30:58 +0100424 { "nokia,omap3-n900", nokia_n900_legacy_init, },
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700425 { "nokia,omap3-n9", hsmmc2_internal_input_clk, },
426 { "nokia,omap3-n950", hsmmc2_internal_input_clk, },
Enric Balletbo i Serrad565b5f2014-11-06 13:01:51 +0100427 { "isee,omap3-igep0020-rev-f", omap3_igep0020_rev_f_legacy_init, },
428 { "isee,omap3-igep0030-rev-g", omap3_igep0030_rev_g_legacy_init, },
Tony Lindgren79b39f72013-10-11 09:20:54 -0700429 { "ti,omap3-evm-37xx", omap3_evm_legacy_init, },
430 { "ti,omap3-zoom3", omap3_zoom_legacy_init, },
Tony Lindgren71900312013-12-06 10:53:04 -0800431 { "ti,am3517-evm", am3517_evm_legacy_init, },
Stefan Roese63dd5bc2014-08-29 12:40:03 +0200432 { "technexion,omap3-tao3530", omap3_tao3530_legacy_init, },
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700433#endif
434#ifdef CONFIG_ARCH_OMAP4
435 { "ti,omap4-sdp", omap4_sdp_legacy_init, },
436 { "ti,omap4-panda", omap4_panda_legacy_init, },
Joachim Eastwood95eb8942014-05-12 20:32:03 +0200437 { "variscite,var-dvk-om44", var_som_om44_legacy_init, },
438 { "variscite,var-stk-om44", var_som_om44_legacy_init, },
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700439#endif
Imre Kaloz90f4f012014-03-03 10:02:56 +0100440#ifdef CONFIG_SOC_AM33XX
441 { "ti,am335x-evmsk", am335x_evmsk_legacy_init, },
442#endif
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700443#ifdef CONFIG_SOC_OMAP5
444 { "ti,omap5-uevm", omap5_uevm_legacy_init, },
445#endif
446 { /* sentinel */ },
447};
448
Tony Lindgren036582f2013-11-25 15:17:09 -0800449static void pdata_quirks_check(struct pdata_init *quirks)
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700450{
Tony Lindgren6a08e1e2013-09-25 15:44:39 -0700451 while (quirks->compatible) {
452 if (of_machine_is_compatible(quirks->compatible)) {
453 if (quirks->fn)
454 quirks->fn();
455 break;
456 }
457 quirks++;
458 }
459}
Tony Lindgren036582f2013-11-25 15:17:09 -0800460
Uwe Kleine-König31957602014-09-10 10:26:17 +0200461void __init pdata_quirks_init(const struct of_device_id *omap_dt_match_table)
Tony Lindgren036582f2013-11-25 15:17:09 -0800462{
463 omap_sdrc_init(NULL, NULL);
464 pdata_quirks_check(auxdata_quirks);
465 of_platform_populate(NULL, omap_dt_match_table,
466 omap_auxdata_lookup, NULL);
467 pdata_quirks_check(pdata_quirks);
468}