linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / net / smc91x.c
index cf62373..7ec0812 100644 (file)
@@ -66,6 +66,7 @@ static const char version[] =
 #endif
 
 
+#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -214,12 +215,15 @@ 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
@@ -321,12 +325,12 @@ static void smc_reset(struct net_device *dev)
        DBG(2, "%s: %s\n", dev->name, __FUNCTION__);
 
        /* Disable all interrupts, block TX tasklet */
-       spin_lock_irq(&lp->lock);
+       spin_lock(&lp->lock);
        SMC_SELECT_BANK(2);
        SMC_SET_INT_MASK(0);
        pending_skb = lp->pending_tx_skb;
        lp->pending_tx_skb = NULL;
-       spin_unlock_irq(&lp->lock);
+       spin_unlock(&lp->lock);
 
        /* free any pending tx skb */
        if (pending_skb) {
@@ -448,12 +452,12 @@ static void smc_shutdown(struct net_device *dev)
        DBG(2, "%s: %s\n", CARDNAME, __FUNCTION__);
 
        /* no more interrupts for me */
-       spin_lock_irq(&lp->lock);
+       spin_lock(&lp->lock);
        SMC_SELECT_BANK(2);
        SMC_SET_INT_MASK(0);
        pending_skb = lp->pending_tx_skb;
        lp->pending_tx_skb = NULL;
-       spin_unlock_irq(&lp->lock);
+       spin_unlock(&lp->lock);
        if (pending_skb)
                dev_kfree_skb(pending_skb);
 
@@ -2100,8 +2104,9 @@ static int smc_enable_device(struct platform_device *pdev)
         * Set the appropriate byte/word mode.
         */
        ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8;
-       if (!SMC_CAN_USE_16BIT)
-               ecsr |= ECSR_IOIS8;
+#ifndef SMC_CAN_USE_16BIT
+       ecsr |= ECSR_IOIS8;
+#endif
        writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT));
        local_irq_restore(flags);
 
@@ -2138,39 +2143,40 @@ static void smc_release_attrib(struct platform_device *pdev)
                release_mem_region(res->start, ATTRIB_SIZE);
 }
 
-static inline void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev)
+#ifdef SMC_CAN_USE_DATACS
+static void smc_request_datacs(struct platform_device *pdev, struct net_device *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;
+       struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
+       struct smc_local *lp = netdev_priv(ndev);
 
-               if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) {
-                       printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME);
-                       return;
-               }
+       if (!res)
+               return;
 
-               lp->datacs = ioremap(res->start, SMC_DATA_EXTENT);
+       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);
 }
 
 static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev)
 {
-       if (SMC_CAN_USE_DATACS) {
-               struct smc_local *lp = netdev_priv(ndev);
-               struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32");
+       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)
@@ -2215,10 +2221,6 @@ 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)