From 5829fe2d59d8c088dadc43dedb36a657d791970c Mon Sep 17 00:00:00 2001 From: Patrice Chotard Date: Mon, 23 Oct 2017 10:57:34 +0200 Subject: [PATCH] mmc: arm_pl180_mmci: add .getcd callback Add .getcd callback to check is MMC card is present Signed-off-by: Patrice Chotard --- drivers/mmc/arm_pl180_mmci.c | 24 ++++++++++++++++++++++-- drivers/mmc/arm_pl180_mmci.h | 4 ++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index 3de6b12b0c..89a7c19242 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -18,9 +18,10 @@ #include #include -#include "arm_pl180_mmci.h" - #include +#include + +#include "arm_pl180_mmci.h" #ifdef CONFIG_DM_MMC #include @@ -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) diff --git a/drivers/mmc/arm_pl180_mmci.h b/drivers/mmc/arm_pl180_mmci.h index b935288704..9df4b75470 100644 --- a/drivers/mmc/arm_pl180_mmci.h +++ b/drivers/mmc/arm_pl180_mmci.h @@ -191,6 +191,10 @@ struct pl180_mmc_host { unsigned int pwr_init; int version2; struct mmc_config cfg; +#ifdef CONFIG_DM_MMC + struct gpio_desc cd_gpio; + bool cd_inverted; +#endif }; int arm_pl180_mmci_init(struct pl180_mmc_host *host, struct mmc **mmc); -- 2.25.1