drivers/iio/humidity/ens210.c | 2 ++ 1 file changed, 2 insertions(+)
The ENS210 driver uses both `i2c_smbus_read_byte_data()` and
`i2c_smbus_read_word_data()` during the read and probe phases.
However, `i2c_check_functionality()` was only checking for block reads
and simple byte writes, which could lead to hardware interface
incompatibilities or errors on certain adapters that do not natively
support SMBus word or byte data transactions.
Add `I2C_FUNC_SMBUS_READ_BYTE_DATA` and `I2C_FUNC_SMBUS_READ_WORD_DATA`
to the functionality check mask to ensure the adapter supports the
required operations before communication begins.
Fixes: c524fbca672e ("iio: humidity: Add support for ENS210")
Signed-off-by: Salah Triki <salah.triki@gmail.com>
---
drivers/iio/humidity/ens210.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/iio/humidity/ens210.c b/drivers/iio/humidity/ens210.c
index 77418d97f30d..e8633f247b10 100644
--- a/drivers/iio/humidity/ens210.c
+++ b/drivers/iio/humidity/ens210.c
@@ -204,6 +204,8 @@ static int ens210_probe(struct i2c_client *client)
if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_WRITE_BYTE_DATA |
I2C_FUNC_SMBUS_WRITE_BYTE |
+ I2C_FUNC_SMBUS_READ_BYTE_DATA |
+ I2C_FUNC_SMBUS_READ_WORD_DATA |
I2C_FUNC_SMBUS_READ_I2C_BLOCK)) {
return dev_err_probe(&client->dev, -EOPNOTSUPP,
"adapter does not support some i2c transactions\n");
--
2.43.0
On Tue, May 05, 2026 at 10:02:47AM +0100, Salah Triki wrote: > The ENS210 driver uses both `i2c_smbus_read_byte_data()` and > `i2c_smbus_read_word_data()` during the read and probe phases. > However, `i2c_check_functionality()` was only checking for block reads > and simple byte writes, which could lead to hardware interface > incompatibilities or errors on certain adapters that do not natively > support SMBus word or byte data transactions. > > Add `I2C_FUNC_SMBUS_READ_BYTE_DATA` and `I2C_FUNC_SMBUS_READ_WORD_DATA` > to the functionality check mask to ensure the adapter supports the > required operations before communication begins. Can we rather modify the driver to use SW emulation for these cases? -- With Best Regards, Andy Shevchenko
On Tue, May 05, 2026 at 12:07:04PM +0300, Andy Shevchenko wrote: > On Tue, May 05, 2026 at 10:02:47AM +0100, Salah Triki wrote: > > The ENS210 driver uses both `i2c_smbus_read_byte_data()` and > > `i2c_smbus_read_word_data()` during the read and probe phases. > > However, `i2c_check_functionality()` was only checking for block reads > > and simple byte writes, which could lead to hardware interface > > incompatibilities or errors on certain adapters that do not natively > > support SMBus word or byte data transactions. > > > > Add `I2C_FUNC_SMBUS_READ_BYTE_DATA` and `I2C_FUNC_SMBUS_READ_WORD_DATA` > > to the functionality check mask to ensure the adapter supports the > > required operations before communication begins. > > Can we rather modify the driver to use SW emulation for these cases? > > -- > With Best Regards, > Andy Shevchenko > > I'll update the probe function to check for I2C_FUNC_SMBUS_EMUL instead of the individual functions. Thanks for the suggestion. Best regards -- Salah Triki
On Tue, May 5, 2026 at 12:28 PM Salah Triki <salah.triki@gmail.com> wrote: > On Tue, May 05, 2026 at 12:07:04PM +0300, Andy Shevchenko wrote: > > On Tue, May 05, 2026 at 10:02:47AM +0100, Salah Triki wrote: > > > The ENS210 driver uses both `i2c_smbus_read_byte_data()` and > > > `i2c_smbus_read_word_data()` during the read and probe phases. > > > However, `i2c_check_functionality()` was only checking for block reads > > > and simple byte writes, which could lead to hardware interface > > > incompatibilities or errors on certain adapters that do not natively > > > support SMBus word or byte data transactions. > > > > > > Add `I2C_FUNC_SMBUS_READ_BYTE_DATA` and `I2C_FUNC_SMBUS_READ_WORD_DATA` > > > to the functionality check mask to ensure the adapter supports the > > > required operations before communication begins. > > > > Can we rather modify the driver to use SW emulation for these cases? > > I'll update the probe function to check for I2C_FUNC_SMBUS_EMUL instead of > the individual functions. Hmm... But will it work with the drivers that do not provide EMUL, but the native functions? Please, carefully check all this and come up with a solution that works for most of the cases if not all. -- With Best Regards, Andy Shevchenko
© 2016 - 2026 Red Hat, Inc.