diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-02-04 17:42:03 -0500 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2009-02-18 15:27:30 -0500 |
commit | 249d0fa9d59b6165ecc224720d9ce9b7267cf1b8 (patch) | |
tree | 7e7f7fdd6aec17f9b4c6aa4428e68ee129dca403 | |
parent | 5dbace0c9ba110c1a3810a89fa6bf12b7574b5a3 (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>
-rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 4 |
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; |