ixp4xx: fix the i2c pld driver for 2.6.37 - i2c uses a rt_mutex instead of a mutex now
SVN-Revision: 25725
This commit is contained in:
parent
13556da59a
commit
89a668b52a
1 changed files with 13 additions and 13 deletions
|
@ -51,7 +51,7 @@
|
||||||
+/*
|
+/*
|
||||||
+ * The Gateworks I2C PLD chip does not properly send the acknowledge bit
|
+ * The Gateworks I2C PLD chip does not properly send the acknowledge bit
|
||||||
+ * thus we cannot use standard i2c_smbus functions. We have recreated
|
+ * thus we cannot use standard i2c_smbus functions. We have recreated
|
||||||
+ * our own here, but we still use the mutex_lock to lock the i2c_bus
|
+ * our own here, but we still use the rt_mutex_lock to lock the i2c_bus
|
||||||
+ * as the device still exists on the I2C bus.
|
+ * as the device still exists on the I2C bus.
|
||||||
+*/
|
+*/
|
||||||
+
|
+
|
||||||
|
@ -179,21 +179,21 @@
|
||||||
+ int ret;
|
+ int ret;
|
||||||
+ struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip);
|
+ struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip);
|
||||||
+ struct i2c_adapter *adap = gpio->client->adapter;
|
+ struct i2c_adapter *adap = gpio->client->adapter;
|
||||||
+
|
+
|
||||||
+ if (in_atomic() || irqs_disabled()) {
|
+ if (in_atomic() || irqs_disabled()) {
|
||||||
+ ret = mutex_trylock(&adap->bus_lock);
|
+ ret = rt_mutex_trylock(&adap->bus_lock);
|
||||||
+ if (!ret)
|
+ if (!ret)
|
||||||
+ /* I2C activity is ongoing. */
|
+ /* I2C activity is ongoing. */
|
||||||
+ return -EAGAIN;
|
+ return -EAGAIN;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ mutex_lock_nested(&adap->bus_lock, adap->level);
|
+ rt_mutex_lock(&adap->bus_lock);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ gpio->out |= (1 << offset);
|
+ gpio->out |= (1 << offset);
|
||||||
+
|
+
|
||||||
+ ret = i2c_pld_write_byte(gpio->client->addr, gpio->out);
|
+ ret = i2c_pld_write_byte(gpio->client->addr, gpio->out);
|
||||||
+
|
+
|
||||||
+ mutex_unlock(&adap->bus_lock);
|
+ rt_mutex_unlock(&adap->bus_lock);
|
||||||
+
|
+
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+}
|
+}
|
||||||
|
@ -204,19 +204,19 @@
|
||||||
+ s32 value;
|
+ s32 value;
|
||||||
+ struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip);
|
+ struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip);
|
||||||
+ struct i2c_adapter *adap = gpio->client->adapter;
|
+ struct i2c_adapter *adap = gpio->client->adapter;
|
||||||
+
|
+
|
||||||
+ if (in_atomic() || irqs_disabled()) {
|
+ if (in_atomic() || irqs_disabled()) {
|
||||||
+ ret = mutex_trylock(&adap->bus_lock);
|
+ ret = rt_mutex_trylock(&adap->bus_lock);
|
||||||
+ if (!ret)
|
+ if (!ret)
|
||||||
+ /* I2C activity is ongoing. */
|
+ /* I2C activity is ongoing. */
|
||||||
+ return -EAGAIN;
|
+ return -EAGAIN;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ mutex_lock_nested(&adap->bus_lock, adap->level);
|
+ rt_mutex_lock(&adap->bus_lock);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ value = i2c_pld_read_byte(gpio->client->addr);
|
+ value = i2c_pld_read_byte(gpio->client->addr);
|
||||||
+
|
+
|
||||||
+ mutex_unlock(&adap->bus_lock);
|
+ rt_mutex_unlock(&adap->bus_lock);
|
||||||
+
|
+
|
||||||
+ return (value < 0) ? 0 : (value & (1 << offset));
|
+ return (value < 0) ? 0 : (value & (1 << offset));
|
||||||
+}
|
+}
|
||||||
|
@ -229,14 +229,14 @@
|
||||||
+ struct i2c_adapter *adap = gpio->client->adapter;
|
+ struct i2c_adapter *adap = gpio->client->adapter;
|
||||||
+
|
+
|
||||||
+ unsigned bit = 1 << offset;
|
+ unsigned bit = 1 << offset;
|
||||||
+
|
+
|
||||||
+ if (in_atomic() || irqs_disabled()) {
|
+ if (in_atomic() || irqs_disabled()) {
|
||||||
+ ret = mutex_trylock(&adap->bus_lock);
|
+ ret = rt_mutex_trylock(&adap->bus_lock);
|
||||||
+ if (!ret)
|
+ if (!ret)
|
||||||
+ /* I2C activity is ongoing. */
|
+ /* I2C activity is ongoing. */
|
||||||
+ return -EAGAIN;
|
+ return -EAGAIN;
|
||||||
+ } else {
|
+ } else {
|
||||||
+ mutex_lock_nested(&adap->bus_lock, adap->level);
|
+ rt_mutex_lock(&adap->bus_lock);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
|
@ -247,7 +247,7 @@
|
||||||
+
|
+
|
||||||
+ ret = i2c_pld_write_byte(gpio->client->addr, gpio->out);
|
+ ret = i2c_pld_write_byte(gpio->client->addr, gpio->out);
|
||||||
+
|
+
|
||||||
+ mutex_unlock(&adap->bus_lock);
|
+ rt_mutex_unlock(&adap->bus_lock);
|
||||||
+
|
+
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+}
|
+}
|
||||||
|
|
Loading…
Reference in a new issue