summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVishal Singh <vissingh@nvidia.com>2011-03-01 17:40:57 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-03-25 17:09:04 -0700
commita616ec3ef588ab50b4f296b5b022b1bb5934aa31 (patch)
tree97e10273e49486566619ac30ff54e5d26414f938 /drivers
parent93da32d7e16da64d6d4dd37fb18125ad0be8aa63 (diff)
tegra: sdhci: enable write protection on sd cards
Write protection was disabled in K36. Enabling this feature by storing the write protection GPIO pin number (wp_gpio) from platform_data for the device and reading this GPIO (whenever the card is inserted) to determine whether the card is write protected or not. Bug 686892. Change-Id: I6f1855b7b974caaa5ea58aaee3881d85d5da6c18 Reviewed-in: http://git-master/r/#change,21101 Reviewed-on: http://git-master/r/23971 Reviewed-by: David Schalig <dschalig@nvidia.com> Tested-by: David Schalig <dschalig@nvidia.com> Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/host/sdhci-tegra.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 3f54f759fe1c..67307a3e5203 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -40,6 +40,7 @@ struct tegra_sdhci_host {
int clk_enabled;
bool card_always_on;
u32 sdhci_ints;
+ int wp_gpio;
};
static irqreturn_t carddetect_irq(int irq, void *data)
@@ -85,9 +86,19 @@ static void tegra_sdhci_set_clock(struct sdhci_host *sdhci, unsigned int clock)
tegra_sdhci_enable_clock(host, clock);
}
+static int tegra_sdhci_get_ro(struct sdhci_host *sdhci)
+{
+ struct tegra_sdhci_host *host;
+ host = sdhci_priv(sdhci);
+ if (gpio_is_valid(host->wp_gpio))
+ return gpio_get_value(host->wp_gpio);
+ return 0;
+}
+
static struct sdhci_ops tegra_sdhci_ops = {
.enable_dma = tegra_sdhci_enable_dma,
.set_clock = tegra_sdhci_set_clock,
+ .get_ro = tegra_sdhci_get_ro,
};
static int __devinit tegra_sdhci_probe(struct platform_device *pdev)
@@ -125,6 +136,7 @@ static int __devinit tegra_sdhci_probe(struct platform_device *pdev)
host = sdhci_priv(sdhci);
host->sdhci = sdhci;
host->card_always_on = (plat->power_gpio == -1) ? 1 : 0;
+ host->wp_gpio = plat->wp_gpio;
host->clk = clk_get(&pdev->dev, plat->clk_id);
if (IS_ERR(host->clk)) {