V4L/DVB: Use custom I2C probing function mechanism
Subsystems (3)
PATCH 2/2 V4L/DVB: Use custom I2C probing function mechanism
Now that i2c-core offers the possibility to provide custom probing function for I2C devices, let's make use of it.
--- drivers/i2c/i2c-core.c | 7 +++++++ drivers/media/video/cx23885/cx23885-i2c.c | 15 ++++----------- drivers/media/video/cx88/cx88-i2c.c | 19 ++++--------------- include/linux/i2c.h | 3 +++ 4 files changed, 18 insertions(+), 26 deletions(-)
drivers/media/video/cx23885/cx23885-i2c.c +4 -11
@@ -365,17 +365,10 @@ int cx23885_i2c_register(struct cx23885_memset (&info,0 ,sizeof (struct i2c_board_info ));strlcpy (info.type,"ir_video" ,I2C_NAME_SIZE ); -/* -* We can't call i2c_new_probed_device() because it uses -* quick writes for probing and the IR receiver device only -* replies to reads. -*/ -if (i2c_smbus_xfer (&bus->i2c_adap, addr_list[0 ],0 , -I2C_SMBUS_READ ,0 ,I2C_SMBUS_QUICK , -NULL ) >=0 ) { - info.addr = addr_list[0 ]; -i2c_new_device (&bus->i2c_adap, &info); - } +/* Use quick read command for probe, some IR chips don't +* support writes */ +i2c_new_probed_device (&bus->i2c_adap, &info, addr_list, + i2c_probe_func_quick_read); }return bus->i2c_rc;
drivers/media/video/cx88/cx88-i2c.c +4 -15
@@ -188,24 +188,13 @@ int cx88_i2c_init(struct cx88_core *core0x18 ,0x6b ,0x71 , I2C_CLIENT_END }; -const unsigned short *addrp;memset (&info,0 ,sizeof (struct i2c_board_info ));strlcpy (info.type,"ir_video" ,I2C_NAME_SIZE ); -/* -* We can't call i2c_new_probed_device() because it uses -* quick writes for probing and at least some R receiver -* devices only reply to reads. -*/ -for (addrp = addr_list; *addrp !=I2C_CLIENT_END ; addrp++) { -if (i2c_smbus_xfer (&core->i2c_adap, *addrp,0 , -I2C_SMBUS_READ ,0 , -I2C_SMBUS_QUICK ,NULL ) >=0 ) { - info.addr = *addrp; -i2c_new_device (&core->i2c_adap, &info); -break ; - } - } +/* Use quick read command for probe, some IR chips don't +* support writes */ +i2c_new_probed_device (&core->i2c_adap, &info, addr_list, + i2c_probe_func_quick_read); }return core->i2c_rc; }
drivers/i2c/i2c-core.c +7 -0
@@ -1453,6 +1453,13 @@ static int i2c_detect(struct i2c_adapterreturn err; } +int i2c_probe_func_quick_read (struct i2c_adapter *adap,unsigned short addr) +{ +return i2c_smbus_xfer (adap, addr,0 ,I2C_SMBUS_READ ,0 , +I2C_SMBUS_QUICK ,NULL ) >=0 ; +} +EXPORT_SYMBOL_GPL (i2c_probe_func_quick_read); +struct i2c_client * i2c_new_probed_device(struct i2c_adapter *adap, struct i2c_board_info *info,
include/linux/i2c.h +3 -0
@@ -292,6 +292,9 @@ i2c_new_probed_device(struct i2c_adapterunsigned short const *addr_list, int (*probe)(struct i2c_adapter *, unsigned short addr)); +/* Common custom probe functions */ +extern int i2c_probe_func_quick_read (struct i2c_adapter *,unsigned short addr); +/* For devices that use several addresses, use i2c_new_dummy() to make * client handles for the extra addresses. */
Signature · 1 line
Jean Delvare
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi Jean,
Quoted 5 lines · Jean Delvare
Now that i2c-core offers the possibility to provide custom probing function for I2C devices, let's make use of it.
Signed-off-by Jean Delvare <[email protected]>
If this custom function is in i2c-core, maybe it should be documented?
Regards,
Wolfram
Signature · 2 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ |
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi Wolfram,
Quoted 10 lines · Wolfram Sang
Hi Jean,
Quoted 5 lines · Jean Delvare
Now that i2c-core offers the possibility to provide custom probing function for I2C devices, let's make use of it.
Signed-off-by Jean Delvare <[email protected]>If this custom function is in i2c-core, maybe it should be documented?
What kind of documentation would you expect for a one-line function? Where, and aimed at who?
Patch welcome ;)
Signature · 1 line
Jean Delvare