diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2007-12-16 17:53:32 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-01-25 16:03:54 -0500 |
commit | 710401b837f8849dc9c28385eb5298746b811305 (patch) | |
tree | 25a556fa0f840a5d115abefac344181fd2caea00 /drivers/media | |
parent | f1c9a281005f714fdc57c830a23f2b6bd6e2b714 (diff) |
V4L/DVB (6840): tuner: convert tda9887 to use TUNER_SET_CONFIG
Use TUNER_SET_CONFIG to set configuration in tda9887's private state
structure, rather than storing tda9887-specific configuration within
struct tuner.
Update handling of TUNER_SET_CONFIG by tuner-core, to call
&t->fe.ops.analog_demod_ops rather than &t->fe.ops.tuner_ops
analog_demod_ops.set_config passes the request to tuner_ops.set_config,
so this does not break other drivers.
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/tda9887.c | 47 | ||||
-rw-r--r-- | drivers/media/video/tuner-core.c | 12 | ||||
-rw-r--r-- | drivers/media/video/tuner-driver.h | 3 |
3 files changed, 33 insertions, 29 deletions
diff --git a/drivers/media/video/tda9887.c b/drivers/media/video/tda9887.c index f265c702cde1..7686f52cfcf9 100644 --- a/drivers/media/video/tda9887.c +++ b/drivers/media/video/tda9887.c | |||
@@ -38,6 +38,7 @@ struct tda9887_priv { | |||
38 | struct tuner_i2c_props i2c_props; | 38 | struct tuner_i2c_props i2c_props; |
39 | 39 | ||
40 | unsigned char data[4]; | 40 | unsigned char data[4]; |
41 | unsigned int config; | ||
41 | 42 | ||
42 | struct tuner *t; | 43 | struct tuner *t; |
43 | }; | 44 | }; |
@@ -473,31 +474,31 @@ static int tda9887_set_insmod(struct dvb_frontend *fe) | |||
473 | return 0; | 474 | return 0; |
474 | } | 475 | } |
475 | 476 | ||
476 | static int tda9887_set_config(struct dvb_frontend *fe) | 477 | static int tda9887_do_config(struct dvb_frontend *fe) |
477 | { | 478 | { |
478 | struct tda9887_priv *priv = fe->analog_demod_priv; | 479 | struct tda9887_priv *priv = fe->analog_demod_priv; |
479 | struct tuner *t = priv->t; | 480 | struct tuner *t = priv->t; |
480 | char *buf = priv->data; | 481 | char *buf = priv->data; |
481 | 482 | ||
482 | if (t->tda9887_config & TDA9887_PORT1_ACTIVE) | 483 | if (priv->config & TDA9887_PORT1_ACTIVE) |
483 | buf[1] &= ~cOutputPort1Inactive; | 484 | buf[1] &= ~cOutputPort1Inactive; |
484 | if (t->tda9887_config & TDA9887_PORT1_INACTIVE) | 485 | if (priv->config & TDA9887_PORT1_INACTIVE) |
485 | buf[1] |= cOutputPort1Inactive; | 486 | buf[1] |= cOutputPort1Inactive; |
486 | if (t->tda9887_config & TDA9887_PORT2_ACTIVE) | 487 | if (priv->config & TDA9887_PORT2_ACTIVE) |
487 | buf[1] &= ~cOutputPort2Inactive; | 488 | buf[1] &= ~cOutputPort2Inactive; |
488 | if (t->tda9887_config & TDA9887_PORT2_INACTIVE) | 489 | if (priv->config & TDA9887_PORT2_INACTIVE) |
489 | buf[1] |= cOutputPort2Inactive; | 490 | buf[1] |= cOutputPort2Inactive; |
490 | 491 | ||
491 | if (t->tda9887_config & TDA9887_QSS) | 492 | if (priv->config & TDA9887_QSS) |
492 | buf[1] |= cQSS; | 493 | buf[1] |= cQSS; |
493 | if (t->tda9887_config & TDA9887_INTERCARRIER) | 494 | if (priv->config & TDA9887_INTERCARRIER) |
494 | buf[1] &= ~cQSS; | 495 | buf[1] &= ~cQSS; |
495 | 496 | ||
496 | if (t->tda9887_config & TDA9887_AUTOMUTE) | 497 | if (priv->config & TDA9887_AUTOMUTE) |
497 | buf[1] |= cAutoMuteFmActive; | 498 | buf[1] |= cAutoMuteFmActive; |
498 | if (t->tda9887_config & TDA9887_DEEMPHASIS_MASK) { | 499 | if (priv->config & TDA9887_DEEMPHASIS_MASK) { |
499 | buf[2] &= ~0x60; | 500 | buf[2] &= ~0x60; |
500 | switch (t->tda9887_config & TDA9887_DEEMPHASIS_MASK) { | 501 | switch (priv->config & TDA9887_DEEMPHASIS_MASK) { |
501 | case TDA9887_DEEMPHASIS_NONE: | 502 | case TDA9887_DEEMPHASIS_NONE: |
502 | buf[2] |= cDeemphasisOFF; | 503 | buf[2] |= cDeemphasisOFF; |
503 | break; | 504 | break; |
@@ -509,21 +510,22 @@ static int tda9887_set_config(struct dvb_frontend *fe) | |||
509 | break; | 510 | break; |
510 | } | 511 | } |
511 | } | 512 | } |
512 | if (t->tda9887_config & TDA9887_TOP_SET) { | 513 | if (priv->config & TDA9887_TOP_SET) { |
513 | buf[2] &= ~cTopMask; | 514 | buf[2] &= ~cTopMask; |
514 | buf[2] |= (t->tda9887_config >> 8) & cTopMask; | 515 | buf[2] |= (priv->config >> 8) & cTopMask; |
515 | } | 516 | } |
516 | if ((t->tda9887_config & TDA9887_INTERCARRIER_NTSC) && (t->std & V4L2_STD_NTSC)) | 517 | if ((priv->config & TDA9887_INTERCARRIER_NTSC) && |
518 | (t->std & V4L2_STD_NTSC)) | ||
517 | buf[1] &= ~cQSS; | 519 | buf[1] &= ~cQSS; |
518 | if (t->tda9887_config & TDA9887_GATING_18) | 520 | if (priv->config & TDA9887_GATING_18) |
519 | buf[3] &= ~cGating_36; | 521 | buf[3] &= ~cGating_36; |
520 | 522 | ||
521 | if (t->mode == V4L2_TUNER_RADIO) { | 523 | if (t->mode == V4L2_TUNER_RADIO) { |
522 | if (t->tda9887_config & TDA9887_RIF_41_3) { | 524 | if (priv->config & TDA9887_RIF_41_3) { |
523 | buf[3] &= ~cVideoIFMask; | 525 | buf[3] &= ~cVideoIFMask; |
524 | buf[3] |= cRadioIF_41_30; | 526 | buf[3] |= cRadioIF_41_30; |
525 | } | 527 | } |
526 | if (t->tda9887_config & TDA9887_GAIN_NORMAL) | 528 | if (priv->config & TDA9887_GAIN_NORMAL) |
527 | buf[3] &= ~cTunerGainLow; | 529 | buf[3] &= ~cTunerGainLow; |
528 | } | 530 | } |
529 | 531 | ||
@@ -570,7 +572,7 @@ static void tda9887_configure(struct dvb_frontend *fe) | |||
570 | priv->data[1] |= cOutputPort1Inactive; | 572 | priv->data[1] |= cOutputPort1Inactive; |
571 | priv->data[1] |= cOutputPort2Inactive; | 573 | priv->data[1] |= cOutputPort2Inactive; |
572 | 574 | ||
573 | tda9887_set_config(fe); | 575 | tda9887_do_config(fe); |
574 | tda9887_set_insmod(fe); | 576 | tda9887_set_insmod(fe); |
575 | 577 | ||
576 | if (t->mode == T_STANDBY) { | 578 | if (t->mode == T_STANDBY) { |
@@ -629,6 +631,16 @@ static void tda9887_set_params(struct dvb_frontend *fe, | |||
629 | tda9887_configure(fe); | 631 | tda9887_configure(fe); |
630 | } | 632 | } |
631 | 633 | ||
634 | static int tda9887_set_config(struct dvb_frontend *fe, void *priv_cfg) | ||
635 | { | ||
636 | struct tda9887_priv *priv = fe->analog_demod_priv; | ||
637 | |||
638 | priv->config = *(unsigned int *)priv_cfg; | ||
639 | tda9887_configure(fe); | ||
640 | |||
641 | return 0; | ||
642 | } | ||
643 | |||
632 | static void tda9887_release(struct dvb_frontend *fe) | 644 | static void tda9887_release(struct dvb_frontend *fe) |
633 | { | 645 | { |
634 | kfree(fe->analog_demod_priv); | 646 | kfree(fe->analog_demod_priv); |
@@ -644,6 +656,7 @@ static struct analog_tuner_ops tda9887_tuner_ops = { | |||
644 | .tuner_status = tda9887_tuner_status, | 656 | .tuner_status = tda9887_tuner_status, |
645 | .get_afc = tda9887_get_afc, | 657 | .get_afc = tda9887_get_afc, |
646 | .release = tda9887_release, | 658 | .release = tda9887_release, |
659 | .set_config = tda9887_set_config, | ||
647 | }; | 660 | }; |
648 | 661 | ||
649 | int tda9887_attach(struct tuner *t) | 662 | int tda9887_attach(struct tuner *t) |
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c index 9134b997ef23..695f39ebe77b 100644 --- a/drivers/media/video/tuner-core.c +++ b/drivers/media/video/tuner-core.c | |||
@@ -833,25 +833,19 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
833 | #endif | 833 | #endif |
834 | case TUNER_SET_CONFIG: | 834 | case TUNER_SET_CONFIG: |
835 | { | 835 | { |
836 | struct dvb_tuner_ops *fe_tuner_ops = &t->fe.ops.tuner_ops; | 836 | struct analog_tuner_ops *ops = t->fe.ops.analog_demod_ops; |
837 | struct v4l2_priv_tun_config *cfg = arg; | 837 | struct v4l2_priv_tun_config *cfg = arg; |
838 | 838 | ||
839 | if (t->type != cfg->tuner) | 839 | if (t->type != cfg->tuner) |
840 | break; | 840 | break; |
841 | 841 | ||
842 | if (t->type == TUNER_TDA9887) { | 842 | if ((NULL == ops) || (NULL == ops->set_config)) { |
843 | t->tda9887_config = *(unsigned int *)cfg->priv; | ||
844 | set_freq(client, t->tv_freq); | ||
845 | break; | ||
846 | } | ||
847 | |||
848 | if (NULL == fe_tuner_ops->set_config) { | ||
849 | tuner_warn("Tuner frontend module has no way to " | 843 | tuner_warn("Tuner frontend module has no way to " |
850 | "set config\n"); | 844 | "set config\n"); |
851 | break; | 845 | break; |
852 | } | 846 | } |
853 | fe_tuner_ops->set_config(&t->fe, cfg->priv); | ||
854 | 847 | ||
848 | ops->set_config(&t->fe, cfg->priv); | ||
855 | break; | 849 | break; |
856 | } | 850 | } |
857 | /* --- v4l ioctls --- */ | 851 | /* --- v4l ioctls --- */ |
diff --git a/drivers/media/video/tuner-driver.h b/drivers/media/video/tuner-driver.h index 7f43dc68ab2e..417753b7c3fa 100644 --- a/drivers/media/video/tuner-driver.h +++ b/drivers/media/video/tuner-driver.h | |||
@@ -69,9 +69,6 @@ struct tuner { | |||
69 | 69 | ||
70 | struct dvb_frontend fe; | 70 | struct dvb_frontend fe; |
71 | 71 | ||
72 | /* used by tda9887 */ | ||
73 | unsigned int tda9887_config; | ||
74 | |||
75 | unsigned int config; | 72 | unsigned int config; |
76 | int (*tuner_callback) (void *dev, int command,int arg); | 73 | int (*tuner_callback) (void *dev, int command,int arg); |
77 | }; | 74 | }; |