linux/arch/arm/mach-omap2/pdata-quirks.c
<<
>>
Prefs
   1/*
   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>
  11#include <linux/davinci_emac.h>
  12#include <linux/gpio.h>
  13#include <linux/init.h>
  14#include <linux/kernel.h>
  15#include <linux/of_platform.h>
  16#include <linux/ti_wilink_st.h>
  17#include <linux/wl12xx.h>
  18#include <linux/mmc/card.h>
  19#include <linux/mmc/host.h>
  20#include <linux/regulator/machine.h>
  21#include <linux/regulator/fixed.h>
  22
  23#include <linux/platform_data/pinctrl-single.h>
  24#include <linux/platform_data/hsmmc-omap.h>
  25#include <linux/platform_data/iommu-omap.h>
  26#include <linux/platform_data/wkup_m3.h>
  27#include <linux/platform_data/pwm_omap_dmtimer.h>
  28#include <linux/platform_data/media/ir-rx51.h>
  29#include <linux/platform_data/asoc-ti-mcbsp.h>
  30#include <plat/dmtimer.h>
  31
  32#include "common.h"
  33#include "common-board-devices.h"
  34#include "dss-common.h"
  35#include "control.h"
  36#include "omap_device.h"
  37#include "omap-pm.h"
  38#include "omap-secure.h"
  39#include "soc.h"
  40#include "hsmmc.h"
  41
  42static struct omap_hsmmc_platform_data __maybe_unused mmc_pdata[2];
  43
  44struct pdata_init {
  45        const char *compatible;
  46        void (*fn)(void);
  47};
  48
  49static struct of_dev_auxdata omap_auxdata_lookup[];
  50static struct twl4030_gpio_platform_data twl_gpio_auxdata;
  51
  52#ifdef CONFIG_MACH_NOKIA_N8X0
  53static void __init omap2420_n8x0_legacy_init(void)
  54{
  55        omap_auxdata_lookup[0].platform_data = n8x0_legacy_init();
  56}
  57#else
  58#define omap2420_n8x0_legacy_init       NULL
  59#endif
  60
  61#ifdef CONFIG_ARCH_OMAP3
  62/*
  63 * Configures GPIOs 126, 127 and 129 to 1.8V mode instead of 3.0V
  64 * mode for MMC1 in case bootloader did not configure things.
  65 * Note that if the pins are used for MMC1, pbias-regulator
  66 * manages the IO voltage.
  67 */
  68static void __init omap3_gpio126_127_129(void)
  69{
  70        u32 reg;
  71
  72        reg = omap_ctrl_readl(OMAP343X_CONTROL_PBIAS_LITE);
  73        reg &= ~OMAP343X_PBIASLITEVMODE1;
  74        reg |= OMAP343X_PBIASLITEPWRDNZ1;
  75        omap_ctrl_writel(reg, OMAP343X_CONTROL_PBIAS_LITE);
  76        if (cpu_is_omap3630()) {
  77                reg = omap_ctrl_readl(OMAP34XX_CONTROL_WKUP_CTRL);
  78                reg |= OMAP36XX_GPIO_IO_PWRDNZ;
  79                omap_ctrl_writel(reg, OMAP34XX_CONTROL_WKUP_CTRL);
  80        }
  81}
  82
  83static void __init hsmmc2_internal_input_clk(void)
  84{
  85        u32 reg;
  86
  87        reg = omap_ctrl_readl(OMAP343X_CONTROL_DEVCONF1);
  88        reg |= OMAP2_MMCSDIO2ADPCLKISEL;
  89        omap_ctrl_writel(reg, OMAP343X_CONTROL_DEVCONF1);
  90}
  91
  92static struct iommu_platform_data omap3_iommu_pdata = {
  93        .reset_name = "mmu",
  94        .assert_reset = omap_device_assert_hardreset,
  95        .deassert_reset = omap_device_deassert_hardreset,
  96};
  97
  98static int omap3_sbc_t3730_twl_callback(struct device *dev,
  99                                           unsigned gpio,
 100                                           unsigned ngpio)
 101{
 102        int res;
 103
 104        res = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
 105                               "wlan pwr");
 106        if (res)
 107                return res;
 108
 109        gpio_export(gpio, 0);
 110
 111        return 0;
 112}
 113
 114static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name)
 115{
 116        int err = gpio_request_one(gpio, GPIOF_OUT_INIT_LOW, hub_name);
 117
 118        if (err) {
 119                pr_err("SBC-T3x: %s reset gpio request failed: %d\n",
 120                        hub_name, err);
 121                return;
 122        }
 123
 124        gpio_export(gpio, 0);
 125
 126        udelay(10);
 127        gpio_set_value(gpio, 1);
 128        msleep(1);
 129}
 130
 131static void __init omap3_sbc_t3730_twl_init(void)
 132{
 133        twl_gpio_auxdata.setup = omap3_sbc_t3730_twl_callback;
 134}
 135
 136static void __init omap3_sbc_t3730_legacy_init(void)
 137{
 138        omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
 139}
 140
 141static void __init omap3_sbc_t3530_legacy_init(void)
 142{
 143        omap3_sbc_t3x_usb_hub_init(167, "sb-t35 usb hub");
 144}
 145
 146static struct ti_st_plat_data wilink_pdata = {
 147        .nshutdown_gpio = 137,
 148        .dev_name = "/dev/ttyO1",
 149        .flow_cntrl = 1,
 150        .baud_rate = 300000,
 151};
 152
 153static struct platform_device wl18xx_device = {
 154        .name   = "kim",
 155        .id     = -1,
 156        .dev    = {
 157                .platform_data = &wilink_pdata,
 158        }
 159};
 160
 161static struct ti_st_plat_data wilink7_pdata = {
 162        .nshutdown_gpio = 162,
 163        .dev_name = "/dev/ttyO1",
 164        .flow_cntrl = 1,
 165        .baud_rate = 300000,
 166};
 167
 168static struct platform_device wl128x_device = {
 169        .name   = "kim",
 170        .id     = -1,
 171        .dev    = {
 172                .platform_data = &wilink7_pdata,
 173        }
 174};
 175
 176static struct platform_device btwilink_device = {
 177        .name   = "btwilink",
 178        .id     = -1,
 179};
 180
 181static void __init omap3_igep0020_rev_f_legacy_init(void)
 182{
 183        platform_device_register(&wl18xx_device);
 184        platform_device_register(&btwilink_device);
 185}
 186
 187static void __init omap3_igep0030_rev_g_legacy_init(void)
 188{
 189        platform_device_register(&wl18xx_device);
 190        platform_device_register(&btwilink_device);
 191}
 192
 193static void __init omap3_evm_legacy_init(void)
 194{
 195        hsmmc2_internal_input_clk();
 196}
 197
 198static void am35xx_enable_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              AM35XX_CPGMAC_C0_MISC_PULSE_CLR | AM35XX_CPGMAC_C0_RX_THRESH_CLR);
 205        omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR);
 206        omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */
 207}
 208
 209static void am35xx_disable_emac_int(void)
 210{
 211        u32 v;
 212
 213        v = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
 214        v |= (AM35XX_CPGMAC_C0_RX_PULSE_CLR | AM35XX_CPGMAC_C0_TX_PULSE_CLR);
 215        omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR);
 216        omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */
 217}
 218
 219static struct emac_platform_data am35xx_emac_pdata = {
 220        .interrupt_enable       = am35xx_enable_emac_int,
 221        .interrupt_disable      = am35xx_disable_emac_int,
 222};
 223
 224static void __init am35xx_emac_reset(void)
 225{
 226        u32 v;
 227
 228        v = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
 229        v &= ~AM35XX_CPGMACSS_SW_RST;
 230        omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET);
 231        omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */
 232}
 233
 234static struct gpio cm_t3517_wlan_gpios[] __initdata = {
 235        { 56,   GPIOF_OUT_INIT_HIGH,    "wlan pwr" },
 236        { 4,    GPIOF_OUT_INIT_HIGH,    "xcvr noe" },
 237};
 238
 239static void __init omap3_sbc_t3517_wifi_init(void)
 240{
 241        int err = gpio_request_array(cm_t3517_wlan_gpios,
 242                                ARRAY_SIZE(cm_t3517_wlan_gpios));
 243        if (err) {
 244                pr_err("SBC-T3517: wl12xx gpios request failed: %d\n", err);
 245                return;
 246        }
 247
 248        gpio_export(cm_t3517_wlan_gpios[0].gpio, 0);
 249        gpio_export(cm_t3517_wlan_gpios[1].gpio, 0);
 250
 251        msleep(100);
 252        gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0);
 253}
 254
 255static void __init omap3_sbc_t3517_legacy_init(void)
 256{
 257        omap3_sbc_t3x_usb_hub_init(152, "cm-t3517 usb hub");
 258        omap3_sbc_t3x_usb_hub_init(98, "sb-t35 usb hub");
 259        am35xx_emac_reset();
 260        hsmmc2_internal_input_clk();
 261        omap3_sbc_t3517_wifi_init();
 262}
 263
 264static void __init am3517_evm_legacy_init(void)
 265{
 266        am35xx_emac_reset();
 267}
 268
 269static struct platform_device omap3_rom_rng_device = {
 270        .name           = "omap3-rom-rng",
 271        .id             = -1,
 272        .dev    = {
 273                .platform_data  = rx51_secure_rng_call,
 274        },
 275};
 276
 277static void __init nokia_n900_legacy_init(void)
 278{
 279        hsmmc2_internal_input_clk();
 280        mmc_pdata[0].name = "external";
 281        mmc_pdata[1].name = "internal";
 282
 283        if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
 284                if (IS_ENABLED(CONFIG_ARM_ERRATA_430973)) {
 285                        pr_info("RX-51: Enabling ARM errata 430973 workaround\n");
 286                        /* set IBE to 1 */
 287                        rx51_secure_update_aux_cr(BIT(6), 0);
 288                } else {
 289                        pr_warn("RX-51: Not enabling ARM errata 430973 workaround\n");
 290                        pr_warn("Thumb binaries may crash randomly without this workaround\n");
 291                }
 292
 293                pr_info("RX-51: Registering OMAP3 HWRNG device\n");
 294                platform_device_register(&omap3_rom_rng_device);
 295        }
 296}
 297
 298static void __init omap3_tao3530_legacy_init(void)
 299{
 300        hsmmc2_internal_input_clk();
 301}
 302
 303static void __init omap3_logicpd_torpedo_init(void)
 304{
 305        omap3_gpio126_127_129();
 306        platform_device_register(&wl128x_device);
 307        platform_device_register(&btwilink_device);
 308}
 309
 310/* omap3pandora legacy devices */
 311#define PANDORA_WIFI_IRQ_GPIO           21
 312#define PANDORA_WIFI_NRESET_GPIO        23
 313
 314static struct platform_device pandora_backlight = {
 315        .name   = "pandora-backlight",
 316        .id     = -1,
 317};
 318
 319static struct regulator_consumer_supply pandora_vmmc3_supply[] = {
 320        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"),
 321};
 322
 323static struct regulator_init_data pandora_vmmc3 = {
 324        .constraints = {
 325                .valid_ops_mask         = REGULATOR_CHANGE_STATUS,
 326        },
 327        .num_consumer_supplies  = ARRAY_SIZE(pandora_vmmc3_supply),
 328        .consumer_supplies      = pandora_vmmc3_supply,
 329};
 330
 331static struct fixed_voltage_config pandora_vwlan = {
 332        .supply_name            = "vwlan",
 333        .microvolts             = 1800000, /* 1.8V */
 334        .gpio                   = PANDORA_WIFI_NRESET_GPIO,
 335        .startup_delay          = 50000, /* 50ms */
 336        .enable_high            = 1,
 337        .init_data              = &pandora_vmmc3,
 338};
 339
 340static struct platform_device pandora_vwlan_device = {
 341        .name           = "reg-fixed-voltage",
 342        .id             = 1,
 343        .dev = {
 344                .platform_data = &pandora_vwlan,
 345        },
 346};
 347
 348static void pandora_wl1251_init_card(struct mmc_card *card)
 349{
 350        /*
 351         * We have TI wl1251 attached to MMC3. Pass this information to
 352         * SDIO core because it can't be probed by normal methods.
 353         */
 354        if (card->type == MMC_TYPE_SDIO || card->type == MMC_TYPE_SD_COMBO) {
 355                card->quirks |= MMC_QUIRK_NONSTD_SDIO;
 356                card->cccr.wide_bus = 1;
 357                card->cis.vendor = 0x104c;
 358                card->cis.device = 0x9066;
 359                card->cis.blksize = 512;
 360                card->cis.max_dtr = 24000000;
 361                card->ocr = 0x80;
 362        }
 363}
 364
 365static struct omap2_hsmmc_info pandora_mmc3[] = {
 366        {
 367                .mmc            = 3,
 368                .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
 369                .gpio_cd        = -EINVAL,
 370                .gpio_wp        = -EINVAL,
 371                .init_card      = pandora_wl1251_init_card,
 372        },
 373        {}      /* Terminator */
 374};
 375
 376static void __init pandora_wl1251_init(void)
 377{
 378        struct wl1251_platform_data pandora_wl1251_pdata;
 379        int ret;
 380
 381        memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
 382
 383        pandora_wl1251_pdata.power_gpio = -1;
 384
 385        ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
 386        if (ret < 0)
 387                goto fail;
 388
 389        pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
 390        if (pandora_wl1251_pdata.irq < 0)
 391                goto fail_irq;
 392
 393        pandora_wl1251_pdata.use_eeprom = true;
 394        ret = wl1251_set_platform_data(&pandora_wl1251_pdata);
 395        if (ret < 0)
 396                goto fail_irq;
 397
 398        return;
 399
 400fail_irq:
 401        gpio_free(PANDORA_WIFI_IRQ_GPIO);
 402fail:
 403        pr_err("wl1251 board initialisation failed\n");
 404}
 405
 406static void __init omap3_pandora_legacy_init(void)
 407{
 408        platform_device_register(&pandora_backlight);
 409        platform_device_register(&pandora_vwlan_device);
 410        omap_hsmmc_init(pandora_mmc3);
 411        omap_hsmmc_late_init(pandora_mmc3);
 412        pandora_wl1251_init();
 413}
 414#endif /* CONFIG_ARCH_OMAP3 */
 415
 416#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
 417static struct iommu_platform_data omap4_iommu_pdata = {
 418        .reset_name = "mmu_cache",
 419        .assert_reset = omap_device_assert_hardreset,
 420        .deassert_reset = omap_device_deassert_hardreset,
 421};
 422#endif
 423
 424#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
 425static struct wkup_m3_platform_data wkup_m3_data = {
 426        .reset_name = "wkup_m3",
 427        .assert_reset = omap_device_assert_hardreset,
 428        .deassert_reset = omap_device_deassert_hardreset,
 429};
 430#endif
 431
 432#ifdef CONFIG_SOC_OMAP5
 433static void __init omap5_uevm_legacy_init(void)
 434{
 435}
 436#endif
 437
 438static struct pcs_pdata pcs_pdata;
 439
 440void omap_pcs_legacy_init(int irq, void (*rearm)(void))
 441{
 442        pcs_pdata.irq = irq;
 443        pcs_pdata.rearm = rearm;
 444}
 445
 446/*
 447 * GPIOs for TWL are initialized by the I2C bus and need custom
 448 * handing until DSS has device tree bindings.
 449 */
 450void omap_auxdata_legacy_init(struct device *dev)
 451{
 452        if (dev->platform_data)
 453                return;
 454
 455        if (strcmp("twl4030-gpio", dev_name(dev)))
 456                return;
 457
 458        dev->platform_data = &twl_gpio_auxdata;
 459}
 460
 461/* Dual mode timer PWM callbacks platdata */
 462#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
 463static struct pwm_omap_dmtimer_pdata pwm_dmtimer_pdata = {
 464        .request_by_node = omap_dm_timer_request_by_node,
 465        .request_specific = omap_dm_timer_request_specific,
 466        .request = omap_dm_timer_request,
 467        .set_source = omap_dm_timer_set_source,
 468        .get_irq = omap_dm_timer_get_irq,
 469        .set_int_enable = omap_dm_timer_set_int_enable,
 470        .set_int_disable = omap_dm_timer_set_int_disable,
 471        .free = omap_dm_timer_free,
 472        .enable = omap_dm_timer_enable,
 473        .disable = omap_dm_timer_disable,
 474        .get_fclk = omap_dm_timer_get_fclk,
 475        .start = omap_dm_timer_start,
 476        .stop = omap_dm_timer_stop,
 477        .set_load = omap_dm_timer_set_load,
 478        .set_match = omap_dm_timer_set_match,
 479        .set_pwm = omap_dm_timer_set_pwm,
 480        .set_prescaler = omap_dm_timer_set_prescaler,
 481        .read_counter = omap_dm_timer_read_counter,
 482        .write_counter = omap_dm_timer_write_counter,
 483        .read_status = omap_dm_timer_read_status,
 484        .write_status = omap_dm_timer_write_status,
 485};
 486#endif
 487
 488static struct lirc_rx51_platform_data __maybe_unused rx51_lirc_data = {
 489        .set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat,
 490};
 491
 492static struct platform_device __maybe_unused rx51_lirc_device = {
 493        .name           = "lirc_rx51",
 494        .id             = -1,
 495        .dev            = {
 496                .platform_data = &rx51_lirc_data,
 497        },
 498};
 499
 500#if IS_ENABLED(CONFIG_SND_OMAP_SOC_MCBSP)
 501static struct omap_mcbsp_platform_data mcbsp_pdata;
 502static void __init omap3_mcbsp_init(void)
 503{
 504        omap3_mcbsp_init_pdata_callback(&mcbsp_pdata);
 505}
 506#else
 507static void __init omap3_mcbsp_init(void) {}
 508#endif
 509
 510/*
 511 * Few boards still need auxdata populated before we populate
 512 * the dev entries in of_platform_populate().
 513 */
 514static struct pdata_init auxdata_quirks[] __initdata = {
 515#ifdef CONFIG_SOC_OMAP2420
 516        { "nokia,n800", omap2420_n8x0_legacy_init, },
 517        { "nokia,n810", omap2420_n8x0_legacy_init, },
 518        { "nokia,n810-wimax", omap2420_n8x0_legacy_init, },
 519#endif
 520#ifdef CONFIG_ARCH_OMAP3
 521        { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_twl_init, },
 522#endif
 523        { /* sentinel */ },
 524};
 525
 526static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
 527#ifdef CONFIG_MACH_NOKIA_N8X0
 528        OF_DEV_AUXDATA("ti,omap2420-mmc", 0x4809c000, "mmci-omap.0", NULL),
 529        OF_DEV_AUXDATA("menelaus", 0x72, "1-0072", &n8x0_menelaus_platform_data),
 530        OF_DEV_AUXDATA("tlv320aic3x", 0x18, "2-0018", &n810_aic33_data),
 531#endif
 532#ifdef CONFIG_ARCH_OMAP3
 533        OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu",
 534                       &omap3_iommu_pdata),
 535        OF_DEV_AUXDATA("ti,omap3-hsmmc", 0x4809c000, "4809c000.mmc", &mmc_pdata[0]),
 536        OF_DEV_AUXDATA("ti,omap3-hsmmc", 0x480b4000, "480b4000.mmc", &mmc_pdata[1]),
 537        OF_DEV_AUXDATA("nokia,n900-ir", 0, "n900-ir", &rx51_lirc_data),
 538        /* Only on am3517 */
 539        OF_DEV_AUXDATA("ti,davinci_mdio", 0x5c030000, "davinci_mdio.0", NULL),
 540        OF_DEV_AUXDATA("ti,am3517-emac", 0x5c000000, "davinci_emac.0",
 541                       &am35xx_emac_pdata),
 542        /* McBSP modules with sidetone core */
 543#if IS_ENABLED(CONFIG_SND_OMAP_SOC_MCBSP)
 544        OF_DEV_AUXDATA("ti,omap3-mcbsp", 0x49022000, "49022000.mcbsp", &mcbsp_pdata),
 545        OF_DEV_AUXDATA("ti,omap3-mcbsp", 0x49024000, "49024000.mcbsp", &mcbsp_pdata),
 546#endif
 547#endif
 548#ifdef CONFIG_SOC_AM33XX
 549        OF_DEV_AUXDATA("ti,am3352-wkup-m3", 0x44d00000, "44d00000.wkup_m3",
 550                       &wkup_m3_data),
 551#endif
 552#ifdef CONFIG_SOC_AM43XX
 553        OF_DEV_AUXDATA("ti,am4372-wkup-m3", 0x44d00000, "44d00000.wkup_m3",
 554                       &wkup_m3_data),
 555#endif
 556#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
 557        OF_DEV_AUXDATA("ti,omap-dmtimer-pwm", 0, NULL, &pwm_dmtimer_pdata),
 558#endif
 559#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
 560        OF_DEV_AUXDATA("ti,omap4-iommu", 0x4a066000, "4a066000.mmu",
 561                       &omap4_iommu_pdata),
 562        OF_DEV_AUXDATA("ti,omap4-iommu", 0x55082000, "55082000.mmu",
 563                       &omap4_iommu_pdata),
 564#endif
 565        /* Common auxdata */
 566        OF_DEV_AUXDATA("pinctrl-single", 0, NULL, &pcs_pdata),
 567        { /* sentinel */ },
 568};
 569
 570/*
 571 * Few boards still need to initialize some legacy devices with
 572 * platform data until the drivers support device tree.
 573 */
 574static struct pdata_init pdata_quirks[] __initdata = {
 575#ifdef CONFIG_ARCH_OMAP3
 576        { "compulab,omap3-sbc-t3517", omap3_sbc_t3517_legacy_init, },
 577        { "compulab,omap3-sbc-t3530", omap3_sbc_t3530_legacy_init, },
 578        { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, },
 579        { "nokia,omap3-n900", nokia_n900_legacy_init, },
 580        { "nokia,omap3-n9", hsmmc2_internal_input_clk, },
 581        { "nokia,omap3-n950", hsmmc2_internal_input_clk, },
 582        { "isee,omap3-igep0020-rev-f", omap3_igep0020_rev_f_legacy_init, },
 583        { "isee,omap3-igep0030-rev-g", omap3_igep0030_rev_g_legacy_init, },
 584        { "logicpd,dm3730-torpedo-devkit", omap3_logicpd_torpedo_init, },
 585        { "ti,omap3-evm-37xx", omap3_evm_legacy_init, },
 586        { "ti,am3517-evm", am3517_evm_legacy_init, },
 587        { "technexion,omap3-tao3530", omap3_tao3530_legacy_init, },
 588        { "openpandora,omap3-pandora-600mhz", omap3_pandora_legacy_init, },
 589        { "openpandora,omap3-pandora-1ghz", omap3_pandora_legacy_init, },
 590#endif
 591#ifdef CONFIG_SOC_OMAP5
 592        { "ti,omap5-uevm", omap5_uevm_legacy_init, },
 593#endif
 594        { /* sentinel */ },
 595};
 596
 597static void pdata_quirks_check(struct pdata_init *quirks)
 598{
 599        while (quirks->compatible) {
 600                if (of_machine_is_compatible(quirks->compatible)) {
 601                        if (quirks->fn)
 602                                quirks->fn();
 603                        break;
 604                }
 605                quirks++;
 606        }
 607}
 608
 609void __init pdata_quirks_init(const struct of_device_id *omap_dt_match_table)
 610{
 611        /*
 612         * We still need this for omap2420 and omap3 PM to work, others are
 613         * using drivers/misc/sram.c already.
 614         */
 615        if (of_machine_is_compatible("ti,omap2420") ||
 616            of_machine_is_compatible("ti,omap3"))
 617                omap_sdrc_init(NULL, NULL);
 618
 619        if (of_machine_is_compatible("ti,omap3"))
 620                omap3_mcbsp_init();
 621        pdata_quirks_check(auxdata_quirks);
 622        of_platform_populate(NULL, omap_dt_match_table,
 623                             omap_auxdata_lookup, NULL);
 624        pdata_quirks_check(pdata_quirks);
 625}
 626