mmc: fsl_esdhc: Add adapter card type identification support
[oweals/u-boot.git] / drivers / mmc / fsl_esdhc.c
index 10ec216d2c5a9c844955c324089839221068ba84..270ec1c1fad6a34c87538c85f50ad3d3440e5190 100644 (file)
@@ -694,6 +694,39 @@ int fsl_esdhc_mmc_init(bd_t *bis)
        return fsl_esdhc_initialize(bis, cfg);
 }
 
+#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
+void mmc_adapter_card_type_ident(void)
+{
+       u8 card_id;
+       u8 value;
+
+       card_id = QIXIS_READ(present) & QIXIS_SDID_MASK;
+       gd->arch.sdhc_adapter = card_id;
+
+       switch (card_id) {
+       case QIXIS_ESDHC_ADAPTER_TYPE_EMMC45:
+               break;
+       case QIXIS_ESDHC_ADAPTER_TYPE_SDMMC_LEGACY:
+               break;
+       case QIXIS_ESDHC_ADAPTER_TYPE_EMMC44:
+               value = QIXIS_READ(brdcfg[5]);
+               value |= (QIXIS_SDCLKIN | QIXIS_SDCLKOUT);
+               QIXIS_WRITE(brdcfg[5], value);
+               break;
+       case QIXIS_ESDHC_ADAPTER_TYPE_RSV:
+               break;
+       case QIXIS_ESDHC_ADAPTER_TYPE_MMC:
+               break;
+       case QIXIS_ESDHC_ADAPTER_TYPE_SD:
+               break;
+       case QIXIS_ESDHC_NO_ADAPTER:
+               break;
+       default:
+               break;
+       }
+}
+#endif
+
 #ifdef CONFIG_OF_LIBFDT
 void fdt_fixup_esdhc(void *blob, bd_t *bd)
 {
@@ -709,7 +742,10 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd)
 
        do_fixup_by_compat_u32(blob, compat, "clock-frequency",
                               gd->arch.sdhc_clk, 1);
-
+#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
+       do_fixup_by_compat_u32(blob, compat, "adapter-type",
+                              (u32)(gd->arch.sdhc_adapter), 1);
+#endif
        do_fixup_by_compat(blob, compat, "status", "okay",
                           4 + 1, 1);
 }