Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1a5f1c4ff80f522555d78d4dd0109f18395c6d83
Commit:     1a5f1c4ff80f522555d78d4dd0109f18395c6d83
Parent:     5b2b4ff05593bc35c90dac84ecb82cb7501ecd07
Author:     Ben Dooks <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 5 00:02:04 2008 +0000
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Mon Feb 11 11:06:24 2008 -0500

    DM9000: Pass IRQ flags via platform resources
    
    Use the flags in the IRQ resource to specify the type of
    IRQ being requested, so that systems which do not have
    level-based interrupts, or change the interrupt in some
    other way can specify this without making an #ifdef mess
    in the driver.
    
    This is specifically designed to undo the change in commit
    4e4fc05a2b6e7bd2e0facd96e0c18dceb34d9349 which hardwires the
    type for everyone but blackfin to IRQT_RISING, which breaks
    all a number of Simtec boards which use (and setup in the
    bootloader) active low IRQs.
    
    Note, although there where originally objections due to
    the use of IORESOURCE_IRQ and IRQT_ flags not sharing the
    same definition, at least <include/linux/interrupt.h> notes
    these are the same.
    
    Signed-off-by: Ben Dooks <[EMAIL PROTECTED]>
    CC: Daniel Mack <[EMAIL PROTECTED]>
    CC: Bryan Wu <[EMAIL PROTECTED]>
    CC: Alex Landau <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/dm9000.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 5470062..ec9730a 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -90,9 +90,9 @@
 #define writesb        outsb
 #define writesw        outsw
 #define writesl        outsl
-#define DM9000_IRQ_FLAGS       (IRQF_SHARED | IRQF_TRIGGER_HIGH)
+#define DEFAULT_TRIGGER IRQF_TRIGGER_HIGH
 #else
-#define DM9000_IRQ_FLAGS       (IRQF_SHARED | IRQT_RISING)
+#define DEFAULT_TRIGGER (0)
 #endif
 
 /*
@@ -614,10 +614,21 @@ static int
 dm9000_open(struct net_device *dev)
 {
        board_info_t *db = (board_info_t *) dev->priv;
+       unsigned long irqflags = db->irq_res->flags & IRQF_TRIGGER_MASK;
 
        dev_dbg(db->dev, "entering %s\n", __func__);
 
-       if (request_irq(dev->irq, &dm9000_interrupt, DM9000_IRQ_FLAGS, 
dev->name, dev))
+       /* If there is no IRQ type specified, default to something that
+        * may work, and tell the user that this is a problem */
+
+       if (irqflags == IRQF_TRIGGER_NONE) {
+               dev_warn(db->dev, "WARNING: no IRQ resource flags set.\n");
+               irqflags = DEFAULT_TRIGGER;
+       }
+       
+       irqflags |= IRQF_SHARED;
+
+       if (request_irq(dev->irq, &dm9000_interrupt, irqflags, dev->name, dev))
                return -EAGAIN;
 
        /* Initialize DM9000 board */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to