[PATCH] i386: Fix warning in mpparse.c
[safe/jmp/linux-2.6] / arch / i386 / kernel / scx200.c
index 9e96a78..c7d3df2 100644 (file)
@@ -4,11 +4,11 @@
 
    National Semiconductor SCx200 support. */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/mutex.h>
 #include <linux/pci.h>
 
 #include <linux/scx200.h>
@@ -45,11 +45,19 @@ static struct pci_driver scx200_pci_driver = {
        .probe = scx200_probe,
 };
 
-static DEFINE_SPINLOCK(scx200_gpio_config_lock);
+static DEFINE_MUTEX(scx200_gpio_config_lock);
 
-static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+static void __devinit scx200_init_shadow(void)
 {
        int bank;
+
+       /* read the current values driven on the GPIO signals */
+       for (bank = 0; bank < 2; ++bank)
+               scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank);
+}
+
+static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
        unsigned base;
 
        if (pdev->device == PCI_DEVICE_ID_NS_SCx200_BRIDGE ||
@@ -63,10 +71,7 @@ static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_
                }
 
                scx200_gpio_base = base;
-
-               /* read the current values driven on the GPIO signals */
-               for (bank = 0; bank < 2; ++bank)
-                       scx200_gpio_shadow[bank] = inl(scx200_gpio_base + 0x10 * bank);
+               scx200_init_shadow();
 
        } else {
                /* find the base of the Configuration Block */
@@ -90,9 +95,8 @@ static int __devinit scx200_probe(struct pci_dev *pdev, const struct pci_device_
 u32 scx200_gpio_configure(unsigned index, u32 mask, u32 bits)
 {
        u32 config, new_config;
-       unsigned long flags;
 
-       spin_lock_irqsave(&scx200_gpio_config_lock, flags);
+       mutex_lock(&scx200_gpio_config_lock);
 
        outl(index, scx200_gpio_base + 0x20);
        config = inl(scx200_gpio_base + 0x24);
@@ -100,28 +104,11 @@ u32 scx200_gpio_configure(unsigned index, u32 mask, u32 bits)
        new_config = (config & mask) | bits;
        outl(new_config, scx200_gpio_base + 0x24);
 
-       spin_unlock_irqrestore(&scx200_gpio_config_lock, flags);
+       mutex_unlock(&scx200_gpio_config_lock);
 
        return config;
 }
 
-#if 0
-void scx200_gpio_dump(unsigned index)
-{
-        u32 config = scx200_gpio_configure(index, ~0, 0);
-
-        printk(KERN_INFO NAME ": GPIO-%02u: 0x%08lx %s %s %s %s %s %s %s\n",
-               index, (unsigned long) config,
-               (config & 1) ? "OE"      : "TS",                /* output enabled / tristate */
-               (config & 2) ? "PP"      : "OD",                /* push pull / open drain */
-               (config & 4) ? "PUE"     : "PUD",       /* pull up enabled/disabled */
-               (config & 8) ? "LOCKED"  : "",          /* locked / unlocked */
-               (config & 16) ? "LEVEL"  : "EDGE",      /* level/edge input */
-               (config & 32) ? "HI"     : "LO",                /* trigger on rising/falling edge */
-               (config & 64) ? "DEBOUNCE" : "");       /* debounce */
-}
-#endif  /*  0  */
-
 static int __init scx200_init(void)
 {
        printk(KERN_INFO NAME ": NatSemi SCx200 Driver\n");