diff options
-rw-r--r-- | drivers/mmc/host/s3cmci.c | 19 | ||||
-rw-r--r-- | include/asm-arm/plat-s3c24xx/mci.h | 1 |
2 files changed, 19 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 | ||
987 | static 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 | |||
987 | static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq) | 999 | static 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 | ||
998 | static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | 1015 | static void s3cmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) |
diff --git a/include/asm-arm/plat-s3c24xx/mci.h b/include/asm-arm/plat-s3c24xx/mci.h index 4f4ccd18f0cb..2d0852ac3b27 100644 --- a/include/asm-arm/plat-s3c24xx/mci.h +++ b/include/asm-arm/plat-s3c24xx/mci.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | struct s3c24xx_mci_pdata { | 4 | struct s3c24xx_mci_pdata { |
5 | unsigned int wprotect_invert : 1; | 5 | unsigned int wprotect_invert : 1; |
6 | unsigned int detect_invert : 1; /* set => detect active high. */ | ||
6 | 7 | ||
7 | unsigned int gpio_detect; | 8 | unsigned int gpio_detect; |
8 | unsigned int gpio_wprotect; | 9 | unsigned int gpio_wprotect; |