Yeah, I did this part of code already.
I design mt2131_set_tv_freq(struct i2c_client *cli, unsigned int
freq) function and I compile this part of code into tuner.ko just like
mt20xx code has done,
++++++++++++++++++++++++++++++++++++++++++++++++
static void mt2131_set_tv_freq(struct i2c_client *client, unsigned
int freqency)
{
struct tuner *t = i2c_get_clientdata(client);
struct mt2131_priv *priv = t->priv;
int ret, i = 0;
u32 freq;
u8 if_band_center;
u32 f_lo1, f_lo2;
u32 div1, num1, div2, num2;
u8 buf[12];
u8 lockval = 0;
u8 agcrst = 0;
freq = (freqency * 16) / 1000;
f_lo1 = freq + MT2131_IF1;
f_lo1 = (f_lo1 / 250) * 250;
f_lo2 = f_lo1 - freq - MT2131_IF2;
priv->frequency = (f_lo1 - f_lo2 - MT2131_IF2) * 1000;
num1 = f_lo1 * 64 / (MT2131_FREF / 128);
div1 = num1 / 8192;
num1 &= 0x1fff;
num2 = f_lo2 * 64 / (MT2131_FREF / 128);
div2 = num2 / 8192;
num2 &= 0x1fff;
if(freq <= 82500) if_band_center = 0x00; else
if(freq <= 137500) if_band_center = 0x01; else
if(freq <= 192500) if_band_center = 0x02; else
if(freq <= 247500) if_band_center = 0x03; else
if(freq <= 302500) if_band_center = 0x04; else
if(freq <= 357500) if_band_center = 0x05; else
if(freq <= 412500) if_band_center = 0x06; else
if(freq <= 467500) if_band_center = 0x07; else
if(freq <= 522500) if_band_center = 0x08; else
if(freq <= 577500) if_band_center = 0x09; else
if(freq <= 632500) if_band_center = 0x0a; else
if(freq <= 687500) if_band_center = 0x0b; else
if(freq <= 742500) if_band_center = 0x0c; else
if(freq <= 797500) if_band_center = 0x0d; else
if(freq <= 852500) if_band_center = 0x0e; else
if(freq <= 907500) if_band_center = 0x0f; else
if(freq <= 962500) if_band_center = 0x10; else
if(freq <= 1017500) if_band_center = 0x11; else
if(freq <= 1072500) if_band_center = 0x12; else
if_band_center = 0x13;
buf[0] = 0x01;
buf[1] = (num1 >> 5) & 0xff;
buf[2] = 0x02;
buf[3] = num1 & 0x1f;
buf[4] = 0x03;
buf[5] = div1;
buf[6] = 0x04;
buf[7] = (num2 >> 5) & 0xff;
buf[8] = 0x05;
buf[9] = num2 & 0x1f;
buf[10] = 0x06;
buf[11] = div2;
ret = mt2131_regs_write(t, buf, 12);
if(ret < 0){
mt2131_debug("change mt2131 frequency failed!\n");
}
mt2131_reg_write(t, 0x0b, if_band_center | 0xe0);
//reset mt2131 AGC
mt2131_reg_read(t, 0x15, &agcrst);
agcrst |= 0x40;
mt2131_reg_write(t, 0x15, agcrst);
while(i < 10){
mt2131_reg_read(t, 0x08, &lockval);
if((lockval & 0x88) == 0x88)
break;
mdelay(4);
i++;
}
mt2131_debug("tuner lock the signal on the specified frequency!\n");
if(i == 10)
mt2131_debug("Mt2131 tuner can't lock the signal %d\n", freqency);
++++++++++++++++++++++++++++++++++++++++++++++
For mt2131, I use the same init parameters as in ATSC, and the
same algorithm for frequency parameters setting.
I can see the function correctly called when VIDIOC_S_FREQUENCY.
But my tv card's demod just can't get a valid NTSC IF signal.
So I suspect if mt2131 has different init params or different freq
set algorithm for NTSC.
On Nov 26, 2007 1:11 PM, Michael Krufky <[EMAIL PROTECTED]> wrote:
>
>
>
> kevin liu wrote:
> > Dear:
> > In Linux DVB framework, mt2131 works for atsc tv mode.
> > But the problem is that can I use the same module when I want to see any
> > NTSC tv program?
>
>
> mt2131 currently does not support analog television. All we need is to fill
> .set_analog_params, and call it from tuner-core.c, and then it can work.
>
> -Mike Krufky
>
_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb