Commit 32d15448 authored by Linus Walleij's avatar Linus Walleij Committed by Ulf Hansson
Browse files

ARM: pxa: Add gpio descriptor lookup tables for MMC CD/WP



This adds GPIO descriptor look-up tables for a whole bunch
of PXA boards with MMC card detect (CD) and write protect (WP)
GPIO lines, so we can move away from the hard-coded GPIO
numberspace.

In some cases the platforms were compulsively including the
<linux/gpio.h> header even if they weren't actually using
it, and in these cases I simply replaced that inclusion with
the more appropriate <linux/gpio/machine.h> which is what
board files should be including most of the time.

Cc: Daniel Mack <daniel@zonque.org>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Andrea Adami <andrea.adami@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 5128f8d4
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/platform_device.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/delay.h>

#include <linux/platform_data/rtc-v3020.h>
@@ -294,8 +295,18 @@ static struct pxamci_platform_data cmx270_mci_platform_data = {
	.gpio_power_invert	= 1,
};

static struct gpiod_lookup_table cmx270_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		/* Card detect on GPIO 83 */
		GPIO_LOOKUP("gpio-pxa", GPIO83_MMC_IRQ, "cd", GPIO_ACTIVE_LOW),
		{ },
	},
};

static void __init cmx270_init_mmc(void)
{
	gpiod_add_lookup_table(&cmx270_mci_gpio_table);
	pxa_set_mci_info(&cmx270_mci_platform_data);
}
#else
+12 −0
Original line number Diff line number Diff line
@@ -464,6 +464,17 @@ static struct pxamci_platform_data cm_x300_mci_platform_data = {
	.gpio_power		= -1,
};

static struct gpiod_lookup_table cm_x300_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		/* Card detect on GPIO 82 */
		GPIO_LOOKUP("gpio-pxa", GPIO82_MMC_IRQ, "cd", GPIO_ACTIVE_LOW),
		/* Write protect on GPIO 85 */
		GPIO_LOOKUP("gpio-pxa", GPIO85_MMC_WP, "wp", GPIO_ACTIVE_LOW),
		{ },
	},
};

/* The second MMC slot of CM-X300 is hardwired to Libertas card and has
   no detection/ro pins */
static int cm_x300_mci2_init(struct device *dev,
@@ -489,6 +500,7 @@ static struct pxamci_platform_data cm_x300_mci2_platform_data = {

static void __init cm_x300_init_mmc(void)
{
	gpiod_add_lookup_table(&cm_x300_mci_gpio_table);
	pxa_set_mci_info(&cm_x300_mci_platform_data);
	pxa3xx_set_mci2_info(&cm_x300_mci2_platform_data);
}
+37 −4
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>
#include <asm/mach/arch.h>
@@ -42,17 +42,50 @@ static struct pxamci_platform_data colibri_mci_platform_data = {
	.detect_delay_ms	= 200,
};

static struct gpiod_lookup_table colibri_pxa270_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		GPIO_LOOKUP("gpio-pxa", GPIO0_COLIBRI_PXA270_SD_DETECT,
			    "cd", GPIO_ACTIVE_LOW),
		{ },
	},
};

static struct gpiod_lookup_table colibri_pxa300_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		GPIO_LOOKUP("gpio-pxa", GPIO13_COLIBRI_PXA300_SD_DETECT,
			    "cd", GPIO_ACTIVE_LOW),
		{ },
	},
};

static struct gpiod_lookup_table colibri_pxa320_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		GPIO_LOOKUP("gpio-pxa", GPIO28_COLIBRI_PXA320_SD_DETECT,
			    "cd", GPIO_ACTIVE_LOW),
		{ },
	},
};

static void __init colibri_mmc_init(void)
{
	if (machine_is_colibri())	/* PXA270 Colibri */
	if (machine_is_colibri()) {	/* PXA270 Colibri */
		colibri_mci_platform_data.gpio_card_detect =
			GPIO0_COLIBRI_PXA270_SD_DETECT;
	if (machine_is_colibri300())	/* PXA300 Colibri */
		gpiod_add_lookup_table(&colibri_pxa270_mci_gpio_table);
	}
	if (machine_is_colibri300()) {	/* PXA300 Colibri */
		colibri_mci_platform_data.gpio_card_detect =
			GPIO13_COLIBRI_PXA300_SD_DETECT;
	else				/* PXA320 Colibri */
		gpiod_add_lookup_table(&colibri_pxa300_mci_gpio_table);
	}
	else {				/* PXA320 Colibri */
		colibri_mci_platform_data.gpio_card_detect =
			GPIO28_COLIBRI_PXA320_SD_DETECT;
		gpiod_add_lookup_table(&colibri_pxa320_mci_gpio_table);
	}

	pxa_set_mci_info(&colibri_mci_platform_data);
}
+15 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@

#include <linux/bitops.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/leds.h>
@@ -57,8 +57,22 @@ static struct pxamci_platform_data income_mci_platform_data = {
	.detect_delay_ms	= 200,
};

static struct gpiod_lookup_table income_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		/* Card detect on GPIO 0 */
		GPIO_LOOKUP("gpio-pxa", GPIO0_INCOME_SD_DETECT,
			    "cd", GPIO_ACTIVE_LOW),
		/* Write protect on GPIO 1 */
		GPIO_LOOKUP("gpio-pxa", GPIO0_INCOME_SD_RO,
			    "wp", GPIO_ACTIVE_LOW),
		{ },
	},
};

static void __init income_mmc_init(void)
{
	gpiod_add_lookup_table(&income_mci_gpio_table);
	pxa_set_mci_info(&income_mci_platform_data);
}
#else
+14 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <linux/mtd/physmap.h>
#include <linux/pm.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/backlight.h>
#include <linux/i2c.h>
#include <linux/platform_data/i2c-pxa.h>
@@ -498,6 +499,18 @@ static struct pxamci_platform_data corgi_mci_platform_data = {
	.gpio_power		= CORGI_GPIO_SD_PWR,
};

static struct gpiod_lookup_table corgi_mci_gpio_table = {
	.dev_id = "pxa2xx-mci.0",
	.table = {
		/* Card detect on GPIO 9 */
		GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_nSD_DETECT,
			    "cd", GPIO_ACTIVE_LOW),
		/* Write protect on GPIO 7 */
		GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_nSD_WP,
			    "wp", GPIO_ACTIVE_LOW),
		{ },
	},
};

/*
 * Irda
@@ -731,6 +744,7 @@ static void __init corgi_init(void)
	corgi_init_spi();

 	pxa_set_udc_info(&udc_info);
	gpiod_add_lookup_table(&corgi_mci_gpio_table);
	pxa_set_mci_info(&corgi_mci_platform_data);
	pxa_set_ficp_info(&corgi_ficp_platform_data);
	pxa_set_i2c_info(NULL);
Loading