summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/drivers/media/video/mt20xx.c6
-rw-r--r--linux/drivers/media/video/tda8290.c17
-rw-r--r--linux/drivers/media/video/tuner-core.c63
-rw-r--r--linux/drivers/media/video/tuner-simple.c9
-rw-r--r--v4l/ChangeLog5
5 files changed, 40 insertions, 60 deletions
diff --git a/linux/drivers/media/video/mt20xx.c b/linux/drivers/media/video/mt20xx.c
index f6647caf7..b1ded1b87 100644
--- a/linux/drivers/media/video/mt20xx.c
+++ b/linux/drivers/media/video/mt20xx.c
@@ -1,5 +1,5 @@
/*
- * $Id: mt20xx.c,v 1.4 2005/03/04 09:24:56 kraxel Exp $
+ * $Id: mt20xx.c,v 1.5 2005/06/16 08:29:49 nsh Exp $
*
* i2c tv tuner chip device driver
* controls microtune tuners, mt2032 + mt2050 at the moment.
@@ -296,8 +296,8 @@ static void mt2032_set_radio_freq(struct i2c_client *c, unsigned int freq)
int if2 = t->radio_if2;
// per Manual for FM tuning: first if center freq. 1085 MHz
- mt2032_set_if_freq(c, freq*62500 /* freq*1000*1000/16 */,
- 1085*1000*1000,if2,if2,if2);
+ mt2032_set_if_freq(c, freq * 1000 / 16,
+ 1085*1000*1000,if2,if2,if2);
}
// Initalization as described in "MT203x Programming Procedures", Rev 1.2, Feb.2001
diff --git a/linux/drivers/media/video/tda8290.c b/linux/drivers/media/video/tda8290.c
index 26dc94b14..dbf61a8de 100644
--- a/linux/drivers/media/video/tda8290.c
+++ b/linux/drivers/media/video/tda8290.c
@@ -1,5 +1,5 @@
/*
- * $Id: tda8290.c,v 1.8 2005/06/14 22:50:42 hhackmann Exp $
+ * $Id: tda8290.c,v 1.9 2005/06/16 08:29:49 nsh Exp $
*
* i2c tv tuner chip device driver
* controls the philips tda8290+75 tuner chip combo.
@@ -138,17 +138,24 @@ static int tda8290_tune(struct i2c_client *c)
}
static void set_frequency(struct tuner *t, u16 ifc)
-{
+{
+ __u16 freq;
+
u32 N = (((t->freq<<3)+ifc)&0x3fffc);
- N = N >> get_freq_entry(div_table, t->freq);
+ if (t->mode == V4L2_TUNER_RADIO)
+ freq = t->freq / 1000;
+ else
+ freq = t->freq;
+
+ N = N >> get_freq_entry(div_table, freq);
t->i2c_set_freq[0] = 0;
t->i2c_set_freq[1] = (unsigned char)(N>>8);
t->i2c_set_freq[2] = (unsigned char) N;
t->i2c_set_freq[3] = 0x40;
t->i2c_set_freq[4] = 0x52;
- t->i2c_set_freq[5] = get_freq_entry(band_table, t->freq);
- t->i2c_set_freq[6] = get_freq_entry(agc_table, t->freq);
+ t->i2c_set_freq[5] = get_freq_entry(band_table, freq / 1000);
+ t->i2c_set_freq[6] = get_freq_entry(agc_table, freq / 1000);
t->i2c_set_freq[7] = 0x8f;
}
diff --git a/linux/drivers/media/video/tuner-core.c b/linux/drivers/media/video/tuner-core.c
index ca55bd188..c81f87968 100644
--- a/linux/drivers/media/video/tuner-core.c
+++ b/linux/drivers/media/video/tuner-core.c
@@ -1,5 +1,5 @@
/*
- * $Id: tuner-core.c,v 1.17 2005/06/15 02:43:03 mchehab Exp $
+ * $Id: tuner-core.c,v 1.18 2005/06/16 08:29:49 nsh Exp $
*
* i2c tv tuner chip device driver
* core core, i.e. kernel interfaces, registering and so on
@@ -90,25 +90,9 @@ static void set_tv_freq(struct i2c_client *c, unsigned int freq)
return;
}
if (freq < tv_range[0]*16 || freq > tv_range[1]*16) {
- if (freq >= tv_range[0]*16000 && freq <= tv_range[1]*16000) {
- /* V4L2_TUNER_CAP_LOW frequency */
-
- tuner_dbg("V4L2_TUNER_CAP_LOW freq selected for TV. Tuners yet doesn't support converting it to valid freq.\n");
-
- t->tv_freq(c,freq/1000);
-
- return;
- } else {
- /* FIXME: better do that chip-specific, but
- right now we don't have that in the config
- struct and this way is still better than no
- check at all */
tuner_info("TV freq (%d.%02d) out of range (%d-%d)\n",
freq/16,freq%16*100/16,tv_range[0],tv_range[1]);
- return;
- }
}
- tuner_dbg("62.5 Khz freq step selected for TV.\n");
t->tv_freq(c,freq);
}
@@ -124,32 +108,17 @@ static void set_radio_freq(struct i2c_client *c, unsigned int freq)
tuner_info("no radio tuning for this one, sorry.\n");
return;
}
- if (freq < radio_range[0]*16 || freq > radio_range[1]*16) {
- if (freq >= radio_range[0]*16000 && freq <= radio_range[1]*16000) {
- /* V4L2_TUNER_CAP_LOW frequency */
- if (t->type == TUNER_TEA5767) {
- tuner_info("radio freq step 62.5Hz (%d.%06d)\n",
- freq/16000,freq%16000*1000/16);
- t->radio_freq(c,freq);
- return;
- }
-
- tuner_dbg("V4L2_TUNER_CAP_LOW freq selected for Radio. Tuners yet doesn't support converting it to valid freq.\n");
-
- tuner_info("radio freq (%d.%02d)\n",(freq/16000),freq%16000*100/16000);
-
- t->radio_freq(c,freq>>10);
- return;
-
- } else {
- tuner_info("radio freq (%d.%02d) out of range (%d-%d)\n",
- freq/16,freq%16*100/16,
- radio_range[0],radio_range[1]);
- return;
- }
+ if (freq >= radio_range[0]*16000 && freq <= radio_range[1]*16000) {
+ tuner_info("radio freq step 62.5Hz (%d.%06d)\n",
+ freq/16000,freq%16000*1000/16);
+ t->radio_freq(c,freq);
+ } else {
+ tuner_info("radio freq (%d.%02d) out of range (%d-%d)\n",
+ freq/16,freq%16*100/16,
+ radio_range[0],radio_range[1]);
}
- tuner_dbg("62.5 Khz freq step selected for Radio.\n");
- t->radio_freq(c,freq);
+
+ return;
}
static void set_freq(struct i2c_client *c, unsigned long freq)
@@ -451,9 +420,9 @@ tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
vt->signal = t->has_signal(client);
if (t->is_stereo) {
if (t->is_stereo(client))
- vt-> flags |= VIDEO_TUNER_STEREO_ON;
+ vt->flags |= VIDEO_TUNER_STEREO_ON;
else
- vt-> flags &= 0xffff ^ VIDEO_TUNER_STEREO_ON;
+ vt->flags &= ~VIDEO_TUNER_STEREO_ON;
}
vt->flags |= V4L2_TUNER_CAP_LOW; /* Allow freqs at 62.5 Hz */
@@ -528,13 +497,13 @@ tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
tuner -> signal = t->has_signal(client);
if (t->is_stereo) {
if (t->is_stereo(client)) {
- tuner -> capability |= V4L2_TUNER_CAP_STEREO;
tuner -> rxsubchans |= V4L2_TUNER_SUB_STEREO;
} else {
- tuner -> rxsubchans &= 0xffff ^ V4L2_TUNER_SUB_STEREO;
+ tuner -> rxsubchans &= V4L2_TUNER_SUB_MONO;
}
}
- tuner -> capability |= V4L2_TUNER_CAP_LOW;
+ tuner->capability |= V4L2_TUNER_CAP_LOW;
+ tuner->capability |= V4L2_TUNER_CAP_STEREO;
tuner->rangelow = radio_range[0] * 16000;
tuner->rangehigh = radio_range[1] * 16000;
diff --git a/linux/drivers/media/video/tuner-simple.c b/linux/drivers/media/video/tuner-simple.c
index 92c9b1a76..f98d2d222 100644
--- a/linux/drivers/media/video/tuner-simple.c
+++ b/linux/drivers/media/video/tuner-simple.c
@@ -1,5 +1,5 @@
/*
- * $Id: tuner-simple.c,v 1.24 2005/06/15 17:36:11 mkrufky Exp $
+ * $Id: tuner-simple.c,v 1.25 2005/06/16 08:29:49 nsh Exp $
*
* i2c tv tuner chip device driver
* controls all those simple 4-control-bytes style tuners.
@@ -454,15 +454,14 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
int rc;
tun=&tuners[t->type];
- div = freq + (int)(16*10.7);
+ div = (freq / 1000) + (int)(16*10.7);
buffer[2] = tun->config;
switch (t->type) {
case TUNER_TENA_9533_DI:
case TUNER_YMEC_TVF_5533MF:
-
/*These values are empirically determinated */
- div = (freq*122)/16 - 20;
+ div = (freq * 122) / 16000 - 20;
buffer[2] = 0x88; /* could be also 0x80 */
buffer[3] = 0x19; /* could be also 0x10, 0x18, 0x99 */
break;
@@ -472,7 +471,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
buffer[3] = 0x19;
break;
case TUNER_PHILIPS_FM1256_IH3:
- div = (20 * freq)/16 + 333 * 2;
+ div = (20 * freq) / 16000 + 333 * 2;
buffer[2] = 0x80;
buffer[3] = 0x19;
break;
diff --git a/v4l/ChangeLog b/v4l/ChangeLog
index 7df0483a9..32277ad94 100644
--- a/v4l/ChangeLog
+++ b/v4l/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-15 11:58 nshmyrev
+ * mt20xx.c, tda9820.c, tuner-core.c, tuner-simple.c:
+
+ - Make all radio tuners use CAP_LOW by default.
+
2005-06-15 13:50 mkrufky
* Make.conf: