static int mt2032_set_params(struct dvb_frontend *fe, struct analog_parameters *params) { struct microtune_priv *priv = fe->tuner_priv; int ret = -EINVAL; switch (params->mode) { case V4L2_TUNER_RADIO: ret = mt2032_set_radio_freq(fe, params); priv->frequency = params->frequency * 125 / 2; break; case V4L2_TUNER_ANALOG_TV: case V4L2_TUNER_DIGITAL_TV: ret = mt2032_set_tv_freq(fe, params); priv->frequency = params->frequency * 62500; break; } return ret; }
/* * set the frequency of the tuner * If 'type' is TV_FREQUENCY, the frequency is freq MHz*16 * If 'type' is FM_RADIO_FREQUENCY, the frequency is freq MHz * 100 * (note *16 gives is 4 bits of fraction, eg steps of nnn.0625) * */ int tv_freq( bktr_ptr_t bktr, int frequency, int type ) { const struct TUNER* tuner; u_char addr; u_char control; u_char band; int N; int band_select = 0; #if defined( TEST_TUNER_AFC ) int oldFrequency, afcDelta; #endif tuner = bktr->card.tuner; if ( tuner == NULL ) return( -1 ); if (tuner == &tuners[TUNER_MT2032]) { mt2032_set_tv_freq(bktr, frequency); return 0; } if (type == TV_FREQUENCY) { /* * select the band based on frequency * XXX FIXME: get the cross-over points from the tuner struct */ if ( frequency < (160 * FREQFACTOR ) ) band_select = LOW_BAND; else if ( frequency < (454 * FREQFACTOR ) ) band_select = MID_BAND; else band_select = HIGH_BAND; #if defined( TEST_TUNER_AFC ) if ( bktr->tuner.afc ) frequency -= 4; #endif /* * N = 16 * { fRF(pc) + fIF(pc) } * or N = 16* fRF(pc) + 16*fIF(pc) } * where: * pc is picture carrier, fRF & fIF are in MHz * * fortunatly, frequency is passed in as MHz * 16 * and the TBL_IF frequency is also stored in MHz * 16 */ N = frequency + TBL_IF; /* set the address of the PLL */ addr = bktr->card.tuner_pllAddr; control = tuner->pllControl[ band_select ]; band = tuner->bandAddrs[ band_select ]; if(!(band && control)) /* Don't try to set un- */ return(-1); /* supported modes. */ if ( frequency > bktr->tuner.frequency ) { i2cWrite( bktr, addr, (N>>8) & 0x7f, N & 0xff ); i2cWrite( bktr, addr, control, band ); } else {