Merge branch 'linus' into x86/urgent
[pandora-kernel.git] / drivers / net / irda / via-ircc.c
index 126ec7c..04ad357 100644 (file)
@@ -1346,19 +1346,13 @@ static int RxTimerHandler(struct via_ircc_cb *self, int iobase)
  *    An interrupt from the chip has arrived. Time to do some work
  *
  */
-static irqreturn_t via_ircc_interrupt(int irq, void *dev_id)
+static irqreturn_t via_ircc_interrupt(int dummy, void *dev_id)
 {
-       struct net_device *dev = (struct net_device *) dev_id;
-       struct via_ircc_cb *self;
+       struct net_device *dev = dev_id;
+       struct via_ircc_cb *self = dev->priv;
        int iobase;
        u8 iHostIntType, iRxIntType, iTxIntType;
 
-       if (!dev) {
-               IRDA_WARNING("%s: irq %d for unknown device.\n", driver_name,
-                            irq);
-               return IRQ_NONE;
-       }
-       self = (struct via_ircc_cb *) dev->priv;
        iobase = self->io.fir_base;
        spin_lock(&self->lock);
        iHostIntType = GetHostStatus(iobase);
@@ -1552,6 +1546,7 @@ static int via_ircc_net_open(struct net_device *dev)
                        IRDA_WARNING("%s, unable to allocate dma2=%d\n",
                                     driver_name, self->io.dma2);
                        free_irq(self->io.irq, self);
+                       free_dma(self->io.dma);
                        return -EAGAIN;
                }
        }
@@ -1612,6 +1607,8 @@ static int via_ircc_net_close(struct net_device *dev)
        EnAllInt(iobase, OFF);
        free_irq(self->io.irq, dev);
        free_dma(self->io.dma);
+       if (self->io.dma2 != self->io.dma)
+               free_dma(self->io.dma2);
 
        return 0;
 }