V4L/DVB (6473): Prevents double tuner registering
authorMauro Carvalho Chehab <mchehab@infradead.org>
Mon, 29 Oct 2007 14:33:18 +0000 (11:33 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:01:33 +0000 (19:01 -0200)
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/tuner-core.c

index 11abd188b17d2bea3325a1aff6c819b984ffc216..cd5f0d8e693c556f4e070afdac3429c86d58b278 100644 (file)
@@ -279,8 +279,7 @@ static void set_type(struct i2c_client *c, unsigned int type,
                t->tuner_callback = tuner_callback;
        }
 
-       /* This code detects calls by card attach_inform */
-       if (NULL == t->i2c.dev.driver) {
+       if (t->mode == T_UNINITIALIZED) {
                tuner_dbg ("tuner 0x%02x: called during i2c_client register by adapter's attach_inform\n", c->addr);
 
                return;
@@ -684,6 +683,16 @@ static int tuner_attach(struct i2c_adapter *adap, int addr, int kind)
        /* Should be just before return */
 register_client:
        tuner_info("chip found @ 0x%x (%s)\n", addr << 1, adap->name);
+
+       /* Sets a default mode */
+       if (t->mode_mask & T_ANALOG_TV) {
+               t->mode = T_ANALOG_TV;
+       } else  if (t->mode_mask & T_RADIO) {
+               t->mode = T_RADIO;
+       } else {
+               t->mode = T_DIGITAL_TV;
+       }
+
        i2c_attach_client (client);
        set_type (client,t->type, t->mode_mask, t->config, t->tuner_callback);
        return 0;