Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'i2c-for-6.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c fixes from Wolfram Sang:

- i801: drop superfluous WDT entry for Birch

- rtl9300:
- fix channel number check in probe
- check data length boundaries in xfer
- drop broken SMBus quick operation

* tag 'i2c-for-6.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
i2c: rtl9300: remove broken SMBus Quick operation support
i2c: rtl9300: ensure data length is within supported range
i2c: rtl9300: fix channel number bound check
i2c: i801: Hide Intel Birch Stream SoC TCO WDT

+9 -15
+1 -1
drivers/i2c/busses/i2c-i801.c
··· 1052 1052 { PCI_DEVICE_DATA(INTEL, METEOR_LAKE_P_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1053 1053 { PCI_DEVICE_DATA(INTEL, METEOR_LAKE_SOC_S_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1054 1054 { PCI_DEVICE_DATA(INTEL, METEOR_LAKE_PCH_S_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1055 - { PCI_DEVICE_DATA(INTEL, BIRCH_STREAM_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1055 + { PCI_DEVICE_DATA(INTEL, BIRCH_STREAM_SMBUS, FEATURES_ICH5) }, 1056 1056 { PCI_DEVICE_DATA(INTEL, ARROW_LAKE_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1057 1057 { PCI_DEVICE_DATA(INTEL, PANTHER_LAKE_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) }, 1058 1058 { PCI_DEVICE_DATA(INTEL, PANTHER_LAKE_P_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
+8 -14
drivers/i2c/busses/i2c-rtl9300.c
··· 99 99 { 100 100 u32 val, mask; 101 101 102 + if (len < 1 || len > 16) 103 + return -EINVAL; 104 + 102 105 val = chan->bus_freq << RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS; 103 106 mask = RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK; 104 107 ··· 225 222 } 226 223 227 224 switch (size) { 228 - case I2C_SMBUS_QUICK: 229 - ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 0); 230 - if (ret) 231 - goto out_unlock; 232 - ret = rtl9300_i2c_reg_addr_set(i2c, 0, 0); 233 - if (ret) 234 - goto out_unlock; 235 - break; 236 - 237 225 case I2C_SMBUS_BYTE: 238 226 if (read_write == I2C_SMBUS_WRITE) { 239 227 ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 0); ··· 306 312 307 313 static u32 rtl9300_i2c_func(struct i2c_adapter *a) 308 314 { 309 - return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | 310 - I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | 311 - I2C_FUNC_SMBUS_BLOCK_DATA; 315 + return I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA | 316 + I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA | 317 + I2C_FUNC_SMBUS_I2C_BLOCK; 312 318 } 313 319 314 320 static const struct i2c_algorithm rtl9300_i2c_algo = { ··· 317 323 }; 318 324 319 325 static struct i2c_adapter_quirks rtl9300_i2c_quirks = { 320 - .flags = I2C_AQ_NO_CLK_STRETCH, 326 + .flags = I2C_AQ_NO_CLK_STRETCH | I2C_AQ_NO_ZERO_LEN, 321 327 .max_read_len = 16, 322 328 .max_write_len = 16, 323 329 }; ··· 347 353 348 354 platform_set_drvdata(pdev, i2c); 349 355 350 - if (device_get_child_node_count(dev) >= RTL9300_I2C_MUX_NCHAN) 356 + if (device_get_child_node_count(dev) > RTL9300_I2C_MUX_NCHAN) 351 357 return dev_err_probe(dev, -EINVAL, "Too many channels\n"); 352 358 353 359 device_for_each_child_node(dev, child) {