summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/tuner-core.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2007-10-18 20:56:47 -0200
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-10-18 20:56:47 -0200
commit7bd18cc4f52f6672342a79a936a32a4df73ae3c5 (patch)
tree5d721acda88196e7ff2bbe75d1f5e0586a1bd8fb /linux/drivers/media/video/tuner-core.c
parent7c3206d14cea8962f79628f11cd3f582f2b9644d (diff)
downloadmediapointer-dvb-s2-7bd18cc4f52f6672342a79a936a32a4df73ae3c5.tar.gz
mediapointer-dvb-s2-7bd18cc4f52f6672342a79a936a32a4df73ae3c5.tar.bz2
Replace TDA9887_SET_CONFIG by TUNER_SET_CONFIG
From: Mauro Carvalho Chehab <mchehab@infradead.org> 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>
Diffstat (limited to 'linux/drivers/media/video/tuner-core.c')
-rw-r--r--linux/drivers/media/video/tuner-core.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/linux/drivers/media/video/tuner-core.c b/linux/drivers/media/video/tuner-core.c
index b3d765c32..79c2d1981 100644
--- a/linux/drivers/media/video/tuner-core.c
+++ b/linux/drivers/media/video/tuner-core.c
@@ -959,14 +959,29 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
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;
+
+ if (t->type != cfg->tuner)
+ break;
- t->tda9887_config = *i;
+ 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... */