Lines Matching full:fe
3 tda18271-fe.c - driver for the Philips / NXP TDA18271 silicon tuner
28 static int tda18271_toggle_output(struct dvb_frontend *fe, int standby) in tda18271_toggle_output() argument
30 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_toggle_output()
32 int ret = tda18271_set_standby_mode(fe, standby ? 1 : 0, in tda18271_toggle_output()
49 static inline int charge_pump_source(struct dvb_frontend *fe, int force) in charge_pump_source() argument
51 struct tda18271_priv *priv = fe->tuner_priv; in charge_pump_source()
52 return tda18271_charge_pump_source(fe, in charge_pump_source()
58 static inline void tda18271_set_if_notch(struct dvb_frontend *fe) in tda18271_set_if_notch() argument
60 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_set_if_notch()
73 static int tda18271_channel_configuration(struct dvb_frontend *fe, in tda18271_channel_configuration() argument
77 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_channel_configuration()
107 ret = tda18271_write_regs(fe, R_EB22, 1); in tda18271_channel_configuration()
121 tda18271_calc_ir_measure(fe, &freq); in tda18271_channel_configuration()
123 tda18271_calc_bp_filter(fe, &freq); in tda18271_channel_configuration()
125 tda18271_calc_rf_band(fe, &freq); in tda18271_channel_configuration()
127 tda18271_calc_gain_taper(fe, &freq); in tda18271_channel_configuration()
148 ret = tda18271_write_regs(fe, R_EB1, 1); in tda18271_channel_configuration()
158 tda18271_calc_main_pll(fe, N); in tda18271_channel_configuration()
159 tda18271_set_if_notch(fe); in tda18271_channel_configuration()
160 tda18271_write_regs(fe, R_MPD, 4); in tda18271_channel_configuration()
163 tda18271_calc_cal_pll(fe, N); in tda18271_channel_configuration()
164 tda18271_write_regs(fe, R_CPD, 4); in tda18271_channel_configuration()
167 tda18271_set_if_notch(fe); in tda18271_channel_configuration()
168 tda18271_write_regs(fe, R_MPD, 1); in tda18271_channel_configuration()
172 ret = tda18271_write_regs(fe, R_TM, 7); in tda18271_channel_configuration()
177 charge_pump_source(fe, 1); in tda18271_channel_configuration()
182 charge_pump_source(fe, 0); in tda18271_channel_configuration()
192 ret = tda18271_write_regs(fe, R_EP3, 1); in tda18271_channel_configuration()
198 static int tda18271_read_thermometer(struct dvb_frontend *fe) in tda18271_read_thermometer() argument
200 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_read_thermometer()
206 tda18271_write_regs(fe, R_TM, 1); in tda18271_read_thermometer()
209 tda18271_read_regs(fe); in tda18271_read_thermometer()
219 tda18271_write_regs(fe, R_TM, 1); in tda18271_read_thermometer()
224 tda18271_read_regs(fe); in tda18271_read_thermometer()
227 tm = tda18271_lookup_thermometer(fe); in tda18271_read_thermometer()
231 tda18271_write_regs(fe, R_TM, 1); in tda18271_read_thermometer()
235 tda18271_write_regs(fe, R_EP4, 1); in tda18271_read_thermometer()
242 static int tda18271c2_rf_tracking_filters_correction(struct dvb_frontend *fe, in tda18271c2_rf_tracking_filters_correction() argument
245 struct tda18271_priv *priv = fe->tuner_priv; in tda18271c2_rf_tracking_filters_correction()
253 ret = tda18271_set_standby_mode(fe, 0, 0, 0); in tda18271c2_rf_tracking_filters_correction()
258 tm_current = tda18271_read_thermometer(fe); in tda18271c2_rf_tracking_filters_correction()
262 tda18271_calc_rf_cal(fe, &freq); in tda18271c2_rf_tracking_filters_correction()
265 i = tda18271_lookup_rf_band(fe, &freq, NULL); in tda18271c2_rf_tracking_filters_correction()
282 ret = tda18271_lookup_map(fe, RF_CAL_DC_OVER_DT, &freq, &dc_over_dt); in tda18271c2_rf_tracking_filters_correction()
290 ret = tda18271_write_regs(fe, R_EB14, 1); in tda18271c2_rf_tracking_filters_correction()
295 static int tda18271_por(struct dvb_frontend *fe) in tda18271_por() argument
297 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_por()
303 ret = tda18271_write_regs(fe, R_EB12, 1); in tda18271_por()
309 ret = tda18271_write_regs(fe, R_EB18, 1); in tda18271_por()
316 ret = tda18271_set_standby_mode(fe, 1, 0, 0); in tda18271_por()
323 ret = tda18271_write_regs(fe, R_EB21, 3); in tda18271_por()
328 static int tda18271_calibrate_rf(struct dvb_frontend *fe, u32 freq) in tda18271_calibrate_rf() argument
330 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_calibrate_rf()
336 tda18271_write_regs(fe, R_EP4, 1); in tda18271_calibrate_rf()
342 tda18271_write_regs(fe, R_EB18, 1); in tda18271_calibrate_rf()
346 tda18271_calc_bp_filter(fe, &freq); in tda18271_calibrate_rf()
347 tda18271_calc_gain_taper(fe, &freq); in tda18271_calibrate_rf()
348 tda18271_calc_rf_band(fe, &freq); in tda18271_calibrate_rf()
349 tda18271_calc_km(fe, &freq); in tda18271_calibrate_rf()
351 tda18271_write_regs(fe, R_EP1, 3); in tda18271_calibrate_rf()
352 tda18271_write_regs(fe, R_EB13, 1); in tda18271_calibrate_rf()
355 tda18271_charge_pump_source(fe, TDA18271_MAIN_PLL, 1); in tda18271_calibrate_rf()
358 tda18271_charge_pump_source(fe, TDA18271_CAL_PLL, 1); in tda18271_calibrate_rf()
362 tda18271_write_regs(fe, R_EB14, 1); in tda18271_calibrate_rf()
366 tda18271_write_regs(fe, R_EB20, 1); in tda18271_calibrate_rf()
370 tda18271_write_regs(fe, R_EP4, 2); in tda18271_calibrate_rf()
377 tda18271_calc_cal_pll(fe, N); in tda18271_calibrate_rf()
378 tda18271_write_regs(fe, R_CPD, 4); in tda18271_calibrate_rf()
383 tda18271_calc_main_pll(fe, N); in tda18271_calibrate_rf()
384 tda18271_write_regs(fe, R_MPD, 4); in tda18271_calibrate_rf()
388 tda18271_write_regs(fe, R_EP2, 1); in tda18271_calibrate_rf()
389 tda18271_write_regs(fe, R_EP1, 1); in tda18271_calibrate_rf()
390 tda18271_write_regs(fe, R_EP2, 1); in tda18271_calibrate_rf()
391 tda18271_write_regs(fe, R_EP1, 1); in tda18271_calibrate_rf()
396 tda18271_charge_pump_source(fe, TDA18271_MAIN_PLL, 0); in tda18271_calibrate_rf()
399 tda18271_charge_pump_source(fe, TDA18271_CAL_PLL, 0); in tda18271_calibrate_rf()
405 tda18271_write_regs(fe, R_EB20, 1); in tda18271_calibrate_rf()
418 tda18271_write_regs(fe, R_EB18, 1); in tda18271_calibrate_rf()
420 tda18271_write_regs(fe, R_EP3, 2); in tda18271_calibrate_rf()
423 tda18271_write_regs(fe, R_EP1, 1); in tda18271_calibrate_rf()
426 tda18271_read_extended(fe); in tda18271_calibrate_rf()
431 static int tda18271_powerscan(struct dvb_frontend *fe, in tda18271_powerscan() argument
434 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_powerscan()
443 tda18271_calc_rf_band(fe, &freq); in tda18271_powerscan()
444 tda18271_calc_rf_cal(fe, &freq); in tda18271_powerscan()
445 tda18271_calc_gain_taper(fe, &freq); in tda18271_powerscan()
446 tda18271_lookup_cid_target(fe, &freq, &cid_target, &count_limit); in tda18271_powerscan()
448 tda18271_write_regs(fe, R_EP2, 1); in tda18271_powerscan()
449 tda18271_write_regs(fe, R_EB14, 1); in tda18271_powerscan()
454 tda18271_calc_main_pll(fe, freq); in tda18271_powerscan()
455 tda18271_write_regs(fe, R_MPD, 4); in tda18271_powerscan()
462 tda18271_write_regs(fe, R_EP4, 1); in tda18271_powerscan()
465 tda18271_write_regs(fe, R_EP2, 1); in tda18271_powerscan()
468 ret = tda18271_read_extended(fe); in tda18271_powerscan()
482 tda18271_calc_main_pll(fe, freq); in tda18271_powerscan()
483 tda18271_write_regs(fe, R_MPD, 4); in tda18271_powerscan()
492 tda18271_write_regs(fe, R_EP2, 1); in tda18271_powerscan()
495 ret = tda18271_read_extended(fe); in tda18271_powerscan()
524 static int tda18271_powerscan_init(struct dvb_frontend *fe) in tda18271_powerscan_init() argument
526 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_powerscan_init()
540 ret = tda18271_write_regs(fe, R_EP3, 2); in tda18271_powerscan_init()
545 ret = tda18271_write_regs(fe, R_EB18, 1); in tda18271_powerscan_init()
555 ret = tda18271_write_regs(fe, R_EB21, 3); in tda18271_powerscan_init()
560 static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq) in tda18271_rf_tracking_filters_init() argument
562 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_rf_tracking_filters_init()
575 i = tda18271_lookup_rf_band(fe, &freq, NULL); in tda18271_rf_tracking_filters_init()
590 bcal = tda18271_powerscan(fe, &rf_default[rf], &rf_freq[rf]); in tda18271_rf_tracking_filters_init()
594 tda18271_calc_rf_cal(fe, &rf_freq[rf]); in tda18271_rf_tracking_filters_init()
599 (s32)tda18271_calibrate_rf(fe, rf_freq[rf]); in tda18271_rf_tracking_filters_init()
632 static int tda18271_calc_rf_filter_curve(struct dvb_frontend *fe) in tda18271_calc_rf_filter_curve() argument
634 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_calc_rf_filter_curve()
643 ret = tda18271_powerscan_init(fe); in tda18271_calc_rf_filter_curve()
650 tda18271_rf_tracking_filters_init(fe, 1000 * in tda18271_calc_rf_filter_curve()
656 priv->tm_rfcal = tda18271_read_thermometer(fe); in tda18271_calc_rf_filter_curve()
663 static int tda18271c2_rf_cal_init(struct dvb_frontend *fe) in tda18271c2_rf_cal_init() argument
665 struct tda18271_priv *priv = fe->tuner_priv; in tda18271c2_rf_cal_init()
676 ret = tda18271_calc_rf_filter_curve(fe); in tda18271c2_rf_cal_init()
680 ret = tda18271_por(fe); in tda18271c2_rf_cal_init()
694 static int tda18271c1_rf_tracking_filter_calibration(struct dvb_frontend *fe, in tda18271c1_rf_tracking_filter_calibration() argument
697 struct tda18271_priv *priv = fe->tuner_priv; in tda18271c1_rf_tracking_filter_calibration()
703 tda18271_calc_bp_filter(fe, &freq); in tda18271c1_rf_tracking_filter_calibration()
704 tda18271_write_regs(fe, R_EP1, 1); in tda18271c1_rf_tracking_filter_calibration()
708 tda18271_write_regs(fe, R_EB4, 1); in tda18271c1_rf_tracking_filter_calibration()
711 tda18271_write_regs(fe, R_EB7, 1); in tda18271c1_rf_tracking_filter_calibration()
714 tda18271_write_regs(fe, R_EB14, 1); in tda18271c1_rf_tracking_filter_calibration()
717 tda18271_write_regs(fe, R_EB20, 1); in tda18271c1_rf_tracking_filter_calibration()
733 tda18271_calc_cal_pll(fe, N); in tda18271c1_rf_tracking_filter_calibration()
746 tda18271_calc_main_pll(fe, N); in tda18271c1_rf_tracking_filter_calibration()
748 ret = tda18271_write_regs(fe, R_EP3, 11); in tda18271c1_rf_tracking_filter_calibration()
755 tda18271_calc_km(fe, &freq); in tda18271c1_rf_tracking_filter_calibration()
756 tda18271_write_regs(fe, R_EB13, 1); in tda18271c1_rf_tracking_filter_calibration()
759 tda18271_calc_rf_band(fe, &freq); in tda18271c1_rf_tracking_filter_calibration()
762 tda18271_calc_gain_taper(fe, &freq); in tda18271c1_rf_tracking_filter_calibration()
764 tda18271_write_regs(fe, R_EP2, 1); in tda18271c1_rf_tracking_filter_calibration()
765 tda18271_write_regs(fe, R_EP1, 1); in tda18271c1_rf_tracking_filter_calibration()
766 tda18271_write_regs(fe, R_EP2, 1); in tda18271c1_rf_tracking_filter_calibration()
767 tda18271_write_regs(fe, R_EP1, 1); in tda18271c1_rf_tracking_filter_calibration()
771 tda18271_write_regs(fe, R_EB4, 1); in tda18271c1_rf_tracking_filter_calibration()
774 tda18271_write_regs(fe, R_EB7, 1); in tda18271c1_rf_tracking_filter_calibration()
778 tda18271_write_regs(fe, R_EB20, 1); in tda18271c1_rf_tracking_filter_calibration()
782 tda18271_write_regs(fe, R_EP4, 1); in tda18271c1_rf_tracking_filter_calibration()
784 tda18271_write_regs(fe, R_EP1, 1); in tda18271c1_rf_tracking_filter_calibration()
787 if (0 == tda18271_calc_rf_cal(fe, &freq)) in tda18271c1_rf_tracking_filter_calibration()
788 tda18271_write_regs(fe, R_EB14, 1); in tda18271c1_rf_tracking_filter_calibration()
795 static int tda18271_ir_cal_init(struct dvb_frontend *fe) in tda18271_ir_cal_init() argument
797 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_ir_cal_init()
801 ret = tda18271_read_regs(fe); in tda18271_ir_cal_init()
807 ret = tda18271_init_regs(fe); in tda18271_ir_cal_init()
812 static int tda18271_init(struct dvb_frontend *fe) in tda18271_init() argument
814 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_init()
820 ret = tda18271_set_standby_mode(fe, 0, 0, 0); in tda18271_init()
825 ret = tda18271_ir_cal_init(fe); in tda18271_init()
830 tda18271c2_rf_cal_init(fe); in tda18271_init()
837 static int tda18271_sleep(struct dvb_frontend *fe) in tda18271_sleep() argument
839 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_sleep()
845 ret = tda18271_toggle_output(fe, 1); in tda18271_sleep()
854 static int tda18271_agc(struct dvb_frontend *fe) in tda18271_agc() argument
856 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_agc()
868 if (fe->callback) in tda18271_agc()
869 ret = fe->callback(priv->i2c_props.adap->algo_data, in tda18271_agc()
885 static int tda18271_tune(struct dvb_frontend *fe, in tda18271_tune() argument
888 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_tune()
894 ret = tda18271_agc(fe); in tda18271_tune()
898 ret = tda18271_init(fe); in tda18271_tune()
906 tda18271c1_rf_tracking_filter_calibration(fe, freq, bw); in tda18271_tune()
909 tda18271c2_rf_tracking_filters_correction(fe, freq); in tda18271_tune()
912 ret = tda18271_channel_configuration(fe, map, freq, bw); in tda18271_tune()
921 static int tda18271_set_params(struct dvb_frontend *fe) in tda18271_set_params() argument
923 struct dtv_frontend_properties *c = &fe->dtv_property_cache; in tda18271_set_params()
927 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_set_params()
969 if (fe->ops.analog_ops.standby) in tda18271_set_params()
970 fe->ops.analog_ops.standby(fe); in tda18271_set_params()
972 ret = tda18271_tune(fe, map, freq, bw); in tda18271_set_params()
984 static int tda18271_set_analog_params(struct dvb_frontend *fe, in tda18271_set_analog_params() argument
987 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_set_analog_params()
1028 ret = tda18271_tune(fe, map, freq, 0); in tda18271_set_analog_params()
1040 static void tda18271_release(struct dvb_frontend *fe) in tda18271_release() argument
1042 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_release()
1051 fe->tuner_priv = NULL; in tda18271_release()
1054 static int tda18271_get_frequency(struct dvb_frontend *fe, u32 *frequency) in tda18271_get_frequency() argument
1056 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_get_frequency()
1061 static int tda18271_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth) in tda18271_get_bandwidth() argument
1063 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_get_bandwidth()
1068 static int tda18271_get_if_frequency(struct dvb_frontend *fe, u32 *frequency) in tda18271_get_if_frequency() argument
1070 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_get_if_frequency()
1094 static int tda18271_dump_std_map(struct dvb_frontend *fe) in tda18271_dump_std_map() argument
1096 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_dump_std_map()
1119 static int tda18271_update_std_map(struct dvb_frontend *fe, in tda18271_update_std_map() argument
1122 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_update_std_map()
1147 static int tda18271_get_id(struct dvb_frontend *fe) in tda18271_get_id() argument
1149 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_get_id()
1155 ret = tda18271_read_regs(fe); in tda18271_get_id()
1187 static int tda18271_setup_configuration(struct dvb_frontend *fe, in tda18271_setup_configuration() argument
1190 struct tda18271_priv *priv = fe->tuner_priv; in tda18271_setup_configuration()
1213 static int tda18271_set_config(struct dvb_frontend *fe, void *priv_cfg) in tda18271_set_config() argument
1217 tda18271_setup_configuration(fe, cfg); in tda18271_set_config()
1220 tda18271_init(fe); in tda18271_set_config()
1224 tda18271_update_std_map(fe, cfg->std_map); in tda18271_set_config()
1247 struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, in tda18271_attach() argument
1264 fe->tuner_priv = priv; in tda18271_attach()
1266 tda18271_setup_configuration(fe, cfg); in tda18271_attach()
1271 ret = tda18271_get_id(fe); in tda18271_attach()
1275 ret = tda18271_assign_map_layout(fe); in tda18271_attach()
1285 tda18271_init_regs(fe); in tda18271_attach()
1289 tda18271c2_rf_cal_init(fe); in tda18271_attach()
1292 ret = tda18271_toggle_output(fe, 1); in tda18271_attach()
1299 fe->tuner_priv = priv; in tda18271_attach()
1314 tda18271_update_std_map(fe, cfg->std_map); in tda18271_attach()
1317 tda18271_init(fe); in tda18271_attach()
1323 tda18271_update_std_map(fe, cfg->std_map); in tda18271_attach()
1327 memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops, in tda18271_attach()
1331 tda18271_dump_std_map(fe); in tda18271_attach()
1333 return fe; in tda18271_attach()
1337 tda18271_release(fe); in tda18271_attach()