aboutsummaryrefslogtreecommitdiff
path: root/drivers/mmc/arm_pl180_mmci.c
diff options
context:
space:
mode:
authorPatrice Chotard <patrice.chotard@st.com>2017-10-23 10:57:34 +0200
committerTom Rini <trini@konsulko.com>2017-11-17 07:44:13 -0500
commit5829fe2d59d8c088dadc43dedb36a657d791970c (patch)
tree1c2dc0e3639b9b4dfa6ebe8176184ebdfbc16841 /drivers/mmc/arm_pl180_mmci.c
parent5f256fe71dd064063f8390926922085c2c7c14fc (diff)
downloadu-boot-5829fe2d59d8c088dadc43dedb36a657d791970c.zip
u-boot-5829fe2d59d8c088dadc43dedb36a657d791970c.tar.gz
u-boot-5829fe2d59d8c088dadc43dedb36a657d791970c.tar.bz2
mmc: arm_pl180_mmci: add .getcd callback
Add .getcd callback to check is MMC card is present Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Diffstat (limited to 'drivers/mmc/arm_pl180_mmci.c')
-rw-r--r--drivers/mmc/arm_pl180_mmci.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c
index 3de6b12..89a7c19 100644
--- a/drivers/mmc/arm_pl180_mmci.c
+++ b/drivers/mmc/arm_pl180_mmci.c
@@ -18,9 +18,10 @@
#include <malloc.h>
#include <mmc.h>
-#include "arm_pl180_mmci.h"
-
#include <asm/io.h>
+#include <asm-generic/gpio.h>
+
+#include "arm_pl180_mmci.h"
#ifdef CONFIG_DM_MMC
#include <dm.h>
@@ -435,6 +436,8 @@ static int arm_pl180_mmc_probe(struct udevice *dev)
MMC_CLOCK_MAX);
host->version2 = dev_get_driver_data(dev);
+ gpio_request_by_name(dev, "cd-gpios", 0, &host->cd_gpio, GPIOD_IS_IN);
+
bus_width = dev_read_u32_default(dev, "bus-width", 1);
switch (bus_width) {
case 8:
@@ -477,9 +480,26 @@ static int dm_host_set_ios(struct udevice *dev)
return host_set_ios(mmc);
}
+static int dm_mmc_getcd(struct udevice *dev)
+{
+ struct arm_pl180_mmc_plat *pdata = dev_get_platdata(dev);
+ struct mmc *mmc = &pdata->mmc;
+ struct pl180_mmc_host *host = mmc->priv;
+ int value = 1;
+
+ if (dm_gpio_is_valid(&host->cd_gpio)) {
+ value = dm_gpio_get_value(&host->cd_gpio);
+ if (host->cd_inverted)
+ return !value;
+ }
+
+ return value;
+}
+
static const struct dm_mmc_ops arm_pl180_dm_mmc_ops = {
.send_cmd = dm_host_request,
.set_ios = dm_host_set_ios,
+ .get_cd = dm_mmc_getcd,
};
static int arm_pl180_mmc_ofdata_to_platdata(struct udevice *dev)