{ int is_on; is_on = !!gpio_get_value(GPIO25_GSM_MOD_ON_STATE); return is_on; } irqreturn_t gsm_on_irq(int irq, void *p) { printk(KERN_DEBUG "Mioa701: GSM status changed to %s\n", is_gsm_on() ? "on" : "off"); return IRQ_HANDLED; } struct gpio_ress gsm_gpios[] = { MIO_GPIO_IN(GPIO25_GSM_MOD_ON_STATE, "GSM state"), MIO_GPIO_IN(GPIO113_GSM_EVENT, "GSM event"), }; 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;