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