diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2007-11-04 09:03:22 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-01-25 16:01:58 -0500 |
commit | a818e1c8f7fcb42866a8630c508caddaa8edb331 (patch) | |
tree | 40dc02cc463c25fca468b8e92fe98cf7b5cf9d80 | |
parent | 1f3a4e328549cb85aa032c4ee5dfda7886754154 (diff) |
V4L/DVB (6551): tda8290: rule out tda988x before detecting tda8290/tda8295
To ensure prevention of detecting a tda9885/6/7 as a tda8290 or tda8295, we
will rule out the tda988x before testing the tda8290 / tda8295 id registers.
We read 8 bytes from the chip. If they are all equal, then it is not a
tda829x, or some other error has occurred.
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/video/tda8290.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/media/video/tda8290.c b/drivers/media/video/tda8290.c index 18e6a09642fa..f0191babe40c 100644 --- a/drivers/media/video/tda8290.c +++ b/drivers/media/video/tda8290.c | |||
@@ -746,6 +746,22 @@ int tda829x_probe(struct tuner *t) | |||
746 | unsigned char restore_9886[] = { 0x00, 0xd6, 0x30 }; | 746 | unsigned char restore_9886[] = { 0x00, 0xd6, 0x30 }; |
747 | unsigned char addr_dto_lsb = 0x07; | 747 | unsigned char addr_dto_lsb = 0x07; |
748 | unsigned char data; | 748 | unsigned char data; |
749 | #define PROBE_BUFFER_SIZE 8 | ||
750 | unsigned char buf[PROBE_BUFFER_SIZE]; | ||
751 | int i; | ||
752 | |||
753 | /* rule out tda9887, which would return the same byte repeatedly */ | ||
754 | tuner_i2c_xfer_send(&i2c_props, soft_reset, 1); | ||
755 | tuner_i2c_xfer_recv(&i2c_props, buf, PROBE_BUFFER_SIZE); | ||
756 | for (i = 1; i < PROBE_BUFFER_SIZE; i++) { | ||
757 | if (buf[i] == buf[0]) | ||
758 | continue; | ||
759 | break; | ||
760 | } | ||
761 | |||
762 | /* all bytes are equal, not a tda829x - probably a tda9887 */ | ||
763 | if (i == PROBE_BUFFER_SIZE) | ||
764 | return -ENODEV; | ||
749 | 765 | ||
750 | if ((tda8290_probe(&i2c_props) == 0) || | 766 | if ((tda8290_probe(&i2c_props) == 0) || |
751 | (tda8295_probe(&i2c_props) == 0)) | 767 | (tda8295_probe(&i2c_props) == 0)) |