Gunther Mayer,
I've now tried to initialize the mt2032 tuner when the bttv driver is
loaded, in the voodoo200_init() method as you suggested. I'm not shure
if all the steps are necessary, but I've tried to mimic the steps as
outlined in the manual.
(The init method is in the attached file. This is my first attempt at
kernel driver programming, so please let me know if anything is not in
line with kernel programming etiquette..)
In addition I had to remove the setting of register 3,4,8,9,10 in the
mt2032_compute_freq() method, since for some reason, the card will not
tune with these registers being set with this initialization. I have not
yet experimented to see if there is just a single register or more that
has this effect yet.
My card now tunes when coldbooted, but with much poorer performance
(some channels aren't foudn initially, more noise etc.) than
previously. I'll try to experiment more on this to see what's missing.
Lastly, isn't the mt2032 really an i2c device like the msp34** and thus
deserves it's own module?
--
-Torgeir
void mt2032_initialize_torgeir_special(struct i2c_client *c)
{
unsigned char buf[21];
int ret;
unsigned char xok=0;
unsigned char xogc=0;
int loopkill = 10;
printk("mt2032_initialize_torgeir_special\n");
buf[0]=0;
ret=i2c_master_send(c,buf,1);
i2c_master_recv(c,buf,21);
buf[3]=0xff; // addr+1, since buf[0] contains startaddr
buf[4]=0x0f;
buf[5]=0x1f;
buf[7]=0xe4;
buf[8]=0x8f;
buf[9]=0xc3;
buf[10]=0x4e;
buf[11]=0xec;
buf[14]=0x32;
buf[0]=0;
ret=i2c_master_send(c,buf,14);
if (ret!=14)
printk("mt2032_initialize_torgeir_special failed with %d\n",ret);
udelay(10);
// adjust xogc register
do {
--loopkill;
buf[0]=0x0e;
i2c_master_send(c,buf,1);
i2c_master_recv(c,buf,1);
xok=buf[0]&0x01;
printk("mt2032: xok = 0x%02x\n",xok);
if (xok == 1) break; // if xok == 1, complete, else
buf[0]=0x07;
i2c_master_send(c,buf,1);
i2c_master_recv(c,buf,1);
xogc=buf[0];
printk("mt2032: xogc = 0x%02x\n",xogc&0x07);
if (xogc == 4) break; // if xogc == 4, complete, else
// decrement xogc and set, then loop
buf[0]=0x07;
buf[1]=(xogc & 0xf8) | ((xogc&0x07)-1);
ret=i2c_master_send(c,buf,2);
if (ret!=2)
printk("mt2032_initialize_torgeir_special failed with %d\n",ret);
udelay(10);
} while (xok != 1 && loopkill > 0);
}