Commit 3fb2e2ae authored by Zev Weiss's avatar Zev Weiss Committed by Wolfram Sang
Browse files

i2c: aspeed: disable additional device addresses on ast2[56]xx



The ast25xx and ast26xx have, respectively, two and three configurable
slave device addresses to the ast24xx's one.  We only support using
one at a time, but the others may come up in an indeterminate state
depending on hardware/bootloader behavior, so we need to make sure we
disable them so as to avoid ending up with phantom devices on the bus.

Signed-off-by: default avatarZev Weiss <zev@bewilderbeest.net>
Reviewed-by: default avatarBrendan Higgins <brendanhiggins@google.com>
Reviewed-by: default avatarJoel Stanley <joel@jms.id.au>
Tested-by: default avatarJoel Stanley <joel@jms.id.au>
Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
parent c8062d11
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -727,10 +727,14 @@ static void __aspeed_i2c_reg_slave(struct aspeed_i2c_bus *bus, u16 slave_addr)
{
	u32 addr_reg_val, func_ctrl_reg_val;

	/* Set slave addr. */
	addr_reg_val = readl(bus->base + ASPEED_I2C_DEV_ADDR_REG);
	addr_reg_val &= ~ASPEED_I2CD_DEV_ADDR_MASK;
	addr_reg_val |= slave_addr & ASPEED_I2CD_DEV_ADDR_MASK;
	/*
	 * Set slave addr.  Reserved bits can all safely be written with zeros
	 * on all of ast2[456]00, so zero everything else to ensure we only
	 * enable a single slave address (ast2500 has two, ast2600 has three,
	 * the enable bits for which are also in this register) so that we don't
	 * end up with additional phantom devices responding on the bus.
	 */
	addr_reg_val = slave_addr & ASPEED_I2CD_DEV_ADDR_MASK;
	writel(addr_reg_val, bus->base + ASPEED_I2C_DEV_ADDR_REG);

	/* Turn on slave mode. */