V4L/DVB (6612): Allow RESET_CLK callback and avoids unneeded loading
authorMichel Ludwig <michel.ludwig@gmail.com>
Fri, 16 Nov 2007 10:49:49 +0000 (07:49 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:02:14 +0000 (19:02 -0200)
TM5600/TM6000 needs clock reset during firmware load. This patch adds the
capability of caling a callback method for this.

Also, avoids uneeded firmware loads.

Signed-off-by: Michel Ludwig <michel.ludwig@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/tuner-xc2028.c

index 0a2ffe4f38d0c45002edc9ac75d4997c7ffecea0..89e6e64786ea80bc53e87af8c94a088bc3170621 100644 (file)
@@ -461,6 +461,23 @@ static int load_firmware(struct dvb_frontend *fe, unsigned int type,
                        }
                        continue;
                }
+               if (size >= 0xff00) {
+                       switch (size) {
+                       case 0xff00:
+                               rc = priv->tuner_callback(priv->video_dev,
+                                                       XC2028_RESET_CLK, 0);
+                               if (rc < 0) {
+                                       tuner_err("Error at RESET code %d\n",
+                                                 (*p) & 0x7f);
+                                       return -EINVAL;
+                               }
+                       default:
+                               tuner_info("Invalid RESET code %d\n",
+                                          size & 0x7f);
+                               return -EINVAL;
+
+                       }
+               }
 
                /* Checks for a sleep command */
                if (size & 0x8000) {
@@ -627,6 +644,9 @@ static int check_firmware(struct dvb_frontend *fe, enum tuner_mode new_mode,
                priv->bandwidth = bandwidth;
        }
 
+       if (!change_digital_bandwidth && priv->mode == T_DIGITAL_TV)
+               return 0;
+
        /* Load INIT1, if needed */
        tuner_dbg("Load init1 firmware, if exists\n");
        type0 = BASE | INIT1;