aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-02-04 17:42:03 -0500
committerPierre Ossman <drzeus@drzeus.cx>2009-02-18 15:27:30 -0500
commit249d0fa9d59b6165ecc224720d9ce9b7267cf1b8 (patch)
tree7e7f7fdd6aec17f9b4c6aa4428e68ee129dca403 /drivers/mmc
parent5dbace0c9ba110c1a3810a89fa6bf12b7574b5a3 (diff)
omap_hsmmc: card detect irq bugfix
Work around lockdep issue when card detect IRQ handlers run in thread context ... it forces IRQF_DISABLED, which prevents all access to twl4030 card detect signals. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/omap_hsmmc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index db37490f67ec..4dba48642e60 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -517,6 +517,9 @@ static void mmc_omap_detect(struct work_struct *work)
517{ 517{
518 struct mmc_omap_host *host = container_of(work, struct mmc_omap_host, 518 struct mmc_omap_host *host = container_of(work, struct mmc_omap_host,
519 mmc_carddetect_work); 519 mmc_carddetect_work);
520 struct omap_mmc_slot_data *slot = &mmc_slot(host);
521
522 host->carddetect = slot->card_detect(slot->card_detect_irq);
520 523
521 sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch"); 524 sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch");
522 if (host->carddetect) { 525 if (host->carddetect) {
@@ -538,7 +541,6 @@ static irqreturn_t omap_mmc_cd_handler(int irq, void *dev_id)
538{ 541{
539 struct mmc_omap_host *host = (struct mmc_omap_host *)dev_id; 542 struct mmc_omap_host *host = (struct mmc_omap_host *)dev_id;
540 543
541 host->carddetect = mmc_slot(host).card_detect(irq);
542 schedule_work(&host->mmc_carddetect_work); 544 schedule_work(&host->mmc_carddetect_work);
543 545
544 return IRQ_HANDLED; 546 return IRQ_HANDLED;