|
@@ -243,3 +243,78 @@ static int da830_evm_mmc_get_cd(int index)
|
|
|
static struct davinci_mmc_config da830_evm_mmc_config = {
|
|
|
.get_ro = da830_evm_mmc_get_ro,
|
|
|
.get_cd = da830_evm_mmc_get_cd,
|
|
|
+ .wires = 8,
|
|
|
+ .max_freq = 50000000,
|
|
|
+ .caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
|
|
|
+ .version = MMC_CTLR_VERSION_2,
|
|
|
+};
|
|
|
+
|
|
|
+static inline void da830_evm_init_mmc(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = davinci_cfg_reg_list(da830_evm_mmc_sd_pins);
|
|
|
+ if (ret) {
|
|
|
+ pr_warning("da830_evm_init: mmc/sd mux setup failed: %d\n",
|
|
|
+ ret);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = gpio_request(DA830_MMCSD_WP_PIN, "MMC WP");
|
|
|
+ if (ret) {
|
|
|
+ pr_warning("da830_evm_init: can not open GPIO %d\n",
|
|
|
+ DA830_MMCSD_WP_PIN);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ gpio_direction_input(DA830_MMCSD_WP_PIN);
|
|
|
+
|
|
|
+ ret = gpio_request(DA830_MMCSD_CD_PIN, "MMC CD\n");
|
|
|
+ if (ret) {
|
|
|
+ pr_warning("da830_evm_init: can not open GPIO %d\n",
|
|
|
+ DA830_MMCSD_CD_PIN);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ gpio_direction_input(DA830_MMCSD_CD_PIN);
|
|
|
+
|
|
|
+ ret = da8xx_register_mmcsd0(&da830_evm_mmc_config);
|
|
|
+ if (ret) {
|
|
|
+ pr_warning("da830_evm_init: mmc/sd registration failed: %d\n",
|
|
|
+ ret);
|
|
|
+ gpio_free(DA830_MMCSD_WP_PIN);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * UI board NAND/NOR flashes only use 8-bit data bus.
|
|
|
+ */
|
|
|
+static const short da830_evm_emif25_pins[] = {
|
|
|
+ DA830_EMA_D_0, DA830_EMA_D_1, DA830_EMA_D_2, DA830_EMA_D_3,
|
|
|
+ DA830_EMA_D_4, DA830_EMA_D_5, DA830_EMA_D_6, DA830_EMA_D_7,
|
|
|
+ DA830_EMA_A_0, DA830_EMA_A_1, DA830_EMA_A_2, DA830_EMA_A_3,
|
|
|
+ DA830_EMA_A_4, DA830_EMA_A_5, DA830_EMA_A_6, DA830_EMA_A_7,
|
|
|
+ DA830_EMA_A_8, DA830_EMA_A_9, DA830_EMA_A_10, DA830_EMA_A_11,
|
|
|
+ DA830_EMA_A_12, DA830_EMA_BA_0, DA830_EMA_BA_1, DA830_NEMA_WE,
|
|
|
+ DA830_NEMA_CS_2, DA830_NEMA_CS_3, DA830_NEMA_OE, DA830_EMA_WAIT_0,
|
|
|
+ -1
|
|
|
+};
|
|
|
+
|
|
|
+#if defined(CONFIG_MMC_DAVINCI) || defined(CONFIG_MMC_DAVINCI_MODULE)
|
|
|
+#define HAS_MMC 1
|
|
|
+#else
|
|
|
+#define HAS_MMC 0
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef CONFIG_DA830_UI_NAND
|
|
|
+static struct mtd_partition da830_evm_nand_partitions[] = {
|
|
|
+ /* bootloader (U-Boot, etc) in first sector */
|
|
|
+ [0] = {
|
|
|
+ .name = "bootloader",
|
|
|
+ .offset = 0,
|
|
|
+ .size = SZ_128K,
|
|
|
+ .mask_flags = MTD_WRITEABLE, /* force read-only */
|
|
|
+ },
|
|
|
+ /* bootloader params in the next sector */
|
|
|
+ [1] = {
|
|
|
+ .name = "params",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = SZ_128K,
|