Messages in this thread Patch in this message | | | From | Daniel Glöckner <> | Subject | [patch 3/6] xtensa: add spi mmc host to s6105 platform | Date | Mon, 23 Mar 2009 16:34:19 +0100 |
| |
Signed-off-by: Daniel Glöckner <dg@emlix.com> --- arch/xtensa/platforms/s6105/device.c | 55 ++++++++++++++++++++++++++++++++++ 1 files changed, 55 insertions(+), 0 deletions(-)
diff --git a/arch/xtensa/platforms/s6105/device.c b/arch/xtensa/platforms/s6105/device.c index a7ea916..789448e 100644 --- a/arch/xtensa/platforms/s6105/device.c +++ b/arch/xtensa/platforms/s6105/device.c @@ -11,9 +11,11 @@ #include <linux/init.h> #include <linux/irq.h> #include <linux/phy.h> +#include <linux/mmc/host.h> #include <linux/platform_device.h> #include <linux/serial.h> #include <linux/serial_8250.h> +#include <linux/spi/mmc_spi.h> #include <linux/spi/spi.h> #include <linux/spi/spi_s6000.h> @@ -209,7 +211,60 @@ static __devinitdata struct s6_spi_platform_data s6_spi_pdata = { #define S6_SPI_CS_EXPANSION 3 #define S6_SPI_CS_MMC_SLOT 4 +static int __devinit s6_init_mmc_host(struct device *spi, + irqreturn_t (*handler)(int, void *), + void *mmc) +{ + int ret; + ret = gpio_request(GPIO_SD_WP, "mmc_wp"); + if (ret < 0) + return ret; + ret = gpio_request(GPIO_SD_IRQ, "mmc_irq"); + if (ret < 0) + return ret; + ret = gpio_direction_input(GPIO_SD_WP); + if (ret < 0) + return ret; + ret = gpio_direction_input(GPIO_SD_IRQ); + if (ret < 0) + return ret; + ret = gpio_to_irq(GPIO_SD_IRQ); + if (ret < 0) + return ret; + ret = request_irq(ret, handler, + IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, + "mmc_slot", mmc); + return ret; +} + +static void __devexit s6_exit_mmc_host(struct device *spi, void *mmc) +{ + free_irq(gpio_to_irq(GPIO_SD_IRQ), mmc); + gpio_free(GPIO_SD_IRQ); + gpio_free(GPIO_SD_WP); +} + +static int s6_mmc_get_ro(struct device *spi) +{ + return gpio_get_value(GPIO_SD_WP); +} + +static struct mmc_spi_platform_data s6_spi_mmc_pdata = { + .caps = 0, + .ocr_mask = MMC_VDD_32_33, + .init = s6_init_mmc_host, + .exit = __devexit_p(s6_exit_mmc_host), + .get_ro = s6_mmc_get_ro, +}; + static struct spi_board_info __initdata s6_spi_devices[] = { + { + .modalias = "mmc_spi", + .platform_data = &s6_spi_mmc_pdata, + .bus_num = S6_SPI_BUS_NUM, + .chip_select = S6_SPI_CS_MMC_SLOT, + .max_speed_hz = 50000000, + }, }; static struct platform_device platform_devices[] = { -- 1.6.2.107.ge47ee -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |