X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fi2c%2Fbusses%2Fi2c-amd756-s4882.c;h=56c7d987590f51704ea22363796ab34d838c9c1b;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=08e915730caf94505e44bd27845c193c50dd394f;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/i2c/busses/i2c-amd756-s4882.c b/drivers/i2c/busses/i2c-amd756-s4882.c index 08e915730..56c7d9875 100644 --- a/drivers/i2c/busses/i2c-amd756-s4882.c +++ b/drivers/i2c/busses/i2c-amd756-s4882.c @@ -38,7 +38,6 @@ #include #include #include -#include extern struct i2c_adapter amd756_smbus; @@ -46,7 +45,7 @@ static struct i2c_adapter *s4882_adapter; static struct i2c_algorithm *s4882_algo; /* Wrapper access functions for multiplexed SMBus */ -static DEFINE_MUTEX(amd756_lock); +static struct semaphore amd756_lock; static s32 amd756_access_virt0(struct i2c_adapter * adap, u16 addr, unsigned short flags, char read_write, @@ -60,12 +59,12 @@ static s32 amd756_access_virt0(struct i2c_adapter * adap, u16 addr, || addr == 0x18) return -1; - mutex_lock(&amd756_lock); + down(&amd756_lock); error = amd756_smbus.algo->smbus_xfer(adap, addr, flags, read_write, command, size, data); - mutex_unlock(&amd756_lock); + up(&amd756_lock); return error; } @@ -88,7 +87,7 @@ static inline s32 amd756_access_channel(struct i2c_adapter * adap, u16 addr, if (addr != 0x4c && (addr & 0xfc) != 0x50 && (addr & 0xfc) != 0x30) return -1; - mutex_lock(&amd756_lock); + down(&amd756_lock); if (last_channels != channels) { union i2c_smbus_data mplxdata; @@ -106,7 +105,7 @@ static inline s32 amd756_access_channel(struct i2c_adapter * adap, u16 addr, command, size, data); UNLOCK: - mutex_unlock(&amd756_lock); + up(&amd756_lock); return error; } @@ -167,6 +166,8 @@ static int __init amd756_s4882_init(void) } printk(KERN_INFO "Enabling SMBus multiplexing for Tyan S4882\n"); + init_MUTEX(&amd756_lock); + /* Define the 5 virtual adapters and algorithms structures */ if (!(s4882_adapter = kzalloc(5 * sizeof(struct i2c_adapter), GFP_KERNEL))) {