|
@@ -1223,22 +1223,25 @@ static int sdhci_get_ro(struct mmc_host *mmc)
|
|
|
{
|
|
|
struct sdhci_host *host;
|
|
|
unsigned long flags;
|
|
|
- int present;
|
|
|
+ int is_readonly;
|
|
|
|
|
|
host = mmc_priv(mmc);
|
|
|
|
|
|
spin_lock_irqsave(&host->lock, flags);
|
|
|
|
|
|
if (host->flags & SDHCI_DEVICE_DEAD)
|
|
|
- present = 0;
|
|
|
+ is_readonly = 0;
|
|
|
+ else if (host->ops->get_ro)
|
|
|
+ is_readonly = host->ops->get_ro(host);
|
|
|
else
|
|
|
- present = sdhci_readl(host, SDHCI_PRESENT_STATE);
|
|
|
+ is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE)
|
|
|
+ & SDHCI_WRITE_PROTECT);
|
|
|
|
|
|
spin_unlock_irqrestore(&host->lock, flags);
|
|
|
|
|
|
- if (host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT)
|
|
|
- return !!(present & SDHCI_WRITE_PROTECT);
|
|
|
- return !(present & SDHCI_WRITE_PROTECT);
|
|
|
+ /* This quirk needs to be replaced by a callback-function later */
|
|
|
+ return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ?
|
|
|
+ !is_readonly : is_readonly;
|
|
|
}
|
|
|
|
|
|
static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
|