| .. | .. |
|---|
| 16 | 16 | #include <linux/gpio/machine.h> |
|---|
| 17 | 17 | #include <linux/i2c.h> |
|---|
| 18 | 18 | #include <linux/platform_data/pcf857x.h> |
|---|
| 19 | | -#include <linux/platform_data/at24.h> |
|---|
| 20 | 19 | #include <linux/platform_data/gpio-davinci.h> |
|---|
| 20 | +#include <linux/property.h> |
|---|
| 21 | 21 | #include <linux/mtd/mtd.h> |
|---|
| 22 | 22 | #include <linux/mtd/rawnand.h> |
|---|
| 23 | 23 | #include <linux/mtd/partitions.h> |
|---|
| 24 | 24 | #include <linux/mtd/physmap.h> |
|---|
| 25 | +#include <linux/nvmem-provider.h> |
|---|
| 25 | 26 | #include <linux/phy.h> |
|---|
| 26 | 27 | #include <linux/clk.h> |
|---|
| 27 | 28 | #include <linux/videodev2.h> |
|---|
| 28 | 29 | #include <linux/v4l2-dv-timings.h> |
|---|
| 29 | 30 | #include <linux/export.h> |
|---|
| 30 | 31 | #include <linux/leds.h> |
|---|
| 32 | +#include <linux/regulator/fixed.h> |
|---|
| 33 | +#include <linux/regulator/machine.h> |
|---|
| 31 | 34 | |
|---|
| 32 | 35 | #include <media/i2c/tvp514x.h> |
|---|
| 33 | 36 | |
|---|
| .. | .. |
|---|
| 35 | 38 | #include <asm/mach/arch.h> |
|---|
| 36 | 39 | |
|---|
| 37 | 40 | #include <mach/common.h> |
|---|
| 38 | | -#include <linux/platform_data/i2c-davinci.h> |
|---|
| 39 | | -#include <mach/serial.h> |
|---|
| 40 | 41 | #include <mach/mux.h> |
|---|
| 42 | +#include <mach/serial.h> |
|---|
| 43 | + |
|---|
| 44 | +#include <linux/platform_data/i2c-davinci.h> |
|---|
| 41 | 45 | #include <linux/platform_data/mtd-davinci.h> |
|---|
| 42 | 46 | #include <linux/platform_data/mmc-davinci.h> |
|---|
| 43 | 47 | #include <linux/platform_data/usb-davinci.h> |
|---|
| .. | .. |
|---|
| 45 | 49 | #include <linux/platform_data/ti-aemif.h> |
|---|
| 46 | 50 | |
|---|
| 47 | 51 | #include "davinci.h" |
|---|
| 52 | +#include "irqs.h" |
|---|
| 48 | 53 | |
|---|
| 49 | 54 | #define DM644X_EVM_PHY_ID "davinci_mdio-0:01" |
|---|
| 50 | 55 | #define LXT971_PHY_ID (0x001378e2) |
|---|
| .. | .. |
|---|
| 157 | 162 | .core_chipsel = 0, |
|---|
| 158 | 163 | .parts = davinci_evm_nandflash_partition, |
|---|
| 159 | 164 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), |
|---|
| 160 | | - .ecc_mode = NAND_ECC_HW, |
|---|
| 165 | + .engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST, |
|---|
| 161 | 166 | .ecc_bits = 1, |
|---|
| 162 | 167 | .bbt_options = NAND_BBT_USE_FLASH, |
|---|
| 163 | 168 | .timing = &davinci_evm_nandflash_timing, |
|---|
| .. | .. |
|---|
| 510 | 515 | * - ... newer boards may have more |
|---|
| 511 | 516 | */ |
|---|
| 512 | 517 | |
|---|
| 513 | | -static struct at24_platform_data eeprom_info = { |
|---|
| 514 | | - .byte_len = (256*1024) / 8, |
|---|
| 515 | | - .page_size = 64, |
|---|
| 516 | | - .flags = AT24_FLAG_ADDR16, |
|---|
| 517 | | - .setup = davinci_get_mac_addr, |
|---|
| 518 | | - .context = (void *)0x7f00, |
|---|
| 518 | +static struct nvmem_cell_info dm644evm_nvmem_cells[] = { |
|---|
| 519 | + { |
|---|
| 520 | + .name = "macaddr", |
|---|
| 521 | + .offset = 0x7f00, |
|---|
| 522 | + .bytes = ETH_ALEN, |
|---|
| 523 | + } |
|---|
| 524 | +}; |
|---|
| 525 | + |
|---|
| 526 | +static struct nvmem_cell_table dm644evm_nvmem_cell_table = { |
|---|
| 527 | + .nvmem_name = "1-00500", |
|---|
| 528 | + .cells = dm644evm_nvmem_cells, |
|---|
| 529 | + .ncells = ARRAY_SIZE(dm644evm_nvmem_cells), |
|---|
| 530 | +}; |
|---|
| 531 | + |
|---|
| 532 | +static struct nvmem_cell_lookup dm644evm_nvmem_cell_lookup = { |
|---|
| 533 | + .nvmem_name = "1-00500", |
|---|
| 534 | + .cell_name = "macaddr", |
|---|
| 535 | + .dev_id = "davinci_emac.1", |
|---|
| 536 | + .con_id = "mac-address", |
|---|
| 537 | +}; |
|---|
| 538 | + |
|---|
| 539 | +static const struct property_entry eeprom_properties[] = { |
|---|
| 540 | + PROPERTY_ENTRY_U32("pagesize", 64), |
|---|
| 541 | + { } |
|---|
| 519 | 542 | }; |
|---|
| 520 | 543 | |
|---|
| 521 | 544 | /* |
|---|
| .. | .. |
|---|
| 525 | 548 | */ |
|---|
| 526 | 549 | static struct i2c_client *dm6446evm_msp; |
|---|
| 527 | 550 | |
|---|
| 528 | | -static int dm6446evm_msp_probe(struct i2c_client *client, |
|---|
| 529 | | - const struct i2c_device_id *id) |
|---|
| 551 | +static int dm6446evm_msp_probe(struct i2c_client *client) |
|---|
| 530 | 552 | { |
|---|
| 531 | 553 | dm6446evm_msp = client; |
|---|
| 532 | 554 | return 0; |
|---|
| .. | .. |
|---|
| 546 | 568 | static struct i2c_driver dm6446evm_msp_driver = { |
|---|
| 547 | 569 | .driver.name = "dm6446evm_msp", |
|---|
| 548 | 570 | .id_table = dm6446evm_msp_ids, |
|---|
| 549 | | - .probe = dm6446evm_msp_probe, |
|---|
| 571 | + .probe_new = dm6446evm_msp_probe, |
|---|
| 550 | 572 | .remove = dm6446evm_msp_remove, |
|---|
| 551 | 573 | }; |
|---|
| 552 | 574 | |
|---|
| .. | .. |
|---|
| 625 | 647 | }, |
|---|
| 626 | 648 | { |
|---|
| 627 | 649 | I2C_BOARD_INFO("24c256", 0x50), |
|---|
| 628 | | - .platform_data = &eeprom_info, |
|---|
| 650 | + .properties = eeprom_properties, |
|---|
| 629 | 651 | }, |
|---|
| 630 | 652 | { |
|---|
| 631 | 653 | I2C_BOARD_INFO("tlv320aic33", 0x1b), |
|---|
| .. | .. |
|---|
| 638 | 660 | static struct gpiod_lookup_table i2c_recovery_gpiod_table = { |
|---|
| 639 | 661 | .dev_id = "i2c_davinci.1", |
|---|
| 640 | 662 | .table = { |
|---|
| 641 | | - GPIO_LOOKUP("davinci_gpio.0", DM644X_I2C_SDA_PIN, "sda", |
|---|
| 663 | + GPIO_LOOKUP("davinci_gpio", DM644X_I2C_SDA_PIN, "sda", |
|---|
| 642 | 664 | GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN), |
|---|
| 643 | | - GPIO_LOOKUP("davinci_gpio.0", DM644X_I2C_SCL_PIN, "scl", |
|---|
| 665 | + GPIO_LOOKUP("davinci_gpio", DM644X_I2C_SCL_PIN, "scl", |
|---|
| 644 | 666 | GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN), |
|---|
| 667 | + { } |
|---|
| 645 | 668 | }, |
|---|
| 646 | 669 | }; |
|---|
| 647 | 670 | |
|---|
| .. | .. |
|---|
| 662 | 685 | i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info)); |
|---|
| 663 | 686 | } |
|---|
| 664 | 687 | #endif |
|---|
| 688 | + |
|---|
| 689 | +/* Fixed regulator support */ |
|---|
| 690 | +static struct regulator_consumer_supply fixed_supplies_3_3v[] = { |
|---|
| 691 | + /* Baseboard 3.3V: 5V -> TPS54310PWP -> 3.3V */ |
|---|
| 692 | + REGULATOR_SUPPLY("AVDD", "1-001b"), |
|---|
| 693 | + REGULATOR_SUPPLY("DRVDD", "1-001b"), |
|---|
| 694 | +}; |
|---|
| 695 | + |
|---|
| 696 | +static struct regulator_consumer_supply fixed_supplies_1_8v[] = { |
|---|
| 697 | + /* Baseboard 1.8V: 5V -> TPS54310PWP -> 1.8V */ |
|---|
| 698 | + REGULATOR_SUPPLY("IOVDD", "1-001b"), |
|---|
| 699 | + REGULATOR_SUPPLY("DVDD", "1-001b"), |
|---|
| 700 | +}; |
|---|
| 665 | 701 | |
|---|
| 666 | 702 | #define VENC_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) |
|---|
| 667 | 703 | |
|---|
| .. | .. |
|---|
| 801 | 837 | |
|---|
| 802 | 838 | #define HAS_NAND IS_ENABLED(CONFIG_MTD_NAND_DAVINCI) |
|---|
| 803 | 839 | |
|---|
| 840 | +#define GPIO_nVBUS_DRV 160 |
|---|
| 841 | + |
|---|
| 842 | +static struct gpiod_lookup_table dm644evm_usb_gpio_table = { |
|---|
| 843 | + .dev_id = "musb-davinci", |
|---|
| 844 | + .table = { |
|---|
| 845 | + GPIO_LOOKUP("davinci_gpio", GPIO_nVBUS_DRV, NULL, |
|---|
| 846 | + GPIO_ACTIVE_HIGH), |
|---|
| 847 | + { } |
|---|
| 848 | + }, |
|---|
| 849 | +}; |
|---|
| 850 | + |
|---|
| 804 | 851 | static __init void davinci_evm_init(void) |
|---|
| 805 | 852 | { |
|---|
| 806 | 853 | int ret; |
|---|
| .. | .. |
|---|
| 808 | 855 | struct davinci_soc_info *soc_info = &davinci_soc_info; |
|---|
| 809 | 856 | |
|---|
| 810 | 857 | dm644x_register_clocks(); |
|---|
| 858 | + |
|---|
| 859 | + regulator_register_always_on(0, "fixed-dummy", fixed_supplies_1_8v, |
|---|
| 860 | + ARRAY_SIZE(fixed_supplies_1_8v), 1800000); |
|---|
| 861 | + regulator_register_always_on(1, "fixed-dummy", fixed_supplies_3_3v, |
|---|
| 862 | + ARRAY_SIZE(fixed_supplies_3_3v), 3300000); |
|---|
| 811 | 863 | |
|---|
| 812 | 864 | dm644x_init_devices(); |
|---|
| 813 | 865 | |
|---|
| .. | .. |
|---|
| 842 | 894 | platform_add_devices(davinci_evm_devices, |
|---|
| 843 | 895 | ARRAY_SIZE(davinci_evm_devices)); |
|---|
| 844 | 896 | #ifdef CONFIG_I2C |
|---|
| 897 | + nvmem_add_cell_table(&dm644evm_nvmem_cell_table); |
|---|
| 898 | + nvmem_add_cell_lookups(&dm644evm_nvmem_cell_lookup, 1); |
|---|
| 845 | 899 | evm_init_i2c(); |
|---|
| 846 | 900 | davinci_setup_mmc(0, &dm6446evm_mmc_config); |
|---|
| 847 | 901 | #endif |
|---|
| .. | .. |
|---|
| 851 | 905 | dm644x_init_asp(); |
|---|
| 852 | 906 | |
|---|
| 853 | 907 | /* irlml6401 switches over 1A, in under 8 msec */ |
|---|
| 908 | + gpiod_add_lookup_table(&dm644evm_usb_gpio_table); |
|---|
| 854 | 909 | davinci_setup_usb(1000, 8); |
|---|
| 855 | 910 | |
|---|
| 856 | 911 | if (IS_BUILTIN(CONFIG_PHYLIB)) { |
|---|
| .. | .. |
|---|
| 865 | 920 | /* Maintainer: MontaVista Software <source@mvista.com> */ |
|---|
| 866 | 921 | .atag_offset = 0x100, |
|---|
| 867 | 922 | .map_io = davinci_evm_map_io, |
|---|
| 868 | | - .init_irq = davinci_irq_init, |
|---|
| 923 | + .init_irq = dm644x_init_irq, |
|---|
| 869 | 924 | .init_time = dm644x_init_time, |
|---|
| 870 | 925 | .init_machine = davinci_evm_init, |
|---|
| 871 | 926 | .init_late = davinci_init_late, |
|---|