From: Zev Weiss Date: Thu, 6 May 2021 20:54:19 +0000 (-0500) Subject: i2c: aspeed: disable additional device addresses on ast2[56]xx X-Git-Tag: accepted/tizen/unified/20230118.172025~6908^2~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3fb2e2aeafb2d28e49d9c069ac392dabe595b1ae;p=platform%2Fkernel%2Flinux-rpi.git 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: Zev Weiss Reviewed-by: Brendan Higgins Reviewed-by: Joel Stanley Tested-by: Joel Stanley Signed-off-by: Wolfram Sang --- diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c index 724bf30..67e8b97 100644 --- a/drivers/i2c/busses/i2c-aspeed.c +++ b/drivers/i2c/busses/i2c-aspeed.c @@ -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. */