diff options
author | Patrice Chotard <patrice.chotard@st.com> | 2017-10-23 10:57:34 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-11-17 07:44:13 -0500 |
commit | 5829fe2d59d8c088dadc43dedb36a657d791970c (patch) | |
tree | 1c2dc0e3639b9b4dfa6ebe8176184ebdfbc16841 | |
parent | 5f256fe71dd064063f8390926922085c2c7c14fc (diff) |
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>
-rw-r--r-- | drivers/mmc/arm_pl180_mmci.c | 24 | ||||
-rw-r--r-- | 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 <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) 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); |