aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx23885/cx23885-i2c.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2010-05-26 09:05:11 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-06-01 00:23:19 -0400
commit806b07c29b711aaf90c81d2a19711607769f8246 (patch)
treeac9a5066c43dd086832a399af6e098efa28ffd5d /drivers/media/video/cx23885/cx23885-i2c.c
parentf137f9d0009067289a2fa6c4da9b82084cdd257e (diff)
V4L/DVB: FusionHDTV: Use quick reads for I2C IR device probing
IR support on FusionHDTV cards is broken since kernel 2.6.31. One side effect of the switch to the standard binding model for IR I2C devices was to let i2c-core do the probing instead of the ir-kbd-i2c driver. There is a slight difference between the two probe methods: i2c-core uses 0-byte writes, while the ir-kbd-i2c was using 0-byte reads. As some IR I2C devices only support reads, the new probe method fails to detect them. For now, revert to letting the driver do the probe, using 0-byte reads. In the future, i2c-core will be extended to let callers of i2c_new_probed_device() provide a custom probing function. Signed-off-by: Jean Delvare <khali@linux-fr.org> Tested-by: "Timothy D. Lenz" <tlenz@vorgon.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx23885/cx23885-i2c.c')
-rw-r--r--drivers/media/video/cx23885/cx23885-i2c.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/media/video/cx23885/cx23885-i2c.c b/drivers/media/video/cx23885/cx23885-i2c.c
index 4172cb387420..d4746e064516 100644
--- a/drivers/media/video/cx23885/cx23885-i2c.c
+++ b/drivers/media/video/cx23885/cx23885-i2c.c
@@ -365,7 +365,17 @@ int cx23885_i2c_register(struct cx23885_i2c *bus)
365 365
366 memset(&info, 0, sizeof(struct i2c_board_info)); 366 memset(&info, 0, sizeof(struct i2c_board_info));
367 strlcpy(info.type, "ir_video", I2C_NAME_SIZE); 367 strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
368 i2c_new_probed_device(&bus->i2c_adap, &info, addr_list); 368 /*
369 * We can't call i2c_new_probed_device() because it uses
370 * quick writes for probing and the IR receiver device only
371 * replies to reads.
372 */
373 if (i2c_smbus_xfer(&bus->i2c_adap, addr_list[0], 0,
374 I2C_SMBUS_READ, 0, I2C_SMBUS_QUICK,
375 NULL) >= 0) {
376 info.addr = addr_list[0];
377 i2c_new_device(&bus->i2c_adap, &info);
378 }
369 } 379 }
370 380
371 return bus->i2c_rc; 381 return bus->i2c_rc;