summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2006-11-25 10:40:28 -0200
committerHans Verkuil <hverkuil@xs4all.nl>2006-11-25 10:40:28 -0200
commitd31e0b6ac0bc77f0aae7cd5e94c538624a28e68c (patch)
tree552c9865b76791915fdb5eaa8e129990e739379a /linux
parent93ffb66cdd656ce714aba619c5c41ec66d33009c (diff)
downloadmediapointer-dvb-s2-d31e0b6ac0bc77f0aae7cd5e94c538624a28e68c.tar.gz
mediapointer-dvb-s2-d31e0b6ac0bc77f0aae7cd5e94c538624a28e68c.tar.bz2
Improve saa711x check
From: Hans Verkuil <hverkuil@xs4all.nl> The old code would accept any device on the same i2c address as the saa711x chips as an saa711x. However, this fails with saa717x chips, which use that same address and so are misdetected as a saa7111. Now check whether the chip is really a saa711x model. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Diffstat (limited to 'linux')
-rw-r--r--linux/drivers/media/video/saa7115.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/linux/drivers/media/video/saa7115.c b/linux/drivers/media/video/saa7115.c
index 8e661a352..79711a073 100644
--- a/linux/drivers/media/video/saa7115.c
+++ b/linux/drivers/media/video/saa7115.c
@@ -1483,8 +1483,6 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind)
#endif
snprintf(client->name, sizeof(client->name) - 1, "saa7115");
- v4l_dbg(1, debug, client, "detecting saa7115 client on address 0x%x\n", address << 1);
-
for (i=0;i<0x0f;i++) {
saa711x_write(client, 0, i);
name[i] = (saa711x_read(client, 0) &0x0f) +'0';
@@ -1496,6 +1494,13 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind)
saa711x_write(client, 0, 5);
chip_id = saa711x_read(client, 0) & 0x0f;
+ /* Check whether this chip is part of the saa711x series */
+ if (memcmp(name, "1f711", 5)) {
+ v4l_dbg(1, debug, client, "chip found @ 0x%x (ID %s) does not match a known saa711x chip.\n",
+ address << 1, name);
+ return 0;
+ }
+
snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id);
v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name);