Lines Matching refs:state

212 static u16 dib0090_read_reg(struct dib0090_state *state, u8 reg)  in dib0090_read_reg()  argument
216 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib0090_read_reg()
221 state->i2c_write_buffer[0] = reg; in dib0090_read_reg()
223 memset(state->msg, 0, 2 * sizeof(struct i2c_msg)); in dib0090_read_reg()
224 state->msg[0].addr = state->config->i2c_address; in dib0090_read_reg()
225 state->msg[0].flags = 0; in dib0090_read_reg()
226 state->msg[0].buf = state->i2c_write_buffer; in dib0090_read_reg()
227 state->msg[0].len = 1; in dib0090_read_reg()
228 state->msg[1].addr = state->config->i2c_address; in dib0090_read_reg()
229 state->msg[1].flags = I2C_M_RD; in dib0090_read_reg()
230 state->msg[1].buf = state->i2c_read_buffer; in dib0090_read_reg()
231 state->msg[1].len = 2; in dib0090_read_reg()
233 if (i2c_transfer(state->i2c, state->msg, 2) != 2) { in dib0090_read_reg()
237 ret = (state->i2c_read_buffer[0] << 8) in dib0090_read_reg()
238 | state->i2c_read_buffer[1]; in dib0090_read_reg()
240 mutex_unlock(&state->i2c_buffer_lock); in dib0090_read_reg()
244 static int dib0090_write_reg(struct dib0090_state *state, u32 reg, u16 val) in dib0090_write_reg() argument
248 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib0090_write_reg()
253 state->i2c_write_buffer[0] = reg & 0xff; in dib0090_write_reg()
254 state->i2c_write_buffer[1] = val >> 8; in dib0090_write_reg()
255 state->i2c_write_buffer[2] = val & 0xff; in dib0090_write_reg()
257 memset(state->msg, 0, sizeof(struct i2c_msg)); in dib0090_write_reg()
258 state->msg[0].addr = state->config->i2c_address; in dib0090_write_reg()
259 state->msg[0].flags = 0; in dib0090_write_reg()
260 state->msg[0].buf = state->i2c_write_buffer; in dib0090_write_reg()
261 state->msg[0].len = 3; in dib0090_write_reg()
263 if (i2c_transfer(state->i2c, state->msg, 1) != 1) { in dib0090_write_reg()
269 mutex_unlock(&state->i2c_buffer_lock); in dib0090_write_reg()
273 static u16 dib0090_fw_read_reg(struct dib0090_fw_state *state, u8 reg) in dib0090_fw_read_reg() argument
277 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib0090_fw_read_reg()
282 state->i2c_write_buffer[0] = reg; in dib0090_fw_read_reg()
284 memset(&state->msg, 0, sizeof(struct i2c_msg)); in dib0090_fw_read_reg()
285 state->msg.addr = reg; in dib0090_fw_read_reg()
286 state->msg.flags = I2C_M_RD; in dib0090_fw_read_reg()
287 state->msg.buf = state->i2c_read_buffer; in dib0090_fw_read_reg()
288 state->msg.len = 2; in dib0090_fw_read_reg()
289 if (i2c_transfer(state->i2c, &state->msg, 1) != 1) { in dib0090_fw_read_reg()
293 ret = (state->i2c_read_buffer[0] << 8) in dib0090_fw_read_reg()
294 | state->i2c_read_buffer[1]; in dib0090_fw_read_reg()
296 mutex_unlock(&state->i2c_buffer_lock); in dib0090_fw_read_reg()
300 static int dib0090_fw_write_reg(struct dib0090_fw_state *state, u8 reg, u16 val) in dib0090_fw_write_reg() argument
304 if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { in dib0090_fw_write_reg()
309 state->i2c_write_buffer[0] = val >> 8; in dib0090_fw_write_reg()
310 state->i2c_write_buffer[1] = val & 0xff; in dib0090_fw_write_reg()
312 memset(&state->msg, 0, sizeof(struct i2c_msg)); in dib0090_fw_write_reg()
313 state->msg.addr = reg; in dib0090_fw_write_reg()
314 state->msg.flags = 0; in dib0090_fw_write_reg()
315 state->msg.buf = state->i2c_write_buffer; in dib0090_fw_write_reg()
316 state->msg.len = 2; in dib0090_fw_write_reg()
317 if (i2c_transfer(state->i2c, &state->msg, 1) != 1) { in dib0090_fw_write_reg()
323 mutex_unlock(&state->i2c_buffer_lock); in dib0090_fw_write_reg()
327 #define HARD_RESET(state) do { if (cfg->reset) { if (cfg->sleep) cfg->sleep(fe, 0); msleep(10); … argument
332 static void dib0090_write_regs(struct dib0090_state *state, u8 r, const u16 * b, u8 c) in dib0090_write_regs() argument
335 dib0090_write_reg(state, r++, *b++); in dib0090_write_regs()
341 struct dib0090_state *state = fe->tuner_priv; in dib0090_identify() local
343 struct dib0090_identity *identity = &state->identity; in dib0090_identify()
345 v = dib0090_read_reg(state, 0x1a); in dib0090_identify()
433 struct dib0090_fw_state *state = fe->tuner_priv; in dib0090_fw_identify() local
434 struct dib0090_identity *identity = &state->identity; in dib0090_fw_identify()
436 u16 v = dib0090_fw_read_reg(state, 0x1a); in dib0090_fw_identify()
523 struct dib0090_state *state = fe->tuner_priv; in dib0090_reset_digital() local
526 HARD_RESET(state); in dib0090_reset_digital()
527 dib0090_write_reg(state, 0x24, EN_PLL | EN_CRYSTAL); in dib0090_reset_digital()
531 …dib0090_write_reg(state, 0x1b, EN_DIGCLK | EN_PLL | EN_CRYSTAL); /* PLL, DIG_CLK and CRYSTAL remai… in dib0090_reset_digital()
533 …dib0090_write_reg(state, 0x20, ((cfg->io.adc_clock_ratio - 1) << 11) | (0 << 10) | (1 << 9) | (1 <… in dib0090_reset_digital()
535 …dib0090_write_reg(state, 0x23, (0 << 15) | ((!cfg->analog_output) << 14) | (2 << 10) | (1 << 9) | … in dib0090_reset_digital()
538 …dib0090_write_reg(state, 0x23, (0 << 15) | ((!cfg->analog_output) << 14) | (2 << 10) | (1 << 9) | … in dib0090_reset_digital()
542 PllCfg = dib0090_read_reg(state, 0x21); in dib0090_reset_digital()
550 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
554 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
558 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
562 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
567 v = !!(dib0090_read_reg(state, 0x1a) & 0x800); in dib0090_reset_digital()
579 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
584 dib0090_write_reg(state, 0x21, PllCfg); in dib0090_reset_digital()
590 struct dib0090_fw_state *state = fe->tuner_priv; in dib0090_fw_reset_digital() local
596 HARD_RESET(state); in dib0090_fw_reset_digital()
598 dib0090_fw_write_reg(state, 0x24, EN_PLL | EN_CRYSTAL); in dib0090_fw_reset_digital()
599 …dib0090_fw_write_reg(state, 0x1b, EN_DIGCLK | EN_PLL | EN_CRYSTAL); /* PLL, DIG_CLK and CRYSTAL re… in dib0090_fw_reset_digital()
601 dib0090_fw_write_reg(state, 0x20, in dib0090_fw_reset_digital()
611 dib0090_fw_write_reg(state, 0x23, v); in dib0090_fw_reset_digital()
614 PllCfg = dib0090_fw_read_reg(state, 0x21); in dib0090_fw_reset_digital()
621 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
625 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
629 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
633 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
638 v = !!(dib0090_fw_read_reg(state, 0x1a) & 0x800); in dib0090_fw_reset_digital()
650 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
655 dib0090_fw_write_reg(state, 0x21, PllCfg); in dib0090_fw_reset_digital()
663 struct dib0090_state *state = fe->tuner_priv; in dib0090_wakeup() local
664 if (state->config->sleep) in dib0090_wakeup()
665 state->config->sleep(fe, 0); in dib0090_wakeup()
668 dib0090_write_reg(state, 0x23, dib0090_read_reg(state, 0x23) | (1 << 14)); in dib0090_wakeup()
674 struct dib0090_state *state = fe->tuner_priv; in dib0090_sleep() local
675 if (state->config->sleep) in dib0090_sleep()
676 state->config->sleep(fe, 1); in dib0090_sleep()
682 struct dib0090_state *state = fe->tuner_priv; in dib0090_dcc_freq() local
684 dib0090_write_reg(state, 0x04, 0); in dib0090_dcc_freq()
686 dib0090_write_reg(state, 0x04, 1); in dib0090_dcc_freq()
894 static s16 dib0090_wbd_to_db(struct dib0090_state *state, u16 wbd) in dib0090_wbd_to_db() argument
897 if (wbd < state->wbd_offset) in dib0090_wbd_to_db()
900 wbd -= state->wbd_offset; in dib0090_wbd_to_db()
905 static void dib0090_wbd_target(struct dib0090_state *state, u32 rf) in dib0090_wbd_target() argument
911 if (state->current_band == BAND_VHF) in dib0090_wbd_target()
914 if (state->current_band == BAND_VHF) in dib0090_wbd_target()
915 offset = state->config->wbd_vhf_offset; in dib0090_wbd_target()
916 if (state->current_band == BAND_CBAND) in dib0090_wbd_target()
917 offset = state->config->wbd_cband_offset; in dib0090_wbd_target()
920 state->wbd_target = dib0090_wbd_to_db(state, state->wbd_offset + offset); in dib0090_wbd_target()
921 dprintk("wbd-target: %d dB\n", (u32) state->wbd_target); in dib0090_wbd_target()
928 static void dib0090_gain_apply(struct dib0090_state *state, s16 gain_delta, s16 top_delta, u8 force) in dib0090_gain_apply() argument
944 if (top_delta >= ((s16) (state->rf_ramp[0] << WBD_ALPHA) - state->rf_gain_limit)) /* overflow */ in dib0090_gain_apply()
945 state->rf_gain_limit = state->rf_ramp[0] << WBD_ALPHA; in dib0090_gain_apply()
947 state->rf_gain_limit += top_delta; in dib0090_gain_apply()
949 if (state->rf_gain_limit < 0) /*underflow */ in dib0090_gain_apply()
950 state->rf_gain_limit = 0; in dib0090_gain_apply()
953 gain = ((state->rf_gain_limit >> WBD_ALPHA) + state->bb_ramp[0]) << GAIN_ALPHA; in dib0090_gain_apply()
954 if (gain_delta >= ((s16) gain - state->current_gain)) /* overflow */ in dib0090_gain_apply()
955 state->current_gain = gain; in dib0090_gain_apply()
957 state->current_gain += gain_delta; in dib0090_gain_apply()
959 if (state->current_gain < 0) in dib0090_gain_apply()
960 state->current_gain = 0; in dib0090_gain_apply()
963 gain = state->current_gain >> GAIN_ALPHA; in dib0090_gain_apply()
966 if (gain > (state->rf_gain_limit >> WBD_ALPHA)) { in dib0090_gain_apply()
967 rf = state->rf_gain_limit >> WBD_ALPHA; in dib0090_gain_apply()
969 if (bb > state->bb_ramp[0]) in dib0090_gain_apply()
970 bb = state->bb_ramp[0]; in dib0090_gain_apply()
976 state->gain[0] = rf; in dib0090_gain_apply()
977 state->gain[1] = bb; in dib0090_gain_apply()
981 g = state->rf_ramp + 1; /* point on RF LNA1 max gain */ in dib0090_gain_apply()
1000 gain_reg[2] = v | state->rf_lt_def; in dib0090_gain_apply()
1010 g = state->bb_ramp + 1; /* point on BB gain 1 max gain */ in dib0090_gain_apply()
1014 gain_reg[3] |= state->bb_1_def; in dib0090_gain_apply()
1025 if (force || state->gain_reg[i] != v) { in dib0090_gain_apply()
1026 state->gain_reg[i] = v; in dib0090_gain_apply()
1027 dib0090_write_reg(state, gain_reg_addr[i], v); in dib0090_gain_apply()
1032 static void dib0090_set_boost(struct dib0090_state *state, int onoff) in dib0090_set_boost() argument
1034 state->bb_1_def &= 0xdfff; in dib0090_set_boost()
1035 state->bb_1_def |= onoff << 13; in dib0090_set_boost()
1038 static void dib0090_set_rframp(struct dib0090_state *state, const u16 * cfg) in dib0090_set_rframp() argument
1040 state->rf_ramp = cfg; in dib0090_set_rframp()
1043 static void dib0090_set_rframp_pwm(struct dib0090_state *state, const u16 * cfg) in dib0090_set_rframp_pwm() argument
1045 state->rf_ramp = cfg; in dib0090_set_rframp_pwm()
1047 dib0090_write_reg(state, 0x2a, 0xffff); in dib0090_set_rframp_pwm()
1049 dprintk("total RF gain: %ddB, step: %d\n", (u32) cfg[0], dib0090_read_reg(state, 0x2a)); in dib0090_set_rframp_pwm()
1051 dib0090_write_regs(state, 0x2c, cfg + 3, 6); in dib0090_set_rframp_pwm()
1052 dib0090_write_regs(state, 0x3e, cfg + 9, 2); in dib0090_set_rframp_pwm()
1055 static void dib0090_set_bbramp(struct dib0090_state *state, const u16 * cfg) in dib0090_set_bbramp() argument
1057 state->bb_ramp = cfg; in dib0090_set_bbramp()
1058 dib0090_set_boost(state, cfg[0] > 500); /* we want the boost if the gain is higher that 50dB */ in dib0090_set_bbramp()
1061 static void dib0090_set_bbramp_pwm(struct dib0090_state *state, const u16 * cfg) in dib0090_set_bbramp_pwm() argument
1063 state->bb_ramp = cfg; in dib0090_set_bbramp_pwm()
1065 dib0090_set_boost(state, cfg[0] > 500); /* we want the boost if the gain is higher that 50dB */ in dib0090_set_bbramp_pwm()
1067 dib0090_write_reg(state, 0x33, 0xffff); in dib0090_set_bbramp_pwm()
1068 dprintk("total BB gain: %ddB, step: %d\n", (u32) cfg[0], dib0090_read_reg(state, 0x33)); in dib0090_set_bbramp_pwm()
1069 dib0090_write_regs(state, 0x35, cfg + 3, 4); in dib0090_set_bbramp_pwm()
1074 struct dib0090_state *state = fe->tuner_priv; in dib0090_pwm_gain_reset() local
1080 if (state->config->use_pwm_agc) { in dib0090_pwm_gain_reset()
1081 if (state->current_band == BAND_CBAND) { in dib0090_pwm_gain_reset()
1082 if (state->identity.in_soc) { in dib0090_pwm_gain_reset()
1084 … if (state->identity.version == SOC_8090_P1G_11R1 || state->identity.version == SOC_8090_P1G_21R1) in dib0090_pwm_gain_reset()
1086 …else if (state->identity.version == SOC_7090_P1G_11R1 || state->identity.version == SOC_7090_P1G_2… in dib0090_pwm_gain_reset()
1087 if (state->config->is_dib7090e) { in dib0090_pwm_gain_reset()
1088 if (state->rf_ramp == NULL) in dib0090_pwm_gain_reset()
1091 rf_ramp = (u16 *)state->rf_ramp; in dib0090_pwm_gain_reset()
1099 if (state->current_band == BAND_VHF) { in dib0090_pwm_gain_reset()
1100 if (state->identity.in_soc) { in dib0090_pwm_gain_reset()
1105 } else if (state->current_band == BAND_UHF) { in dib0090_pwm_gain_reset()
1106 if (state->identity.in_soc) { in dib0090_pwm_gain_reset()
1108 … if (state->identity.version == SOC_8090_P1G_11R1 || state->identity.version == SOC_8090_P1G_21R1) in dib0090_pwm_gain_reset()
1110 …else if (state->identity.version == SOC_7090_P1G_11R1 || state->identity.version == SOC_7090_P1G_2… in dib0090_pwm_gain_reset()
1116 dib0090_set_rframp_pwm(state, rf_ramp); in dib0090_pwm_gain_reset()
1117 dib0090_set_bbramp_pwm(state, bb_ramp); in dib0090_pwm_gain_reset()
1120 if (state->rf_ramp) in dib0090_pwm_gain_reset()
1122 state->rf_ramp[0], in dib0090_pwm_gain_reset()
1123 (state->current_band == BAND_CBAND) ? "CBAND" : "NOT CBAND", in dib0090_pwm_gain_reset()
1124 state->identity.version & 0x1f); in dib0090_pwm_gain_reset()
1126 if (rf_ramp && ((state->rf_ramp && state->rf_ramp[0] == 0) || in dib0090_pwm_gain_reset()
1127 (state->current_band == BAND_CBAND && in dib0090_pwm_gain_reset()
1128 (state->identity.version & 0x1f) <= P1D_E_F))) { in dib0090_pwm_gain_reset()
1134 dib0090_write_reg(state, 0x32, (en_pwm_rf_mux << 12) | (en_pwm_rf_mux << 11)); in dib0090_pwm_gain_reset()
1137 if (state->identity.version == SOC_7090_P1G_11R1 || state->identity.version == SOC_7090_P1G_21R1) in dib0090_pwm_gain_reset()
1138 dib0090_write_reg(state, 0x04, 3); in dib0090_pwm_gain_reset()
1140 dib0090_write_reg(state, 0x04, 1); in dib0090_pwm_gain_reset()
1141 dib0090_write_reg(state, 0x39, (1 << 10)); /* 0 gain by default */ in dib0090_pwm_gain_reset()
1148 struct dib0090_state *state = fe->tuner_priv; in dib0090_set_dc_servo() local
1150 dib0090_write_reg(state, 0x04, DC_servo_cutoff); in dib0090_set_dc_servo()
1154 static u32 dib0090_get_slow_adc_val(struct dib0090_state *state) in dib0090_get_slow_adc_val() argument
1156 u16 adc_val = dib0090_read_reg(state, 0x1d); in dib0090_get_slow_adc_val()
1157 if (state->identity.in_soc) in dib0090_get_slow_adc_val()
1164 struct dib0090_state *state = fe->tuner_priv; in dib0090_gain_control() local
1165 enum frontend_tune_state *tune_state = &state->tune_state; in dib0090_gain_control()
1173 state->agc_freeze = 0; in dib0090_gain_control()
1174 dib0090_write_reg(state, 0x04, 0x0); in dib0090_gain_control()
1177 if (state->current_band == BAND_SBAND) { in dib0090_gain_control()
1178 dib0090_set_rframp(state, rf_ramp_sband); in dib0090_gain_control()
1179 dib0090_set_bbramp(state, bb_ramp_boost); in dib0090_gain_control()
1183 if (state->current_band == BAND_VHF && !state->identity.p1g) { in dib0090_gain_control()
1184 dib0090_set_rframp(state, rf_ramp_pwm_vhf); in dib0090_gain_control()
1185 dib0090_set_bbramp(state, bb_ramp_pwm_normal); in dib0090_gain_control()
1189 if (state->current_band == BAND_CBAND && !state->identity.p1g) { in dib0090_gain_control()
1190 dib0090_set_rframp(state, rf_ramp_pwm_cband); in dib0090_gain_control()
1191 dib0090_set_bbramp(state, bb_ramp_pwm_normal); in dib0090_gain_control()
1194 …if ((state->current_band == BAND_CBAND || state->current_band == BAND_VHF) && state->identity.p1g)… in dib0090_gain_control()
1195 dib0090_set_rframp(state, rf_ramp_pwm_cband_7090p); in dib0090_gain_control()
1196 dib0090_set_bbramp(state, bb_ramp_pwm_normal_socs); in dib0090_gain_control()
1198 dib0090_set_rframp(state, rf_ramp_pwm_uhf); in dib0090_gain_control()
1199 dib0090_set_bbramp(state, bb_ramp_pwm_normal); in dib0090_gain_control()
1202 dib0090_write_reg(state, 0x32, 0); in dib0090_gain_control()
1203 dib0090_write_reg(state, 0x39, 0); in dib0090_gain_control()
1205 dib0090_wbd_target(state, state->current_rf); in dib0090_gain_control()
1207 state->rf_gain_limit = state->rf_ramp[0] << WBD_ALPHA; in dib0090_gain_control()
1208 state->current_gain = ((state->rf_ramp[0] + state->bb_ramp[0]) / 2) << GAIN_ALPHA; in dib0090_gain_control()
1211 } else if (!state->agc_freeze) { in dib0090_gain_control()
1215 wbd_val = dib0090_get_slow_adc_val(state); in dib0090_gain_control()
1223 wbd_val = dib0090_get_slow_adc_val(state); in dib0090_gain_control()
1224 wbd += dib0090_wbd_to_db(state, wbd_val); in dib0090_gain_control()
1227 wbd_error = state->wbd_target - wbd; in dib0090_gain_control()
1230 if (wbd_error < 0 && state->rf_gain_limit > 0 && !state->identity.p1g) { in dib0090_gain_control()
1233 u8 ltg2 = (state->rf_lt_def >> 10) & 0x7; in dib0090_gain_control()
1234 if (state->current_band == BAND_CBAND && ltg2) { in dib0090_gain_control()
1236 state->rf_lt_def &= ltg2 << 10; /* reduce in 3 steps from 7 to 0 */ in dib0090_gain_control()
1240 state->agc_step = 0; in dib0090_gain_control()
1245 adc = state->config->get_adc_power(fe); in dib0090_gain_control()
1250 if (state->fe->dtv_property_cache.delivery_system == STANDARD_DAB) in dib0090_gain_control()
1254 if (state->fe->dtv_property_cache.delivery_system == STANDARD_DVBT && in dib0090_gain_control()
1255 …(state->fe->dtv_property_cache.modulation == QAM_64 || state->fe->dtv_property_cache.modulation ==… in dib0090_gain_control()
1259 …if ((state->fe->dtv_property_cache.delivery_system == SYS_ISDBT) && (((state->fe->dtv_property_cac… in dib0090_gain_control()
1262 ((state->fe->dtv_property_cache.layer[0].modulation == in dib0090_gain_control()
1264 || (state->fe->dtv_property_cache. in dib0090_gain_control()
1267 ((state->fe->dtv_property_cache.layer[1].segment_count > in dib0090_gain_control()
1270 ((state->fe->dtv_property_cache.layer[1].modulation == in dib0090_gain_control()
1272 || (state->fe->dtv_property_cache. in dib0090_gain_control()
1275 ((state->fe->dtv_property_cache.layer[2].segment_count > in dib0090_gain_control()
1278 ((state->fe->dtv_property_cache.layer[2].modulation == in dib0090_gain_control()
1280 || (state->fe->dtv_property_cache. in dib0090_gain_control()
1288 if (abs(adc_error) < 50 || state->agc_step++ > 5) { in dib0090_gain_control()
1291 if (state->fe->dtv_property_cache.delivery_system == STANDARD_DAB) { in dib0090_gain_control()
1292 …dib0090_write_reg(state, 0x02, (1 << 15) | (15 << 11) | (31 << 6) | (63)); /* cap value = 63 : nar… in dib0090_gain_control()
1293 dib0090_write_reg(state, 0x04, 0x0); in dib0090_gain_control()
1297 dib0090_write_reg(state, 0x02, (1 << 15) | (3 << 11) | (6 << 6) | (32)); in dib0090_gain_control()
1298 …dib0090_write_reg(state, 0x04, 0x01); /*0 = 1KHz ; 1 = 150Hz ; 2 = 50Hz ; 3 = 50KHz ; 4 = servo fa… in dib0090_gain_control()
1313 (u32) state->rf_gain_limit >> WBD_ALPHA, (s32) 200 + adc - (state->current_gain >> GAIN_ALPHA)); in dib0090_gain_control()
1318 if (!state->agc_freeze) in dib0090_gain_control()
1319 dib0090_gain_apply(state, adc_error, wbd_error, apply_gain_immediatly); in dib0090_gain_control()
1327 struct dib0090_state *state = fe->tuner_priv; in dib0090_get_current_gain() local
1329 *rf = state->gain[0]; in dib0090_get_current_gain()
1331 *bb = state->gain[1]; in dib0090_get_current_gain()
1333 *rf_gain_limit = state->rf_gain_limit; in dib0090_get_current_gain()
1335 *rflt = (state->rf_lt_def >> 10) & 0x7; in dib0090_get_current_gain()
1342 struct dib0090_state *state = fe->tuner_priv; in dib0090_get_wbd_target() local
1343 u32 f_MHz = state->fe->dtv_property_cache.frequency / 1000000; in dib0090_get_wbd_target()
1344 s32 current_temp = state->temperature; in dib0090_get_wbd_target()
1346 const struct dib0090_wbd_slope *wbd = state->current_wbd_table; in dib0090_get_wbd_target()
1358 state->wbdmux &= ~(7 << 13); in dib0090_get_wbd_target()
1360 state->wbdmux |= (wbd->wbd_gain << 13); in dib0090_get_wbd_target()
1362 state->wbdmux |= (4 << 13); in dib0090_get_wbd_target()
1364 dib0090_write_reg(state, 0x10, state->wbdmux); in dib0090_get_wbd_target()
1371 state->wbd_target = dib0090_wbd_to_db(state, state->wbd_offset + wbd_tcold); in dib0090_get_wbd_target()
1372 dprintk("wbd-target: %d dB\n", (u32) state->wbd_target); in dib0090_get_wbd_target()
1375 return state->wbd_offset + wbd_tcold; in dib0090_get_wbd_target()
1381 struct dib0090_state *state = fe->tuner_priv; in dib0090_get_wbd_offset() local
1382 return state->wbd_offset; in dib0090_get_wbd_offset()
1388 struct dib0090_state *state = fe->tuner_priv; in dib0090_set_switch() local
1390 dib0090_write_reg(state, 0x0b, (dib0090_read_reg(state, 0x0b) & 0xfff8) in dib0090_set_switch()
1399 struct dib0090_state *state = fe->tuner_priv; in dib0090_set_vga() local
1401 dib0090_write_reg(state, 0x09, (dib0090_read_reg(state, 0x09) & 0x7fff) in dib0090_set_vga()
1409 struct dib0090_state *state = fe->tuner_priv; in dib0090_update_rframp_7090() local
1411 if ((!state->identity.p1g) || (!state->identity.in_soc) in dib0090_update_rframp_7090()
1412 || ((state->identity.version != SOC_7090_P1G_21R1) in dib0090_update_rframp_7090()
1413 && (state->identity.version != SOC_7090_P1G_11R1))) { in dib0090_update_rframp_7090()
1419 state->rf_ramp = (const u16 *)&rf_ramp_pwm_cband_7090e_sensitivity; in dib0090_update_rframp_7090()
1421 state->rf_ramp = (const u16 *)&rf_ramp_pwm_cband_7090e_aci; in dib0090_update_rframp_7090()
1491 static void dib0090_set_default_config(struct dib0090_state *state, const u16 * n) in dib0090_set_default_config() argument
1499 dib0090_write_reg(state, r, pgm_read_word(n++)); in dib0090_set_default_config()
1513 static void dib0090_set_EFUSE(struct dib0090_state *state) in dib0090_set_EFUSE() argument
1519 e2 = dib0090_read_reg(state, 0x26); in dib0090_set_EFUSE()
1520 e4 = dib0090_read_reg(state, 0x28); in dib0090_set_EFUSE()
1522 if ((state->identity.version == P1D_E_F) || in dib0090_set_EFUSE()
1523 (state->identity.version == P1G) || (e2 == 0xffff)) { in dib0090_set_EFUSE()
1525 dib0090_write_reg(state, 0x22, 0x10); in dib0090_set_EFUSE()
1526 cal = (dib0090_read_reg(state, 0x22) >> 6) & 0x3ff; in dib0090_set_EFUSE()
1551 dib0090_write_reg(state, 0x13, (h << 10)); in dib0090_set_EFUSE()
1553 dib0090_write_reg(state, 0x2, e2); /* Load the BB_2 */ in dib0090_set_EFUSE()
1559 struct dib0090_state *state = fe->tuner_priv; in dib0090_reset() local
1561 dib0090_reset_digital(fe, state->config); in dib0090_reset()
1566 if (!(state->identity.version & 0x1)) /* it is P1B - reset is already done */ in dib0090_reset()
1570 if (!state->identity.in_soc) { in dib0090_reset()
1571 if ((dib0090_read_reg(state, 0x1a) >> 5) & 0x2) in dib0090_reset()
1572 dib0090_write_reg(state, 0x1b, (EN_IQADC | EN_BB | EN_BIAS | EN_DIGCLK | EN_PLL | EN_CRYSTAL)); in dib0090_reset()
1574 dib0090_write_reg(state, 0x1b, (EN_DIGCLK | EN_PLL | EN_CRYSTAL)); in dib0090_reset()
1577 dib0090_set_default_config(state, dib0090_defaults); in dib0090_reset()
1579 if (state->identity.in_soc) in dib0090_reset()
1580 dib0090_write_reg(state, 0x18, 0x2910); /* charge pump current = 0 */ in dib0090_reset()
1582 if (state->identity.p1g) in dib0090_reset()
1583 dib0090_set_default_config(state, dib0090_p1g_additionnal_defaults); in dib0090_reset()
1586 if (((state->identity.version & 0x1f) >= P1D_E_F) || (state->identity.in_soc)) in dib0090_reset()
1587 dib0090_set_EFUSE(state); in dib0090_reset()
1590 if (state->config->force_crystal_mode != 0) in dib0090_reset()
1591 dib0090_write_reg(state, 0x14, in dib0090_reset()
1592 state->config->force_crystal_mode & 3); in dib0090_reset()
1593 else if (state->config->io.clock_khz >= 24000) in dib0090_reset()
1594 dib0090_write_reg(state, 0x14, 1); in dib0090_reset()
1596 dib0090_write_reg(state, 0x14, 2); in dib0090_reset()
1597 dprintk("Pll lock : %d\n", (dib0090_read_reg(state, 0x1a) >> 11) & 0x1); in dib0090_reset()
1599state->calibrate = DC_CAL | WBD_CAL | TEMP_CAL; /* enable iq-offset-calibration and wbd-calibratio… in dib0090_reset()
1606 static int dib0090_get_offset(struct dib0090_state *state, enum frontend_tune_state *tune_state) in dib0090_get_offset() argument
1613 dib0090_write_reg(state, 0x1f, 0x7); in dib0090_get_offset()
1618 state->adc_diff = dib0090_read_reg(state, 0x1d); in dib0090_get_offset()
1621 dib0090_write_reg(state, 0x1f, 0x4); in dib0090_get_offset()
1626 state->adc_diff -= dib0090_read_reg(state, 0x1d); in dib0090_get_offset()
1667 static void dib0090_set_trim(struct dib0090_state *state) in dib0090_set_trim() argument
1671 if (state->dc->addr == 0x07) in dib0090_set_trim()
1672 val = &state->bb7; in dib0090_set_trim()
1674 val = &state->bb6; in dib0090_set_trim()
1676 *val &= ~(0x1f << state->dc->offset); in dib0090_set_trim()
1677 *val |= state->step << state->dc->offset; in dib0090_set_trim()
1679 dib0090_write_reg(state, state->dc->addr, *val); in dib0090_set_trim()
1682 static int dib0090_dc_offset_calibration(struct dib0090_state *state, enum frontend_tune_state *tun… in dib0090_dc_offset_calibration() argument
1692 state->bb6 = 0; in dib0090_dc_offset_calibration()
1693 state->bb7 = 0x040d; in dib0090_dc_offset_calibration()
1696 reg = dib0090_read_reg(state, 0x24) & 0x0ffb; /* shutdown lna and lo */ in dib0090_dc_offset_calibration()
1697 dib0090_write_reg(state, 0x24, reg); in dib0090_dc_offset_calibration()
1699 state->wbdmux = dib0090_read_reg(state, 0x10); in dib0090_dc_offset_calibration()
1700 dib0090_write_reg(state, 0x10, (state->wbdmux & ~(0xff << 3)) | (0x7 << 3) | 0x3); in dib0090_dc_offset_calibration()
1701 dib0090_write_reg(state, 0x23, dib0090_read_reg(state, 0x23) & ~(1 << 14)); in dib0090_dc_offset_calibration()
1703 state->dc = dc_table; in dib0090_dc_offset_calibration()
1705 if (state->identity.p1g) in dib0090_dc_offset_calibration()
1706 state->dc = dc_p1g_table; in dib0090_dc_offset_calibration()
1711 (state->dc->i == 1) ? "I" : "Q"); in dib0090_dc_offset_calibration()
1712 dib0090_write_reg(state, 0x01, state->dc->bb1); in dib0090_dc_offset_calibration()
1713 dib0090_write_reg(state, 0x07, state->bb7 | (state->dc->i << 7)); in dib0090_dc_offset_calibration()
1715 state->step = 0; in dib0090_dc_offset_calibration()
1716 state->min_adc_diff = 1023; in dib0090_dc_offset_calibration()
1722 dib0090_set_trim(state); in dib0090_dc_offset_calibration()
1729 ret = dib0090_get_offset(state, tune_state); in dib0090_dc_offset_calibration()
1733 dprintk("adc_diff = %d, current step= %d\n", (u32) state->adc_diff, state->step); in dib0090_dc_offset_calibration()
1734 if (state->step == 0 && state->adc_diff < 0) { in dib0090_dc_offset_calibration()
1735 state->min_adc_diff = -1023; in dib0090_dc_offset_calibration()
1739 …adc_diff = %d, min_adc_diff = %d current_step = %d\n", state->adc_diff, state->min_adc_diff, state in dib0090_dc_offset_calibration()
1742 if (state->step == 0) { in dib0090_dc_offset_calibration()
1743 if (state->dc->pga && state->adc_diff < 0) in dib0090_dc_offset_calibration()
1744 state->step = 0x10; in dib0090_dc_offset_calibration()
1745 if (state->dc->pga == 0 && state->adc_diff > 0) in dib0090_dc_offset_calibration()
1746 state->step = 0x10; in dib0090_dc_offset_calibration()
1750 if ((state->adc_diff & 0x8000) == (state->min_adc_diff & 0x8000) && steps(state->step) < 15) { in dib0090_dc_offset_calibration()
1752 state->step++; in dib0090_dc_offset_calibration()
1753 state->min_adc_diff = state->adc_diff; in dib0090_dc_offset_calibration()
1757 if (abs(state->adc_diff) > abs(state->min_adc_diff)) { in dib0090_dc_offset_calibration()
1758 …dc_diff N = %d > adc_diff step N-1 = %d, Come back one step\n", state->adc_diff, state->min_adc_d… in dib0090_dc_offset_calibration()
1759 state->step--; in dib0090_dc_offset_calibration()
1762 dib0090_set_trim(state); in dib0090_dc_offset_calibration()
1763 …k("BB Offset Cal, BBreg=%hd,Offset=%hd,Value Set=%hd\n", state->dc->addr, state->adc_diff, state->… in dib0090_dc_offset_calibration()
1765 state->dc++; in dib0090_dc_offset_calibration()
1766 if (state->dc->addr == 0) /* done */ in dib0090_dc_offset_calibration()
1775 dib0090_write_reg(state, 0x07, state->bb7 & ~0x0008); in dib0090_dc_offset_calibration()
1776 dib0090_write_reg(state, 0x1f, 0x7); in dib0090_dc_offset_calibration()
1778 state->calibrate &= ~DC_CAL; in dib0090_dc_offset_calibration()
1785 static int dib0090_wbd_calibration(struct dib0090_state *state, enum frontend_tune_state *tune_stat… in dib0090_wbd_calibration() argument
1788 const struct dib0090_wbd_slope *wbd = state->current_wbd_table; in dib0090_wbd_calibration()
1792 while (state->current_rf / 1000 > wbd->max_freq) in dib0090_wbd_calibration()
1799 if ((state->current_band == BAND_LBAND) || (state->current_band == BAND_SBAND)) in dib0090_wbd_calibration()
1804 if (wbd_gain == state->wbd_calibration_gain) { /* the WBD calibration has already been done */ in dib0090_wbd_calibration()
1806 state->calibrate &= ~WBD_CAL; in dib0090_wbd_calibration()
1810 dib0090_write_reg(state, 0x10, 0x1b81 | (1 << 10) | (wbd_gain << 13) | (1 << 3)); in dib0090_wbd_calibration()
1812 dib0090_write_reg(state, 0x24, ((EN_UHF & 0x0fff) | (1 << 1))); in dib0090_wbd_calibration()
1814 state->wbd_calibration_gain = wbd_gain; in dib0090_wbd_calibration()
1818 state->wbd_offset = dib0090_get_slow_adc_val(state); in dib0090_wbd_calibration()
1819 dprintk("WBD calibration offset = %d\n", state->wbd_offset); in dib0090_wbd_calibration()
1821 state->calibrate &= ~WBD_CAL; in dib0090_wbd_calibration()
1830 static void dib0090_set_bandwidth(struct dib0090_state *state) in dib0090_set_bandwidth() argument
1834 if (state->fe->dtv_property_cache.bandwidth_hz / 1000 <= 5000) in dib0090_set_bandwidth()
1836 else if (state->fe->dtv_property_cache.bandwidth_hz / 1000 <= 6000) in dib0090_set_bandwidth()
1838 else if (state->fe->dtv_property_cache.bandwidth_hz / 1000 <= 7000) in dib0090_set_bandwidth()
1843 state->bb_1_def &= 0x3fff; in dib0090_set_bandwidth()
1844 state->bb_1_def |= tmp; in dib0090_set_bandwidth()
1846 dib0090_write_reg(state, 0x01, state->bb_1_def); /* be sure that we have the right bb-filter */ in dib0090_set_bandwidth()
1848 …dib0090_write_reg(state, 0x03, 0x6008); /* = 0x6008 : vcm3_trim = 1 ; filter2_gm1_trim = 8 ; filte… in dib0090_set_bandwidth()
1849 …dib0090_write_reg(state, 0x04, 0x1); /* 0 = 1KHz ; 1 = 50Hz ; 2 = 150Hz ; 3 = 50KHz ; 4 = servo fa… in dib0090_set_bandwidth()
1850 if (state->identity.in_soc) { in dib0090_set_bandwidth()
1851 …dib0090_write_reg(state, 0x05, 0x9bcf); /* attenuator_ibias_tri = 2 ; input_stage_ibias_tr = 1 ; n… in dib0090_set_bandwidth()
1853 dib0090_write_reg(state, 0x02, (5 << 11) | (8 << 6) | (22 & 0x3f)); /* 22 = cap_value */ in dib0090_set_bandwidth()
1854 …dib0090_write_reg(state, 0x05, 0xabcd); /* = 0xabcd : attenuator_ibias_tri = 2 ; input_stage_ibias… in dib0090_set_bandwidth()
2052 struct dib0090_state *state = fe->tuner_priv; in dib0090_update_tuning_table_7090() local
2061 if ((!state->identity.p1g) || (!state->identity.in_soc) in dib0090_update_tuning_table_7090()
2062 || ((state->identity.version != SOC_7090_P1G_21R1) in dib0090_update_tuning_table_7090()
2063 && (state->identity.version != SOC_7090_P1G_11R1))) { in dib0090_update_tuning_table_7090()
2073 while (state->rf_request > tune->max_freq) in dib0090_update_tuning_table_7090()
2076 dib0090_write_reg(state, 0x09, (dib0090_read_reg(state, 0x09) & 0x8000) in dib0090_update_tuning_table_7090()
2078 dib0090_write_reg(state, 0x0b, (dib0090_read_reg(state, 0x0b) & 0xf83f) in dib0090_update_tuning_table_7090()
2084 static int dib0090_captrim_search(struct dib0090_state *state, enum frontend_tune_state *tune_state) in dib0090_captrim_search() argument
2094 if (state->identity.version == SOC_8090_P1G_11R1 || state->identity.version == SOC_8090_P1G_21R1) in dib0090_captrim_search()
2100 dib0090_write_reg(state, 0x10, 0x2B1); in dib0090_captrim_search()
2101 dib0090_write_reg(state, 0x1e, 0x0032); in dib0090_captrim_search()
2103 if (!state->tuner_is_tuned) { in dib0090_captrim_search()
2105 if (!state->identity.p1g || force_soft_search) in dib0090_captrim_search()
2106 state->step = state->captrim = state->fcaptrim = 64; in dib0090_captrim_search()
2108 state->current_rf = state->rf_request; in dib0090_captrim_search()
2110 if (!state->identity.p1g || force_soft_search) { in dib0090_captrim_search()
2112 state->step = 4; in dib0090_captrim_search()
2113 state->captrim = state->fcaptrim = dib0090_read_reg(state, 0x18) & 0x7f; in dib0090_captrim_search()
2116 state->adc_diff = 3000; in dib0090_captrim_search()
2120 if (state->identity.p1g && !force_soft_search) { in dib0090_captrim_search()
2123 dib0090_write_reg(state, 0x40, (3 << 7) | (ratio << 2) | (1 << 1) | 1); in dib0090_captrim_search()
2124 dib0090_read_reg(state, 0x40); in dib0090_captrim_search()
2127 state->step /= 2; in dib0090_captrim_search()
2128 dib0090_write_reg(state, 0x18, lo4 | state->captrim); in dib0090_captrim_search()
2130 if (state->identity.in_soc) in dib0090_captrim_search()
2136 if (state->identity.p1g && !force_soft_search) { in dib0090_captrim_search()
2137 dib0090_write_reg(state, 0x40, 0x18c | (0 << 1) | 0); in dib0090_captrim_search()
2138 dib0090_read_reg(state, 0x40); in dib0090_captrim_search()
2140 state->fcaptrim = dib0090_read_reg(state, 0x18) & 0x7F; in dib0090_captrim_search()
2141 dprintk("***Final Captrim= 0x%x\n", state->fcaptrim); in dib0090_captrim_search()
2146 adc = dib0090_get_slow_adc_val(state); in dib0090_captrim_search()
2147 …dprintk("CAPTRIM=%d; ADC = %d (ADC) & %dmV\n", (u32) state->captrim, (u32) adc, (u32) (adc) * (u32… in dib0090_captrim_search()
2149 …if (state->rest == 0 || state->identity.in_soc) { /* Just for 8090P SOCS where auto captrim HW bug… in dib0090_captrim_search()
2162 if (adc < state->adc_diff) { in dib0090_captrim_search()
2163 …printk("CAPTRIM=%d is closer to target (%d/%d)\n", (u32) state->captrim, (u32) adc, (u32) state->a… in dib0090_captrim_search()
2164 state->adc_diff = adc; in dib0090_captrim_search()
2165 state->fcaptrim = state->captrim; in dib0090_captrim_search()
2168 state->captrim += step_sign * state->step; in dib0090_captrim_search()
2169 if (state->step >= 1) in dib0090_captrim_search()
2178 dib0090_write_reg(state, 0x18, lo4 | state->fcaptrim); in dib0090_captrim_search()
2183 state->calibrate &= ~CAPTRIM_CAL; in dib0090_captrim_search()
2190 static int dib0090_get_temperature(struct dib0090_state *state, enum frontend_tune_state *tune_stat… in dib0090_get_temperature() argument
2197 state->wbdmux = dib0090_read_reg(state, 0x10); in dib0090_get_temperature()
2198 dib0090_write_reg(state, 0x10, (state->wbdmux & ~(0xff << 3)) | (0x8 << 3)); in dib0090_get_temperature()
2200 state->bias = dib0090_read_reg(state, 0x13); in dib0090_get_temperature()
2201 dib0090_write_reg(state, 0x13, state->bias | (0x3 << 8)); in dib0090_get_temperature()
2208 state->adc_diff = dib0090_get_slow_adc_val(state); in dib0090_get_temperature()
2209 dib0090_write_reg(state, 0x13, (state->bias & ~(0x3 << 8)) | (0x2 << 8)); in dib0090_get_temperature()
2214 val = dib0090_get_slow_adc_val(state); in dib0090_get_temperature()
2215 state->temperature = ((s16) ((val - state->adc_diff) * 180) >> 8) + 55; in dib0090_get_temperature()
2217 dprintk("temperature: %d C\n", state->temperature - 30); in dib0090_get_temperature()
2223 dib0090_write_reg(state, 0x13, state->bias); in dib0090_get_temperature()
2224 dib0090_write_reg(state, 0x10, state->wbdmux); /* write back original WBDMUX */ in dib0090_get_temperature()
2227 state->calibrate &= ~TEMP_CAL; in dib0090_get_temperature()
2228 if (state->config->analog_output == 0) in dib0090_get_temperature()
2229 dib0090_write_reg(state, 0x23, dib0090_read_reg(state, 0x23) | (1 << 14)); in dib0090_get_temperature()
2243 struct dib0090_state *state = fe->tuner_priv; in dib0090_tune() local
2244 const struct dib0090_tuning *tune = state->current_tune_table_index; in dib0090_tune()
2245 const struct dib0090_pll *pll = state->current_pll_table_index; in dib0090_tune()
2246 enum frontend_tune_state *tune_state = &state->tune_state; in dib0090_tune()
2261 if (state->calibrate & (DC_CAL | TEMP_CAL | WBD_CAL)) in dib0090_tune()
2262 dib0090_write_reg(state, 0x23, dib0090_read_reg(state, 0x23) & ~(1 << 14)); in dib0090_tune()
2265 if (state->config->analog_output == 0) in dib0090_tune()
2266 dib0090_write_reg(state, 0x23, dib0090_read_reg(state, 0x23) | (1 << 14)); in dib0090_tune()
2269 if (state->calibrate & DC_CAL) in dib0090_tune()
2270 return dib0090_dc_offset_calibration(state, tune_state); in dib0090_tune()
2271 else if (state->calibrate & WBD_CAL) { in dib0090_tune()
2272 if (state->current_rf == 0) in dib0090_tune()
2273 state->current_rf = state->fe->dtv_property_cache.frequency / 1000; in dib0090_tune()
2274 return dib0090_wbd_calibration(state, tune_state); in dib0090_tune()
2275 } else if (state->calibrate & TEMP_CAL) in dib0090_tune()
2276 return dib0090_get_temperature(state, tune_state); in dib0090_tune()
2277 else if (state->calibrate & CAPTRIM_CAL) in dib0090_tune()
2278 return dib0090_captrim_search(state, tune_state); in dib0090_tune()
2282 if (state->config->use_pwm_agc && state->identity.in_soc) { in dib0090_tune()
2283 tmp = dib0090_read_reg(state, 0x39); in dib0090_tune()
2285 dib0090_write_reg(state, 0x39, tmp & ~(1 << 10)); in dib0090_tune()
2288 state->current_band = (u8) BAND_OF_FREQUENCY(state->fe->dtv_property_cache.frequency / 1000); in dib0090_tune()
2289 state->rf_request = in dib0090_tune()
2290 state->fe->dtv_property_cache.frequency / 1000 + (state->current_band == in dib0090_tune()
2291 BAND_UHF ? state->config->freq_offset_khz_uhf : state->config-> in dib0090_tune()
2295 …if ((state->fe->dtv_property_cache.delivery_system == SYS_ISDBT && state->fe->dtv_property_cache.i… in dib0090_tune()
2296 && state->fe->dtv_property_cache.isdbt_partial_reception == 0)) { in dib0090_tune()
2297 const struct dib0090_low_if_offset_table *LUT_offset = state->config->low_if; in dib0090_tune()
2303 if (((state->rf_request > (LUT_offset->RF_freq - margin_khz)) in dib0090_tune()
2304 && (state->rf_request < (LUT_offset->RF_freq + margin_khz))) in dib0090_tune()
2305 && LUT_offset->std == state->fe->dtv_property_cache.delivery_system) { in dib0090_tune()
2306 state->rf_request += LUT_offset->offset_khz; in dib0090_tune()
2315 state->rf_request += 400; in dib0090_tune()
2317 …if (state->current_rf != state->rf_request || (state->current_standard != state->fe->dtv_property_… in dib0090_tune()
2318 state->tuner_is_tuned = 0; in dib0090_tune()
2319 state->current_rf = 0; in dib0090_tune()
2320 state->current_standard = 0; in dib0090_tune()
2323 if (state->identity.p1g) in dib0090_tune()
2326 tmp = (state->identity.version >> 5) & 0x7; in dib0090_tune()
2328 if (state->identity.in_soc) { in dib0090_tune()
2329 if (state->config->force_cband_input) { /* Use the CBAND input for all band */ in dib0090_tune()
2330 …if (state->current_band & BAND_CBAND || state->current_band & BAND_FM || state->current_band & BAN… in dib0090_tune()
2331 || state->current_band & BAND_UHF) { in dib0090_tune()
2332 state->current_band = BAND_CBAND; in dib0090_tune()
2333 if (state->config->is_dib7090e) in dib0090_tune()
2339 …if (state->current_band & BAND_CBAND || state->current_band & BAND_FM || state->current_band & BAN… in dib0090_tune()
2340 state->current_band = BAND_CBAND; in dib0090_tune()
2341 if (state->config->is_dib7090e) in dib0090_tune()
2350 …if (state->current_band == BAND_FM || state->current_band == BAND_CBAND || state->current_band == … in dib0090_tune()
2351 state->current_band = BAND_CBAND; /* Force CBAND */ in dib0090_tune()
2354 if (state->identity.p1g) in dib0090_tune()
2360 if (state->identity.p1g) in dib0090_tune()
2364 while (state->rf_request > tune->max_freq) in dib0090_tune()
2366 while (state->rf_request > pll->max_freq) in dib0090_tune()
2369 state->current_tune_table_index = tune; in dib0090_tune()
2370 state->current_pll_table_index = pll; in dib0090_tune()
2372 dib0090_write_reg(state, 0x0b, 0xb800 | (tune->switch_trim)); in dib0090_tune()
2374 VCOF_kHz = (pll->hfdiv * state->rf_request) * 2; in dib0090_tune()
2376 FREF = state->config->io.clock_khz; in dib0090_tune()
2377 if (state->config->fref_clock_ratio != 0) in dib0090_tune()
2378 FREF /= state->config->fref_clock_ratio; in dib0090_tune()
2393 state->rest = Rest; in dib0090_tune()
2407 else if (state->config->analog_output) in dib0090_tune()
2413 if (state->identity.p1g) { /* Bias is done automatically in P1G */ in dib0090_tune()
2414 if (state->identity.in_soc) { in dib0090_tune()
2415 if (state->identity.version == SOC_8090_P1G_11R1) in dib0090_tune()
2425 if (!state->config->io.pll_int_loop_filt) { in dib0090_tune()
2426 if (state->identity.in_soc) in dib0090_tune()
2428 else if (state->identity.p1g || (Rest == 0)) in dib0090_tune()
2433 lo6 = (state->config->io.pll_int_loop_filt << 3); in dib0090_tune()
2441 dib0090_write_reg(state, 0x15, (u16) FBDiv); in dib0090_tune()
2442 if (state->config->fref_clock_ratio != 0) in dib0090_tune()
2443 dib0090_write_reg(state, 0x16, (Den << 8) | state->config->fref_clock_ratio); in dib0090_tune()
2445 dib0090_write_reg(state, 0x16, (Den << 8) | 1); in dib0090_tune()
2446 dib0090_write_reg(state, 0x17, (u16) Rest); in dib0090_tune()
2447 dib0090_write_reg(state, 0x19, lo5); in dib0090_tune()
2448 dib0090_write_reg(state, 0x1c, lo6); in dib0090_tune()
2451 if (state->config->analog_output) in dib0090_tune()
2454 dib0090_write_reg(state, 0x24, lo6 | EN_LO | state->config->use_pwm_agc * EN_CRYSTAL); in dib0090_tune()
2458 state->current_rf = state->rf_request; in dib0090_tune()
2459 state->current_standard = state->fe->dtv_property_cache.delivery_system; in dib0090_tune()
2462 state->calibrate = CAPTRIM_CAL; /* captrim serach now */ in dib0090_tune()
2466 const struct dib0090_wbd_slope *wbd = state->current_wbd_table; in dib0090_tune()
2468 while (state->current_rf / 1000 > wbd->max_freq) in dib0090_tune()
2471 dib0090_write_reg(state, 0x1e, 0x07ff); in dib0090_tune()
2472 dprintk("Final Captrim: %d\n", (u32) state->fcaptrim); in dib0090_tune()
2475 …kHz: %d ((%d*%d) << 1))\n", (u32) ((pll->hfdiv * state->rf_request) * 2), (u32) pll->hfdiv, (u32) in dib0090_tune()
2476 dprintk("REFDIV: %d, FREF: %d\n", (u32) 1, (u32) state->config->io.clock_khz); in dib0090_tune()
2477 …printk("FBDIV: %d, Rest: %d\n", (u32) dib0090_read_reg(state, 0x15), (u32) dib0090_read_reg(state,… in dib0090_tune()
2478 …k("Num: %d, Den: %d, SD: %d\n", (u32) dib0090_read_reg(state, 0x17), (u32) (dib0090_read_reg(state in dib0090_tune()
2479 (u32) dib0090_read_reg(state, 0x1c) & 0x3); in dib0090_tune()
2488 state->wbdmux = (c << 13) | (i << 11) | (WBD | (state->config->use_pwm_agc << 1)); in dib0090_tune()
2489 dib0090_write_reg(state, 0x10, state->wbdmux); in dib0090_tune()
2491 if ((tune->tuner_enable == EN_CAB) && state->identity.p1g) { in dib0090_tune()
2493 dib0090_write_reg(state, 0x09, tune->lna_bias); in dib0090_tune()
2494 dib0090_write_reg(state, 0x0b, 0xb800 | (tune->lna_tune << 6) | (tune->switch_trim)); in dib0090_tune()
2496 dib0090_write_reg(state, 0x09, (tune->lna_tune << 5) | tune->lna_bias); in dib0090_tune()
2498 dib0090_write_reg(state, 0x0c, tune->v2i); in dib0090_tune()
2499 dib0090_write_reg(state, 0x0d, tune->mix); in dib0090_tune()
2500 dib0090_write_reg(state, 0x0e, tune->load); in dib0090_tune()
2505 state->rf_lt_def = 0x7c00; in dib0090_tune()
2507 dib0090_set_bandwidth(state); in dib0090_tune()
2508 state->tuner_is_tuned = 1; in dib0090_tune()
2510 state->calibrate |= WBD_CAL; in dib0090_tune()
2511 state->calibrate |= TEMP_CAL; in dib0090_tune()
2526 struct dib0090_state *state = fe->tuner_priv; in dib0090_get_tune_state() local
2528 return state->tune_state; in dib0090_get_tune_state()
2535 struct dib0090_state *state = fe->tuner_priv; in dib0090_set_tune_state() local
2537 state->tune_state = tune_state; in dib0090_set_tune_state()
2545 struct dib0090_state *state = fe->tuner_priv; in dib0090_get_frequency() local
2547 *frequency = 1000 * state->current_rf; in dib0090_get_frequency()
2553 struct dib0090_state *state = fe->tuner_priv; in dib0090_set_params() local
2556 state->tune_state = CT_TUNER_START; in dib0090_set_params()
2573 } while (state->tune_state != CT_TUNER_STOP); in dib0090_set_params()