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

Pull i2c fixes from Wolfram Sang:
"i2c-host fixes for v6.12-rc7 (from Andi):

- Fix designware incorrect behavior when concluding a transmission

- Fix Mule multiplexer error value evaluation"

* tag 'i2c-for-6.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
i2c: designware: do not hold SCL low when I2C_DYNAMIC_TAR_UPDATE is not set
i2c: muxes: Fix return value check in mule_i2c_mux_probe()

+7 -4
+4 -2
drivers/i2c/busses/i2c-designware-common.c
··· 524 void __i2c_dw_disable(struct dw_i2c_dev *dev) 525 { 526 struct i2c_timings *t = &dev->timings; 527 - unsigned int raw_intr_stats; 528 unsigned int enable; 529 int timeout = 100; 530 bool abort_needed; ··· 532 int ret; 533 534 regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &raw_intr_stats); 535 regmap_read(dev->map, DW_IC_ENABLE, &enable); 536 537 - abort_needed = raw_intr_stats & DW_IC_INTR_MST_ON_HOLD; 538 if (abort_needed) { 539 if (!(enable & DW_IC_ENABLE_ENABLE)) { 540 regmap_write(dev->map, DW_IC_ENABLE, DW_IC_ENABLE_ENABLE);
··· 524 void __i2c_dw_disable(struct dw_i2c_dev *dev) 525 { 526 struct i2c_timings *t = &dev->timings; 527 + unsigned int raw_intr_stats, ic_stats; 528 unsigned int enable; 529 int timeout = 100; 530 bool abort_needed; ··· 532 int ret; 533 534 regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &raw_intr_stats); 535 + regmap_read(dev->map, DW_IC_STATUS, &ic_stats); 536 regmap_read(dev->map, DW_IC_ENABLE, &enable); 537 538 + abort_needed = (raw_intr_stats & DW_IC_INTR_MST_ON_HOLD) || 539 + (ic_stats & DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY); 540 if (abort_needed) { 541 if (!(enable & DW_IC_ENABLE_ENABLE)) { 542 regmap_write(dev->map, DW_IC_ENABLE, DW_IC_ENABLE_ENABLE);
+1
drivers/i2c/busses/i2c-designware-core.h
··· 116 #define DW_IC_STATUS_RFNE BIT(3) 117 #define DW_IC_STATUS_MASTER_ACTIVITY BIT(5) 118 #define DW_IC_STATUS_SLAVE_ACTIVITY BIT(6) 119 120 #define DW_IC_SDA_HOLD_RX_SHIFT 16 121 #define DW_IC_SDA_HOLD_RX_MASK GENMASK(23, 16)
··· 116 #define DW_IC_STATUS_RFNE BIT(3) 117 #define DW_IC_STATUS_MASTER_ACTIVITY BIT(5) 118 #define DW_IC_STATUS_SLAVE_ACTIVITY BIT(6) 119 + #define DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY BIT(7) 120 121 #define DW_IC_SDA_HOLD_RX_SHIFT 16 122 #define DW_IC_SDA_HOLD_RX_MASK GENMASK(23, 16)
+2 -2
drivers/i2c/muxes/i2c-mux-mule.c
··· 66 priv = i2c_mux_priv(muxc); 67 68 priv->regmap = dev_get_regmap(mux_dev->parent, NULL); 69 - if (IS_ERR(priv->regmap)) 70 - return dev_err_probe(mux_dev, PTR_ERR(priv->regmap), 71 "No parent i2c register map\n"); 72 73 platform_set_drvdata(pdev, muxc);
··· 66 priv = i2c_mux_priv(muxc); 67 68 priv->regmap = dev_get_regmap(mux_dev->parent, NULL); 69 + if (!priv->regmap) 70 + return dev_err_probe(mux_dev, -ENODEV, 71 "No parent i2c register map\n"); 72 73 platform_set_drvdata(pdev, muxc);