diff options
Diffstat (limited to 'drivers/staging/solo6x10/solo6010-i2c.c')
-rw-r--r-- | drivers/staging/solo6x10/solo6010-i2c.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/staging/solo6x10/solo6010-i2c.c b/drivers/staging/solo6x10/solo6010-i2c.c index cadd5120d575..60b69cd0d09d 100644 --- a/drivers/staging/solo6x10/solo6010-i2c.c +++ b/drivers/staging/solo6x10/solo6010-i2c.c @@ -46,7 +46,7 @@ u8 solo_i2c_readbyte(struct solo6010_dev *solo_dev, int id, u8 addr, u8 off) i2c_transfer(&solo_dev->i2c_adap[id], msgs, 2); - return data; + return data; } void solo_i2c_writebyte(struct solo6010_dev *solo_dev, int id, u8 addr, @@ -225,9 +225,9 @@ static int solo_i2c_master_xfer(struct i2c_adapter *adap, } if (i == SOLO_I2C_ADAPTERS) - return num; // XXX Right return value for failure? + return num; /* XXX Right return value for failure? */ - down(&solo_dev->i2c_sem); + mutex_lock(&solo_dev->i2c_mutex); solo_dev->i2c_id = i; solo_dev->i2c_msg = msgs; solo_dev->i2c_msg_num = num; @@ -258,7 +258,7 @@ static int solo_i2c_master_xfer(struct i2c_adapter *adap, solo_dev->i2c_state = IIC_STATE_IDLE; solo_dev->i2c_id = -1; - up(&solo_dev->i2c_sem); + mutex_unlock(&solo_dev->i2c_mutex); return ret; } @@ -284,7 +284,7 @@ int solo_i2c_init(struct solo6010_dev *solo_dev) solo_dev->i2c_id = -1; solo_dev->i2c_state = IIC_STATE_IDLE; init_waitqueue_head(&solo_dev->i2c_wait); - sema_init(&solo_dev->i2c_sem, 1); + mutex_init(&solo_dev->i2c_mutex); for (i = 0; i < SOLO_I2C_ADAPTERS; i++) { struct i2c_adapter *adap = &solo_dev->i2c_adap[i]; @@ -296,7 +296,8 @@ int solo_i2c_init(struct solo6010_dev *solo_dev) adap->retries = 1; adap->dev.parent = &solo_dev->pdev->dev; - if ((ret = i2c_add_adapter(adap))) { + ret = i2c_add_adapter(adap); + if (ret) { adap->algo_data = NULL; break; } |