aboutsummaryrefslogtreecommitdiff
path: root/board/ti/am57xx/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/ti/am57xx/board.c')
-rw-r--r--board/ti/am57xx/board.c61
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)
{