linux/arch/arm/mach-davinci/board-da850-evm.c
<<
>>
Prefs
   1/*
   2 * TI DA850/OMAP-L138 EVM board
   3 *
   4 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
   5 *
   6 * Derived from: arch/arm/mach-davinci/board-da830-evm.c
   7 * Original Copyrights follow:
   8 *
   9 * 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under
  10 * the terms of the GNU General Public License version 2. This program
  11 * is licensed "as is" without any warranty of any kind, whether express
  12 * or implied.
  13 */
  14#include <linux/console.h>
  15#include <linux/delay.h>
  16#include <linux/gpio.h>
  17#include <linux/gpio_keys.h>
  18#include <linux/gpio/machine.h>
  19#include <linux/init.h>
  20#include <linux/kernel.h>
  21#include <linux/leds.h>
  22#include <linux/i2c.h>
  23#include <linux/platform_data/at24.h>
  24#include <linux/platform_data/pca953x.h>
  25#include <linux/input.h>
  26#include <linux/input/tps6507x-ts.h>
  27#include <linux/mfd/tps6507x.h>
  28#include <linux/mtd/mtd.h>
  29#include <linux/mtd/rawnand.h>
  30#include <linux/mtd/partitions.h>
  31#include <linux/mtd/physmap.h>
  32#include <linux/platform_device.h>
  33#include <linux/platform_data/gpio-davinci.h>
  34#include <linux/platform_data/mtd-davinci.h>
  35#include <linux/platform_data/mtd-davinci-aemif.h>
  36#include <linux/platform_data/spi-davinci.h>
  37#include <linux/platform_data/uio_pruss.h>
  38#include <linux/regulator/machine.h>
  39#include <linux/regulator/tps6507x.h>
  40#include <linux/regulator/fixed.h>
  41#include <linux/spi/spi.h>
  42#include <linux/spi/flash.h>
  43
  44#include <mach/common.h>
  45#include "cp_intc.h"
  46#include <mach/da8xx.h>
  47#include <mach/mux.h>
  48#include "sram.h"
  49
  50#include <asm/mach-types.h>
  51#include <asm/mach/arch.h>
  52#include <asm/system_info.h>
  53
  54#include <media/i2c/tvp514x.h>
  55#include <media/i2c/adv7343.h>
  56
  57#define DA850_EVM_PHY_ID                "davinci_mdio-0:00"
  58#define DA850_LCD_PWR_PIN               GPIO_TO_PIN(2, 8)
  59#define DA850_LCD_BL_PIN                GPIO_TO_PIN(2, 15)
  60
  61#define DA850_MII_MDIO_CLKEN_PIN        GPIO_TO_PIN(2, 6)
  62
  63static struct mtd_partition da850evm_spiflash_part[] = {
  64        [0] = {
  65                .name = "UBL",
  66                .offset = 0,
  67                .size = SZ_64K,
  68                .mask_flags = MTD_WRITEABLE,
  69        },
  70        [1] = {
  71                .name = "U-Boot",
  72                .offset = MTDPART_OFS_APPEND,
  73                .size = SZ_512K,
  74                .mask_flags = MTD_WRITEABLE,
  75        },
  76        [2] = {
  77                .name = "U-Boot-Env",
  78                .offset = MTDPART_OFS_APPEND,
  79                .size = SZ_64K,
  80                .mask_flags = MTD_WRITEABLE,
  81        },
  82        [3] = {
  83                .name = "Kernel",
  84                .offset = MTDPART_OFS_APPEND,
  85                .size = SZ_2M + SZ_512K,
  86                .mask_flags = 0,
  87        },
  88        [4] = {
  89                .name = "Filesystem",
  90                .offset = MTDPART_OFS_APPEND,
  91                .size = SZ_4M,
  92                .mask_flags = 0,
  93        },
  94        [5] = {
  95                .name = "MAC-Address",
  96                .offset = SZ_8M - SZ_64K,
  97                .size = SZ_64K,
  98                .mask_flags = MTD_WRITEABLE,
  99        },
 100};
 101
 102static struct flash_platform_data da850evm_spiflash_data = {
 103        .name           = "m25p80",
 104        .parts          = da850evm_spiflash_part,
 105        .nr_parts       = ARRAY_SIZE(da850evm_spiflash_part),
 106        .type           = "m25p64",
 107};
 108
 109static struct davinci_spi_config da850evm_spiflash_cfg = {
 110        .io_type        = SPI_IO_TYPE_DMA,
 111        .c2tdelay       = 8,
 112        .t2cdelay       = 8,
 113};
 114
 115static struct spi_board_info da850evm_spi_info[] = {
 116        {
 117                .modalias               = "m25p80",
 118                .platform_data          = &da850evm_spiflash_data,
 119                .controller_data        = &da850evm_spiflash_cfg,
 120                .mode                   = SPI_MODE_0,
 121                .max_speed_hz           = 30000000,
 122                .bus_num                = 1,
 123                .chip_select            = 0,
 124        },
 125};
 126
 127#ifdef CONFIG_MTD
 128static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
 129{
 130        char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
 131        size_t retlen;
 132
 133        if (!strcmp(mtd->name, "MAC-Address")) {
 134                mtd_read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
 135                if (retlen == ETH_ALEN)
 136                        pr_info("Read MAC addr from SPI Flash: %pM\n",
 137                                mac_addr);
 138        }
 139}
 140
 141static struct mtd_notifier da850evm_spi_notifier = {
 142        .add    = da850_evm_m25p80_notify_add,
 143};
 144
 145static void da850_evm_setup_mac_addr(void)
 146{
 147        register_mtd_user(&da850evm_spi_notifier);
 148}
 149#else
 150static void da850_evm_setup_mac_addr(void) { }
 151#endif
 152
 153static struct mtd_partition da850_evm_norflash_partition[] = {
 154        {
 155                .name           = "bootloaders + env",
 156                .offset         = 0,
 157                .size           = SZ_512K,
 158                .mask_flags     = MTD_WRITEABLE,
 159        },
 160        {
 161                .name           = "kernel",
 162                .offset         = MTDPART_OFS_APPEND,
 163                .size           = SZ_2M,
 164                .mask_flags     = 0,
 165        },
 166        {
 167                .name           = "filesystem",
 168                .offset         = MTDPART_OFS_APPEND,
 169                .size           = MTDPART_SIZ_FULL,
 170                .mask_flags     = 0,
 171        },
 172};
 173
 174static struct physmap_flash_data da850_evm_norflash_data = {
 175        .width          = 2,
 176        .parts          = da850_evm_norflash_partition,
 177        .nr_parts       = ARRAY_SIZE(da850_evm_norflash_partition),
 178};
 179
 180static struct resource da850_evm_norflash_resource[] = {
 181        {
 182                .start  = DA8XX_AEMIF_CS2_BASE,
 183                .end    = DA8XX_AEMIF_CS2_BASE + SZ_32M - 1,
 184                .flags  = IORESOURCE_MEM,
 185        },
 186};
 187
 188static struct platform_device da850_evm_norflash_device = {
 189        .name           = "physmap-flash",
 190        .id             = 0,
 191        .dev            = {
 192                .platform_data  = &da850_evm_norflash_data,
 193        },
 194        .num_resources  = 1,
 195        .resource       = da850_evm_norflash_resource,
 196};
 197
 198/* DA850/OMAP-L138 EVM includes a 512 MByte large-page NAND flash
 199 * (128K blocks). It may be used instead of the (default) SPI flash
 200 * to boot, using TI's tools to install the secondary boot loader
 201 * (UBL) and U-Boot.
 202 */
 203static struct mtd_partition da850_evm_nandflash_partition[] = {
 204        {
 205                .name           = "u-boot env",
 206                .offset         = 0,
 207                .size           = SZ_128K,
 208                .mask_flags     = MTD_WRITEABLE,
 209         },
 210        {
 211                .name           = "UBL",
 212                .offset         = MTDPART_OFS_APPEND,
 213                .size           = SZ_128K,
 214                .mask_flags     = MTD_WRITEABLE,
 215        },
 216        {
 217                .name           = "u-boot",
 218                .offset         = MTDPART_OFS_APPEND,
 219                .size           = 4 * SZ_128K,
 220                .mask_flags     = MTD_WRITEABLE,
 221        },
 222        {
 223                .name           = "kernel",
 224                .offset         = 0x200000,
 225                .size           = SZ_2M,
 226                .mask_flags     = 0,
 227        },
 228        {
 229                .name           = "filesystem",
 230                .offset         = MTDPART_OFS_APPEND,
 231                .size           = MTDPART_SIZ_FULL,
 232                .mask_flags     = 0,
 233        },
 234};
 235
 236static struct davinci_aemif_timing da850_evm_nandflash_timing = {
 237        .wsetup         = 24,
 238        .wstrobe        = 21,
 239        .whold          = 14,
 240        .rsetup         = 19,
 241        .rstrobe        = 50,
 242        .rhold          = 0,
 243        .ta             = 20,
 244};
 245
 246static struct davinci_nand_pdata da850_evm_nandflash_data = {
 247        .parts          = da850_evm_nandflash_partition,
 248        .nr_parts       = ARRAY_SIZE(da850_evm_nandflash_partition),
 249        .ecc_mode       = NAND_ECC_HW,
 250        .ecc_bits       = 4,
 251        .bbt_options    = NAND_BBT_USE_FLASH,
 252        .timing         = &da850_evm_nandflash_timing,
 253};
 254
 255static struct resource da850_evm_nandflash_resource[] = {
 256        {
 257                .start  = DA8XX_AEMIF_CS3_BASE,
 258                .end    = DA8XX_AEMIF_CS3_BASE + SZ_512K + 2 * SZ_1K - 1,
 259                .flags  = IORESOURCE_MEM,
 260        },
 261        {
 262                .start  = DA8XX_AEMIF_CTL_BASE,
 263                .end    = DA8XX_AEMIF_CTL_BASE + SZ_32K - 1,
 264                .flags  = IORESOURCE_MEM,
 265        },
 266};
 267
 268static struct platform_device da850_evm_nandflash_device = {
 269        .name           = "davinci_nand",
 270        .id             = 1,
 271        .dev            = {
 272                .platform_data  = &da850_evm_nandflash_data,
 273        },
 274        .num_resources  = ARRAY_SIZE(da850_evm_nandflash_resource),
 275        .resource       = da850_evm_nandflash_resource,
 276};
 277
 278static struct platform_device *da850_evm_devices[] = {
 279        &da850_evm_nandflash_device,
 280        &da850_evm_norflash_device,
 281};
 282
 283#define DA8XX_AEMIF_CE2CFG_OFFSET       0x10
 284#define DA8XX_AEMIF_ASIZE_16BIT         0x1
 285
 286static void __init da850_evm_init_nor(void)
 287{
 288        void __iomem *aemif_addr;
 289
 290        aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);
 291
 292        /* Configure data bus width of CS2 to 16 bit */
 293        writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |
 294                DA8XX_AEMIF_ASIZE_16BIT,
 295                aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);
 296
 297        iounmap(aemif_addr);
 298}
 299
 300static const short da850_evm_nand_pins[] = {
 301        DA850_EMA_D_0, DA850_EMA_D_1, DA850_EMA_D_2, DA850_EMA_D_3,
 302        DA850_EMA_D_4, DA850_EMA_D_5, DA850_EMA_D_6, DA850_EMA_D_7,
 303        DA850_EMA_A_1, DA850_EMA_A_2, DA850_NEMA_CS_3, DA850_NEMA_CS_4,
 304        DA850_NEMA_WE, DA850_NEMA_OE,
 305        -1
 306};
 307
 308static const short da850_evm_nor_pins[] = {
 309        DA850_EMA_BA_1, DA850_EMA_CLK, DA850_EMA_WAIT_1, DA850_NEMA_CS_2,
 310        DA850_NEMA_WE, DA850_NEMA_OE, DA850_EMA_D_0, DA850_EMA_D_1,
 311        DA850_EMA_D_2, DA850_EMA_D_3, DA850_EMA_D_4, DA850_EMA_D_5,
 312        DA850_EMA_D_6, DA850_EMA_D_7, DA850_EMA_D_8, DA850_EMA_D_9,
 313        DA850_EMA_D_10, DA850_EMA_D_11, DA850_EMA_D_12, DA850_EMA_D_13,
 314        DA850_EMA_D_14, DA850_EMA_D_15, DA850_EMA_A_0, DA850_EMA_A_1,
 315        DA850_EMA_A_2, DA850_EMA_A_3, DA850_EMA_A_4, DA850_EMA_A_5,
 316        DA850_EMA_A_6, DA850_EMA_A_7, DA850_EMA_A_8, DA850_EMA_A_9,
 317        DA850_EMA_A_10, DA850_EMA_A_11, DA850_EMA_A_12, DA850_EMA_A_13,
 318        DA850_EMA_A_14, DA850_EMA_A_15, DA850_EMA_A_16, DA850_EMA_A_17,
 319        DA850_EMA_A_18, DA850_EMA_A_19, DA850_EMA_A_20, DA850_EMA_A_21,
 320        DA850_EMA_A_22, DA850_EMA_A_23,
 321        -1
 322};
 323
 324#define HAS_MMC         IS_ENABLED(CONFIG_MMC_DAVINCI)
 325
 326static inline void da850_evm_setup_nor_nand(void)
 327{
 328        int ret = 0;
 329
 330        if (!HAS_MMC) {
 331                ret = davinci_cfg_reg_list(da850_evm_nand_pins);
 332                if (ret)
 333                        pr_warn("%s: NAND mux setup failed: %d\n",
 334                                __func__, ret);
 335
 336                ret = davinci_cfg_reg_list(da850_evm_nor_pins);
 337                if (ret)
 338                        pr_warn("%s: NOR mux setup failed: %d\n",
 339                                __func__, ret);
 340
 341                da850_evm_init_nor();
 342
 343                platform_add_devices(da850_evm_devices,
 344                                        ARRAY_SIZE(da850_evm_devices));
 345
 346                if (davinci_aemif_setup(&da850_evm_nandflash_device))
 347                        pr_warn("%s: Cannot configure AEMIF.\n", __func__);
 348        }
 349}
 350
 351#ifdef CONFIG_DA850_UI_RMII
 352static inline void da850_evm_setup_emac_rmii(int rmii_sel)
 353{
 354        struct davinci_soc_info *soc_info = &davinci_soc_info;
 355
 356        soc_info->emac_pdata->rmii_en = 1;
 357        gpio_set_value_cansleep(rmii_sel, 0);
 358}
 359#else
 360static inline void da850_evm_setup_emac_rmii(int rmii_sel) { }
 361#endif
 362
 363
 364#define DA850_KEYS_DEBOUNCE_MS  10
 365/*
 366 * At 200ms polling interval it is possible to miss an
 367 * event by tapping very lightly on the push button but most
 368 * pushes do result in an event; longer intervals require the
 369 * user to hold the button whereas shorter intervals require
 370 * more CPU time for polling.
 371 */
 372#define DA850_GPIO_KEYS_POLL_MS 200
 373
 374enum da850_evm_ui_exp_pins {
 375        DA850_EVM_UI_EXP_SEL_C = 5,
 376        DA850_EVM_UI_EXP_SEL_B,
 377        DA850_EVM_UI_EXP_SEL_A,
 378        DA850_EVM_UI_EXP_PB8,
 379        DA850_EVM_UI_EXP_PB7,
 380        DA850_EVM_UI_EXP_PB6,
 381        DA850_EVM_UI_EXP_PB5,
 382        DA850_EVM_UI_EXP_PB4,
 383        DA850_EVM_UI_EXP_PB3,
 384        DA850_EVM_UI_EXP_PB2,
 385        DA850_EVM_UI_EXP_PB1,
 386};
 387
 388static const char * const da850_evm_ui_exp[] = {
 389        [DA850_EVM_UI_EXP_SEL_C]        = "sel_c",
 390        [DA850_EVM_UI_EXP_SEL_B]        = "sel_b",
 391        [DA850_EVM_UI_EXP_SEL_A]        = "sel_a",
 392        [DA850_EVM_UI_EXP_PB8]          = "pb8",
 393        [DA850_EVM_UI_EXP_PB7]          = "pb7",
 394        [DA850_EVM_UI_EXP_PB6]          = "pb6",
 395        [DA850_EVM_UI_EXP_PB5]          = "pb5",
 396        [DA850_EVM_UI_EXP_PB4]          = "pb4",
 397        [DA850_EVM_UI_EXP_PB3]          = "pb3",
 398        [DA850_EVM_UI_EXP_PB2]          = "pb2",
 399        [DA850_EVM_UI_EXP_PB1]          = "pb1",
 400};
 401
 402#define DA850_N_UI_PB           8
 403
 404static struct gpio_keys_button da850_evm_ui_keys[] = {
 405        [0 ... DA850_N_UI_PB - 1] = {
 406                .type                   = EV_KEY,
 407                .active_low             = 1,
 408                .wakeup                 = 0,
 409                .debounce_interval      = DA850_KEYS_DEBOUNCE_MS,
 410                .code                   = -1, /* assigned at runtime */
 411                .gpio                   = -1, /* assigned at runtime */
 412                .desc                   = NULL, /* assigned at runtime */
 413        },
 414};
 415
 416static struct gpio_keys_platform_data da850_evm_ui_keys_pdata = {
 417        .buttons = da850_evm_ui_keys,
 418        .nbuttons = ARRAY_SIZE(da850_evm_ui_keys),
 419        .poll_interval = DA850_GPIO_KEYS_POLL_MS,
 420};
 421
 422static struct platform_device da850_evm_ui_keys_device = {
 423        .name = "gpio-keys-polled",
 424        .id = 0,
 425        .dev = {
 426                .platform_data = &da850_evm_ui_keys_pdata
 427        },
 428};
 429
 430static void da850_evm_ui_keys_init(unsigned gpio)
 431{
 432        int i;
 433        struct gpio_keys_button *button;
 434
 435        for (i = 0; i < DA850_N_UI_PB; i++) {
 436                button = &da850_evm_ui_keys[i];
 437                button->code = KEY_F8 - i;
 438                button->desc = da850_evm_ui_exp[DA850_EVM_UI_EXP_PB8 + i];
 439                button->gpio = gpio + DA850_EVM_UI_EXP_PB8 + i;
 440        }
 441}
 442
 443#ifdef CONFIG_DA850_UI_SD_VIDEO_PORT
 444static inline void da850_evm_setup_video_port(int video_sel)
 445{
 446        gpio_set_value_cansleep(video_sel, 0);
 447}
 448#else
 449static inline void da850_evm_setup_video_port(int video_sel) { }
 450#endif
 451
 452static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
 453                                                unsigned ngpio, void *c)
 454{
 455        int sel_a, sel_b, sel_c, ret;
 456
 457        sel_a = gpio + DA850_EVM_UI_EXP_SEL_A;
 458        sel_b = gpio + DA850_EVM_UI_EXP_SEL_B;
 459        sel_c = gpio + DA850_EVM_UI_EXP_SEL_C;
 460
 461        ret = gpio_request(sel_a, da850_evm_ui_exp[DA850_EVM_UI_EXP_SEL_A]);
 462        if (ret) {
 463                pr_warn("Cannot open UI expander pin %d\n", sel_a);
 464                goto exp_setup_sela_fail;
 465        }
 466
 467        ret = gpio_request(sel_b, da850_evm_ui_exp[DA850_EVM_UI_EXP_SEL_B]);
 468        if (ret) {
 469                pr_warn("Cannot open UI expander pin %d\n", sel_b);
 470                goto exp_setup_selb_fail;
 471        }
 472
 473        ret = gpio_request(sel_c, da850_evm_ui_exp[DA850_EVM_UI_EXP_SEL_C]);
 474        if (ret) {
 475                pr_warn("Cannot open UI expander pin %d\n", sel_c);
 476                goto exp_setup_selc_fail;
 477        }
 478
 479        /* deselect all functionalities */
 480        gpio_direction_output(sel_a, 1);
 481        gpio_direction_output(sel_b, 1);
 482        gpio_direction_output(sel_c, 1);
 483
 484        da850_evm_ui_keys_init(gpio);
 485        ret = platform_device_register(&da850_evm_ui_keys_device);
 486        if (ret) {
 487                pr_warn("Could not register UI GPIO expander push-buttons");
 488                goto exp_setup_keys_fail;
 489        }
 490
 491        pr_info("DA850/OMAP-L138 EVM UI card detected\n");
 492
 493        da850_evm_setup_nor_nand();
 494
 495        da850_evm_setup_emac_rmii(sel_a);
 496
 497        da850_evm_setup_video_port(sel_c);
 498
 499        return 0;
 500
 501exp_setup_keys_fail:
 502        gpio_free(sel_c);
 503exp_setup_selc_fail:
 504        gpio_free(sel_b);
 505exp_setup_selb_fail:
 506        gpio_free(sel_a);
 507exp_setup_sela_fail:
 508        return ret;
 509}
 510
 511static int da850_evm_ui_expander_teardown(struct i2c_client *client,
 512                                        unsigned gpio, unsigned ngpio, void *c)
 513{
 514        platform_device_unregister(&da850_evm_ui_keys_device);
 515
 516        /* deselect all functionalities */
 517        gpio_set_value_cansleep(gpio + DA850_EVM_UI_EXP_SEL_C, 1);
 518        gpio_set_value_cansleep(gpio + DA850_EVM_UI_EXP_SEL_B, 1);
 519        gpio_set_value_cansleep(gpio + DA850_EVM_UI_EXP_SEL_A, 1);
 520
 521        gpio_free(gpio + DA850_EVM_UI_EXP_SEL_C);
 522        gpio_free(gpio + DA850_EVM_UI_EXP_SEL_B);
 523        gpio_free(gpio + DA850_EVM_UI_EXP_SEL_A);
 524
 525        return 0;
 526}
 527
 528/* assign the baseboard expander's GPIOs after the UI board's */
 529#define DA850_UI_EXPANDER_N_GPIOS ARRAY_SIZE(da850_evm_ui_exp)
 530#define DA850_BB_EXPANDER_GPIO_BASE (DAVINCI_N_GPIO + DA850_UI_EXPANDER_N_GPIOS)
 531
 532enum da850_evm_bb_exp_pins {
 533        DA850_EVM_BB_EXP_DEEP_SLEEP_EN = 0,
 534        DA850_EVM_BB_EXP_SW_RST,
 535        DA850_EVM_BB_EXP_TP_23,
 536        DA850_EVM_BB_EXP_TP_22,
 537        DA850_EVM_BB_EXP_TP_21,
 538        DA850_EVM_BB_EXP_USER_PB1,
 539        DA850_EVM_BB_EXP_USER_LED2,
 540        DA850_EVM_BB_EXP_USER_LED1,
 541        DA850_EVM_BB_EXP_USER_SW1,
 542        DA850_EVM_BB_EXP_USER_SW2,
 543        DA850_EVM_BB_EXP_USER_SW3,
 544        DA850_EVM_BB_EXP_USER_SW4,
 545        DA850_EVM_BB_EXP_USER_SW5,
 546        DA850_EVM_BB_EXP_USER_SW6,
 547        DA850_EVM_BB_EXP_USER_SW7,
 548        DA850_EVM_BB_EXP_USER_SW8
 549};
 550
 551static const char * const da850_evm_bb_exp[] = {
 552        [DA850_EVM_BB_EXP_DEEP_SLEEP_EN]        = "deep_sleep_en",
 553        [DA850_EVM_BB_EXP_SW_RST]               = "sw_rst",
 554        [DA850_EVM_BB_EXP_TP_23]                = "tp_23",
 555        [DA850_EVM_BB_EXP_TP_22]                = "tp_22",
 556        [DA850_EVM_BB_EXP_TP_21]                = "tp_21",
 557        [DA850_EVM_BB_EXP_USER_PB1]             = "user_pb1",
 558        [DA850_EVM_BB_EXP_USER_LED2]            = "user_led2",
 559        [DA850_EVM_BB_EXP_USER_LED1]            = "user_led1",
 560        [DA850_EVM_BB_EXP_USER_SW1]             = "user_sw1",
 561        [DA850_EVM_BB_EXP_USER_SW2]             = "user_sw2",
 562        [DA850_EVM_BB_EXP_USER_SW3]             = "user_sw3",
 563        [DA850_EVM_BB_EXP_USER_SW4]             = "user_sw4",
 564        [DA850_EVM_BB_EXP_USER_SW5]             = "user_sw5",
 565        [DA850_EVM_BB_EXP_USER_SW6]             = "user_sw6",
 566        [DA850_EVM_BB_EXP_USER_SW7]             = "user_sw7",
 567        [DA850_EVM_BB_EXP_USER_SW8]             = "user_sw8",
 568};
 569
 570#define DA850_N_BB_USER_SW      8
 571
 572static struct gpio_keys_button da850_evm_bb_keys[] = {
 573        [0] = {
 574                .type                   = EV_KEY,
 575                .active_low             = 1,
 576                .wakeup                 = 0,
 577                .debounce_interval      = DA850_KEYS_DEBOUNCE_MS,
 578                .code                   = KEY_PROG1,
 579                .desc                   = NULL, /* assigned at runtime */
 580                .gpio                   = -1, /* assigned at runtime */
 581        },
 582        [1 ... DA850_N_BB_USER_SW] = {
 583                .type                   = EV_SW,
 584                .active_low             = 1,
 585                .wakeup                 = 0,
 586                .debounce_interval      = DA850_KEYS_DEBOUNCE_MS,
 587                .code                   = -1, /* assigned at runtime */
 588                .desc                   = NULL, /* assigned at runtime */
 589                .gpio                   = -1, /* assigned at runtime */
 590        },
 591};
 592
 593static struct gpio_keys_platform_data da850_evm_bb_keys_pdata = {
 594        .buttons = da850_evm_bb_keys,
 595        .nbuttons = ARRAY_SIZE(da850_evm_bb_keys),
 596        .poll_interval = DA850_GPIO_KEYS_POLL_MS,
 597};
 598
 599static struct platform_device da850_evm_bb_keys_device = {
 600        .name = "gpio-keys-polled",
 601        .id = 1,
 602        .dev = {
 603                .platform_data = &da850_evm_bb_keys_pdata
 604        },
 605};
 606
 607static void da850_evm_bb_keys_init(unsigned gpio)
 608{
 609        int i;
 610        struct gpio_keys_button *button;
 611
 612        button = &da850_evm_bb_keys[0];
 613        button->desc = da850_evm_bb_exp[DA850_EVM_BB_EXP_USER_PB1];
 614        button->gpio = gpio + DA850_EVM_BB_EXP_USER_PB1;
 615
 616        for (i = 0; i < DA850_N_BB_USER_SW; i++) {
 617                button = &da850_evm_bb_keys[i + 1];
 618                button->code = SW_LID + i;
 619                button->desc = da850_evm_bb_exp[DA850_EVM_BB_EXP_USER_SW1 + i];
 620                button->gpio = gpio + DA850_EVM_BB_EXP_USER_SW1 + i;
 621        }
 622}
 623
 624#define DA850_N_BB_USER_LED     2
 625
 626static struct gpio_led da850_evm_bb_leds[] = {
 627        [0 ... DA850_N_BB_USER_LED - 1] = {
 628                .active_low = 1,
 629                .gpio = -1, /* assigned at runtime */
 630                .name = NULL, /* assigned at runtime */
 631        },
 632};
 633
 634static struct gpio_led_platform_data da850_evm_bb_leds_pdata = {
 635        .leds = da850_evm_bb_leds,
 636        .num_leds = ARRAY_SIZE(da850_evm_bb_leds),
 637};
 638
 639static struct platform_device da850_evm_bb_leds_device = {
 640        .name           = "leds-gpio",
 641        .id             = -1,
 642        .dev = {
 643                .platform_data = &da850_evm_bb_leds_pdata
 644        }
 645};
 646
 647static void da850_evm_bb_leds_init(unsigned gpio)
 648{
 649        int i;
 650        struct gpio_led *led;
 651
 652        for (i = 0; i < DA850_N_BB_USER_LED; i++) {
 653                led = &da850_evm_bb_leds[i];
 654
 655                led->gpio = gpio + DA850_EVM_BB_EXP_USER_LED2 + i;
 656                led->name =
 657                        da850_evm_bb_exp[DA850_EVM_BB_EXP_USER_LED2 + i];
 658        }
 659}
 660
 661static int da850_evm_bb_expander_setup(struct i2c_client *client,
 662                                                unsigned gpio, unsigned ngpio,
 663                                                void *c)
 664{
 665        int ret;
 666
 667        /*
 668         * Register the switches and pushbutton on the baseboard as a gpio-keys
 669         * device.
 670         */
 671        da850_evm_bb_keys_init(gpio);
 672        ret = platform_device_register(&da850_evm_bb_keys_device);
 673        if (ret) {
 674                pr_warn("Could not register baseboard GPIO expander keys");
 675                goto io_exp_setup_sw_fail;
 676        }
 677
 678        da850_evm_bb_leds_init(gpio);
 679        ret = platform_device_register(&da850_evm_bb_leds_device);
 680        if (ret) {
 681                pr_warn("Could not register baseboard GPIO expander LEDs");
 682                goto io_exp_setup_leds_fail;
 683        }
 684
 685        return 0;
 686
 687io_exp_setup_leds_fail:
 688        platform_device_unregister(&da850_evm_bb_keys_device);
 689io_exp_setup_sw_fail:
 690        return ret;
 691}
 692
 693static int da850_evm_bb_expander_teardown(struct i2c_client *client,
 694                                        unsigned gpio, unsigned ngpio, void *c)
 695{
 696        platform_device_unregister(&da850_evm_bb_leds_device);
 697        platform_device_unregister(&da850_evm_bb_keys_device);
 698
 699        return 0;
 700}
 701
 702static struct pca953x_platform_data da850_evm_ui_expander_info = {
 703        .gpio_base      = DAVINCI_N_GPIO,
 704        .setup          = da850_evm_ui_expander_setup,
 705        .teardown       = da850_evm_ui_expander_teardown,
 706        .names          = da850_evm_ui_exp,
 707};
 708
 709static struct pca953x_platform_data da850_evm_bb_expander_info = {
 710        .gpio_base      = DA850_BB_EXPANDER_GPIO_BASE,
 711        .setup          = da850_evm_bb_expander_setup,
 712        .teardown       = da850_evm_bb_expander_teardown,
 713        .names          = da850_evm_bb_exp,
 714};
 715
 716static struct i2c_board_info __initdata da850_evm_i2c_devices[] = {
 717        {
 718                I2C_BOARD_INFO("tlv320aic3x", 0x18),
 719        },
 720        {
 721                I2C_BOARD_INFO("tca6416", 0x20),
 722                .platform_data = &da850_evm_ui_expander_info,
 723        },
 724        {
 725                I2C_BOARD_INFO("tca6416", 0x21),
 726                .platform_data = &da850_evm_bb_expander_info,
 727        },
 728};
 729
 730static struct davinci_i2c_platform_data da850_evm_i2c_0_pdata = {
 731        .bus_freq       = 100,  /* kHz */
 732        .bus_delay      = 0,    /* usec */
 733};
 734
 735/* davinci da850 evm audio machine driver */
 736static u8 da850_iis_serializer_direction[] = {
 737        INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,
 738        INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,
 739        INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,  TX_MODE,
 740        RX_MODE,        INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,
 741};
 742
 743static struct snd_platform_data da850_evm_snd_data = {
 744        .tx_dma_offset          = 0x2000,
 745        .rx_dma_offset          = 0x2000,
 746        .op_mode                = DAVINCI_MCASP_IIS_MODE,
 747        .num_serializer         = ARRAY_SIZE(da850_iis_serializer_direction),
 748        .tdm_slots              = 2,
 749        .serial_dir             = da850_iis_serializer_direction,
 750        .asp_chan_q             = EVENTQ_0,
 751        .ram_chan_q             = EVENTQ_1,
 752        .version                = MCASP_VERSION_2,
 753        .txnumevt               = 1,
 754        .rxnumevt               = 1,
 755        .sram_size_playback     = SZ_8K,
 756        .sram_size_capture      = SZ_8K,
 757};
 758
 759static const short da850_evm_mcasp_pins[] __initconst = {
 760        DA850_AHCLKX, DA850_ACLKX, DA850_AFSX,
 761        DA850_AHCLKR, DA850_ACLKR, DA850_AFSR, DA850_AMUTE,
 762        DA850_AXR_11, DA850_AXR_12,
 763        -1
 764};
 765
 766#define DA850_MMCSD_CD_PIN              GPIO_TO_PIN(4, 0)
 767#define DA850_MMCSD_WP_PIN              GPIO_TO_PIN(4, 1)
 768
 769static struct gpiod_lookup_table mmc_gpios_table = {
 770        .dev_id = "da830-mmc.0",
 771        .table = {
 772                /* gpio chip 2 contains gpio range 64-95 */
 773                GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_CD_PIN, "cd",
 774                            GPIO_ACTIVE_LOW),
 775                GPIO_LOOKUP("davinci_gpio.0", DA850_MMCSD_WP_PIN, "wp",
 776                            GPIO_ACTIVE_LOW),
 777        },
 778};
 779
 780static struct davinci_mmc_config da850_mmc_config = {
 781        .wires          = 4,
 782        .max_freq       = 50000000,
 783        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
 784};
 785
 786static const short da850_evm_mmcsd0_pins[] __initconst = {
 787        DA850_MMCSD0_DAT_0, DA850_MMCSD0_DAT_1, DA850_MMCSD0_DAT_2,
 788        DA850_MMCSD0_DAT_3, DA850_MMCSD0_CLK, DA850_MMCSD0_CMD,
 789        DA850_GPIO4_0, DA850_GPIO4_1,
 790        -1
 791};
 792
 793static void da850_panel_power_ctrl(int val)
 794{
 795        /* lcd backlight */
 796        gpio_set_value(DA850_LCD_BL_PIN, val);
 797
 798        /* lcd power */
 799        gpio_set_value(DA850_LCD_PWR_PIN, val);
 800}
 801
 802static int da850_lcd_hw_init(void)
 803{
 804        int status;
 805
 806        status = gpio_request(DA850_LCD_BL_PIN, "lcd bl");
 807        if (status < 0)
 808                return status;
 809
 810        status = gpio_request(DA850_LCD_PWR_PIN, "lcd pwr");
 811        if (status < 0) {
 812                gpio_free(DA850_LCD_BL_PIN);
 813                return status;
 814        }
 815
 816        gpio_direction_output(DA850_LCD_BL_PIN, 0);
 817        gpio_direction_output(DA850_LCD_PWR_PIN, 0);
 818
 819        /* Switch off panel power and backlight */
 820        da850_panel_power_ctrl(0);
 821
 822        /* Switch on panel power and backlight */
 823        da850_panel_power_ctrl(1);
 824
 825        return 0;
 826}
 827
 828/* Fixed regulator support */
 829static struct regulator_consumer_supply fixed_supplies[] = {
 830        /* Baseboard 3.3V: 5V -> TPS73701DCQ -> 3.3V */
 831        REGULATOR_SUPPLY("AVDD", "1-0018"),
 832        REGULATOR_SUPPLY("DRVDD", "1-0018"),
 833
 834        /* Baseboard 1.8V: 5V -> TPS73701DCQ -> 1.8V */
 835        REGULATOR_SUPPLY("DVDD", "1-0018"),
 836
 837        /* UI card 3.3V: 5V -> TPS73701DCQ -> 3.3V */
 838        REGULATOR_SUPPLY("vcc", "1-0020"),
 839};
 840
 841/* TPS65070 voltage regulator support */
 842
 843/* 3.3V */
 844static struct regulator_consumer_supply tps65070_dcdc1_consumers[] = {
 845        {
 846                .supply = "usb0_vdda33",
 847        },
 848        {
 849                .supply = "usb1_vdda33",
 850        },
 851};
 852
 853/* 3.3V or 1.8V */
 854static struct regulator_consumer_supply tps65070_dcdc2_consumers[] = {
 855        {
 856                .supply = "dvdd3318_a",
 857        },
 858        {
 859                .supply = "dvdd3318_b",
 860        },
 861        {
 862                .supply = "dvdd3318_c",
 863        },
 864        REGULATOR_SUPPLY("IOVDD", "1-0018"),
 865};
 866
 867/* 1.2V */
 868static struct regulator_consumer_supply tps65070_dcdc3_consumers[] = {
 869        {
 870                .supply = "cvdd",
 871        },
 872};
 873
 874/* 1.8V LDO */
 875static struct regulator_consumer_supply tps65070_ldo1_consumers[] = {
 876        {
 877                .supply = "sata_vddr",
 878        },
 879        {
 880                .supply = "usb0_vdda18",
 881        },
 882        {
 883                .supply = "usb1_vdda18",
 884        },
 885        {
 886                .supply = "ddr_dvdd18",
 887        },
 888};
 889
 890/* 1.2V LDO */
 891static struct regulator_consumer_supply tps65070_ldo2_consumers[] = {
 892        {
 893                .supply = "sata_vdd",
 894        },
 895        {
 896                .supply = "pll0_vdda",
 897        },
 898        {
 899                .supply = "pll1_vdda",
 900        },
 901        {
 902                .supply = "usbs_cvdd",
 903        },
 904        {
 905                .supply = "vddarnwa1",
 906        },
 907};
 908
 909/* We take advantage of the fact that both defdcdc{2,3} are tied high */
 910static struct tps6507x_reg_platform_data tps6507x_platform_data = {
 911        .defdcdc_default = true,
 912};
 913
 914static struct regulator_init_data tps65070_regulator_data[] = {
 915        /* dcdc1 */
 916        {
 917                .constraints = {
 918                        .min_uV = 3150000,
 919                        .max_uV = 3450000,
 920                        .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
 921                                REGULATOR_CHANGE_STATUS),
 922                        .boot_on = 1,
 923                },
 924                .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc1_consumers),
 925                .consumer_supplies = tps65070_dcdc1_consumers,
 926        },
 927
 928        /* dcdc2 */
 929        {
 930                .constraints = {
 931                        .min_uV = 1710000,
 932                        .max_uV = 3450000,
 933                        .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
 934                                REGULATOR_CHANGE_STATUS),
 935                        .boot_on = 1,
 936                        .always_on = 1,
 937                },
 938                .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc2_consumers),
 939                .consumer_supplies = tps65070_dcdc2_consumers,
 940                .driver_data = &tps6507x_platform_data,
 941        },
 942
 943        /* dcdc3 */
 944        {
 945                .constraints = {
 946                        .min_uV = 950000,
 947                        .max_uV = 1350000,
 948                        .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
 949                                REGULATOR_CHANGE_STATUS),
 950                        .boot_on = 1,
 951                },
 952                .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc3_consumers),
 953                .consumer_supplies = tps65070_dcdc3_consumers,
 954                .driver_data = &tps6507x_platform_data,
 955        },
 956
 957        /* ldo1 */
 958        {
 959                .constraints = {
 960                        .min_uV = 1710000,
 961                        .max_uV = 1890000,
 962                        .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
 963                                REGULATOR_CHANGE_STATUS),
 964                        .boot_on = 1,
 965                },
 966                .num_consumer_supplies = ARRAY_SIZE(tps65070_ldo1_consumers),
 967                .consumer_supplies = tps65070_ldo1_consumers,
 968        },
 969
 970        /* ldo2 */
 971        {
 972                .constraints = {
 973                        .min_uV = 1140000,
 974                        .max_uV = 1320000,
 975                        .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
 976                                REGULATOR_CHANGE_STATUS),
 977                        .boot_on = 1,
 978                },
 979                .num_consumer_supplies = ARRAY_SIZE(tps65070_ldo2_consumers),
 980                .consumer_supplies = tps65070_ldo2_consumers,
 981        },
 982};
 983
 984static struct touchscreen_init_data tps6507x_touchscreen_data = {
 985        .poll_period =  30,     /* ms between touch samples */
 986        .min_pressure = 0x30,   /* minimum pressure to trigger touch */
 987        .vendor = 0,            /* /sys/class/input/input?/id/vendor */
 988        .product = 65070,       /* /sys/class/input/input?/id/product */
 989        .version = 0x100,       /* /sys/class/input/input?/id/version */
 990};
 991
 992static struct tps6507x_board tps_board = {
 993        .tps6507x_pmic_init_data = &tps65070_regulator_data[0],
 994        .tps6507x_ts_init_data = &tps6507x_touchscreen_data,
 995};
 996
 997static struct i2c_board_info __initdata da850_evm_tps65070_info[] = {
 998        {
 999                I2C_BOARD_INFO("tps6507x", 0x48),
1000                .platform_data = &tps_board,
1001        },
1002};
1003
1004static int __init pmic_tps65070_init(void)
1005{
1006        return i2c_register_board_info(1, da850_evm_tps65070_info,
1007                                        ARRAY_SIZE(da850_evm_tps65070_info));
1008}
1009
1010static const short da850_evm_lcdc_pins[] = {
1011        DA850_GPIO2_8, DA850_GPIO2_15,
1012        -1
1013};
1014
1015static const short da850_evm_mii_pins[] = {
1016        DA850_MII_TXEN, DA850_MII_TXCLK, DA850_MII_COL, DA850_MII_TXD_3,
1017        DA850_MII_TXD_2, DA850_MII_TXD_1, DA850_MII_TXD_0, DA850_MII_RXER,
1018        DA850_MII_CRS, DA850_MII_RXCLK, DA850_MII_RXDV, DA850_MII_RXD_3,
1019        DA850_MII_RXD_2, DA850_MII_RXD_1, DA850_MII_RXD_0, DA850_MDIO_CLK,
1020        DA850_MDIO_D,
1021        -1
1022};
1023
1024static const short da850_evm_rmii_pins[] = {
1025        DA850_RMII_TXD_0, DA850_RMII_TXD_1, DA850_RMII_TXEN,
1026        DA850_RMII_CRS_DV, DA850_RMII_RXD_0, DA850_RMII_RXD_1,
1027        DA850_RMII_RXER, DA850_RMII_MHZ_50_CLK, DA850_MDIO_CLK,
1028        DA850_MDIO_D,
1029        -1
1030};
1031
1032static int __init da850_evm_config_emac(void)
1033{
1034        void __iomem *cfg_chip3_base;
1035        int ret;
1036        u32 val;
1037        struct davinci_soc_info *soc_info = &davinci_soc_info;
1038        u8 rmii_en = soc_info->emac_pdata->rmii_en;
1039
1040        if (!machine_is_davinci_da850_evm())
1041                return 0;
1042
1043        cfg_chip3_base = DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP3_REG);
1044
1045        val = __raw_readl(cfg_chip3_base);
1046
1047        if (rmii_en) {
1048                val |= BIT(8);
1049                ret = davinci_cfg_reg_list(da850_evm_rmii_pins);
1050                pr_info("EMAC: RMII PHY configured, MII PHY will not be"
1051                                                        " functional\n");
1052        } else {
1053                val &= ~BIT(8);
1054                ret = davinci_cfg_reg_list(da850_evm_mii_pins);
1055                pr_info("EMAC: MII PHY configured, RMII PHY will not be"
1056                                                        " functional\n");
1057        }
1058
1059        if (ret)
1060                pr_warn("%s: CPGMAC/RMII mux setup failed: %d\n",
1061                        __func__, ret);
1062
1063        /* configure the CFGCHIP3 register for RMII or MII */
1064        __raw_writel(val, cfg_chip3_base);
1065
1066        ret = davinci_cfg_reg(DA850_GPIO2_6);
1067        if (ret)
1068                pr_warn("%s:GPIO(2,6) mux setup failed\n", __func__);
1069
1070        ret = gpio_request(DA850_MII_MDIO_CLKEN_PIN, "mdio_clk_en");
1071        if (ret) {
1072                pr_warn("Cannot open GPIO %d\n", DA850_MII_MDIO_CLKEN_PIN);
1073                return ret;
1074        }
1075
1076        /* Enable/Disable MII MDIO clock */
1077        gpio_direction_output(DA850_MII_MDIO_CLKEN_PIN, rmii_en);
1078
1079        soc_info->emac_pdata->phy_id = DA850_EVM_PHY_ID;
1080
1081        ret = da8xx_register_emac();
1082        if (ret)
1083                pr_warn("%s: EMAC registration failed: %d\n", __func__, ret);
1084
1085        return 0;
1086}
1087device_initcall(da850_evm_config_emac);
1088
1089/*
1090 * The following EDMA channels/slots are not being used by drivers (for
1091 * example: Timer, GPIO, UART events etc) on da850/omap-l138 EVM, hence
1092 * they are being reserved for codecs on the DSP side.
1093 */
1094static const s16 da850_dma0_rsv_chans[][2] = {
1095        /* (offset, number) */
1096        { 8,  6},
1097        {24,  4},
1098        {30,  2},
1099        {-1, -1}
1100};
1101
1102static const s16 da850_dma0_rsv_slots[][2] = {
1103        /* (offset, number) */
1104        { 8,  6},
1105        {24,  4},
1106        {30, 50},
1107        {-1, -1}
1108};
1109
1110static const s16 da850_dma1_rsv_chans[][2] = {
1111        /* (offset, number) */
1112        { 0, 28},
1113        {30,  2},
1114        {-1, -1}
1115};
1116
1117static const s16 da850_dma1_rsv_slots[][2] = {
1118        /* (offset, number) */
1119        { 0, 28},
1120        {30, 90},
1121        {-1, -1}
1122};
1123
1124static struct edma_rsv_info da850_edma_cc0_rsv = {
1125        .rsv_chans      = da850_dma0_rsv_chans,
1126        .rsv_slots      = da850_dma0_rsv_slots,
1127};
1128
1129static struct edma_rsv_info da850_edma_cc1_rsv = {
1130        .rsv_chans      = da850_dma1_rsv_chans,
1131        .rsv_slots      = da850_dma1_rsv_slots,
1132};
1133
1134static struct edma_rsv_info *da850_edma_rsv[2] = {
1135        &da850_edma_cc0_rsv,
1136        &da850_edma_cc1_rsv,
1137};
1138
1139#ifdef CONFIG_CPU_FREQ
1140static __init int da850_evm_init_cpufreq(void)
1141{
1142        switch (system_rev & 0xF) {
1143        case 3:
1144                da850_max_speed = 456000;
1145                break;
1146        case 2:
1147                da850_max_speed = 408000;
1148                break;
1149        case 1:
1150                da850_max_speed = 372000;
1151                break;
1152        }
1153
1154        return da850_register_cpufreq("pll0_sysclk3");
1155}
1156#else
1157static __init int da850_evm_init_cpufreq(void) { return 0; }
1158#endif
1159
1160#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
1161
1162#define TVP5147_CH0             "tvp514x-0"
1163#define TVP5147_CH1             "tvp514x-1"
1164
1165/* VPIF capture configuration */
1166static struct tvp514x_platform_data tvp5146_pdata = {
1167                .clk_polarity = 0,
1168                .hs_polarity  = 1,
1169                .vs_polarity  = 1,
1170};
1171
1172#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
1173
1174static struct vpif_input da850_ch0_inputs[] = {
1175        {
1176                .input = {
1177                        .index = 0,
1178                        .name  = "Composite",
1179                        .type  = V4L2_INPUT_TYPE_CAMERA,
1180                        .capabilities = V4L2_IN_CAP_STD,
1181                        .std   = TVP514X_STD_ALL,
1182                },
1183                .input_route = INPUT_CVBS_VI2B,
1184                .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
1185                .subdev_name = TVP5147_CH0,
1186        },
1187};
1188
1189static struct vpif_input da850_ch1_inputs[] = {
1190        {
1191                .input = {
1192                        .index = 0,
1193                        .name  = "S-Video",
1194                        .type  = V4L2_INPUT_TYPE_CAMERA,
1195                        .capabilities = V4L2_IN_CAP_STD,
1196                        .std   = TVP514X_STD_ALL,
1197                },
1198                .input_route = INPUT_SVIDEO_VI2C_VI1C,
1199                .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
1200                .subdev_name = TVP5147_CH1,
1201        },
1202};
1203
1204static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
1205        {
1206                .name = TVP5147_CH0,
1207                .board_info = {
1208                        I2C_BOARD_INFO("tvp5146", 0x5d),
1209                        .platform_data = &tvp5146_pdata,
1210                },
1211        },
1212        {
1213                .name = TVP5147_CH1,
1214                .board_info = {
1215                        I2C_BOARD_INFO("tvp5146", 0x5c),
1216                        .platform_data = &tvp5146_pdata,
1217                },
1218        },
1219};
1220
1221static struct vpif_capture_config da850_vpif_capture_config = {
1222        .subdev_info = da850_vpif_capture_sdev_info,
1223        .subdev_count = ARRAY_SIZE(da850_vpif_capture_sdev_info),
1224        .i2c_adapter_id = 1,
1225        .chan_config[0] = {
1226                .inputs = da850_ch0_inputs,
1227                .input_count = ARRAY_SIZE(da850_ch0_inputs),
1228                .vpif_if = {
1229                        .if_type = VPIF_IF_BT656,
1230                        .hd_pol  = 1,
1231                        .vd_pol  = 1,
1232                        .fid_pol = 0,
1233                },
1234        },
1235        .chan_config[1] = {
1236                .inputs = da850_ch1_inputs,
1237                .input_count = ARRAY_SIZE(da850_ch1_inputs),
1238                .vpif_if = {
1239                        .if_type = VPIF_IF_BT656,
1240                        .hd_pol  = 1,
1241                        .vd_pol  = 1,
1242                        .fid_pol = 0,
1243                },
1244        },
1245        .card_name = "DA850/OMAP-L138 Video Capture",
1246};
1247
1248/* VPIF display configuration */
1249
1250static struct adv7343_platform_data adv7343_pdata = {
1251        .mode_config = {
1252                .dac = { 1, 1, 1 },
1253        },
1254        .sd_config = {
1255                .sd_dac_out = { 1 },
1256        },
1257};
1258
1259static struct vpif_subdev_info da850_vpif_subdev[] = {
1260        {
1261                .name = "adv7343",
1262                .board_info = {
1263                        I2C_BOARD_INFO("adv7343", 0x2a),
1264                        .platform_data = &adv7343_pdata,
1265                },
1266        },
1267};
1268
1269static const struct vpif_output da850_ch0_outputs[] = {
1270        {
1271                .output = {
1272                        .index = 0,
1273                        .name = "Composite",
1274                        .type = V4L2_OUTPUT_TYPE_ANALOG,
1275                        .capabilities = V4L2_OUT_CAP_STD,
1276                        .std = V4L2_STD_ALL,
1277                },
1278                .subdev_name = "adv7343",
1279                .output_route = ADV7343_COMPOSITE_ID,
1280        },
1281        {
1282                .output = {
1283                        .index = 1,
1284                        .name = "S-Video",
1285                        .type = V4L2_OUTPUT_TYPE_ANALOG,
1286                        .capabilities = V4L2_OUT_CAP_STD,
1287                        .std = V4L2_STD_ALL,
1288                },
1289                .subdev_name = "adv7343",
1290                .output_route = ADV7343_SVIDEO_ID,
1291        },
1292};
1293
1294static struct vpif_display_config da850_vpif_display_config = {
1295        .subdevinfo   = da850_vpif_subdev,
1296        .subdev_count = ARRAY_SIZE(da850_vpif_subdev),
1297        .chan_config[0] = {
1298                .outputs = da850_ch0_outputs,
1299                .output_count = ARRAY_SIZE(da850_ch0_outputs),
1300        },
1301        .card_name    = "DA850/OMAP-L138 Video Display",
1302        .i2c_adapter_id = 1,
1303};
1304
1305static __init void da850_vpif_init(void)
1306{
1307        int ret;
1308
1309        ret = da850_register_vpif();
1310        if (ret)
1311                pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret);
1312
1313        ret = davinci_cfg_reg_list(da850_vpif_capture_pins);
1314        if (ret)
1315                pr_warn("da850_evm_init: VPIF capture mux setup failed: %d\n",
1316                        ret);
1317
1318        ret = da850_register_vpif_capture(&da850_vpif_capture_config);
1319        if (ret)
1320                pr_warn("da850_evm_init: VPIF capture setup failed: %d\n", ret);
1321
1322        ret = davinci_cfg_reg_list(da850_vpif_display_pins);
1323        if (ret)
1324                pr_warn("da850_evm_init: VPIF display mux setup failed: %d\n",
1325                        ret);
1326
1327        ret = da850_register_vpif_display(&da850_vpif_display_config);
1328        if (ret)
1329                pr_warn("da850_evm_init: VPIF display setup failed: %d\n", ret);
1330}
1331
1332#else
1333static __init void da850_vpif_init(void) {}
1334#endif
1335
1336#define DA850EVM_SATA_REFCLKPN_RATE     (100 * 1000 * 1000)
1337
1338static __init void da850_evm_init(void)
1339{
1340        int ret;
1341
1342        ret = da850_register_gpio();
1343        if (ret)
1344                pr_warn("%s: GPIO init failed: %d\n", __func__, ret);
1345
1346        regulator_register_fixed(0, fixed_supplies, ARRAY_SIZE(fixed_supplies));
1347
1348        ret = pmic_tps65070_init();
1349        if (ret)
1350                pr_warn("%s: TPS65070 PMIC init failed: %d\n", __func__, ret);
1351
1352        ret = da850_register_edma(da850_edma_rsv);
1353        if (ret)
1354                pr_warn("%s: EDMA registration failed: %d\n", __func__, ret);
1355
1356        ret = davinci_cfg_reg_list(da850_i2c0_pins);
1357        if (ret)
1358                pr_warn("%s: I2C0 mux setup failed: %d\n", __func__, ret);
1359
1360        ret = da8xx_register_i2c(0, &da850_evm_i2c_0_pdata);
1361        if (ret)
1362                pr_warn("%s: I2C0 registration failed: %d\n", __func__, ret);
1363
1364
1365        ret = da8xx_register_watchdog();
1366        if (ret)
1367                pr_warn("%s: watchdog registration failed: %d\n",
1368                        __func__, ret);
1369
1370        if (HAS_MMC) {
1371                ret = davinci_cfg_reg_list(da850_evm_mmcsd0_pins);
1372                if (ret)
1373                        pr_warn("%s: MMCSD0 mux setup failed: %d\n",
1374                                __func__, ret);
1375
1376                gpiod_add_lookup_table(&mmc_gpios_table);
1377
1378                ret = da8xx_register_mmcsd0(&da850_mmc_config);
1379                if (ret)
1380                        pr_warn("%s: MMCSD0 registration failed: %d\n",
1381                                __func__, ret);
1382        }
1383
1384        davinci_serial_init(da8xx_serial_device);
1385
1386        i2c_register_board_info(1, da850_evm_i2c_devices,
1387                        ARRAY_SIZE(da850_evm_i2c_devices));
1388
1389        /*
1390         * shut down uart 0 and 1; they are not used on the board and
1391         * accessing them causes endless "too much work in irq53" messages
1392         * with arago fs
1393         */
1394        __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30);
1395        __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30);
1396
1397        ret = davinci_cfg_reg_list(da850_evm_mcasp_pins);
1398        if (ret)
1399                pr_warn("%s: McASP mux setup failed: %d\n", __func__, ret);
1400
1401        da850_evm_snd_data.sram_pool = sram_get_gen_pool();
1402        da8xx_register_mcasp(0, &da850_evm_snd_data);
1403
1404        ret = davinci_cfg_reg_list(da850_lcdcntl_pins);
1405        if (ret)
1406                pr_warn("%s: LCDC mux setup failed: %d\n", __func__, ret);
1407
1408        ret = da8xx_register_uio_pruss();
1409        if (ret)
1410                pr_warn("da850_evm_init: pruss initialization failed: %d\n",
1411                                ret);
1412
1413        /* Handle board specific muxing for LCD here */
1414        ret = davinci_cfg_reg_list(da850_evm_lcdc_pins);
1415        if (ret)
1416                pr_warn("%s: EVM specific LCD mux setup failed: %d\n",
1417                        __func__, ret);
1418
1419        ret = da850_lcd_hw_init();
1420        if (ret)
1421                pr_warn("%s: LCD initialization failed: %d\n", __func__, ret);
1422
1423        sharp_lk043t1dg01_pdata.panel_power_ctrl = da850_panel_power_ctrl,
1424        ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata);
1425        if (ret)
1426                pr_warn("%s: LCDC registration failed: %d\n", __func__, ret);
1427
1428        ret = da8xx_register_rtc();
1429        if (ret)
1430                pr_warn("%s: RTC setup failed: %d\n", __func__, ret);
1431
1432        ret = da850_evm_init_cpufreq();
1433        if (ret)
1434                pr_warn("%s: cpufreq registration failed: %d\n", __func__, ret);
1435
1436        ret = da8xx_register_cpuidle();
1437        if (ret)
1438                pr_warn("%s: cpuidle registration failed: %d\n", __func__, ret);
1439
1440        davinci_pm_init();
1441        da850_vpif_init();
1442
1443        ret = spi_register_board_info(da850evm_spi_info,
1444                                      ARRAY_SIZE(da850evm_spi_info));
1445        if (ret)
1446                pr_warn("%s: spi info registration failed: %d\n", __func__,
1447                        ret);
1448
1449        ret = da8xx_register_spi_bus(1, ARRAY_SIZE(da850evm_spi_info));
1450        if (ret)
1451                pr_warn("%s: SPI 1 registration failed: %d\n", __func__, ret);
1452
1453        ret = da850_register_sata(DA850EVM_SATA_REFCLKPN_RATE);
1454        if (ret)
1455                pr_warn("%s: SATA registration failed: %d\n", __func__, ret);
1456
1457        da850_evm_setup_mac_addr();
1458
1459        ret = da8xx_register_rproc();
1460        if (ret)
1461                pr_warn("%s: dsp/rproc registration failed: %d\n",
1462                        __func__, ret);
1463}
1464
1465#ifdef CONFIG_SERIAL_8250_CONSOLE
1466static int __init da850_evm_console_init(void)
1467{
1468        if (!machine_is_davinci_da850_evm())
1469                return 0;
1470
1471        return add_preferred_console("ttyS", 2, "115200");
1472}
1473console_initcall(da850_evm_console_init);
1474#endif
1475
1476static void __init da850_evm_map_io(void)
1477{
1478        da850_init();
1479}
1480
1481MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138/AM18x EVM")
1482        .atag_offset    = 0x100,
1483        .map_io         = da850_evm_map_io,
1484        .init_irq       = cp_intc_init,
1485        .init_time      = da850_init_time,
1486        .init_machine   = da850_evm_init,
1487        .init_late      = davinci_init_late,
1488        .dma_zone_size  = SZ_128M,
1489        .reserve        = da8xx_rproc_reserve_cma,
1490MACHINE_END
1491