diff options
author | Vishal Singh <vissingh@nvidia.com> | 2011-03-01 17:40:57 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-03-25 17:09:04 -0700 |
commit | a616ec3ef588ab50b4f296b5b022b1bb5934aa31 (patch) | |
tree | 97e10273e49486566619ac30ff54e5d26414f938 | |
parent | 93da32d7e16da64d6d4dd37fb18125ad0be8aa63 (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>
-rw-r--r-- | drivers/mmc/host/sdhci-tegra.c | 12 |
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)) { |