Commit 53be7959 authored by David Brownell's avatar David Brownell Committed by Jean Delvare

i2c: Remove i2c_algorithm.algo_control()

This removes:

 - An effectively unused hook:  i2c_algorithm.algo_control.

 - The i2c_control() call, used only by i2c-dev to call that
   unused hook or set two barely supported adapter params.

   (That param setting moves into i2c-dev.c ... still iffy
   due to lack of locking, but no other changes.)

As shown by diffstat, this is a net code shrink.  It also reduces the
complexity of the I2C adapter and /dev interfaces.
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent cdeec3cc
...@@ -931,28 +931,6 @@ int i2c_master_recv(struct i2c_client *client, char *buf ,int count) ...@@ -931,28 +931,6 @@ int i2c_master_recv(struct i2c_client *client, char *buf ,int count)
} }
EXPORT_SYMBOL(i2c_master_recv); EXPORT_SYMBOL(i2c_master_recv);
int i2c_control(struct i2c_client *client,
unsigned int cmd, unsigned long arg)
{
int ret = 0;
struct i2c_adapter *adap = client->adapter;
dev_dbg(&client->adapter->dev, "i2c ioctl, cmd: 0x%x, arg: %#lx\n", cmd, arg);
switch (cmd) {
case I2C_RETRIES:
adap->retries = arg;
break;
case I2C_TIMEOUT:
adap->timeout = arg;
break;
default:
if (adap->algo->algo_control!=NULL)
ret = adap->algo->algo_control(adap,cmd,arg);
}
return ret;
}
EXPORT_SYMBOL(i2c_control);
/* ---------------------------------------------------- /* ----------------------------------------------------
* the i2c address scanning function * the i2c address scanning function
* Will not work for 10-bit addresses! * Will not work for 10-bit addresses!
......
...@@ -354,9 +354,19 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file, ...@@ -354,9 +354,19 @@ static int i2cdev_ioctl(struct inode *inode, struct file *file,
return -EFAULT; return -EFAULT;
} }
return res; return res;
case I2C_RETRIES:
client->adapter->retries = arg;
break;
case I2C_TIMEOUT:
client->adapter->timeout = arg;
break;
default: default:
return i2c_control(client,cmd,arg); /* NOTE: returning a fault code here could cause trouble
* in buggy userspace code. Some old kernel bugs returned
* zero in this case, and userspace code might accidentally
* have depended on that bug.
*/
return -ENOTTY;
} }
return 0; return 0;
} }
......
...@@ -290,9 +290,6 @@ struct i2c_algorithm { ...@@ -290,9 +290,6 @@ struct i2c_algorithm {
unsigned short flags, char read_write, unsigned short flags, char read_write,
u8 command, int size, union i2c_smbus_data * data); u8 command, int size, union i2c_smbus_data * data);
/* --- ioctl like call to set div. parameters. */
int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long);
/* To determine what the adapter supports */ /* To determine what the adapter supports */
u32 (*functionality) (struct i2c_adapter *); u32 (*functionality) (struct i2c_adapter *);
}; };
...@@ -416,10 +413,6 @@ extern int i2c_probe(struct i2c_adapter *adapter, ...@@ -416,10 +413,6 @@ extern int i2c_probe(struct i2c_adapter *adapter,
struct i2c_client_address_data *address_data, struct i2c_client_address_data *address_data,
int (*found_proc) (struct i2c_adapter *, int, int)); int (*found_proc) (struct i2c_adapter *, int, int));
/* An ioctl like call to set div. parameters of the adapter.
*/
extern int i2c_control(struct i2c_client *,unsigned int, unsigned long);
extern struct i2c_adapter* i2c_get_adapter(int id); extern struct i2c_adapter* i2c_get_adapter(int id);
extern void i2c_put_adapter(struct i2c_adapter *adap); extern void i2c_put_adapter(struct i2c_adapter *adap);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment