]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/mmc/core/sdio_irq.c
sdio: add interface for host side SDIO interrupt reporting
[linux-2.6-omap-h63xx.git] / drivers / mmc / core / sdio_irq.c
index 01922d29241d73871a831a6bc3accca3a3b6d1d1..01daee934d16c270887bdbb097d8911b17ae832d 100644 (file)
@@ -70,7 +70,8 @@ static int sdio_irq_thread(void *_host)
         * asynchronous notification of pending SDIO card interrupts
         * hence we poll for them in that case.
         */
-       period = msecs_to_jiffies(10);
+       period = (host->caps & MMC_CAP_SDIO_IRQ) ?
+               MAX_SCHEDULE_TIMEOUT : msecs_to_jiffies(10);
 
        pr_debug("%s: IRQ thread started (poll period = %lu jiffies)\n",
                 mmc_hostname(host), period);
@@ -104,11 +105,16 @@ static int sdio_irq_thread(void *_host)
                        ssleep(1);
 
                set_task_state(current, TASK_INTERRUPTIBLE);
+               if (host->caps & MMC_CAP_SDIO_IRQ)
+                       host->ops->enable_sdio_irq(host, 1);
                if (!kthread_should_stop())
                        schedule_timeout(period);
                set_task_state(current, TASK_RUNNING);
        } while (!kthread_should_stop());
 
+       if (host->caps & MMC_CAP_SDIO_IRQ)
+               host->ops->enable_sdio_irq(host, 0);
+
        pr_debug("%s: IRQ thread exiting with code %d\n",
                 mmc_hostname(host), ret);