Lines Matching +full:fixed +full:- +full:factor +full:- +full:clock
2 * Linux-DVB Driver for DiBcom's DiB7000M and
3 * first generation DiB7000P-demodulator-family.
5 * Copyright (C) 2005-7 DiBcom (http://www.dibcom.fr/)
76 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib7000m_read_word()
81 state->i2c_write_buffer[0] = (reg >> 8) | 0x80; in dib7000m_read_word()
82 state->i2c_write_buffer[1] = reg & 0xff; in dib7000m_read_word()
84 memset(state->msg, 0, 2 * sizeof(struct i2c_msg)); in dib7000m_read_word()
85 state->msg[0].addr = state->i2c_addr >> 1; in dib7000m_read_word()
86 state->msg[0].flags = 0; in dib7000m_read_word()
87 state->msg[0].buf = state->i2c_write_buffer; in dib7000m_read_word()
88 state->msg[0].len = 2; in dib7000m_read_word()
89 state->msg[1].addr = state->i2c_addr >> 1; in dib7000m_read_word()
90 state->msg[1].flags = I2C_M_RD; in dib7000m_read_word()
91 state->msg[1].buf = state->i2c_read_buffer; in dib7000m_read_word()
92 state->msg[1].len = 2; in dib7000m_read_word()
94 if (i2c_transfer(state->i2c_adap, state->msg, 2) != 2) in dib7000m_read_word()
97 ret = (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; in dib7000m_read_word()
98 mutex_unlock(&state->i2c_buffer_lock); in dib7000m_read_word()
107 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib7000m_write_word()
109 return -EINVAL; in dib7000m_write_word()
112 state->i2c_write_buffer[0] = (reg >> 8) & 0xff; in dib7000m_write_word()
113 state->i2c_write_buffer[1] = reg & 0xff; in dib7000m_write_word()
114 state->i2c_write_buffer[2] = (val >> 8) & 0xff; in dib7000m_write_word()
115 state->i2c_write_buffer[3] = val & 0xff; in dib7000m_write_word()
117 memset(&state->msg[0], 0, sizeof(struct i2c_msg)); in dib7000m_write_word()
118 state->msg[0].addr = state->i2c_addr >> 1; in dib7000m_write_word()
119 state->msg[0].flags = 0; in dib7000m_write_word()
120 state->msg[0].buf = state->i2c_write_buffer; in dib7000m_write_word()
121 state->msg[0].len = 4; in dib7000m_write_word()
123 ret = (i2c_transfer(state->i2c_adap, state->msg, 1) != 1 ? in dib7000m_write_word()
124 -EREMOTEIO : 0); in dib7000m_write_word()
125 mutex_unlock(&state->i2c_buffer_lock); in dib7000m_write_word()
136 if (state->reg_offs && (r >= 112 && r <= 331)) // compensate for 7000MC in dib7000m_write_tab()
142 } while (--l); in dib7000m_write_tab()
155 smo_mode = (dib7000m_read_word(state, 294 + state->reg_offs) & 0x0010) | (1 << 1); in dib7000m_set_output_mode()
157 dprintk( "setting output mode for demod %p to %d", &state->demod, mode); in dib7000m_set_output_mode()
160 case OUTMODE_MPEG2_PAR_GATED_CLK: // STBs with parallel gated clock in dib7000m_set_output_mode()
163 case OUTMODE_MPEG2_PAR_CONT_CLK: // STBs with parallel continues clock in dib7000m_set_output_mode()
170 if (state->cfg.hostbus_diversity) in dib7000m_set_output_mode()
184 dprintk( "Unhandled output_mode passed to be set for demod %p",&state->demod); in dib7000m_set_output_mode()
188 if (state->cfg.output_mpeg2_in_188_bytes) in dib7000m_set_output_mode()
191 ret |= dib7000m_write_word(state, 294 + state->reg_offs, smo_mode); in dib7000m_set_output_mode()
192 ret |= dib7000m_write_word(state, 295 + state->reg_offs, fifo_threshold); /* synchronous fread */ in dib7000m_set_output_mode()
196 if (state->revision == 0x4003) { in dib7000m_set_output_mode()
218 /* just leave power on the control-interfaces: GPIO and (I2C or SDIO or SRAM) */ in dib7000m_set_power_mode()
241 if (!state->cfg.mobile_mode) in dib7000m_set_power_mode()
245 if (state->revision != 0x4000) in dib7000m_set_power_mode()
248 if (state->revision == 0x4003) in dib7000m_set_power_mode()
275 if (state->revision == 0x4000) { // workaround for PA/MA in dib7000m_set_adc_state()
276 // power-up ADC in dib7000m_set_adc_state()
279 // power-down bandgag in dib7000m_set_adc_state()
320 state->current_bandwidth = bw; in dib7000m_set_bandwidth()
322 if (state->timf == 0) { in dib7000m_set_bandwidth()
324 timf = state->timf_default; in dib7000m_set_bandwidth()
327 timf = state->timf; in dib7000m_set_bandwidth()
340 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_set_diversity_in()
342 if (state->div_force_off) { in dib7000m_set_diversity_in()
343 dprintk( "diversity combination deactivated - forced by COFDM parameters"); in dib7000m_set_diversity_in()
346 state->div_state = (u8)onoff; in dib7000m_set_diversity_in()
349 dib7000m_write_word(state, 263 + state->reg_offs, 6); in dib7000m_set_diversity_in()
350 dib7000m_write_word(state, 264 + state->reg_offs, 6); in dib7000m_set_diversity_in()
351 …dib7000m_write_word(state, 266 + state->reg_offs, (state->div_sync_wait << 4) | (1 << 2) | (2 << 0… in dib7000m_set_diversity_in()
353 dib7000m_write_word(state, 263 + state->reg_offs, 1); in dib7000m_set_diversity_in()
354 dib7000m_write_word(state, 264 + state->reg_offs, 0); in dib7000m_set_diversity_in()
355 dib7000m_write_word(state, 266 + state->reg_offs, 0); in dib7000m_set_diversity_in()
365 // dib7000m_write_word(state, 928, (3 << 14) | (1 << 12) | (524 << 0)); // sampling clock of the SA… in dib7000m_sad_calib()
380 dib7000m_write_word(state, 18, (u16) (((bw->internal*1000) >> 16) & 0xffff)); in dib7000m_reset_pll_common()
381 dib7000m_write_word(state, 19, (u16) ( (bw->internal*1000) & 0xffff)); in dib7000m_reset_pll_common()
382 dib7000m_write_word(state, 21, (u16) ( (bw->ifreq >> 16) & 0xffff)); in dib7000m_reset_pll_common()
383 dib7000m_write_word(state, 22, (u16) ( bw->ifreq & 0xffff)); in dib7000m_reset_pll_common()
385 dib7000m_write_word(state, 928, bw->sad_cfg); in dib7000m_reset_pll_common()
390 const struct dibx000_bandwidth_config *bw = state->cfg.bw; in dib7000m_reset_pll()
394 reg_907 = (bw->pll_bypass << 15) | (bw->modulo << 7) | in dib7000m_reset_pll()
395 (bw->ADClkSrc << 6) | (bw->IO_CLK_en_core << 5) | (bw->bypclk_div << 2) | in dib7000m_reset_pll()
396 (bw->enable_refdiv << 1) | (0 << 0); in dib7000m_reset_pll()
397 reg_910 = (((bw->pll_ratio >> 6) & 0x3) << 3) | (bw->pll_range << 1) | bw->pll_reset; in dib7000m_reset_pll()
401 if (!state->cfg.quartz_direct) { in dib7000m_reset_pll()
404 // if the previous front-end is baseband, its output frequency is 15 MHz (prev freq divided by 2) in dib7000m_reset_pll()
405 if(state->cfg.input_clk_is_div_2) in dib7000m_reset_pll()
407 …else // otherwise the previous front-end puts out its input (default 30MHz) - no extra division ne… in dib7000m_reset_pll()
410 reg_907 |= (bw->pll_ratio & 0x3f) << 9; in dib7000m_reset_pll()
411 reg_910 |= (bw->pll_prediv << 5); in dib7000m_reset_pll()
423 const struct dibx000_bandwidth_config *bw = state->cfg.bw; in dib7000mc_reset_pll()
427 dib7000m_write_word(state, 907, (bw->pll_prediv << 8) | (bw->pll_ratio << 0)); in dib7000mc_reset_pll()
432 (bw->IO_CLK_en_core << 10) | (bw->bypclk_div << 5) | (bw->enable_refdiv << 4) | in dib7000mc_reset_pll()
433 (1 << 3) | (bw->pll_range << 1) | (bw->pll_reset << 0); in dib7000mc_reset_pll()
435 clk_cfg1 = (clk_cfg1 & 0xfff7) | (bw->pll_bypass << 3); in dib7000mc_reset_pll()
439 dib7000m_write_word(state, 910, (1 << 12) | (2 << 10) | (bw->modulo << 8) | (bw->ADClkSrc << 7)); in dib7000mc_reset_pll()
447 dib7000m_write_word(st, 773, st->cfg.gpio_dir); in dib7000m_reset_gpio()
448 dib7000m_write_word(st, 774, st->cfg.gpio_val); in dib7000m_reset_gpio()
452 dib7000m_write_word(st, 775, st->cfg.gpio_pwm_pos); in dib7000m_reset_gpio()
454 dib7000m_write_word(st, 780, st->cfg.pwm_freq_div); in dib7000m_reset_gpio()
535 /* set ADC level to -16 */
537 (1 << 13) - 825 - 117,
538 (1 << 13) - 837 - 117,
539 (1 << 13) - 811 - 117,
540 (1 << 13) - 766 - 117,
541 (1 << 13) - 737 - 117,
542 (1 << 13) - 693 - 117,
543 (1 << 13) - 648 - 117,
544 (1 << 13) - 619 - 117,
545 (1 << 13) - 575 - 117,
546 (1 << 13) - 531 - 117,
547 (1 << 13) - 501 - 117,
563 /* always leave the VBG voltage on - it consumes almost nothing but takes a long time to start */ in dib7000m_demod_reset()
577 if (state->revision == 0x4000) in dib7000m_demod_reset()
597 if (state->cfg.dvbt_mode) in dib7000m_demod_reset()
598 dib7000m_write_word(state, 1796, 0x0); // select DVB-T output in dib7000m_demod_reset()
600 if (state->cfg.mobile_mode) in dib7000m_demod_reset()
601 dib7000m_write_word(state, 261 + state->reg_offs, 2); in dib7000m_demod_reset()
603 dib7000m_write_word(state, 224 + state->reg_offs, 1); in dib7000m_demod_reset()
606 if(state->cfg.tuner_is_baseband) in dib7000m_demod_reset()
612 if (state->revision == 0x4000) in dib7000m_demod_reset()
622 state->internal_clk = state->cfg.bw->internal; in dib7000m_demod_reset()
638 …if(!state->current_agc || !state->current_agc->perform_agc_softsplit || state->current_agc->split.… in dib7000m_agc_soft_split()
644 if (agc > state->current_agc->split.min_thres) in dib7000m_agc_soft_split()
645 split_offset = state->current_agc->split.min; in dib7000m_agc_soft_split()
646 else if (agc < state->current_agc->split.max_thres) in dib7000m_agc_soft_split()
647 split_offset = state->current_agc->split.max; in dib7000m_agc_soft_split()
649 split_offset = state->current_agc->split.max * in dib7000m_agc_soft_split()
650 (agc - state->current_agc->split.min_thres) / in dib7000m_agc_soft_split()
651 (state->current_agc->split.max_thres - state->current_agc->split.min_thres); in dib7000m_agc_soft_split()
663 if (state->cfg.update_lna) { in dib7000m_update_lna()
664 // read dyn_gain here (because it is demod-dependent and not fe) in dib7000m_update_lna()
667 if (state->cfg.update_lna(&state->demod,dyn_gain)) { // LNA has changed in dib7000m_update_lna()
679 if (state->current_band == band && state->current_agc != NULL) in dib7000m_set_agc_config()
681 state->current_band = band; in dib7000m_set_agc_config()
683 for (i = 0; i < state->cfg.agc_config_count; i++) in dib7000m_set_agc_config()
684 if (state->cfg.agc[i].band_caps & band) { in dib7000m_set_agc_config()
685 agc = &state->cfg.agc[i]; in dib7000m_set_agc_config()
691 return -EINVAL; in dib7000m_set_agc_config()
694 state->current_agc = agc; in dib7000m_set_agc_config()
697 dib7000m_write_word(state, 72 , agc->setup); in dib7000m_set_agc_config()
698 dib7000m_write_word(state, 73 , agc->inv_gain); in dib7000m_set_agc_config()
699 dib7000m_write_word(state, 74 , agc->time_stabiliz); in dib7000m_set_agc_config()
700 dib7000m_write_word(state, 97 , (agc->alpha_level << 12) | agc->thlock); in dib7000m_set_agc_config()
703 dib7000m_write_word(state, 98, (agc->alpha_mant << 5) | agc->alpha_exp); in dib7000m_set_agc_config()
704 dib7000m_write_word(state, 99, (agc->beta_mant << 6) | agc->beta_exp); in dib7000m_set_agc_config()
707 …state->wbd_ref != 0 ? state->wbd_ref : agc->wbd_ref, agc->wbd_sel, !agc->perform_agc_softsplit, ag… in dib7000m_set_agc_config()
710 if (state->wbd_ref != 0) in dib7000m_set_agc_config()
711 dib7000m_write_word(state, 102, state->wbd_ref); in dib7000m_set_agc_config()
713 dib7000m_write_word(state, 102, agc->wbd_ref); in dib7000m_set_agc_config()
715 dib7000m_write_word(state, 103, (agc->wbd_alpha << 9) | (agc->perform_agc_softsplit << 8) ); in dib7000m_set_agc_config()
716 dib7000m_write_word(state, 104, agc->agc1_max); in dib7000m_set_agc_config()
717 dib7000m_write_word(state, 105, agc->agc1_min); in dib7000m_set_agc_config()
718 dib7000m_write_word(state, 106, agc->agc2_max); in dib7000m_set_agc_config()
719 dib7000m_write_word(state, 107, agc->agc2_min); in dib7000m_set_agc_config()
720 dib7000m_write_word(state, 108, (agc->agc1_pt1 << 8) | agc->agc1_pt2 ); in dib7000m_set_agc_config()
721 dib7000m_write_word(state, 109, (agc->agc1_slope1 << 8) | agc->agc1_slope2); in dib7000m_set_agc_config()
722 dib7000m_write_word(state, 110, (agc->agc2_pt1 << 8) | agc->agc2_pt2); in dib7000m_set_agc_config()
723 dib7000m_write_word(state, 111, (agc->agc2_slope1 << 8) | agc->agc2_slope2); in dib7000m_set_agc_config()
725 if (state->revision > 0x4000) { // settings for the MC in dib7000m_set_agc_config()
726 dib7000m_write_word(state, 71, agc->agc1_pt3); in dib7000m_set_agc_config()
728 …(dib7000m_read_word(state, 929) & 0xffe3) | (agc->wbd_inv << 4) | (agc->wbd_sel << 2), agc->wbd_in… in dib7000m_set_agc_config()
729 …word(state, 929, (dib7000m_read_word(state, 929) & 0xffe3) | (agc->wbd_inv << 4) | (agc->wbd_sel <… in dib7000m_set_agc_config()
742 state->timf = timf * 160 / (state->current_bandwidth / 50); in dib7000m_update_timf()
745 dprintk( "updated timf_frequency: %d (default: %d)",state->timf, state->timf_default); in dib7000m_update_timf()
750 struct dtv_frontend_properties *ch = &demod->dtv_property_cache; in dib7000m_agc_startup()
751 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_agc_startup()
753 int ret = -1; in dib7000m_agc_startup()
754 u8 *agc_state = &state->agc_state; in dib7000m_agc_startup()
757 switch (state->agc_state) { in dib7000m_agc_startup()
759 // set power-up level: interf+analog+AGC in dib7000m_agc_startup()
763 if (dib7000m_set_agc_config(state, BAND_OF_FREQUENCY(ch->frequency/1000)) != 0) in dib7000m_agc_startup()
764 return -1; in dib7000m_agc_startup()
772 if (state->cfg.agc_control) in dib7000m_agc_startup()
773 state->cfg.agc_control(&state->demod, 1); in dib7000m_agc_startup()
776 if (!state->current_agc->perform_agc_softsplit) { in dib7000m_agc_startup()
777 /* we are using the wbd - so slow AGC startup */ in dib7000m_agc_startup()
803 …dib7000m_write_word(state, 103, (state->current_agc->wbd_alpha << 9) | agc_split); /* standard spl… in dib7000m_agc_startup()
827 if (state->cfg.agc_control) in dib7000m_agc_startup()
828 state->cfg.agc_control(&state->demod, 0); in dib7000m_agc_startup()
844 dib7000m_set_bandwidth(state, BANDWIDTH_TO_KHZ(ch->bandwidth_hz)); in dib7000m_set_channel()
848 switch (ch->transmission_mode) { in dib7000m_set_channel()
854 switch (ch->guard_interval) { in dib7000m_set_channel()
861 switch (ch->modulation) { in dib7000m_set_channel()
880 if (ch->hierarchy == 1) in dib7000m_set_channel()
884 switch ((ch->hierarchy == 0 || 1 == 1) ? ch->code_rate_HP : ch->code_rate_LP) { in dib7000m_set_channel()
892 dib7000m_write_word(state, 267 + state->reg_offs, value); in dib7000m_set_channel()
909 switch (ch->transmission_mode) { in dib7000m_set_channel()
915 switch (ch->guard_interval) { in dib7000m_set_channel()
922 …state->div_sync_wait = (value * 3) / 2 + 32; // add 50% SFN margin + compensate for one DVSY-fifo … in dib7000m_set_channel()
924 /* deactive the possibility of diversity reception if extended interleave - not for 7000MC */ in dib7000m_set_channel()
926 if (1 == 1 || state->revision > 0x4000) in dib7000m_set_channel()
927 state->div_force_off = 0; in dib7000m_set_channel()
929 state->div_force_off = 1; in dib7000m_set_channel()
930 dib7000m_set_diversity_in(&state->demod, state->div_state); in dib7000m_set_channel()
933 switch (ch->modulation) { in dib7000m_set_channel()
936 est[1] = 0xfff0; /* P_adp_noise_cnt -0.002 */ in dib7000m_set_channel()
938 est[3] = 0xfff8; /* P_adp_noise_ext -0.001 */ in dib7000m_set_channel()
942 est[1] = 0xffdf; /* P_adp_noise_cnt -0.004 */ in dib7000m_set_channel()
944 est[3] = 0xfff0; /* P_adp_noise_ext -0.002 */ in dib7000m_set_channel()
948 est[1] = 0xffae; /* P_adp_noise_cnt -0.01 */ in dib7000m_set_channel()
950 est[3] = 0xfff8; /* P_adp_noise_ext -0.002 */ in dib7000m_set_channel()
954 dib7000m_write_word(state, 214 + value + state->reg_offs, est[value]); in dib7000m_set_channel()
956 // set power-up level: autosearch in dib7000m_set_channel()
962 struct dtv_frontend_properties *ch = &demod->dtv_property_cache; in dib7000m_autosearch_start()
963 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_autosearch_start()
966 u32 value, factor; in dib7000m_autosearch_start() local
979 factor = BANDWIDTH_TO_KHZ(schan.bandwidth_hz); in dib7000m_autosearch_start()
980 if (factor >= 5000) in dib7000m_autosearch_start()
981 factor = 1; in dib7000m_autosearch_start()
983 factor = 6; in dib7000m_autosearch_start()
986 value = 30 * state->internal_clk * factor; in dib7000m_autosearch_start()
989 value = 100 * state->internal_clk * factor; in dib7000m_autosearch_start()
992 value = 500 * state->internal_clk * factor; in dib7000m_autosearch_start()
1001 if (state->revision == 0x4000) in dib7000m_autosearch_start()
1029 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_autosearch_is_irq()
1030 if (state->revision == 0x4000) in dib7000m_autosearch_is_irq()
1038 struct dtv_frontend_properties *ch = &demod->dtv_property_cache; in dib7000m_tune()
1039 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_tune()
1043 // we are already tuned - just resuming from suspend in dib7000m_tune()
1047 return -EINVAL; in dib7000m_tune()
1058 // never achieved a lock before - wait for timfreq to update in dib7000m_tune()
1059 if (state->timf == 0) in dib7000m_tune()
1065 switch (ch->transmission_mode) { in dib7000m_tune()
1075 switch (ch->transmission_mode) { in dib7000m_tune()
1085 switch (ch->transmission_mode) { in dib7000m_tune()
1093 // we achieved a lock - it's time to update the timf freq in dib7000m_tune()
1097 dib7000m_set_bandwidth(state, BANDWIDTH_TO_KHZ(ch->bandwidth_hz)); in dib7000m_tune()
1103 struct dib7000m_state *state = demod->demodulator_priv; in dib7000m_wakeup()
1115 struct dib7000m_state *st = demod->demodulator_priv; in dib7000m_sleep()
1128 return -EREMOTEIO; in dib7000m_identify()
1131 state->revision = dib7000m_read_word(state, 897); in dib7000m_identify()
1132 if (state->revision != 0x4000 && in dib7000m_identify()
1133 state->revision != 0x4001 && in dib7000m_identify()
1134 state->revision != 0x4002 && in dib7000m_identify()
1135 state->revision != 0x4003) { in dib7000m_identify()
1137 return -EREMOTEIO; in dib7000m_identify()
1141 if (state->revision == 0x4000 && dib7000m_read_word(state, 769) == 0x4000) { in dib7000m_identify()
1143 return -EREMOTEIO; in dib7000m_identify()
1146 switch (state->revision) { in dib7000m_identify()
1148 case 0x4001: state->reg_offs = 1; dprintk( "found DiB7000HC"); break; in dib7000m_identify()
1149 case 0x4002: state->reg_offs = 1; dprintk( "found DiB7000MC"); break; in dib7000m_identify()
1150 case 0x4003: state->reg_offs = 1; dprintk( "found DiB9000"); break; in dib7000m_identify()
1159 struct dtv_frontend_properties *fep = &fe->dtv_property_cache; in dib7000m_get_frontend()
1160 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_get_frontend()
1163 fep->inversion = INVERSION_AUTO; in dib7000m_get_frontend()
1165 fep->bandwidth_hz = BANDWIDTH_TO_HZ(state->current_bandwidth); in dib7000m_get_frontend()
1168 case 0: fep->transmission_mode = TRANSMISSION_MODE_2K; break; in dib7000m_get_frontend()
1169 case 1: fep->transmission_mode = TRANSMISSION_MODE_8K; break; in dib7000m_get_frontend()
1170 /* case 2: fep->transmission_mode = TRANSMISSION_MODE_4K; break; */ in dib7000m_get_frontend()
1174 case 0: fep->guard_interval = GUARD_INTERVAL_1_32; break; in dib7000m_get_frontend()
1175 case 1: fep->guard_interval = GUARD_INTERVAL_1_16; break; in dib7000m_get_frontend()
1176 case 2: fep->guard_interval = GUARD_INTERVAL_1_8; break; in dib7000m_get_frontend()
1177 case 3: fep->guard_interval = GUARD_INTERVAL_1_4; break; in dib7000m_get_frontend()
1181 case 0: fep->modulation = QPSK; break; in dib7000m_get_frontend()
1182 case 1: fep->modulation = QAM_16; break; in dib7000m_get_frontend()
1184 default: fep->modulation = QAM_64; break; in dib7000m_get_frontend()
1187 …/* as long as the frontend_param structure is fixed for hierarchical transmission I refuse to use … in dib7000m_get_frontend()
1190 fep->hierarchy = HIERARCHY_NONE; in dib7000m_get_frontend()
1192 case 1: fep->code_rate_HP = FEC_1_2; break; in dib7000m_get_frontend()
1193 case 2: fep->code_rate_HP = FEC_2_3; break; in dib7000m_get_frontend()
1194 case 3: fep->code_rate_HP = FEC_3_4; break; in dib7000m_get_frontend()
1195 case 5: fep->code_rate_HP = FEC_5_6; break; in dib7000m_get_frontend()
1197 default: fep->code_rate_HP = FEC_7_8; break; in dib7000m_get_frontend()
1202 case 1: fep->code_rate_LP = FEC_1_2; break; in dib7000m_get_frontend()
1203 case 2: fep->code_rate_LP = FEC_2_3; break; in dib7000m_get_frontend()
1204 case 3: fep->code_rate_LP = FEC_3_4; break; in dib7000m_get_frontend()
1205 case 5: fep->code_rate_LP = FEC_5_6; break; in dib7000m_get_frontend()
1207 default: fep->code_rate_LP = FEC_7_8; break; in dib7000m_get_frontend()
1217 struct dtv_frontend_properties *fep = &fe->dtv_property_cache; in dib7000m_set_frontend()
1218 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_set_frontend()
1223 dib7000m_set_bandwidth(state, BANDWIDTH_TO_KHZ(fep->bandwidth_hz)); in dib7000m_set_frontend()
1225 if (fe->ops.tuner_ops.set_params) in dib7000m_set_frontend()
1226 fe->ops.tuner_ops.set_params(fe); in dib7000m_set_frontend()
1229 state->agc_state = 0; in dib7000m_set_frontend()
1232 if (time != -1) in dib7000m_set_frontend()
1234 } while (time != -1); in dib7000m_set_frontend()
1236 if (fep->transmission_mode == TRANSMISSION_MODE_AUTO || in dib7000m_set_frontend()
1237 fep->guard_interval == GUARD_INTERVAL_AUTO || in dib7000m_set_frontend()
1238 fep->modulation == QAM_AUTO || in dib7000m_set_frontend()
1239 fep->code_rate_HP == FEC_AUTO) { in dib7000m_set_frontend()
1246 } while (found == 0 && i--); in dib7000m_set_frontend()
1264 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_read_status()
1285 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_read_ber()
1292 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_read_unc_blocks()
1299 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_read_signal_strength()
1301 *strength = 65535 - val; in dib7000m_read_signal_strength()
1313 tune->min_delay_ms = 1000; in dib7000m_fe_get_tune_settings()
1319 struct dib7000m_state *st = demod->demodulator_priv; in dib7000m_release()
1320 dibx000_exit_i2c_master(&st->i2c_master); in dib7000m_release()
1326 struct dib7000m_state *st = demod->demodulator_priv; in dib7000m_get_i2c_master()
1327 return dibx000_get_i2c_adapter(&st->i2c_master, intf, gating); in dib7000m_get_i2c_master()
1333 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_pid_filter_ctrl()
1334 u16 val = dib7000m_read_word(state, 294 + state->reg_offs) & 0xffef; in dib7000m_pid_filter_ctrl()
1337 return dib7000m_write_word(state, 294 + state->reg_offs, val); in dib7000m_pid_filter_ctrl()
1343 struct dib7000m_state *state = fe->demodulator_priv; in dib7000m_pid_filter()
1345 return dib7000m_write_word(state, 300 + state->reg_offs + id, in dib7000m_pid_filter()
1359 for (k = no_of_demods-1; k >= 0; k--) {
1369 return -EIO;
1373 /* start diversity to pull_down div_str - just for i2c-enumeration */
1376 dib7000m_write_word(&st, 1796, 0x0); // select DVB-T output
1391 /* deactivate div - it was just for i2c-enumeration */
1409 memcpy(&st->cfg, cfg, sizeof(struct dib7000m_config)); in dib7000m_attach()
1410 st->i2c_adap = i2c_adap; in dib7000m_attach()
1411 st->i2c_addr = i2c_addr; in dib7000m_attach()
1413 demod = &st->demod; in dib7000m_attach()
1414 demod->demodulator_priv = st; in dib7000m_attach()
1415 memcpy(&st->demod.ops, &dib7000m_ops, sizeof(struct dvb_frontend_ops)); in dib7000m_attach()
1416 mutex_init(&st->i2c_buffer_lock); in dib7000m_attach()
1418 st->timf_default = cfg->bw->timf; in dib7000m_attach()
1423 if (st->revision == 0x4000) in dib7000m_attach()
1424 dibx000_init_i2c_master(&st->i2c_master, DIB7000, st->i2c_adap, st->i2c_addr); in dib7000m_attach()
1426 dibx000_init_i2c_master(&st->i2c_master, DIB7000MC, st->i2c_adap, st->i2c_addr); in dib7000m_attach()