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

Commit 29719445 authored by Rabin Vincent's avatar Rabin Vincent Committed by Russell King
Browse files

ARM: 6307/1: mmci: allow the card detect GPIO value not to be inverted



On some platforms, the GPIO value from the gpio_cd pin doesn't need to
be inverted to get it active high.  Add a cd_invert platform data
parameter and change existing platforms using GPIO for CD (only
Realview) to enable it.

Acked-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent d4348c67
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -259,6 +259,7 @@ struct mmci_platform_data realview_mmc0_plat_data = {
	.status		= realview_mmc_status,
	.gpio_wp	= 17,
	.gpio_cd	= 16,
	.cd_invert	= true,
};

struct mmci_platform_data realview_mmc1_plat_data = {
@@ -266,6 +267,7 @@ struct mmci_platform_data realview_mmc1_plat_data = {
	.status		= realview_mmc_status,
	.gpio_wp	= 19,
	.gpio_cd	= 18,
	.cd_invert	= true,
};

/*
+3 −2
Original line number Diff line number Diff line
@@ -570,12 +570,13 @@ static int mmci_get_ro(struct mmc_host *mmc)
static int mmci_get_cd(struct mmc_host *mmc)
{
	struct mmci_host *host = mmc_priv(mmc);
	struct mmci_platform_data *plat = host->plat;
	unsigned int status;

	if (host->gpio_cd == -ENOSYS)
		status = host->plat->status(mmc_dev(host->mmc));
		status = plat->status(mmc_dev(host->mmc));
	else
		status = !gpio_get_value(host->gpio_cd);
		status = !!gpio_get_value(host->gpio_cd) ^ plat->cd_invert;

	/*
	 * Use positive logic throughout - status is zero for no card,
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
 * whether a card is present in the MMC slot or not
 * @gpio_wp: read this GPIO pin to see if the card is write protected
 * @gpio_cd: read this GPIO pin to detect card insertion
 * @cd_invert: true if the gpio_cd pin value is active low
 * @capabilities: the capabilities of the block as implemented in
 * this platform, signify anything MMC_CAP_* from mmc/host.h
 */
@@ -35,6 +36,7 @@ struct mmci_platform_data {
	unsigned int (*status)(struct device *);
	int	gpio_wp;
	int	gpio_cd;
	bool	cd_invert;
	unsigned long capabilities;
};