From c150fdd229e3169601e565f3c388eadb97475c69 Mon Sep 17 00:00:00 2001 From: Vincent Bossier Date: Thu, 9 Jun 2011 08:59:43 +0100 Subject: [PATCH] --- yaml --- r: 259565 b: refs/heads/master c: 54b4a779c9565c475a17cc1254a38f293a5ba3ef h: refs/heads/master i: 259563: 83f92cd81cd1782d04b5e585ba2a9d3c852448d1 v: v3 --- [refs] | 2 +- trunk/drivers/staging/vme/bridges/vme_ca91cx42.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 9d2d56bc5ba4..b244fbb2f031 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 05614fbfc1f3dedc337ac67e83b6ad130ba9fc9f +refs/heads/master: 54b4a779c9565c475a17cc1254a38f293a5ba3ef diff --git a/trunk/drivers/staging/vme/bridges/vme_ca91cx42.c b/trunk/drivers/staging/vme/bridges/vme_ca91cx42.c index 6aad34b8b3fe..5122c13a9563 100644 --- a/trunk/drivers/staging/vme/bridges/vme_ca91cx42.c +++ b/trunk/drivers/staging/vme/bridges/vme_ca91cx42.c @@ -256,6 +256,18 @@ static void ca91cx42_irq_exit(struct ca91cx42_driver *bridge, free_irq(pdev->irq, pdev); } +static int ca91cx42_iack_received(struct ca91cx42_driver *bridge, int level) +{ + u32 tmp; + + tmp = ioread32(bridge->base + LINT_STAT); + + if (tmp & (1 << level)) + return 0; + else + return 1; +} + /* * Set up an VME interrupt */ @@ -311,7 +323,8 @@ static int ca91cx42_irq_generate(struct vme_bridge *ca91cx42_bridge, int level, iowrite32(tmp, bridge->base + VINT_EN); /* Wait for IACK */ - wait_event_interruptible(bridge->iack_queue, 0); + wait_event_interruptible(bridge->iack_queue, + ca91cx42_iack_received(bridge, level)); /* Return interrupt to low state */ tmp = ioread32(bridge->base + VINT_EN);