forked from Minki/linux
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>
This commit is contained in:
parent
1f3a4e3285
commit
a818e1c8f7
@ -746,6 +746,22 @@ int tda829x_probe(struct tuner *t)
|
||||
unsigned char restore_9886[] = { 0x00, 0xd6, 0x30 };
|
||||
unsigned char addr_dto_lsb = 0x07;
|
||||
unsigned char data;
|
||||
#define PROBE_BUFFER_SIZE 8
|
||||
unsigned char buf[PROBE_BUFFER_SIZE];
|
||||
int i;
|
||||
|
||||
/* rule out tda9887, which would return the same byte repeatedly */
|
||||
tuner_i2c_xfer_send(&i2c_props, soft_reset, 1);
|
||||
tuner_i2c_xfer_recv(&i2c_props, buf, PROBE_BUFFER_SIZE);
|
||||
for (i = 1; i < PROBE_BUFFER_SIZE; i++) {
|
||||
if (buf[i] == buf[0])
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* all bytes are equal, not a tda829x - probably a tda9887 */
|
||||
if (i == PROBE_BUFFER_SIZE)
|
||||
return -ENODEV;
|
||||
|
||||
if ((tda8290_probe(&i2c_props) == 0) ||
|
||||
(tda8295_probe(&i2c_props) == 0))
|
||||
|
Loading…
Reference in New Issue
Block a user