Переглянути джерело

[PATCH] v4l: 823: corrected probing code for tda8290

- 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>
Hartmut Hackmann 19 роки тому
батько
коміт
95736034df
2 змінених файлів з 29 додано та 5 видалено
  1. 27 3
      drivers/media/video/tda8290.c
  2. 2 2
      drivers/media/video/tuner-core.c

+ 27 - 3
drivers/media/video/tda8290.c

@@ -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.
  * ---------------------------------------------------------------------------

+ 2 - 2
drivers/media/video/tuner-core.c

@@ -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;
 			}