For the new 'alias' feature, we need to scan for devices while holding the lock. We focus on read_byte transactions for now to keep things simple. Requesting an alias will be rare, so there is not much overhead. Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> --- drivers/i2c/i2c-core-base.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index 20a726dc78db..51bd953ddfb2 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -2108,6 +2108,23 @@ static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr) return err >= 0; } +static int i2c_unlocked_read_byte_probe(struct i2c_adapter *adap, unsigned short addr) +{ + union i2c_smbus_data dummy; + int err; + + if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE)) { + err = __i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, + I2C_SMBUS_BYTE, &dummy); + } else { + dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n", + addr); + err = -EOPNOTSUPP; + } + + return err >= 0; +} + static int i2c_scan_for_client(struct i2c_adapter *adap, unsigned short addr, int (*probe)(struct i2c_adapter *adap, unsigned short addr)) { -- 2.20.1