Signed-off-by: Hans de Goede <hdego...@redhat.com>
---
 board/sunxi/Kconfig     | 27 +++++++++++++++++++++++++++
 drivers/mmc/sunxi_mmc.c | 20 ++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
index 622f7b4..72d6dfa 100644
--- a/board/sunxi/Kconfig
+++ b/board/sunxi/Kconfig
@@ -32,4 +32,31 @@ config USB_KEYBOARD
        Say Y here to add support for using a USB keyboard (typically used
        in combination with a graphical console on HDMI).
 
+config MMC0_CD_PIN
+       int "Card detect pin for mmc0"
+       default -1
+       ---help---
+       Set the card detect pin for mmc0, set to -1 to not use cd. The pins
+       are numbered as follows PA0 - PA17 are pin number 0 - 17, PB0 - PB23
+       are 32 - 55, PC0 - PC24 are 64 - 88, etc. Most boards use PH1 for
+       mmc0 cd, which is pin nr 225.
+
+config MMC1_CD_PIN
+       int "Card detect pin for mmc1"
+       default -1
+       ---help---
+       See MMC0_CD_PIN help text.
+
+config MMC2_CD_PIN
+       int "Card detect pin for mmc2"
+       default -1
+       ---help---
+       See MMC0_CD_PIN help text.
+
+config MMC3_CD_PIN
+       int "Card detect pin for mmc3"
+       default -1
+       ---help---
+       See MMC0_CD_PIN help text.
+
 endif
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
index bc2c4b3..a397b86 100644
--- a/drivers/mmc/sunxi_mmc.c
+++ b/drivers/mmc/sunxi_mmc.c
@@ -14,6 +14,7 @@
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/cpu.h>
+#include <asm/arch/gpio.h>
 #include <asm/arch/mmc.h>
 
 struct sunxi_mmc_host {
@@ -343,10 +344,29 @@ out:
        return error;
 }
 
+static int sunxi_mmc_getcd(struct mmc *mmc)
+{
+       struct sunxi_mmc_host *mmchost = mmc->priv;
+       int cd_pin = -1;
+
+       switch (mmchost->mmc_no) {
+       case 0: cd_pin = CONFIG_MMC0_CD_PIN; break;
+       case 1: cd_pin = CONFIG_MMC1_CD_PIN; break;
+       case 2: cd_pin = CONFIG_MMC2_CD_PIN; break;
+       case 3: cd_pin = CONFIG_MMC3_CD_PIN; break;
+       }
+
+       if (cd_pin == -1)
+               return 1;
+
+       return !sunxi_gpio_get_val(cd_pin);
+}
+
 static const struct mmc_ops sunxi_mmc_ops = {
        .send_cmd       = mmc_send_cmd,
        .set_ios        = mmc_set_ios,
        .init           = mmc_core_init,
+       .getcd          = sunxi_mmc_getcd,
 };
 
 int sunxi_mmc_init(int sdc_no)
-- 
2.1.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to