Hi, I updated the version on http://www.frokaschwei.net/avtv771/avermedia.html. I changed Christopher Pascoe's patch because I don't want to disable the recovery.
Wolfram
--- mt352.c.cvs 2004-06-28 20:08:21.000000000 +0200 +++ mt352.c 2004-06-29 20:57:07.000000000 +0200 @@ -83,7 +83,7 @@ { { .addr = 0x50, - .flags = I2C_M_NOSTART, + .flags = 0, .buf = ®, .len = 1 }, @@ -168,6 +168,7 @@ struct dvb_ofdm_parameters *op = ¶m->u.ofdm; u32 freq = param->frequency / 1000; uint16_t tmp; + unsigned char acqctl = 0x5B; /* suggest spectral inversion on, force mode, guard, enable recovery */ switch (op->code_rate_HP) { case FEC_2_3: @@ -186,6 +187,7 @@ case FEC_AUTO: break; default: + printk(KERN_WARNING "mt352.c: bad code_rate_HP\n"); return -EINVAL; } @@ -204,8 +206,10 @@ break; case FEC_1_2: case FEC_AUTO: + case FEC_NONE: break; default: + printk(KERN_WARNING "mt352.c: bad code_rate_LP\n"); return -EINVAL; } @@ -220,23 +224,26 @@ tps |= (2 << 13); break; default: + printk(KERN_WARNING "mt352.c: bad constellation\n"); return -EINVAL; } switch (op->transmission_mode) { case TRANSMISSION_MODE_2K: - case TRANSMISSION_MODE_AUTO: break; case TRANSMISSION_MODE_8K: tps |= (1 << 0); break; + case TRANSMISSION_MODE_AUTO: + acqctl &= ~(1 << 0); /* unforce mode */ + break; default: + printk(KERN_WARNING "mt352.c: bad transmission_mode\n"); return -EINVAL; } switch (op->guard_interval) { case GUARD_INTERVAL_1_32: - case GUARD_INTERVAL_AUTO: break; case GUARD_INTERVAL_1_16: tps |= (1 << 2); @@ -247,7 +254,11 @@ case GUARD_INTERVAL_1_4: tps |= (3 << 2); break; + case GUARD_INTERVAL_AUTO: + acqctl &= ~(1 << 1); /* unforce guard */ + break; default: + printk(KERN_WARNING "mt352.c: bad guard_interval\n"); return -EINVAL; } @@ -265,6 +276,7 @@ tps |= (3 << 10); break; default: + printk(KERN_WARNING "mt352.c: bad hierarchy_information\n"); return -EINVAL; } @@ -274,7 +286,7 @@ buf[1] = msb(tps); /* TPS_GIVEN_(1|0) */ buf[2] = lsb(tps); - buf[3] = 0x50; + buf[3] = acqctl; /** * these settings assume 20.48MHz f_ADC, for other tuners you might @@ -386,7 +398,7 @@ u8 b0 [] = { reg }; u8 b1 [] = { 0 }; struct i2c_msg msg [] = { { .addr = I2C_MT352_ADDR, - .flags = I2C_M_NOSTART, + .flags = 0, .buf = b0, .len = 1 }, { .addr = I2C_MT352_ADDR, .flags = I2C_M_RD, @@ -578,7 +590,6 @@ case FE_GET_FRONTEND: return mt352_get_parameters (i2c, (struct dvb_frontend_parameters *) arg,card_type); - case FE_GET_TUNE_SETTINGS: fe_tune_settings = (struct dvb_frontend_tune_settings *) arg; fe_tune_settings->min_delay_ms = 800;