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

Commit bd6a8c30 authored by Philip Rakity's avatar Philip Rakity Committed by Chris Ball
Browse files

mmc: sdhci: Allow caps[1] to be set via SDHCI_QUIRK_MISSING_CAPS



Currently only the capability_0 register can be set if
SDHCI_QUIRK_MISSING_CAPS is defined.  This is a problem when
the capability_1 register also needs changing.  Use the quirk
SDHCI_QUIRK_MISSING_CAPS to allow both registers to be set.

Redefining caps[1] is useful when the board design does not
support 1.8v vccq so UHS modes are not available.  The code that
calls sdhci_add_host can then detect this condition and adjust
the caps so the UHS mode will not be attempted on UHS cards.

Signed-off-by: default avatarPhilip Rakity <prakity@marvell.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 4dc5a79f
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -2584,7 +2584,7 @@ EXPORT_SYMBOL_GPL(sdhci_alloc_host);
int sdhci_add_host(struct sdhci_host *host)
int sdhci_add_host(struct sdhci_host *host)
{
{
	struct mmc_host *mmc;
	struct mmc_host *mmc;
	u32 caps[2];
	u32 caps[2] = {0, 0};
	u32 max_current_caps;
	u32 max_current_caps;
	unsigned int ocr_avail;
	unsigned int ocr_avail;
	int ret;
	int ret;
@@ -2614,8 +2614,10 @@ int sdhci_add_host(struct sdhci_host *host)
	caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps :
	caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps :
		sdhci_readl(host, SDHCI_CAPABILITIES);
		sdhci_readl(host, SDHCI_CAPABILITIES);


	caps[1] = (host->version >= SDHCI_SPEC_300) ?
	if (host->version >= SDHCI_SPEC_300)
		sdhci_readl(host, SDHCI_CAPABILITIES_1) : 0;
		caps[1] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ?
			host->caps1 :
			sdhci_readl(host, SDHCI_CAPABILITIES_1);


	if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
	if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
		host->flags |= SDHCI_USE_SDMA;
		host->flags |= SDHCI_USE_SDMA;
+2 −1
Original line number Original line Diff line number Diff line
@@ -155,7 +155,8 @@ struct sdhci_host {


	struct timer_list timer;	/* Timer for timeouts */
	struct timer_list timer;	/* Timer for timeouts */


	unsigned int caps;	/* Alternative capabilities */
	unsigned int caps;	/* Alternative CAPABILITY_0 */
	unsigned int caps1;	/* Alternative CAPABILITY_1 */


	unsigned int            ocr_avail_sdio;	/* OCR bit masks */
	unsigned int            ocr_avail_sdio;	/* OCR bit masks */
	unsigned int            ocr_avail_sd;
	unsigned int            ocr_avail_sd;