Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dfb579c authored by Wolfram Sang's avatar Wolfram Sang Committed by Chris Ball
Browse files

mmc: sdhci: introduce get_ro private write-protect hook



Some controllers handle their write-protection differently. Introduce a
callback to be able to handle it, ensuring the same locking takes place
for it. Rename the status variable to make it more obvious why the read
from the registers needs to be inverted.

Signed-off-by: default avatarWolfram Sang <w.sang@pengutronix.de>
Tested-by: default avatarEric Bénard <eric@eukrea.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent d3b993dc
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -214,6 +214,7 @@ struct sdhci_ops {
	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
	void (*platform_send_init_74_clocks)(struct sdhci_host *host,
					     u8 power_mode);
	unsigned int    (*get_ro)(struct sdhci_host *host);
};

#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS