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 <zev@bewilderbeest.net> Reviewed-by: Brendan Higgins <brendanhiggins@google.com> Reviewed-by: Joel Stanley <joel@jms.id.au> Tested-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Wolfram Sang <wsa@kernel.org>
This commit is contained in:
parent
c8062d11e2
commit
3fb2e2aeaf
1 changed files with 8 additions and 4 deletions
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue