diff options
Diffstat (limited to 'drivers/i2c/i2c-dev.c')
| -rw-r--r-- | drivers/i2c/i2c-dev.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c index 8b7e599f1674..f4fb212b7f39 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c @@ -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); |