mirror of https://gitee.com/openkylin/linux.git
media: af9013: switch to i2c_lock_bus(..., I2C_LOCK_SEGMENT)
Locking the root adapter for __i2c_transfer will deadlock if the device sits behind a mux-locked I2C mux. Switch to the finer-grained i2c_lock_bus with the I2C_LOCK_SEGMENT flag. If the device does not sit behind a mux-locked mux, the two locking variants are equivalent. Signed-off-by: Peter Rosin <peda@axentia.se> Acked-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
193c2a07cf
commit
b1e1ca2757
|
@ -1312,10 +1312,10 @@ static int af9013_wregs(struct i2c_client *client, u8 cmd, u16 reg,
|
|||
memcpy(&buf[3], val, len);
|
||||
|
||||
if (lock)
|
||||
i2c_lock_adapter(client->adapter);
|
||||
i2c_lock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
ret = __i2c_transfer(client->adapter, msg, 1);
|
||||
if (lock)
|
||||
i2c_unlock_adapter(client->adapter);
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
if (ret < 0) {
|
||||
goto err;
|
||||
} else if (ret != 1) {
|
||||
|
@ -1353,10 +1353,10 @@ static int af9013_rregs(struct i2c_client *client, u8 cmd, u16 reg,
|
|||
buf[2] = cmd;
|
||||
|
||||
if (lock)
|
||||
i2c_lock_adapter(client->adapter);
|
||||
i2c_lock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
ret = __i2c_transfer(client->adapter, msg, 2);
|
||||
if (lock)
|
||||
i2c_unlock_adapter(client->adapter);
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
if (ret < 0) {
|
||||
goto err;
|
||||
} else if (ret != 2) {
|
||||
|
|
Loading…
Reference in New Issue