[PATCH] iio: humidity: ens210: Fix missing I2C functionality checks

Salah Triki posted 1 patch 1 month, 1 week ago
There is a newer version of this series
drivers/iio/humidity/ens210.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] iio: humidity: ens210: Fix missing I2C functionality checks
Posted by Salah Triki 1 month, 1 week ago
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
Re: [PATCH] iio: humidity: ens210: Fix missing I2C functionality checks
Posted by Andy Shevchenko 1 month, 1 week ago
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
Re: [PATCH] iio: humidity: ens210: Fix missing I2C functionality checks
Posted by Salah Triki 1 month, 1 week ago
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
Re: [PATCH] iio: humidity: ens210: Fix missing I2C functionality checks
Posted by Andy Shevchenko 1 month, 1 week ago
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