/** * The card detect interrupt isn't debounced so we delay it by 250ms * to give the card a chance to fully insert/eject. */ static int mci_init(struct device *dev, irq_handler_t detect_int, void *data) { int rc; int irq = gpio_to_irq(GPIO15_SDIO_INSERT); rc = mio_gpio_request(ARRAY_AND_SIZE(mci_gpios)); if (rc) goto err_gpio; /* enable RE/FE interrupt on card insertion and removal */ rc = request_irq(irq, detect_int, IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "MMC card detect", data); if (rc) goto err_irq; mioa701_mci_info.detect_delay = msecs_to_jiffies(250); return 0; err_irq: dev_err(dev, "mioa701_mci_init: MMC/SD:" " can't request MMC card detect IRQ\n"); mio_gpio_free(ARRAY_AND_SIZE(mci_gpios)); err_gpio: return rc; }
static int __init gsm_init(void) { int rc; rc = mio_gpio_request(ARRAY_AND_SIZE(gsm_gpios)); if (rc) goto err_gpio; rc = request_irq(gpio_to_irq(GPIO25_GSM_MOD_ON_STATE), gsm_on_irq, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "GSM XS200 Power Irq", NULL); if (rc) goto err_irq; gpio_set_wake(GPIO113_GSM_EVENT, 1); return 0; err_irq: printk(KERN_ERR "Mioa701: Can't request GSM_ON irq\n"); mio_gpio_free(ARRAY_AND_SIZE(gsm_gpios)); err_gpio: printk(KERN_ERR "Mioa701: gsm not available\n"); return rc; }
static void gsm_exit(void) { free_irq(gpio_to_irq(GPIO25_GSM_MOD_ON_STATE), NULL); mio_gpio_free(ARRAY_AND_SIZE(gsm_gpios)); }
static void mci_exit(struct device *dev, void *data) { mio_gpio_free(ARRAY_AND_SIZE(mci_gpios)); free_irq(gpio_to_irq(GPIO15_SDIO_INSERT), data); }
static void udc_exit(void) { mio_gpio_free(ARRAY_AND_SIZE(udc_gpios)); }