summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorvjagadish <vjagadish@nvidia.com>2011-09-13 13:35:39 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-09-13 18:53:47 -0700
commitb9a8d5523af94a3eb033179757f7c63d9bd2856a (patch)
treefe878f5b020d4b4bf393ba0fc353ca72d3b8a63f /drivers
parentea3ee402c624826f70c735f56a017326e3c7ed83 (diff)
sdhci: tegra: Detect SDcard inserted/Removed during suspend
Update card_present variable during resume by reading card detect gpio value inorder to detect cards inserted or removed during suspend Bug 871234 Change-Id: I4e068d5ad595d58fa245d7ec1fb24973ffdd4aca Reviewed-on: http://git-master/r/51778 Reviewed-by: Venkata Jagadish <vjagadish@nvidia.com> Tested-by: Venkata Jagadish <vjagadish@nvidia.com> Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com> Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/host/sdhci-tegra.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 0ee91e543200..e5fc4ca495d8 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -604,7 +604,7 @@ static int tegra_sdhci_suspend(struct platform_device *pdev, pm_message_t state)
static int tegra_sdhci_resume(struct platform_device *pdev)
{
struct tegra_sdhci_host *host = platform_get_drvdata(pdev);
- int ret = 0;
+ int ret = 0, prev_card_present_stat = 0;
if (host->card_always_on && is_card_sdio(host->sdhci->mmc->card)) {
int ret = 0;
@@ -631,10 +631,21 @@ static int tegra_sdhci_resume(struct platform_device *pdev)
ret = regulator_enable(host->reg_vddio);
tegra_sdhci_enable_clock(host, SDHCI_TEGRA_MIN_CONTROLLER_CLOCK);
+
ret = sdhci_resume_host(host->sdhci);
if (ret)
pr_err("%s: failed, error = %d\n", __func__, ret);
+ if (host->cd_gpio != -1) {
+ prev_card_present_stat = host->card_present;
+
+ host->card_present =
+ (gpio_get_value(host->cd_gpio) == host->cd_gpio_polarity);
+
+ if(prev_card_present_stat != host->card_present)
+ sdhci_card_detect_callback(host->sdhci);
+ }
+
return ret;
}
#else