aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/s3cmci.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c
index 6f1b474e33b9..62d73d3497f0 100644
--- a/drivers/mmc/host/s3cmci.c
+++ b/drivers/mmc/host/s3cmci.c
@@ -984,6 +984,18 @@ static void s3cmci_send_request(struct mmc_host *mmc)
984 enable_irq(host->irq); 984 enable_irq(host->irq);
985} 985}
986 986
987static int s3cmci_card_present(struct s3cmci_host *host)
988{
989 struct s3c24xx_mci_pdata *pdata = host->pdata;
990 int ret;
991
992 if (pdata->gpio_detect == 0)
993 return -ENOSYS;
994
995 ret = s3c2410_gpio_getpin(pdata->gpio_detect) ? 0 : 1;
996 return ret ^ pdata->detect_invert;
997}
998
987static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq) 999static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq)
988{ 1000{
989 struct s3cmci_host *host = mmc_priv(mmc); 1001 struct s3cmci_host *host = mmc_priv(mmc);
@@ -992,7 +1004,12 @@ static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq)
992 host->cmd_is_stop = 0; 1004 host->cmd_is_stop = 0;
993 host->mrq = mrq; 1005 host->mrq = mrq;
994 1006
995 s3cmci_send_request(mmc); 1007 if (s3cmci_card_present(host) == 0) {
1008 dbg(host, dbg_err, "%s: no medium present\n", __func__);
1009 host->mrq->cmd->error = -ENOMEDIUM;
1010 mmc_request_done(mmc, mrq);
1011 } else
1012 s3cmci_send_request(mmc);
996} 1013}
997 1014
998static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) 1015static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)