summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDov Levenglick <dovl@codeaurora.org>2015-07-20 16:50:03 +0300
committerSubhash Jadavani <subhashj@codeaurora.org>2016-05-31 15:27:03 -0700
commit348a140b51c072d00ca66d56e8d20e5fcab758ad (patch)
treed722b1aa2812dfb597fca86c7239b95c40ac8350
parent9ee678d1ddb6864c140d0442a958f195c149d78a (diff)
mmc: host: add detect vops chain
Add call from sdio to host_ops to sdhci_ops in order to indicate when a sdio card is detected. This will be used by hosts that require special handling for card detection. Change-Id: I65ec6ee464d658cd938d9254a0a748e6137f9223 Signed-off-by: Dov Levenglick <dovl@codeaurora.org> [subhashj@codeaurora.org: fixed trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
-rw-r--r--drivers/mmc/core/sdio.c3
-rw-r--r--drivers/mmc/host/sdhci.c9
-rw-r--r--drivers/mmc/host/sdhci.h1
-rw-r--r--include/linux/mmc/host.h1
4 files changed, 14 insertions, 0 deletions
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index b0ce838f7ee6..b3b1526e5609 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -890,6 +890,9 @@ static void mmc_sdio_detect(struct mmc_host *host)
*/
err = _mmc_detect_card_removed(host);
+ if (host->ops && host->ops->detect)
+ host->ops->detect(host, err);
+
mmc_release_host(host);
/*
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 94bfc9c49806..a3903184a5f8 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2574,6 +2574,14 @@ static void sdhci_card_event(struct mmc_host *mmc)
spin_unlock_irqrestore(&host->lock, flags);
}
+static void sdhci_detect(struct mmc_host *mmc, bool detected)
+{
+ struct sdhci_host *host = mmc_priv(mmc);
+
+ if (host->ops->detect)
+ host->ops->detect(host, detected);
+}
+
static const struct mmc_host_ops sdhci_ops = {
.request = sdhci_request,
.post_req = sdhci_post_req,
@@ -2594,6 +2602,7 @@ static const struct mmc_host_ops sdhci_ops = {
.disable = sdhci_disable,
.notify_load = sdhci_notify_load,
.notify_halt = sdhci_notify_halt,
+ .detect = sdhci_detect,
};
/*****************************************************************************\
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index e8ff78f125c6..e6e818e89c39 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -666,6 +666,7 @@ struct sdhci_ops {
int (*enable_controller_clock)(struct sdhci_host *host);
void (*clear_set_dumpregs)(struct sdhci_host *host, bool set);
void (*enhanced_strobe_mask)(struct sdhci_host *host, bool set);
+ void (*detect)(struct sdhci_host *host, bool detected);
void (*dump_vendor_regs)(struct sdhci_host *host);
void (*toggle_cdr)(struct sdhci_host *host, bool enable);
void (*voltage_switch)(struct sdhci_host *host);
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 7f624c5338b5..9bf53de32a07 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -179,6 +179,7 @@ struct mmc_host_ops {
int (*notify_load)(struct mmc_host *, enum mmc_load);
void (*notify_halt)(struct mmc_host *mmc, bool halt);
+ void (*detect)(struct mmc_host *host, bool detected);
};
struct mmc_card;