diff options
-rw-r--r-- | drivers/media/dvb/frontends/tda827x.c | 61 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/tda827x.h | 3 | ||||
-rw-r--r-- | drivers/media/video/tda8290.c | 20 |
3 files changed, 57 insertions, 27 deletions
diff --git a/drivers/media/dvb/frontends/tda827x.c b/drivers/media/dvb/frontends/tda827x.c index 6de1aea02d51..8329d33b517a 100644 --- a/drivers/media/dvb/frontends/tda827x.c +++ b/drivers/media/dvb/frontends/tda827x.c | |||
@@ -38,10 +38,57 @@ struct tda827x_priv { | |||
38 | int i2c_addr; | 38 | int i2c_addr; |
39 | struct i2c_adapter *i2c_adap; | 39 | struct i2c_adapter *i2c_adap; |
40 | struct tda827x_config *cfg; | 40 | struct tda827x_config *cfg; |
41 | |||
42 | unsigned int sgIF; | ||
43 | unsigned char lpsel; | ||
44 | |||
41 | u32 frequency; | 45 | u32 frequency; |
42 | u32 bandwidth; | 46 | u32 bandwidth; |
43 | }; | 47 | }; |
44 | 48 | ||
49 | static void tda827x_set_std(struct dvb_frontend *fe, | ||
50 | struct analog_parameters *params) | ||
51 | { | ||
52 | struct tda827x_priv *priv = fe->tuner_priv; | ||
53 | char *mode; | ||
54 | |||
55 | priv->lpsel = 0; | ||
56 | if (params->std & V4L2_STD_MN) { | ||
57 | priv->sgIF = 92; | ||
58 | priv->lpsel = 1; | ||
59 | mode = "MN"; | ||
60 | } else if (params->std & V4L2_STD_B) { | ||
61 | priv->sgIF = 108; | ||
62 | mode = "B"; | ||
63 | } else if (params->std & V4L2_STD_GH) { | ||
64 | priv->sgIF = 124; | ||
65 | mode = "GH"; | ||
66 | } else if (params->std & V4L2_STD_PAL_I) { | ||
67 | priv->sgIF = 124; | ||
68 | mode = "I"; | ||
69 | } else if (params->std & V4L2_STD_DK) { | ||
70 | priv->sgIF = 124; | ||
71 | mode = "DK"; | ||
72 | } else if (params->std & V4L2_STD_SECAM_L) { | ||
73 | priv->sgIF = 124; | ||
74 | mode = "L"; | ||
75 | } else if (params->std & V4L2_STD_SECAM_LC) { | ||
76 | priv->sgIF = 20; | ||
77 | mode = "LC"; | ||
78 | } else { | ||
79 | priv->sgIF = 124; | ||
80 | mode = "xx"; | ||
81 | } | ||
82 | |||
83 | if (params->mode == V4L2_TUNER_RADIO) | ||
84 | priv->sgIF = 88; /* if frequency is 5.5 MHz */ | ||
85 | |||
86 | dprintk("setting tda827x to system %s\n", mode); | ||
87 | } | ||
88 | |||
89 | |||
90 | /* ------------------------------------------------------------------ */ | ||
91 | |||
45 | struct tda827x_data { | 92 | struct tda827x_data { |
46 | u32 lomax; | 93 | u32 lomax; |
47 | u8 spd; | 94 | u8 spd; |
@@ -189,10 +236,12 @@ static int tda827xo_set_analog_params(struct dvb_frontend *fe, | |||
189 | struct i2c_msg msg = { .addr = priv->i2c_addr, .flags = 0 }; | 236 | struct i2c_msg msg = { .addr = priv->i2c_addr, .flags = 0 }; |
190 | unsigned int freq = params->frequency; | 237 | unsigned int freq = params->frequency; |
191 | 238 | ||
239 | tda827x_set_std(fe, params); | ||
240 | |||
192 | if (params->mode == V4L2_TUNER_RADIO) | 241 | if (params->mode == V4L2_TUNER_RADIO) |
193 | freq = freq / 1000; | 242 | freq = freq / 1000; |
194 | 243 | ||
195 | N = freq + priv->cfg->sgIF; | 244 | N = freq + priv->sgIF; |
196 | 245 | ||
197 | i = 0; | 246 | i = 0; |
198 | while (tda827x_table[i].lomax < N * 62500) { | 247 | while (tda827x_table[i].lomax < N * 62500) { |
@@ -207,7 +256,7 @@ static int tda827xo_set_analog_params(struct dvb_frontend *fe, | |||
207 | tuner_reg[1] = (unsigned char)(N>>8); | 256 | tuner_reg[1] = (unsigned char)(N>>8); |
208 | tuner_reg[2] = (unsigned char) N; | 257 | tuner_reg[2] = (unsigned char) N; |
209 | tuner_reg[3] = 0x40; | 258 | tuner_reg[3] = 0x40; |
210 | tuner_reg[4] = 0x52 + (priv->cfg->tda827x_lpsel << 5); | 259 | tuner_reg[4] = 0x52 + (priv->lpsel << 5); |
211 | tuner_reg[5] = (tda827x_table[i].spd << 6) + | 260 | tuner_reg[5] = (tda827x_table[i].spd << 6) + |
212 | (tda827x_table[i].div1p5 << 5) + | 261 | (tda827x_table[i].div1p5 << 5) + |
213 | (tda827x_table[i].bs << 3) + tda827x_table[i].bp; | 262 | (tda827x_table[i].bs << 3) + tda827x_table[i].bp; |
@@ -550,13 +599,15 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, | |||
550 | .buf = tuner_reg, .len = sizeof(tuner_reg) }; | 599 | .buf = tuner_reg, .len = sizeof(tuner_reg) }; |
551 | unsigned int freq = params->frequency; | 600 | unsigned int freq = params->frequency; |
552 | 601 | ||
602 | tda827x_set_std(fe, params); | ||
603 | |||
553 | tda827xa_lna_gain(fe, 1, params); | 604 | tda827xa_lna_gain(fe, 1, params); |
554 | msleep(10); | 605 | msleep(10); |
555 | 606 | ||
556 | if (params->mode == V4L2_TUNER_RADIO) | 607 | if (params->mode == V4L2_TUNER_RADIO) |
557 | freq = freq / 1000; | 608 | freq = freq / 1000; |
558 | 609 | ||
559 | N = freq + priv->cfg->sgIF; | 610 | N = freq + priv->sgIF; |
560 | 611 | ||
561 | i = 0; | 612 | i = 0; |
562 | while (tda827xa_analog[i].lomax < N * 62500) { | 613 | while (tda827xa_analog[i].lomax < N * 62500) { |
@@ -587,7 +638,7 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, | |||
587 | tuner_reg[1] = 0xff; | 638 | tuner_reg[1] = 0xff; |
588 | tuner_reg[2] = 0xe0; | 639 | tuner_reg[2] = 0xe0; |
589 | tuner_reg[3] = 0; | 640 | tuner_reg[3] = 0; |
590 | tuner_reg[4] = 0x99 + (priv->cfg->tda827x_lpsel << 1); | 641 | tuner_reg[4] = 0x99 + (priv->lpsel << 1); |
591 | msg.len = 5; | 642 | msg.len = 5; |
592 | i2c_transfer(priv->i2c_adap, &msg, 1); | 643 | i2c_transfer(priv->i2c_adap, &msg, 1); |
593 | 644 | ||
@@ -627,7 +678,7 @@ static int tda827xa_set_analog_params(struct dvb_frontend *fe, | |||
627 | i2c_transfer(priv->i2c_adap, &msg, 1); | 678 | i2c_transfer(priv->i2c_adap, &msg, 1); |
628 | 679 | ||
629 | tuner_reg[0] = 0xc0; | 680 | tuner_reg[0] = 0xc0; |
630 | tuner_reg[1] = 0x19 + (priv->cfg->tda827x_lpsel << 1); | 681 | tuner_reg[1] = 0x19 + (priv->lpsel << 1); |
631 | i2c_transfer(priv->i2c_adap, &msg, 1); | 682 | i2c_transfer(priv->i2c_adap, &msg, 1); |
632 | 683 | ||
633 | priv->frequency = freq * 62500; | 684 | priv->frequency = freq * 62500; |
diff --git a/drivers/media/dvb/frontends/tda827x.h b/drivers/media/dvb/frontends/tda827x.h index 06626f7af614..92eb65b4012b 100644 --- a/drivers/media/dvb/frontends/tda827x.h +++ b/drivers/media/dvb/frontends/tda827x.h | |||
@@ -35,9 +35,6 @@ struct tda827x_config | |||
35 | int (*sleep) (struct dvb_frontend *fe); | 35 | int (*sleep) (struct dvb_frontend *fe); |
36 | 36 | ||
37 | /* interface to tda829x driver */ | 37 | /* interface to tda829x driver */ |
38 | unsigned char tda827x_lpsel; | ||
39 | unsigned int sgIF; | ||
40 | |||
41 | unsigned int *config; | 38 | unsigned int *config; |
42 | int (*tuner_callback) (void *dev, int command, int arg); | 39 | int (*tuner_callback) (void *dev, int command, int arg); |
43 | 40 | ||
diff --git a/drivers/media/video/tda8290.c b/drivers/media/video/tda8290.c index 288865c3c714..1b19b93eabec 100644 --- a/drivers/media/video/tda8290.c +++ b/drivers/media/video/tda8290.c | |||
@@ -104,45 +104,32 @@ static void set_audio(struct dvb_frontend *fe) | |||
104 | struct tuner *t = priv->t; | 104 | struct tuner *t = priv->t; |
105 | char* mode; | 105 | char* mode; |
106 | 106 | ||
107 | priv->cfg.tda827x_lpsel = 0; | ||
108 | if (t->std & V4L2_STD_MN) { | 107 | if (t->std & V4L2_STD_MN) { |
109 | priv->cfg.sgIF = 92; | ||
110 | priv->tda8290_easy_mode = 0x01; | 108 | priv->tda8290_easy_mode = 0x01; |
111 | priv->cfg.tda827x_lpsel = 1; | ||
112 | mode = "MN"; | 109 | mode = "MN"; |
113 | } else if (t->std & V4L2_STD_B) { | 110 | } else if (t->std & V4L2_STD_B) { |
114 | priv->cfg.sgIF = 108; | ||
115 | priv->tda8290_easy_mode = 0x02; | 111 | priv->tda8290_easy_mode = 0x02; |
116 | mode = "B"; | 112 | mode = "B"; |
117 | } else if (t->std & V4L2_STD_GH) { | 113 | } else if (t->std & V4L2_STD_GH) { |
118 | priv->cfg.sgIF = 124; | ||
119 | priv->tda8290_easy_mode = 0x04; | 114 | priv->tda8290_easy_mode = 0x04; |
120 | mode = "GH"; | 115 | mode = "GH"; |
121 | } else if (t->std & V4L2_STD_PAL_I) { | 116 | } else if (t->std & V4L2_STD_PAL_I) { |
122 | priv->cfg.sgIF = 124; | ||
123 | priv->tda8290_easy_mode = 0x08; | 117 | priv->tda8290_easy_mode = 0x08; |
124 | mode = "I"; | 118 | mode = "I"; |
125 | } else if (t->std & V4L2_STD_DK) { | 119 | } else if (t->std & V4L2_STD_DK) { |
126 | priv->cfg.sgIF = 124; | ||
127 | priv->tda8290_easy_mode = 0x10; | 120 | priv->tda8290_easy_mode = 0x10; |
128 | mode = "DK"; | 121 | mode = "DK"; |
129 | } else if (t->std & V4L2_STD_SECAM_L) { | 122 | } else if (t->std & V4L2_STD_SECAM_L) { |
130 | priv->cfg.sgIF = 124; | ||
131 | priv->tda8290_easy_mode = 0x20; | 123 | priv->tda8290_easy_mode = 0x20; |
132 | mode = "L"; | 124 | mode = "L"; |
133 | } else if (t->std & V4L2_STD_SECAM_LC) { | 125 | } else if (t->std & V4L2_STD_SECAM_LC) { |
134 | priv->cfg.sgIF = 20; | ||
135 | priv->tda8290_easy_mode = 0x40; | 126 | priv->tda8290_easy_mode = 0x40; |
136 | mode = "LC"; | 127 | mode = "LC"; |
137 | } else { | 128 | } else { |
138 | priv->cfg.sgIF = 124; | ||
139 | priv->tda8290_easy_mode = 0x10; | 129 | priv->tda8290_easy_mode = 0x10; |
140 | mode = "xx"; | 130 | mode = "xx"; |
141 | } | 131 | } |
142 | 132 | ||
143 | if (t->mode == V4L2_TUNER_RADIO) | ||
144 | priv->cfg.sgIF = 88; /* if frequency is 5.5 MHz */ | ||
145 | |||
146 | tuner_dbg("setting tda8290 to system %s\n", mode); | 133 | tuner_dbg("setting tda8290 to system %s\n", mode); |
147 | } | 134 | } |
148 | 135 | ||
@@ -368,7 +355,6 @@ static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq) | |||
368 | { | 355 | { |
369 | struct tda8290_priv *priv = fe->analog_demod_priv; | 356 | struct tda8290_priv *priv = fe->analog_demod_priv; |
370 | struct tuner *t = priv->t; | 357 | struct tuner *t = priv->t; |
371 | u16 ifc; | ||
372 | 358 | ||
373 | unsigned char blanking_mode[] = { 0x1d, 0x00 }; | 359 | unsigned char blanking_mode[] = { 0x1d, 0x00 }; |
374 | 360 | ||
@@ -381,9 +367,7 @@ static void tda8295_set_freq(struct dvb_frontend *fe, unsigned int freq) | |||
381 | 367 | ||
382 | set_audio(fe); | 368 | set_audio(fe); |
383 | 369 | ||
384 | ifc = priv->cfg.sgIF; /* FIXME */ | 370 | tuner_dbg("%s: freq = %d\n", __FUNCTION__, freq); |
385 | |||
386 | tuner_dbg("%s: ifc = %u, freq = %d\n", __FUNCTION__, ifc, freq); | ||
387 | 371 | ||
388 | tda8295_power(fe, 1); | 372 | tda8295_power(fe, 1); |
389 | tda8295_agc1_out(fe, 1); | 373 | tda8295_agc1_out(fe, 1); |
@@ -625,7 +609,6 @@ int tda8290_attach(struct tuner *t) | |||
625 | 609 | ||
626 | tuner_info("type set to %s\n", t->i2c.name); | 610 | tuner_info("type set to %s\n", t->i2c.name); |
627 | 611 | ||
628 | priv->cfg.tda827x_lpsel = 0; | ||
629 | t->mode = V4L2_TUNER_ANALOG_TV; | 612 | t->mode = V4L2_TUNER_ANALOG_TV; |
630 | 613 | ||
631 | tda8290_init_tuner(&t->fe); | 614 | tda8290_init_tuner(&t->fe); |
@@ -715,7 +698,6 @@ int tda8295_attach(struct tuner *t) | |||
715 | 698 | ||
716 | t->fe.ops.analog_demod_ops = &tda8295_tuner_ops; | 699 | t->fe.ops.analog_demod_ops = &tda8295_tuner_ops; |
717 | 700 | ||
718 | priv->cfg.tda827x_lpsel = 0; | ||
719 | t->mode = V4L2_TUNER_ANALOG_TV; | 701 | t->mode = V4L2_TUNER_ANALOG_TV; |
720 | 702 | ||
721 | tda8295_init_if(&t->fe); | 703 | tda8295_init_if(&t->fe); |