Merge branch 'i2c/for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang: - the core has now a lockless variant of i2c_smbus_xfer. Some open coded versions of this got removed in drivers. This also enables proper SCCB support in regmap. - locking got a more precise naming. i2c_{un}lock_adapter() had to go, and we know use i2c_lock_bus() consistently with flags like I2C_LOCK_ROOT_ADAPTER and I2C_LOCK_SEGMENT to avoid ambiguity. - the gpio fault injector got a new delicate testcase - the bus recovery procedure got fixed to handle the new testcase correctly - a new quirk flag for controllers not able to handle zero length messages together with driver updates to use it - new drivers: FSI bus attached I2C masters, GENI I2C controller, Owl family S900 - and a good set of driver improvements and bugfixes * 'i2c/for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (77 commits) i2c: rcar: implement STOP and REP_START according to docs i2c: rcar: refactor private flags i2c: core: ACPI: Make acpi_gsb_i2c_read_bytes() check i2c_transfer return value i2c: core: ACPI: Properly set status byte to 0 for multi-byte writes dt-bindings: i2c: rcar: Add r8a774a1 support dt-bindings: i2c: sh_mobile: Add r8a774a1 support i2c: imx: Simplify stopped state tracking i2c: imx: Fix race condition in dma read i2c: pasemi: remove hardcoded bus numbers on smbus i2c: designware: Add SPDX license tag i2c: designware: Convert to use struct i2c_timings i2c: core: Parse SDA hold time from firmware i2c: designware-pcidrv: Mark expected switch fall-through i2c: amd8111: Mark expected switch fall-through i2c: sh_mobile: use core to detect 'no zero length read' quirk i2c: xlr: use core to detect 'no zero length' quirk i2c: rcar: use core to detect 'no zero length' quirk i2c: stu300: use core to detect 'no zero length' quirk i2c: pmcmsp: use core to detect 'no zero length' quirk i2c: mxs: use core to detect 'no zero length' quirk ...
Dieser Commit ist enthalten in:
@@ -1311,10 +1311,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) {
|
||||
@@ -1352,10 +1352,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) {
|
||||
|
@@ -213,7 +213,7 @@ static inline u32 log10times100(u32 value)
|
||||
|
||||
static int drxk_i2c_lock(struct drxk_state *state)
|
||||
{
|
||||
i2c_lock_adapter(state->i2c);
|
||||
i2c_lock_bus(state->i2c, I2C_LOCK_SEGMENT);
|
||||
state->drxk_i2c_exclusive_lock = true;
|
||||
|
||||
return 0;
|
||||
@@ -224,7 +224,7 @@ static void drxk_i2c_unlock(struct drxk_state *state)
|
||||
if (!state->drxk_i2c_exclusive_lock)
|
||||
return;
|
||||
|
||||
i2c_unlock_adapter(state->i2c);
|
||||
i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
|
||||
state->drxk_i2c_exclusive_lock = false;
|
||||
}
|
||||
|
||||
|
@@ -24,9 +24,9 @@ static int rtl2830_bulk_write(struct i2c_client *client, unsigned int reg,
|
||||
struct rtl2830_dev *dev = i2c_get_clientdata(client);
|
||||
int ret;
|
||||
|
||||
i2c_lock_adapter(client->adapter);
|
||||
i2c_lock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
ret = regmap_bulk_write(dev->regmap, reg, val, val_count);
|
||||
i2c_unlock_adapter(client->adapter);
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -36,9 +36,9 @@ static int rtl2830_update_bits(struct i2c_client *client, unsigned int reg,
|
||||
struct rtl2830_dev *dev = i2c_get_clientdata(client);
|
||||
int ret;
|
||||
|
||||
i2c_lock_adapter(client->adapter);
|
||||
i2c_lock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
ret = regmap_update_bits(dev->regmap, reg, mask, val);
|
||||
i2c_unlock_adapter(client->adapter);
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -48,9 +48,9 @@ static int rtl2830_bulk_read(struct i2c_client *client, unsigned int reg,
|
||||
struct rtl2830_dev *dev = i2c_get_clientdata(client);
|
||||
int ret;
|
||||
|
||||
i2c_lock_adapter(client->adapter);
|
||||
i2c_lock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
ret = regmap_bulk_read(dev->regmap, reg, val, val_count);
|
||||
i2c_unlock_adapter(client->adapter);
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -329,7 +329,7 @@ static int tda1004x_do_upload(struct tda1004x_state *state,
|
||||
tda1004x_write_byteI(state, dspCodeCounterReg, 0);
|
||||
fw_msg.addr = state->config->demod_address;
|
||||
|
||||
i2c_lock_adapter(state->i2c);
|
||||
i2c_lock_bus(state->i2c, I2C_LOCK_SEGMENT);
|
||||
buf[0] = dspCodeInReg;
|
||||
while (pos != len) {
|
||||
// work out how much to send this time
|
||||
@@ -342,14 +342,14 @@ static int tda1004x_do_upload(struct tda1004x_state *state,
|
||||
fw_msg.len = tx_size + 1;
|
||||
if (__i2c_transfer(state->i2c, &fw_msg, 1) != 1) {
|
||||
printk(KERN_ERR "tda1004x: Error during firmware upload\n");
|
||||
i2c_unlock_adapter(state->i2c);
|
||||
i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
|
||||
return -EIO;
|
||||
}
|
||||
pos += tx_size;
|
||||
|
||||
dprintk("%s: fw_pos=0x%x\n", __func__, pos);
|
||||
}
|
||||
i2c_unlock_adapter(state->i2c);
|
||||
i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
|
||||
|
||||
/* give the DSP a chance to settle 03/10/05 Hac */
|
||||
msleep(100);
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren