diff options
Diffstat (limited to 'board/ti/am57xx/board.c')
-rw-r--r-- | board/ti/am57xx/board.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c index 9922047f8d..72c4312837 100644 --- a/board/ti/am57xx/board.c +++ b/board/ti/am57xx/board.c @@ -721,6 +721,67 @@ int board_mmc_init(bd_t *bis) } #endif +#if defined(CONFIG_IODELAY_RECALIBRATION) && \ + (defined(CONFIG_SPL_BUILD) || !defined(CONFIG_DM_MMC)) + +struct pinctrl_desc { + const char *name; + struct omap_hsmmc_pinctrl_state *pinctrl; +}; + +static struct pinctrl_desc pinctrl_descs_hsmmc1[] = { + {"default", &hsmmc1_default}, + {"hs", &hsmmc1_default}, + {NULL} +}; + +static struct pinctrl_desc pinctrl_descs_hsmmc2_am572[] = { + {"default", &hsmmc2_default_hs}, + {"hs", &hsmmc2_default_hs}, + {"ddr_1_8v", &hsmmc2_ddr_am572}, + {NULL} +}; + +static struct pinctrl_desc pinctrl_descs_hsmmc2_am571[] = { + {"default", &hsmmc2_default_hs}, + {"hs", &hsmmc2_default_hs}, + {"ddr_1_8v", &hsmmc2_ddr_am571}, + {NULL} +}; + +struct omap_hsmmc_pinctrl_state *platform_fixup_get_pinctrl_by_mode + (struct hsmmc *base, const char *mode) +{ + struct pinctrl_desc *p = NULL; + + switch ((uint32_t)base) { + case OMAP_HSMMC1_BASE: + p = pinctrl_descs_hsmmc1; + break; + case OMAP_HSMMC2_BASE: + if (is_dra72x()) + p = pinctrl_descs_hsmmc2_am571; + else + p = pinctrl_descs_hsmmc2_am572; + break; + default: + break; + } + + if (!p) { + printf("%s no pinctrl defined for MMC@%p\n", __func__, + base); + return NULL; + } + while (p->name) { + if (strcmp(mode, p->name) == 0) + return p->pinctrl; + p++; + } + return NULL; +} +#endif + #ifdef CONFIG_OMAP_HSMMC int platform_fixup_disable_uhs_mode(void) { |