--- v4l-dvb/linux/drivers/media/dvb/ttpci/av7110.c.orig 2007-11-06 22:20:06.000000000 +0100 +++ v4l-dvb/linux/drivers/media/dvb/ttpci/av7110.c 2008-04-26 13:26:28.000000000 +0200 @@ -87,7 +87,10 @@ static int wss_cfg_16_9 = 0x0007; static int tv_standard; static int full_ts; +static int freq_shift = 0; +module_param(freq_shift, int, 0644); +MODULE_PARM_DESC(freq_shift, "frequency shift in kHz (e.g. -250)"); module_param_named(debug, av7110_debug, int, 0644); MODULE_PARM_DESC(debug, "debug level (bitmask, default 0)"); module_param(vidmode, int, 0444); @@ -1825,24 +1828,25 @@ { struct av7110* av7110 = fe->dvb->priv; u32 div; + u32 frequency = params -> frequency + freq_shift * 1000; u8 data[4]; struct i2c_msg msg = { .addr = 0x63, .flags = 0, .buf = data, .len = sizeof(data) }; struct i2c_msg readmsg = { .addr = 0x63, .flags = I2C_M_RD, .buf = data, .len = 1 }; int i; - div = (params->frequency + 36150000 + 31250) / 62500; + div = (frequency + 36150000 + 31250) / 62500; data[0] = (div >> 8) & 0x7f; data[1] = div & 0xff; data[2] = 0xce; - if (params->frequency < 45000000) + if( frequency < 45000000) return -EINVAL; - else if (params->frequency < 137000000) + else if ( frequency < 137000000) data[3] = 0x01; - else if (params->frequency < 403000000) + else if ( frequency < 403000000) data[3] = 0x02; - else if (params->frequency < 860000000) + else if ( frequency < 860000000) data[3] = 0x04; else return -EINVAL;