[PATCH] v4l: 823: corrected probing code for tda8290
authorHartmut Hackmann <hartmut.hackmann@t.online.de>
Wed, 9 Nov 2005 05:38:00 +0000 (21:38 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 9 Nov 2005 15:56:23 +0000 (07:56 -0800)
- Corrected probing code for tda8290

Signed-off-by: Hartmut Hackmann <hartmut.hackmann@t.online.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/media/video/tda8290.c
drivers/media/video/tuner-core.c

index abad3d5b04f611510f2acb9595815bffd1fd179a..2aeae864edc73d4152093e0d5f6cf4b8dd266291 100644 (file)
@@ -135,7 +135,7 @@ static void tda827x_tune(struct i2c_client *c, u16 ifc, unsigned int freq)
        i2c_transfer(c->adapter, &msg, 1);
 
        reg2[0] = 0x60;
-       reg2[1] = 0x7f;
+       reg2[1] = 0x3f;
        i2c_transfer(c->adapter, &msg, 1);
 
        reg2[0] = 0x80;
@@ -534,8 +534,8 @@ int tda8290_init(struct i2c_client *c)
                }
        if (tuner_addrs == 0) {
                tuner_addrs = 0x61;
-               tuner_info ("Could not clearly identify tda8290/8275 tuner address.\n");
-               return -1;
+               tuner_info ("could not clearly identify tuner address, defaulting to %x\n",
+                            tuner_addrs);
        } else {
                tuner_addrs = tuner_addrs & 0xff;
                tuner_info ("setting tuner address to %x\n", tuner_addrs);
@@ -567,6 +567,30 @@ int tda8290_init(struct i2c_client *c)
        return 0;
 }
 
+int tda8290_probe(struct i2c_client *c)
+{
+       unsigned char soft_reset[]  = { 0x00, 0x00 };
+       unsigned char easy_mode_b[] = { 0x01, 0x02 };
+       unsigned char easy_mode_g[] = { 0x01, 0x04 };
+       unsigned char addr_dto_lsb = 0x07;
+       unsigned char data;
+
+       i2c_master_send(c, easy_mode_b, 2);
+       i2c_master_send(c, soft_reset, 2);
+       i2c_master_send(c, &addr_dto_lsb, 1);
+       i2c_master_recv(c, &data, 1);
+       if (data == 0) {
+               i2c_master_send(c, easy_mode_g, 2);
+               i2c_master_send(c, soft_reset, 2);
+               i2c_master_send(c, &addr_dto_lsb, 1);
+               i2c_master_recv(c, &data, 1);
+               if (data == 0x7b) {
+                       return 0;
+               }
+       }
+       return -1;
+}
+
 /*
  * Overrides for Emacs so that we follow Linus's tabbing style.
  * ---------------------------------------------------------------------------
index d4786b331467cfb9f24ac30f7dc71b284f8bc56d..ee83deb389d763fae09075bcb820627cd05f7316 100644 (file)
@@ -380,8 +380,8 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
                case 0x42:
                case 0x43:
                case 0x4a:
-               case 0x44:
-                       if (tda8290_init(&t->i2c)<0) {
+               case 0x4b:
+                       if (tda8290_probe(&t->i2c) != 0) {
                                kfree(t);
                                return 0;
                        }