]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
i2c: dev: Check for I2C_FUNC_I2C before calling i2c_transfer
authorJean Delvare <jdelvare@suse.de>
Fri, 31 May 2024 09:34:07 +0000 (11:34 +0200)
committerWolfram Sang <wsa+renesas@sang-engineering.com>
Wed, 26 Jun 2024 10:45:25 +0000 (12:45 +0200)
It is good practice to check that the underlying adapter supports
I2C transfers before attempting them. The i2c core would eventually
return an error, but it's more efficient to fail early.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
drivers/i2c/i2c-dev.c

index 8b7e599f167411be1cc8bc63e2e4c8f5b45059bc..f4fb212b7f3920503f2d9454ea584dd0f9a3ed17 100644 (file)
@@ -139,6 +139,10 @@ static ssize_t i2cdev_read(struct file *file, char __user *buf, size_t count,
 
        struct i2c_client *client = file->private_data;
 
+       /* Adapter must support I2C transfers */
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+               return -EOPNOTSUPP;
+
        if (count > 8192)
                count = 8192;
 
@@ -163,6 +167,10 @@ static ssize_t i2cdev_write(struct file *file, const char __user *buf,
        char *tmp;
        struct i2c_client *client = file->private_data;
 
+       /* Adapter must support I2C transfers */
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+               return -EOPNOTSUPP;
+
        if (count > 8192)
                count = 8192;
 
@@ -238,6 +246,10 @@ static noinline int i2cdev_ioctl_rdwr(struct i2c_client *client,
        u8 __user **data_ptrs;
        int i, res;
 
+       /* Adapter must support I2C transfers */
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+               return -EOPNOTSUPP;
+
        data_ptrs = kmalloc_array(nmsgs, sizeof(u8 __user *), GFP_KERNEL);
        if (data_ptrs == NULL) {
                kfree(msgs);