]> err.no Git - linux-2.6/commitdiff
[POWERPC] powermac i2c: Use mutex
authorJohannes Berg <johannes@sipsolutions.net>
Tue, 3 Jul 2007 23:01:54 +0000 (09:01 +1000)
committerPaul Mackerras <paulus@samba.org>
Tue, 10 Jul 2007 11:55:54 +0000 (21:55 +1000)
Convert the semaphores in low_i2c that are used as mutexes to real
mutexes.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/powermac/low_i2c.c

index 3f507ab9c5e5accf21dbd741d821dd9f5832f40c..efdf5eb81ecc79790f4cb72946bdb0c345814883 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/interrupt.h>
 #include <linux/completion.h>
 #include <linux/timer.h>
+#include <linux/mutex.h>
 #include <asm/keylargo.h>
 #include <asm/uninorth.h>
 #include <asm/io.h>
@@ -84,7 +85,7 @@ struct pmac_i2c_bus
        void                    *hostdata;
        int                     channel;        /* some hosts have multiple */
        int                     mode;           /* current mode */
-       struct semaphore        sem;
+       struct mutex            mutex;
        int                     opened;
        int                     polled;         /* open mode */
        struct platform_device  *platform_dev;
@@ -104,7 +105,7 @@ static LIST_HEAD(pmac_i2c_busses);
 
 struct pmac_i2c_host_kw
 {
-       struct semaphore        mutex;          /* Access mutex for use by
+       struct mutex            mutex;          /* Access mutex for use by
                                                 * i2c-keywest */
        void __iomem            *base;          /* register base address */
        int                     bsteps;         /* register stepping */
@@ -375,14 +376,14 @@ static void kw_i2c_timeout(unsigned long data)
 static int kw_i2c_open(struct pmac_i2c_bus *bus)
 {
        struct pmac_i2c_host_kw *host = bus->hostdata;
-       down(&host->mutex);
+       mutex_lock(&host->mutex);
        return 0;
 }
 
 static void kw_i2c_close(struct pmac_i2c_bus *bus)
 {
        struct pmac_i2c_host_kw *host = bus->hostdata;
-       up(&host->mutex);
+       mutex_unlock(&host->mutex);
 }
 
 static int kw_i2c_xfer(struct pmac_i2c_bus *bus, u8 addrdir, int subsize,
@@ -498,7 +499,7 @@ static struct pmac_i2c_host_kw *__init kw_i2c_host_init(struct device_node *np)
                kfree(host);
                return NULL;
        }
-       init_MUTEX(&host->mutex);
+       mutex_init(&host->mutex);
        init_completion(&host->complete);
        spin_lock_init(&host->lock);
        init_timer(&host->timeout_timer);
@@ -571,7 +572,7 @@ static void __init kw_i2c_add(struct pmac_i2c_host_kw *host,
        bus->open = kw_i2c_open;
        bus->close = kw_i2c_close;
        bus->xfer = kw_i2c_xfer;
-       init_MUTEX(&bus->sem);
+       mutex_init(&bus->mutex);
        if (controller == busnode)
                bus->flags = pmac_i2c_multibus;
        list_add(&bus->link, &pmac_i2c_busses);
@@ -798,7 +799,7 @@ static void __init pmu_i2c_probe(void)
                bus->mode = pmac_i2c_mode_std;
                bus->hostdata = bus + 1;
                bus->xfer = pmu_i2c_xfer;
-               init_MUTEX(&bus->sem);
+               mutex_init(&bus->mutex);
                bus->flags = pmac_i2c_multibus;
                list_add(&bus->link, &pmac_i2c_busses);
 
@@ -921,7 +922,7 @@ static void __init smu_i2c_probe(void)
                bus->mode = pmac_i2c_mode_std;
                bus->hostdata = bus + 1;
                bus->xfer = smu_i2c_xfer;
-               init_MUTEX(&bus->sem);
+               mutex_init(&bus->mutex);
                bus->flags = 0;
                list_add(&bus->link, &pmac_i2c_busses);
 
@@ -1093,13 +1094,13 @@ int pmac_i2c_open(struct pmac_i2c_bus *bus, int polled)
 {
        int rc;
 
-       down(&bus->sem);
+       mutex_lock(&bus->mutex);
        bus->polled = polled || pmac_i2c_force_poll;
        bus->opened = 1;
        bus->mode = pmac_i2c_mode_std;
        if (bus->open && (rc = bus->open(bus)) != 0) {
                bus->opened = 0;
-               up(&bus->sem);
+               mutex_unlock(&bus->mutex);
                return rc;
        }
        return 0;
@@ -1112,7 +1113,7 @@ void pmac_i2c_close(struct pmac_i2c_bus *bus)
        if (bus->close)
                bus->close(bus);
        bus->opened = 0;
-       up(&bus->sem);
+       mutex_unlock(&bus->mutex);
 }
 EXPORT_SYMBOL_GPL(pmac_i2c_close);