|
@@ -498,3 +498,128 @@ fail:
|
|
|
|
|
|
/* Read SW5 to set up NAND + keypad _or_ OneNAND (sync read).
|
|
/* Read SW5 to set up NAND + keypad _or_ OneNAND (sync read).
|
|
* NOTE: SW4 bus width setting must match!
|
|
* NOTE: SW4 bus width setting must match!
|
|
|
|
+ */
|
|
|
|
+ if ((__raw_readb(cpld + CPLD_SWITCH) & BIT(5)) == 0) {
|
|
|
|
+ /* external keypad mux */
|
|
|
|
+ mux |= BIT(7);
|
|
|
|
+
|
|
|
|
+ platform_add_devices(dm365_evm_nand_devices,
|
|
|
|
+ ARRAY_SIZE(dm365_evm_nand_devices));
|
|
|
|
+ } else {
|
|
|
|
+ /* no OneNAND support yet */
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* Leave external chips in reset when unused. */
|
|
|
|
+ resets = BIT(3) | BIT(2) | BIT(1) | BIT(0);
|
|
|
|
+
|
|
|
|
+ /* Static video input config with SN74CBT16214 1-of-3 mux:
|
|
|
|
+ * - port b1 == tvp7002 (mux lowbits == 1 or 6)
|
|
|
|
+ * - port b2 == imager (mux lowbits == 2 or 7)
|
|
|
|
+ * - port b3 == tvp5146 (mux lowbits == 5)
|
|
|
|
+ *
|
|
|
|
+ * Runtime switching could work too, with limitations.
|
|
|
|
+ */
|
|
|
|
+ if (have_imager()) {
|
|
|
|
+ label = "HD imager";
|
|
|
|
+ mux |= 2;
|
|
|
|
+
|
|
|
|
+ /* externally mux MMC1/ENET/AIC33 to imager */
|
|
|
|
+ mux |= BIT(6) | BIT(5) | BIT(3);
|
|
|
|
+ } else {
|
|
|
|
+ struct davinci_soc_info *soc_info = &davinci_soc_info;
|
|
|
|
+
|
|
|
|
+ /* we can use MMC1 ... */
|
|
|
|
+ dm365evm_mmc_configure();
|
|
|
|
+ davinci_setup_mmc(1, &dm365evm_mmc_config);
|
|
|
|
+
|
|
|
|
+ /* ... and ENET ... */
|
|
|
|
+ dm365evm_emac_configure();
|
|
|
|
+ soc_info->emac_pdata->phy_id = DM365_EVM_PHY_ID;
|
|
|
|
+ resets &= ~BIT(3);
|
|
|
|
+
|
|
|
|
+ /* ... and AIC33 */
|
|
|
|
+ resets &= ~BIT(1);
|
|
|
|
+
|
|
|
|
+ if (have_tvp7002()) {
|
|
|
|
+ mux |= 1;
|
|
|
|
+ resets &= ~BIT(2);
|
|
|
|
+ label = "tvp7002 HD";
|
|
|
|
+ } else {
|
|
|
|
+ /* default to tvp5146 */
|
|
|
|
+ mux |= 5;
|
|
|
|
+ resets &= ~BIT(0);
|
|
|
|
+ label = "tvp5146 SD";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ __raw_writeb(mux, cpld + CPLD_MUX);
|
|
|
|
+ __raw_writeb(resets, cpld + CPLD_RESETS);
|
|
|
|
+ pr_info("EVM: %s video input\n", label);
|
|
|
|
+
|
|
|
|
+ /* REVISIT export switches: NTSC/PAL (SW5.6), EXTRA1 (SW5.2), etc */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct davinci_uart_config uart_config __initdata = {
|
|
|
|
+ .enabled_uarts = (1 << 0),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init dm365_evm_map_io(void)
|
|
|
|
+{
|
|
|
|
+ /* setup input configuration for VPFE input devices */
|
|
|
|
+ dm365_set_vpfe_config(&vpfe_cfg);
|
|
|
|
+ dm365_init();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct spi_eeprom at25640 = {
|
|
|
|
+ .byte_len = SZ_64K / 8,
|
|
|
|
+ .name = "at25640",
|
|
|
|
+ .page_size = 32,
|
|
|
|
+ .flags = EE_ADDR2,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct spi_board_info dm365_evm_spi_info[] __initconst = {
|
|
|
|
+ {
|
|
|
|
+ .modalias = "at25",
|
|
|
|
+ .platform_data = &at25640,
|
|
|
|
+ .max_speed_hz = 10 * 1000 * 1000,
|
|
|
|
+ .bus_num = 0,
|
|
|
|
+ .chip_select = 0,
|
|
|
|
+ .mode = SPI_MODE_0,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static __init void dm365_evm_init(void)
|
|
|
|
+{
|
|
|
|
+ evm_init_i2c();
|
|
|
|
+ davinci_serial_init(&uart_config);
|
|
|
|
+
|
|
|
|
+ dm365evm_emac_configure();
|
|
|
|
+ dm365evm_mmc_configure();
|
|
|
|
+
|
|
|
|
+ davinci_setup_mmc(0, &dm365evm_mmc_config);
|
|
|
|
+
|
|
|
|
+ /* maybe setup mmc1/etc ... _after_ mmc0 */
|
|
|
|
+ evm_init_cpld();
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_SND_DM365_AIC3X_CODEC
|
|
|
|
+ dm365_init_asp(&dm365_evm_snd_data);
|
|
|
|
+#elif defined(CONFIG_SND_DM365_VOICE_CODEC)
|
|
|
|
+ dm365_init_vc(&dm365_evm_snd_data);
|
|
|
|
+#endif
|
|
|
|
+ dm365_init_rtc();
|
|
|
|
+ dm365_init_ks(&dm365evm_ks_data);
|
|
|
|
+
|
|
|
|
+ dm365_init_spi0(BIT(0), dm365_evm_spi_info,
|
|
|
|
+ ARRAY_SIZE(dm365_evm_spi_info));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+MACHINE_START(DAVINCI_DM365_EVM, "DaVinci DM365 EVM")
|
|
|
|
+ .atag_offset = 0x100,
|
|
|
|
+ .map_io = dm365_evm_map_io,
|
|
|
|
+ .init_irq = davinci_irq_init,
|
|
|
|
+ .timer = &davinci_timer,
|
|
|
|
+ .init_machine = dm365_evm_init,
|
|
|
|
+ .init_late = davinci_init_late,
|
|
|
|
+ .dma_zone_size = SZ_128M,
|
|
|
|
+ .restart = davinci_restart,
|
|
|
|
+MACHINE_END
|
|
|
|
+
|