* [PATCH RESEND] FusionHDTV: Use quick reads for I2C IR device probing
@ 2010-05-26 13:05 Jean Delvare
2010-06-04 15:14 ` Jean Delvare
0 siblings, 1 reply; 3+ messages in thread
From: Jean Delvare @ 2010-05-26 13:05 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
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>
---
This fix applies to kernels 2.6.31 to 2.6.34. Should be sent to Linus
quickly. I had already sent on March 29th, but apparently it was
overlooked. I have further i2c patches which depend on this one, so
please process it quickly, otherwise I'll have to push it myself.
drivers/media/video/cx23885/cx23885-i2c.c | 12 +++++++++++-
drivers/media/video/cx88/cx88-i2c.c | 16 +++++++++++++++-
2 files changed, 26 insertions(+), 2 deletions(-)
--- linux-2.6.34-rc1.orig/drivers/media/video/cx23885/cx23885-i2c.c 2010-02-25 09:10:33.000000000 +0100
+++ linux-2.6.34-rc1/drivers/media/video/cx23885/cx23885-i2c.c 2010-03-18 13:33:05.000000000 +0100
@@ -365,7 +365,17 @@ int cx23885_i2c_register(struct cx23885_
memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
- i2c_new_probed_device(&bus->i2c_adap, &info, addr_list);
+ /*
+ * 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);
+ }
}
return bus->i2c_rc;
--- linux-2.6.34-rc1.orig/drivers/media/video/cx88/cx88-i2c.c 2010-02-25 09:08:40.000000000 +0100
+++ linux-2.6.34-rc1/drivers/media/video/cx88/cx88-i2c.c 2010-03-18 13:33:05.000000000 +0100
@@ -188,10 +188,24 @@ int cx88_i2c_init(struct cx88_core *core
0x18, 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);
- i2c_new_probed_device(&core->i2c_adap, &info, addr_list);
+ /*
+ * 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;
+ }
+ }
}
return core->i2c_rc;
}
--
Jean Delvare
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RESEND] FusionHDTV: Use quick reads for I2C IR device probing
2010-05-26 13:05 [PATCH RESEND] FusionHDTV: Use quick reads for I2C IR device probing Jean Delvare
@ 2010-06-04 15:14 ` Jean Delvare
2010-06-04 18:44 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 3+ messages in thread
From: Jean Delvare @ 2010-06-04 15:14 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
Mauro,
On Wed, 26 May 2010 15:05:11 +0200, Jean Delvare wrote:
> 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>
> ---
> This fix applies to kernels 2.6.31 to 2.6.34. Should be sent to Linus
> quickly. I had already sent on March 29th, but apparently it was
> overlooked. I have further i2c patches which depend on this one, so
> please process it quickly, otherwise I'll have to push it myself.
This fix is still not upstream! What do I have to do to get it there?
Please!
> drivers/media/video/cx23885/cx23885-i2c.c | 12 +++++++++++-
> drivers/media/video/cx88/cx88-i2c.c | 16 +++++++++++++++-
> 2 files changed, 26 insertions(+), 2 deletions(-)
>
> --- linux-2.6.34-rc1.orig/drivers/media/video/cx23885/cx23885-i2c.c 2010-02-25 09:10:33.000000000 +0100
> +++ linux-2.6.34-rc1/drivers/media/video/cx23885/cx23885-i2c.c 2010-03-18 13:33:05.000000000 +0100
> @@ -365,7 +365,17 @@ int cx23885_i2c_register(struct cx23885_
>
> memset(&info, 0, sizeof(struct i2c_board_info));
> strlcpy(info.type, "ir_video", I2C_NAME_SIZE);
> - i2c_new_probed_device(&bus->i2c_adap, &info, addr_list);
> + /*
> + * 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);
> + }
> }
>
> return bus->i2c_rc;
> --- linux-2.6.34-rc1.orig/drivers/media/video/cx88/cx88-i2c.c 2010-02-25 09:08:40.000000000 +0100
> +++ linux-2.6.34-rc1/drivers/media/video/cx88/cx88-i2c.c 2010-03-18 13:33:05.000000000 +0100
> @@ -188,10 +188,24 @@ int cx88_i2c_init(struct cx88_core *core
> 0x18, 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);
> - i2c_new_probed_device(&core->i2c_adap, &info, addr_list);
> + /*
> + * 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;
> + }
> + }
> }
> return core->i2c_rc;
> }
>
>
--
Jean Delvare
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RESEND] FusionHDTV: Use quick reads for I2C IR device probing
2010-06-04 15:14 ` Jean Delvare
@ 2010-06-04 18:44 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 3+ messages in thread
From: Mauro Carvalho Chehab @ 2010-06-04 18:44 UTC (permalink / raw)
To: Jean Delvare; +Cc: linux-media
Em 04-06-2010 12:14, Jean Delvare escreveu:
> Mauro,
>
> On Wed, 26 May 2010 15:05:11 +0200, Jean Delvare wrote:
>> 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>
>> ---
>> This fix applies to kernels 2.6.31 to 2.6.34. Should be sent to Linus
>> quickly. I had already sent on March 29th, but apparently it was
>> overlooked. I have further i2c patches which depend on this one, so
>> please process it quickly, otherwise I'll have to push it myself.
>
> This fix is still not upstream! What do I have to do to get it there?
> Please!
Just sent a pull request.
Cheers,
Mauro
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-06-04 18:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-26 13:05 [PATCH RESEND] FusionHDTV: Use quick reads for I2C IR device probing Jean Delvare
2010-06-04 15:14 ` Jean Delvare
2010-06-04 18:44 ` Mauro Carvalho Chehab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).