aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/tuner-simple.c
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2006-02-07 03:25:34 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-02-07 03:25:34 -0500
commit476d63d061a082bcb833009e15a3632459a3caad (patch)
tree429773b4599fbca8d07554c4c2b27c5464f80033 /drivers/media/video/tuner-simple.c
parent5f5941872c0035cb4624efe8c5a1dfbb89d199e7 (diff)
V4L/DVB (3269): Allow multiple tuner params in each tuner definition
- allow multiple tuner params in each tuner definition. - the correct tuner_params element will be chosen based on current video standard. Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/tuner-simple.c')
-rw-r--r--drivers/media/video/tuner-simple.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/drivers/media/video/tuner-simple.c b/drivers/media/video/tuner-simple.c
index 907ea8c5d9b3..58fa0d29962b 100644
--- a/drivers/media/video/tuner-simple.c
+++ b/drivers/media/video/tuner-simple.c
@@ -79,14 +79,13 @@ MODULE_PARM_DESC(offset,"Allows to specify an offset for tuner");
79#define TUNER_PLL_LOCKED 0x40 79#define TUNER_PLL_LOCKED 0x40
80#define TUNER_STEREO_MK3 0x04 80#define TUNER_STEREO_MK3 0x04
81 81
82#define TUNER_PARAM_ANALOG 0 /* to be removed */
83/* FIXME: 82/* FIXME:
84 * Right now, all tuners are using the first tuner_params[] array element 83 * Right now, all tuners are using the first tuner_params[] array element
85 * for analog mode. In the future, we will be merging similar tuner 84 * for analog mode. In the future, we will be merging similar tuner
86 * definitions together, such that each tuner definition will have a 85 * definitions together, such that each tuner definition will have a
87 * tuner_params struct for each available video standard. At that point, 86 * tuner_params struct for each available video standard. At that point,
88 * TUNER_PARAM_ANALOG will be removed, and the tuner_params[] array 87 * the tuner_params[] array element will be chosen based on the video
89 * element will be chosen based on the video standard in use. 88 * standard in use.
90 * 89 *
91 */ 90 */
92 91
@@ -138,9 +137,9 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
138 struct tunertype *tun; 137 struct tunertype *tun;
139 u8 buffer[4]; 138 u8 buffer[4];
140 int rc, IFPCoff, i, j; 139 int rc, IFPCoff, i, j;
140 enum param_type desired_type;
141 141
142 tun = &tuners[t->type]; 142 tun = &tuners[t->type];
143 j = TUNER_PARAM_ANALOG;
144 143
145 /* IFPCoff = Video Intermediate Frequency - Vif: 144 /* IFPCoff = Video Intermediate Frequency - Vif:
146 940 =16*58.75 NTSC/J (Japan) 145 940 =16*58.75 NTSC/J (Japan)
@@ -155,16 +154,25 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
155 */ 154 */
156 155
157 if (t->std == V4L2_STD_NTSC_M_JP) { 156 if (t->std == V4L2_STD_NTSC_M_JP) {
158 IFPCoff = 940; 157 IFPCoff = 940;
158 desired_type = TUNER_PARAM_TYPE_NTSC;
159 } else if ((t->std & V4L2_STD_MN) && 159 } else if ((t->std & V4L2_STD_MN) &&
160 !(t->std & ~V4L2_STD_MN)) { 160 !(t->std & ~V4L2_STD_MN)) {
161 IFPCoff = 732; 161 IFPCoff = 732;
162 desired_type = TUNER_PARAM_TYPE_NTSC;
162 } else if (t->std == V4L2_STD_SECAM_LC) { 163 } else if (t->std == V4L2_STD_SECAM_LC) {
163 IFPCoff = 543; 164 IFPCoff = 543;
165 desired_type = TUNER_PARAM_TYPE_SECAM;
164 } else { 166 } else {
165 IFPCoff = 623; 167 IFPCoff = 623;
168 desired_type = TUNER_PARAM_TYPE_PAL;
166 } 169 }
167 170
171 for (j = 0; j < tun->count-1; j++) {
172 if (desired_type != tun->params[j].type)
173 continue;
174 break;
175 }
168 for (i = 0; i < tun->params[j].count; i++) { 176 for (i = 0; i < tun->params[j].count; i++) {
169 if (freq > tun->params[j].ranges[i].limit) 177 if (freq > tun->params[j].ranges[i].limit)
170 continue; 178 continue;
@@ -333,9 +341,15 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
333 u8 buffer[4]; 341 u8 buffer[4];
334 u16 div; 342 u16 div;
335 int rc, j; 343 int rc, j;
344 enum param_type desired_type = TUNER_PARAM_TYPE_RADIO;
336 345
337 tun = &tuners[t->type]; 346 tun = &tuners[t->type];
338 j = TUNER_PARAM_ANALOG; 347
348 for (j = 0; j < tun->count-1; j++) {
349 if (desired_type != tun->params[j].type)
350 continue;
351 break;
352 }
339 353
340 div = (20 * freq / 16000) + (int)(20*10.7); /* IF 10.7 MHz */ 354 div = (20 * freq / 16000) + (int)(20*10.7); /* IF 10.7 MHz */
341 buffer[2] = (tun->params[j].ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */ 355 buffer[2] = (tun->params[j].ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */