/* * arch/arm/mach-pxa/colibri-pxa3xx.c * * Common functions for all Toradex PXA3xx modules * * Daniel Mack * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "generic.h" #include "devices.h" #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE) static int mmc_detect_pin; static int colibri_pxa3xx_mci_init(struct device *dev, irq_handler_t colibri_mmc_detect_int, void *data) { int ret; ret = gpio_request(mmc_detect_pin, "mmc card detect"); if (ret) return ret; gpio_direction_input(mmc_detect_pin); ret = request_irq(gpio_to_irq(mmc_detect_pin), colibri_mmc_detect_int, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "MMC card detect", data); if (ret) { gpio_free(mmc_detect_pin); return ret; } return 0; } static void colibri_pxa3xx_mci_exit(struct device *dev, void *data) { free_irq(mmc_detect_pin, data); gpio_free(gpio_to_irq(mmc_detect_pin)); } static struct pxamci_platform_data colibri_pxa3xx_mci_platform_data = { .detect_delay = 20, .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, .init = colibri_pxa3xx_mci_init, .exit = colibri_pxa3xx_mci_exit, }; void __init colibri_pxa3xx_init_mmc(mfp_cfg_t *pins, int len, int detect_pin) { pxa3xx_mfp_config(pins, len); mmc_detect_pin = detect_pin; pxa_set_mci_info(&colibri_pxa3xx_mci_platform_data); } #endif /* CONFIG_MMC_PXA || CONFIG_MMC_PXA_MODULE */