Changeset 25725
- Timestamp:
- 2011-02-26T07:23:23+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/target/linux/ixp4xx/patches-2.6.37/020-gateworks_i2c_pld.patch
r23964 r25725 52 52 + * The Gateworks I2C PLD chip does not properly send the acknowledge bit 53 53 + * thus we cannot use standard i2c_smbus functions. We have recreated 54 + * our own here, but we still use the mutex_lock to lock the i2c_bus54 + * our own here, but we still use the rt_mutex_lock to lock the i2c_bus 55 55 + * as the device still exists on the I2C bus. 56 56 +*/ … … 180 180 + struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip); 181 181 + struct i2c_adapter *adap = gpio->client->adapter; 182 + 182 + 183 183 + if (in_atomic() || irqs_disabled()) { 184 + ret = mutex_trylock(&adap->bus_lock);184 + ret = rt_mutex_trylock(&adap->bus_lock); 185 185 + if (!ret) 186 186 + /* I2C activity is ongoing. */ 187 187 + return -EAGAIN; 188 188 + } else { 189 + mutex_lock_nested(&adap->bus_lock, adap->level);189 + rt_mutex_lock(&adap->bus_lock); 190 190 + } 191 191 + … … 194 194 + ret = i2c_pld_write_byte(gpio->client->addr, gpio->out); 195 195 + 196 + mutex_unlock(&adap->bus_lock);196 + rt_mutex_unlock(&adap->bus_lock); 197 197 + 198 198 + return ret; … … 205 205 + struct gw_i2c_pld *gpio = container_of(chip, struct gw_i2c_pld, chip); 206 206 + struct i2c_adapter *adap = gpio->client->adapter; 207 + 207 + 208 208 + if (in_atomic() || irqs_disabled()) { 209 + ret = mutex_trylock(&adap->bus_lock);209 + ret = rt_mutex_trylock(&adap->bus_lock); 210 210 + if (!ret) 211 211 + /* I2C activity is ongoing. */ 212 212 + return -EAGAIN; 213 213 + } else { 214 + mutex_lock_nested(&adap->bus_lock, adap->level);214 + rt_mutex_lock(&adap->bus_lock); 215 215 + } 216 216 + 217 217 + value = i2c_pld_read_byte(gpio->client->addr); 218 218 + 219 + mutex_unlock(&adap->bus_lock);219 + rt_mutex_unlock(&adap->bus_lock); 220 220 + 221 221 + return (value < 0) ? 0 : (value & (1 << offset)); … … 230 230 + 231 231 + unsigned bit = 1 << offset; 232 + 232 + 233 233 + if (in_atomic() || irqs_disabled()) { 234 + ret = mutex_trylock(&adap->bus_lock);234 + ret = rt_mutex_trylock(&adap->bus_lock); 235 235 + if (!ret) 236 236 + /* I2C activity is ongoing. */ 237 237 + return -EAGAIN; 238 238 + } else { 239 + mutex_lock_nested(&adap->bus_lock, adap->level);239 + rt_mutex_lock(&adap->bus_lock); 240 240 + } 241 241 + … … 248 248 + ret = i2c_pld_write_byte(gpio->client->addr, gpio->out); 249 249 + 250 + mutex_unlock(&adap->bus_lock);250 + rt_mutex_unlock(&adap->bus_lock); 251 251 + 252 252 + return ret;
Note: See TracChangeset
for help on using the changeset viewer.