Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 307943
b: refs/heads/master
c: bbbc4c4
h: refs/heads/master
i:
  307941: 1843c5a
  307939: 012ca5e
  307935: e2949cd
v: v3
  • Loading branch information
Nicolas Pitre authored and Chris Ball committed Apr 22, 2012
1 parent 3e429cd commit d165301
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6187fee46f4bc7f18f2caefdc75a073c6a25adab
refs/heads/master: bbbc4c4d8c5face097d695f9bf3a39647ba6b7e7
2 changes: 1 addition & 1 deletion trunk/drivers/mmc/core/sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -947,7 +947,7 @@ static int mmc_sdio_resume(struct mmc_host *host)
}

if (!err && host->sdio_irqs)
mmc_signal_sdio_irq(host);
wake_up_process(host->sdio_irq_thread);
mmc_release_host(host);

/*
Expand Down
11 changes: 7 additions & 4 deletions trunk/drivers/mmc/core/sdio_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,20 @@

#include "sdio_ops.h"

static int process_sdio_pending_irqs(struct mmc_card *card)
static int process_sdio_pending_irqs(struct mmc_host *host)
{
struct mmc_card *card = host->card;
int i, ret, count;
unsigned char pending;
struct sdio_func *func;

/*
* Optimization, if there is only 1 function interrupt registered
* call irq handler directly
* and we know an IRQ was signaled then call irq handler directly.
* Otherwise do the full probe.
*/
func = card->sdio_single_irq;
if (func) {
if (func && host->sdio_irq_pending) {
func->irq_handler(func);
return 1;
}
Expand Down Expand Up @@ -116,7 +118,8 @@ static int sdio_irq_thread(void *_host)
ret = __mmc_claim_host(host, &host->sdio_irq_thread_abort);
if (ret)
break;
ret = process_sdio_pending_irqs(host->card);
ret = process_sdio_pending_irqs(host);
host->sdio_irq_pending = false;
mmc_release_host(host);

/*
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/mmc/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ struct mmc_host {

unsigned int sdio_irqs;
struct task_struct *sdio_irq_thread;
bool sdio_irq_pending;
atomic_t sdio_irq_thread_abort;

mmc_pm_flag_t pm_flags; /* requested pm features */
Expand Down Expand Up @@ -352,6 +353,7 @@ extern int mmc_cache_ctrl(struct mmc_host *, u8);
static inline void mmc_signal_sdio_irq(struct mmc_host *host)
{
host->ops->enable_sdio_irq(host, 0);
host->sdio_irq_pending = true;
wake_up_process(host->sdio_irq_thread);
}

Expand Down

0 comments on commit d165301

Please sign in to comment.