]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/smc91x.c
Merge with /home/tmlind/src/kernel/linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / net / smc91x.c
index b977771782bf5b25b9ab85567014d004ac4ee6e5..d835e9276596dc1c4519f96355139d0543deea47 100644 (file)
@@ -66,7 +66,6 @@ static const char version[] =
 #endif
 
 
-#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -88,7 +87,6 @@ static const char version[] =
 #include <linux/skbuff.h>
 
 #include <asm/io.h>
-#include <asm/irq.h>
 
 #include "smc91x.h"
 
@@ -216,15 +214,12 @@ struct smc_local {
 
        spinlock_t lock;
 
-#ifdef SMC_CAN_USE_DATACS
-       u32     __iomem *datacs;
-#endif
-
 #ifdef SMC_USE_PXA_DMA
        /* DMA needs the physical address of the chip */
        u_long physaddr;
 #endif
        void __iomem *base;
+       void __iomem *datacs;
 };
 
 #if SMC_DEBUG > 0
@@ -2012,12 +2007,10 @@ static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr)
        }
 
        /* Grab the IRQ */
-       retval = request_irq(dev->irq, &smc_interrupt, 0, dev->name, dev);
+       retval = request_irq(dev->irq, &smc_interrupt, SMC_IRQ_FLAGS, dev->name, dev);
        if (retval)
                goto err_out;
 
-       set_irq_type(dev->irq, SMC_IRQ_TRIGGER_TYPE);
-
 #ifdef SMC_USE_PXA_DMA
        {
                int dma = pxa_request_dma(dev->name, DMA_PRIO_LOW,
@@ -2112,9 +2105,8 @@ static int smc_enable_device(struct platform_device *pdev)
         * Set the appropriate byte/word mode.
         */
        ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8;
-#ifndef SMC_CAN_USE_16BIT
-       ecsr |= ECSR_IOIS8;
-#endif
+       if (!SMC_CAN_USE_16BIT)
+               ecsr |= ECSR_IOIS8;
        writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT));
        local_irq_restore(flags);
 
@@ -2151,40 +2143,39 @@ static void smc_release_attrib(struct platform_device *pdev)
                release_mem_region(res->start, ATTRIB_SIZE);
 }
 
-#ifdef SMC_CAN_USE_DATACS
-static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev)
+static inline void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev)
 {
-       struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
-       struct smc_local *lp = netdev_priv(ndev);
+       if (SMC_CAN_USE_DATACS) {
+               struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
+               struct smc_local *lp = netdev_priv(ndev);
 
-       if (!res)
-               return;
+               if (!res)
+                       return;
 
-       if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) {
-               printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME);
-               return;
-       }
+               if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) {
+                       printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME);
+                       return;
+               }
 
-       lp->datacs = ioremap(res->start, SMC_DATA_EXTENT);
+               lp->datacs = ioremap(res->start, SMC_DATA_EXTENT);
+       }
 }
 
 static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev)
 {
-       struct smc_local *lp = netdev_priv(ndev);
-       struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
+       if (SMC_CAN_USE_DATACS) {
+               struct smc_local *lp = netdev_priv(ndev);
+               struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
 
-       if (lp->datacs)
-               iounmap(lp->datacs);
+               if (lp->datacs)
+                       iounmap(lp->datacs);
 
-       lp->datacs = NULL;
+               lp->datacs = NULL;
 
-       if (res)
-               release_mem_region(res->start, SMC_DATA_EXTENT);
+               if (res)
+                       release_mem_region(res->start, SMC_DATA_EXTENT);
+       }
 }
-#else
-static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) {}
-static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) {}
-#endif
 
 /*
  * smc_init(void)
@@ -2229,6 +2220,10 @@ static int smc_drv_probe(struct platform_device *pdev)
 
        ndev->dma = (unsigned char)-1;
        ndev->irq = platform_get_irq(pdev, 0);
+       if (ndev->irq < 0) {
+               ret = -ENODEV;
+               goto out_free_netdev;
+       }
 
        ret = smc_request_attrib(pdev);
        if (ret)