V4L/DVB (6612): Allow RESET_CLK callback and avoids unneeded loading

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>
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c
index 0a2ffe4..89e6e64 100644
--- a/drivers/media/video/tuner-xc2028.c
+++ b/drivers/media/video/tuner-xc2028.c
@@ -461,6 +461,23 @@
 			}
 			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 @@
 		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;