Patrick, when you are discussing dib0700 issues with dibcom, there is an additional one for the list: When using dib0700 in dual mode (on my nova-td stick), from time to time a tuner hangs up. I never observed this behavior in single mode. It seems to me that there is no proper locking within the dib0700 firmware when accessing both tuner i2c buses "simultaneously". Since I only need UHF channels, I use the attached patch to decrease the number of i2c transactions and tuner registers, which are involved in the channel switch. This solved the tuning problems. Besides the i2c problem, maybe it might be a good idea to integrate this patch into the mt2266 driver anyway, because it considerably speeds up the channel switch. Regards, S:oren
--- drivers/media/common/tuners/mt2266.c.orig 2009-06-29 22:11:08.000000000 +0200 +++ drivers/media/common/tuners/mt2266.c 2009-06-29 22:21:01.000000000 +0200 @@ -137,7 +137,6 @@ static int mt2266_set_params(struct dvb_ freq = params->frequency / 1000; // Hz -> kHz if (freq < 470000 && freq > 230000) return -EINVAL; /* Gap between VHF and UHF bands */ - priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0; priv->frequency = freq * 1000; tune = 2 * freq * (8192/16) / (FREF/16); @@ -145,21 +144,24 @@ static int mt2266_set_params(struct dvb_ if (band == MT2266_VHF) tune *= 2; - switch (params->u.ofdm.bandwidth) { - case BANDWIDTH_6_MHZ: - mt2266_writeregs(priv, mt2266_init_6mhz, - sizeof(mt2266_init_6mhz)); - break; - case BANDWIDTH_7_MHZ: - mt2266_writeregs(priv, mt2266_init_7mhz, - sizeof(mt2266_init_7mhz)); - break; - case BANDWIDTH_8_MHZ: - default: - mt2266_writeregs(priv, mt2266_init_8mhz, - sizeof(mt2266_init_8mhz)); - break; - } + if (priv->bandwidth != params->u.ofdm.bandwidth) { + priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0; + switch (params->u.ofdm.bandwidth) { + case BANDWIDTH_6_MHZ: + mt2266_writeregs(priv, mt2266_init_6mhz, + sizeof(mt2266_init_6mhz)); + break; + case BANDWIDTH_7_MHZ: + mt2266_writeregs(priv, mt2266_init_7mhz, + sizeof(mt2266_init_7mhz)); + break; + case BANDWIDTH_8_MHZ: + default: + mt2266_writeregs(priv, mt2266_init_8mhz, + sizeof(mt2266_init_8mhz)); + break; + } + } if (band == MT2266_VHF && priv->band == MT2266_UHF) { dprintk("Switch from UHF to VHF"); @@ -327,6 +329,7 @@ struct dvb_frontend * mt2266_attach(stru priv->cfg = cfg; priv->i2c = i2c; + priv->bandwidth= BANDWIDTH_8_MHZ; priv->band = MT2266_UHF; if (mt2266_readreg(priv, 0, &id)) {