V4L/DVB (6384): Replace TDA9887_SET_CONFIG by TUNER_SET_CONFIG

Currently, the only tuner-specific device that allows special
configurations is tda9887. However, tea5767 also may require some
special configurations (for example, to specify a different Xtal freq).

This patch replaces TDA9887_SET_CONFIG by a more generic internal ioctl
(TUNER_SET_CONFIG). The newer one allows specifying what tuner is
appliable to a configuration set, and allows an arbitrary configuration
struct.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 9e99f363..d1d6c66 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -889,14 +889,29 @@
 			return 0;
 		}
 #endif
-	case TDA9887_SET_CONFIG:
-		if (t->type == TUNER_TDA9887) {
-			int *i = arg;
+	case TUNER_SET_CONFIG:
+	{
+		struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops;
+		struct v4l2_priv_tun_config *cfg = arg;
 
-			t->tda9887_config = *i;
+		if (t->type != cfg->tuner)
+			break;
+
+		if (t->type == TUNER_TDA9887) {
+			t->tda9887_config = *(unsigned int *)cfg->priv;
 			set_freq(client, t->tv_freq);
+			break;
 		}
+
+		if (NULL == fe_tuner_ops->set_config) {
+			tuner_warn("Tuner frontend module has no way to "
+				   "set config\n");
+			break;
+		}
+		fe_tuner_ops->set_config(&t->fe, cfg->priv);
+
 		break;
+	}
 	/* --- v4l ioctls --- */
 	/* take care: bttv does userspace copying, we'll get a
 	   kernel pointer here... */