aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2007-11-04 09:03:22 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-01-25 16:01:58 -0500
commita818e1c8f7fcb42866a8630c508caddaa8edb331 (patch)
tree40dc02cc463c25fca468b8e92fe98cf7b5cf9d80
parent1f3a4e328549cb85aa032c4ee5dfda7886754154 (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.c16
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))