diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-10-28 07:48:37 -1000 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-10-28 07:48:37 -1000 | 
| commit | 8907bfd2b11ab0d09f2c408f82bff09e55d53a9a (patch) | |
| tree | 3e2ac18a335a22f7239badda999c7fbbd3e7c488 | |
| parent | 67d4c87945b2d9678347eaa4567d62dd56dc9713 (diff) | |
| parent | c896ff2dd8f30a6b0a922c83a96f6d43f05f0e92 (diff) | |
Merge tag 'i2c-for-6.6-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c fixes from Wolfram Sang:
 "Bugfixes for Axxia when it is a target and for PEC handling of
  stm32f7.
  Plus, fix an OF node leak pattern in the mux subsystem"
* tag 'i2c-for-6.6-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: stm32f7: Fix PEC handling in case of SMBUS transfers
  i2c: muxes: i2c-mux-gpmux: Use of_get_i2c_adapter_by_node()
  i2c: muxes: i2c-demux-pinctrl: Use of_get_i2c_adapter_by_node()
  i2c: muxes: i2c-mux-pinctrl: Use of_get_i2c_adapter_by_node()
  i2c: aspeed: Fix i2c bus hang in slave read
| -rw-r--r-- | drivers/i2c/busses/i2c-aspeed.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-stm32f7.c | 9 | ||||
| -rw-r--r-- | drivers/i2c/muxes/i2c-demux-pinctrl.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/muxes/i2c-mux-gpmux.c | 2 | ||||
| -rw-r--r-- | drivers/i2c/muxes/i2c-mux-pinctrl.c | 2 | 
5 files changed, 11 insertions, 7 deletions
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c index 5a416b39b818..28e2a5fc4528 100644 --- a/drivers/i2c/busses/i2c-aspeed.c +++ b/drivers/i2c/busses/i2c-aspeed.c @@ -749,6 +749,8 @@ static void __aspeed_i2c_reg_slave(struct aspeed_i2c_bus *bus, u16 slave_addr)  	func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);  	func_ctrl_reg_val |= ASPEED_I2CD_SLAVE_EN;  	writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG); + +	bus->slave_state = ASPEED_I2C_SLAVE_INACTIVE;  }  static int aspeed_i2c_reg_slave(struct i2c_client *client) @@ -765,7 +767,6 @@ static int aspeed_i2c_reg_slave(struct i2c_client *client)  	__aspeed_i2c_reg_slave(bus, client->addr);  	bus->slave = client; -	bus->slave_state = ASPEED_I2C_SLAVE_INACTIVE;  	spin_unlock_irqrestore(&bus->lock, flags);  	return 0; diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index 579b30581725..0d3c9a041b56 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c @@ -1059,9 +1059,10 @@ static int stm32f7_i2c_smbus_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,  	/* Configure PEC */  	if ((flags & I2C_CLIENT_PEC) && f7_msg->size != I2C_SMBUS_QUICK) {  		cr1 |= STM32F7_I2C_CR1_PECEN; -		cr2 |= STM32F7_I2C_CR2_PECBYTE; -		if (!f7_msg->read_write) +		if (!f7_msg->read_write) { +			cr2 |= STM32F7_I2C_CR2_PECBYTE;  			f7_msg->count++; +		}  	} else {  		cr1 &= ~STM32F7_I2C_CR1_PECEN;  		cr2 &= ~STM32F7_I2C_CR2_PECBYTE; @@ -1149,8 +1150,10 @@ static void stm32f7_i2c_smbus_rep_start(struct stm32f7_i2c_dev *i2c_dev)  	f7_msg->stop = true;  	/* Add one byte for PEC if needed */ -	if (cr1 & STM32F7_I2C_CR1_PECEN) +	if (cr1 & STM32F7_I2C_CR1_PECEN) { +		cr2 |= STM32F7_I2C_CR2_PECBYTE;  		f7_msg->count++; +	}  	/* Set number of bytes to be transferred */  	cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK); diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c index 22f2280eab7f..9f2e4aa28159 100644 --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c @@ -61,7 +61,7 @@ static int i2c_demux_activate_master(struct i2c_demux_pinctrl_priv *priv, u32 ne  	if (ret)  		goto err; -	adap = of_find_i2c_adapter_by_node(priv->chan[new_chan].parent_np); +	adap = of_get_i2c_adapter_by_node(priv->chan[new_chan].parent_np);  	if (!adap) {  		ret = -ENODEV;  		goto err_with_revert; diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c index baccf4bfaf02..8305661e1253 100644 --- a/drivers/i2c/muxes/i2c-mux-gpmux.c +++ b/drivers/i2c/muxes/i2c-mux-gpmux.c @@ -52,7 +52,7 @@ static struct i2c_adapter *mux_parent_adapter(struct device *dev)  		dev_err(dev, "Cannot parse i2c-parent\n");  		return ERR_PTR(-ENODEV);  	} -	parent = of_find_i2c_adapter_by_node(parent_np); +	parent = of_get_i2c_adapter_by_node(parent_np);  	of_node_put(parent_np);  	if (!parent)  		return ERR_PTR(-EPROBE_DEFER); diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c index 18236b9fa14a..6ebca7bfd8a2 100644 --- a/drivers/i2c/muxes/i2c-mux-pinctrl.c +++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c @@ -62,7 +62,7 @@ static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev)  		dev_err(dev, "Cannot parse i2c-parent\n");  		return ERR_PTR(-ENODEV);  	} -	parent = of_find_i2c_adapter_by_node(parent_np); +	parent = of_get_i2c_adapter_by_node(parent_np);  	of_node_put(parent_np);  	if (!parent)  		return ERR_PTR(-EPROBE_DEFER);  | 
