Lines Matching full:state
692 static int stv090x_read_reg(struct stv090x_state *state, unsigned int reg) in stv090x_read_reg() argument
694 const struct stv090x_config *config = state->config; in stv090x_read_reg()
705 ret = i2c_transfer(state->i2c, msg, 2); in stv090x_read_reg()
714 if (unlikely(*state->verbose >= FE_DEBUGREG)) in stv090x_read_reg()
721 static int stv090x_write_regs(struct stv090x_state *state, unsigned int reg, u8 *data, u32 count) in stv090x_write_regs() argument
723 const struct stv090x_config *config = state->config; in stv090x_write_regs()
732 if (unlikely(*state->verbose >= FE_DEBUGREG)) { in stv090x_write_regs()
741 ret = i2c_transfer(state->i2c, &i2c_msg, 1); in stv090x_write_regs()
752 static int stv090x_write_reg(struct stv090x_state *state, unsigned int reg, u8 data) in stv090x_write_reg() argument
754 return stv090x_write_regs(state, reg, &data, 1); in stv090x_write_reg()
757 static int stv090x_i2c_gate_ctrl(struct stv090x_state *state, int enable) in stv090x_i2c_gate_ctrl() argument
762 * NOTE! A lock is used as a FSM to control the state in which in stv090x_i2c_gate_ctrl()
771 if (state->config->tuner_i2c_lock) in stv090x_i2c_gate_ctrl()
772 state->config->tuner_i2c_lock(&state->frontend, 1); in stv090x_i2c_gate_ctrl()
774 mutex_lock(&state->internal->tuner_lock); in stv090x_i2c_gate_ctrl()
777 reg = STV090x_READ_DEMOD(state, I2CRPT); in stv090x_i2c_gate_ctrl()
781 if (STV090x_WRITE_DEMOD(state, I2CRPT, reg) < 0) in stv090x_i2c_gate_ctrl()
787 if ((STV090x_WRITE_DEMOD(state, I2CRPT, reg)) < 0) in stv090x_i2c_gate_ctrl()
792 if (state->config->tuner_i2c_lock) in stv090x_i2c_gate_ctrl()
793 state->config->tuner_i2c_lock(&state->frontend, 0); in stv090x_i2c_gate_ctrl()
795 mutex_unlock(&state->internal->tuner_lock); in stv090x_i2c_gate_ctrl()
801 if (state->config->tuner_i2c_lock) in stv090x_i2c_gate_ctrl()
802 state->config->tuner_i2c_lock(&state->frontend, 0); in stv090x_i2c_gate_ctrl()
804 mutex_unlock(&state->internal->tuner_lock); in stv090x_i2c_gate_ctrl()
808 static void stv090x_get_lock_tmg(struct stv090x_state *state) in stv090x_get_lock_tmg() argument
810 switch (state->algo) { in stv090x_get_lock_tmg()
813 if (state->srate <= 1500000) { /*10Msps< SR <=15Msps*/ in stv090x_get_lock_tmg()
814 state->DemodTimeout = 1500; in stv090x_get_lock_tmg()
815 state->FecTimeout = 400; in stv090x_get_lock_tmg()
816 } else if (state->srate <= 5000000) { /*10Msps< SR <=15Msps*/ in stv090x_get_lock_tmg()
817 state->DemodTimeout = 1000; in stv090x_get_lock_tmg()
818 state->FecTimeout = 300; in stv090x_get_lock_tmg()
820 state->DemodTimeout = 700; in stv090x_get_lock_tmg()
821 state->FecTimeout = 100; in stv090x_get_lock_tmg()
829 if (state->srate <= 1000000) { /*SR <=1Msps*/ in stv090x_get_lock_tmg()
830 state->DemodTimeout = 4500; in stv090x_get_lock_tmg()
831 state->FecTimeout = 1700; in stv090x_get_lock_tmg()
832 } else if (state->srate <= 2000000) { /*1Msps < SR <= 2Msps */ in stv090x_get_lock_tmg()
833 state->DemodTimeout = 2500; in stv090x_get_lock_tmg()
834 state->FecTimeout = 1100; in stv090x_get_lock_tmg()
835 } else if (state->srate <= 5000000) { /*2Msps < SR <= 5Msps */ in stv090x_get_lock_tmg()
836 state->DemodTimeout = 1000; in stv090x_get_lock_tmg()
837 state->FecTimeout = 550; in stv090x_get_lock_tmg()
838 } else if (state->srate <= 10000000) { /*5Msps < SR <= 10Msps */ in stv090x_get_lock_tmg()
839 state->DemodTimeout = 700; in stv090x_get_lock_tmg()
840 state->FecTimeout = 250; in stv090x_get_lock_tmg()
841 } else if (state->srate <= 20000000) { /*10Msps < SR <= 20Msps */ in stv090x_get_lock_tmg()
842 state->DemodTimeout = 400; in stv090x_get_lock_tmg()
843 state->FecTimeout = 130; in stv090x_get_lock_tmg()
845 state->DemodTimeout = 300; in stv090x_get_lock_tmg()
846 state->FecTimeout = 100; in stv090x_get_lock_tmg()
851 if (state->algo == STV090x_WARM_SEARCH) in stv090x_get_lock_tmg()
852 state->DemodTimeout /= 2; in stv090x_get_lock_tmg()
855 static int stv090x_set_srate(struct stv090x_state *state, u32 srate) in stv090x_set_srate() argument
861 sym /= (state->internal->mclk >> 12); in stv090x_set_srate()
864 sym /= (state->internal->mclk >> 10); in stv090x_set_srate()
867 sym /= (state->internal->mclk >> 7); in stv090x_set_srate()
870 if (STV090x_WRITE_DEMOD(state, SFRINIT1, (sym >> 8) & 0x7f) < 0) /* MSB */ in stv090x_set_srate()
872 if (STV090x_WRITE_DEMOD(state, SFRINIT0, (sym & 0xff)) < 0) /* LSB */ in stv090x_set_srate()
881 static int stv090x_set_max_srate(struct stv090x_state *state, u32 clk, u32 srate) in stv090x_set_max_srate() argument
888 sym /= (state->internal->mclk >> 12); in stv090x_set_max_srate()
891 sym /= (state->internal->mclk >> 10); in stv090x_set_max_srate()
894 sym /= (state->internal->mclk >> 7); in stv090x_set_max_srate()
898 if (STV090x_WRITE_DEMOD(state, SFRUP1, (sym >> 8) & 0x7f) < 0) /* MSB */ in stv090x_set_max_srate()
900 if (STV090x_WRITE_DEMOD(state, SFRUP0, sym & 0xff) < 0) /* LSB */ in stv090x_set_max_srate()
903 if (STV090x_WRITE_DEMOD(state, SFRUP1, 0x7f) < 0) /* MSB */ in stv090x_set_max_srate()
905 if (STV090x_WRITE_DEMOD(state, SFRUP0, 0xff) < 0) /* LSB */ in stv090x_set_max_srate()
915 static int stv090x_set_min_srate(struct stv090x_state *state, u32 clk, u32 srate) in stv090x_set_min_srate() argument
922 sym /= (state->internal->mclk >> 12); in stv090x_set_min_srate()
925 sym /= (state->internal->mclk >> 10); in stv090x_set_min_srate()
928 sym /= (state->internal->mclk >> 7); in stv090x_set_min_srate()
931 if (STV090x_WRITE_DEMOD(state, SFRLOW1, ((sym >> 8) & 0x7f)) < 0) /* MSB */ in stv090x_set_min_srate()
933 if (STV090x_WRITE_DEMOD(state, SFRLOW0, (sym & 0xff)) < 0) /* LSB */ in stv090x_set_min_srate()
961 static int stv090x_set_vit_thacq(struct stv090x_state *state) in stv090x_set_vit_thacq() argument
963 if (STV090x_WRITE_DEMOD(state, VTH12, 0x96) < 0) in stv090x_set_vit_thacq()
965 if (STV090x_WRITE_DEMOD(state, VTH23, 0x64) < 0) in stv090x_set_vit_thacq()
967 if (STV090x_WRITE_DEMOD(state, VTH34, 0x36) < 0) in stv090x_set_vit_thacq()
969 if (STV090x_WRITE_DEMOD(state, VTH56, 0x23) < 0) in stv090x_set_vit_thacq()
971 if (STV090x_WRITE_DEMOD(state, VTH67, 0x1e) < 0) in stv090x_set_vit_thacq()
973 if (STV090x_WRITE_DEMOD(state, VTH78, 0x19) < 0) in stv090x_set_vit_thacq()
981 static int stv090x_set_vit_thtracq(struct stv090x_state *state) in stv090x_set_vit_thtracq() argument
983 if (STV090x_WRITE_DEMOD(state, VTH12, 0xd0) < 0) in stv090x_set_vit_thtracq()
985 if (STV090x_WRITE_DEMOD(state, VTH23, 0x7d) < 0) in stv090x_set_vit_thtracq()
987 if (STV090x_WRITE_DEMOD(state, VTH34, 0x53) < 0) in stv090x_set_vit_thtracq()
989 if (STV090x_WRITE_DEMOD(state, VTH56, 0x2f) < 0) in stv090x_set_vit_thtracq()
991 if (STV090x_WRITE_DEMOD(state, VTH67, 0x24) < 0) in stv090x_set_vit_thtracq()
993 if (STV090x_WRITE_DEMOD(state, VTH78, 0x1f) < 0) in stv090x_set_vit_thtracq()
1001 static int stv090x_set_viterbi(struct stv090x_state *state) in stv090x_set_viterbi() argument
1003 switch (state->search_mode) { in stv090x_set_viterbi()
1005 if (STV090x_WRITE_DEMOD(state, FECM, 0x10) < 0) /* DVB-S and DVB-S2 */ in stv090x_set_viterbi()
1007 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x3f) < 0) /* all puncture rate */ in stv090x_set_viterbi()
1011 if (STV090x_WRITE_DEMOD(state, FECM, 0x00) < 0) /* disable DSS */ in stv090x_set_viterbi()
1013 switch (state->fec) { in stv090x_set_viterbi()
1015 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x01) < 0) in stv090x_set_viterbi()
1020 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x02) < 0) in stv090x_set_viterbi()
1025 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x04) < 0) in stv090x_set_viterbi()
1030 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x08) < 0) in stv090x_set_viterbi()
1035 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x20) < 0) in stv090x_set_viterbi()
1040 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x2f) < 0) /* all */ in stv090x_set_viterbi()
1046 if (STV090x_WRITE_DEMOD(state, FECM, 0x80) < 0) in stv090x_set_viterbi()
1048 switch (state->fec) { in stv090x_set_viterbi()
1050 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x01) < 0) in stv090x_set_viterbi()
1055 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x02) < 0) in stv090x_set_viterbi()
1060 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x10) < 0) in stv090x_set_viterbi()
1065 if (STV090x_WRITE_DEMOD(state, PRVIT, 0x13) < 0) /* 1/2, 2/3, 6/7 */ in stv090x_set_viterbi()
1079 static int stv090x_stop_modcod(struct stv090x_state *state) in stv090x_stop_modcod() argument
1081 if (STV090x_WRITE_DEMOD(state, MODCODLST0, 0xff) < 0) in stv090x_stop_modcod()
1083 if (STV090x_WRITE_DEMOD(state, MODCODLST1, 0xff) < 0) in stv090x_stop_modcod()
1085 if (STV090x_WRITE_DEMOD(state, MODCODLST2, 0xff) < 0) in stv090x_stop_modcod()
1087 if (STV090x_WRITE_DEMOD(state, MODCODLST3, 0xff) < 0) in stv090x_stop_modcod()
1089 if (STV090x_WRITE_DEMOD(state, MODCODLST4, 0xff) < 0) in stv090x_stop_modcod()
1091 if (STV090x_WRITE_DEMOD(state, MODCODLST5, 0xff) < 0) in stv090x_stop_modcod()
1093 if (STV090x_WRITE_DEMOD(state, MODCODLST6, 0xff) < 0) in stv090x_stop_modcod()
1095 if (STV090x_WRITE_DEMOD(state, MODCODLST7, 0xff) < 0) in stv090x_stop_modcod()
1097 if (STV090x_WRITE_DEMOD(state, MODCODLST8, 0xff) < 0) in stv090x_stop_modcod()
1099 if (STV090x_WRITE_DEMOD(state, MODCODLST9, 0xff) < 0) in stv090x_stop_modcod()
1101 if (STV090x_WRITE_DEMOD(state, MODCODLSTA, 0xff) < 0) in stv090x_stop_modcod()
1103 if (STV090x_WRITE_DEMOD(state, MODCODLSTB, 0xff) < 0) in stv090x_stop_modcod()
1105 if (STV090x_WRITE_DEMOD(state, MODCODLSTC, 0xff) < 0) in stv090x_stop_modcod()
1107 if (STV090x_WRITE_DEMOD(state, MODCODLSTD, 0xff) < 0) in stv090x_stop_modcod()
1109 if (STV090x_WRITE_DEMOD(state, MODCODLSTE, 0xff) < 0) in stv090x_stop_modcod()
1111 if (STV090x_WRITE_DEMOD(state, MODCODLSTF, 0xff) < 0) in stv090x_stop_modcod()
1119 static int stv090x_activate_modcod(struct stv090x_state *state) in stv090x_activate_modcod() argument
1121 if (STV090x_WRITE_DEMOD(state, MODCODLST0, 0xff) < 0) in stv090x_activate_modcod()
1123 if (STV090x_WRITE_DEMOD(state, MODCODLST1, 0xfc) < 0) in stv090x_activate_modcod()
1125 if (STV090x_WRITE_DEMOD(state, MODCODLST2, 0xcc) < 0) in stv090x_activate_modcod()
1127 if (STV090x_WRITE_DEMOD(state, MODCODLST3, 0xcc) < 0) in stv090x_activate_modcod()
1129 if (STV090x_WRITE_DEMOD(state, MODCODLST4, 0xcc) < 0) in stv090x_activate_modcod()
1131 if (STV090x_WRITE_DEMOD(state, MODCODLST5, 0xcc) < 0) in stv090x_activate_modcod()
1133 if (STV090x_WRITE_DEMOD(state, MODCODLST6, 0xcc) < 0) in stv090x_activate_modcod()
1135 if (STV090x_WRITE_DEMOD(state, MODCODLST7, 0xcc) < 0) in stv090x_activate_modcod()
1137 if (STV090x_WRITE_DEMOD(state, MODCODLST8, 0xcc) < 0) in stv090x_activate_modcod()
1139 if (STV090x_WRITE_DEMOD(state, MODCODLST9, 0xcc) < 0) in stv090x_activate_modcod()
1141 if (STV090x_WRITE_DEMOD(state, MODCODLSTA, 0xcc) < 0) in stv090x_activate_modcod()
1143 if (STV090x_WRITE_DEMOD(state, MODCODLSTB, 0xcc) < 0) in stv090x_activate_modcod()
1145 if (STV090x_WRITE_DEMOD(state, MODCODLSTC, 0xcc) < 0) in stv090x_activate_modcod()
1147 if (STV090x_WRITE_DEMOD(state, MODCODLSTD, 0xcc) < 0) in stv090x_activate_modcod()
1149 if (STV090x_WRITE_DEMOD(state, MODCODLSTE, 0xcc) < 0) in stv090x_activate_modcod()
1151 if (STV090x_WRITE_DEMOD(state, MODCODLSTF, 0xcf) < 0) in stv090x_activate_modcod()
1160 static int stv090x_activate_modcod_single(struct stv090x_state *state) in stv090x_activate_modcod_single() argument
1163 if (STV090x_WRITE_DEMOD(state, MODCODLST0, 0xff) < 0) in stv090x_activate_modcod_single()
1165 if (STV090x_WRITE_DEMOD(state, MODCODLST1, 0xf0) < 0) in stv090x_activate_modcod_single()
1167 if (STV090x_WRITE_DEMOD(state, MODCODLST2, 0x00) < 0) in stv090x_activate_modcod_single()
1169 if (STV090x_WRITE_DEMOD(state, MODCODLST3, 0x00) < 0) in stv090x_activate_modcod_single()
1171 if (STV090x_WRITE_DEMOD(state, MODCODLST4, 0x00) < 0) in stv090x_activate_modcod_single()
1173 if (STV090x_WRITE_DEMOD(state, MODCODLST5, 0x00) < 0) in stv090x_activate_modcod_single()
1175 if (STV090x_WRITE_DEMOD(state, MODCODLST6, 0x00) < 0) in stv090x_activate_modcod_single()
1177 if (STV090x_WRITE_DEMOD(state, MODCODLST7, 0x00) < 0) in stv090x_activate_modcod_single()
1179 if (STV090x_WRITE_DEMOD(state, MODCODLST8, 0x00) < 0) in stv090x_activate_modcod_single()
1181 if (STV090x_WRITE_DEMOD(state, MODCODLST9, 0x00) < 0) in stv090x_activate_modcod_single()
1183 if (STV090x_WRITE_DEMOD(state, MODCODLSTA, 0x00) < 0) in stv090x_activate_modcod_single()
1185 if (STV090x_WRITE_DEMOD(state, MODCODLSTB, 0x00) < 0) in stv090x_activate_modcod_single()
1187 if (STV090x_WRITE_DEMOD(state, MODCODLSTC, 0x00) < 0) in stv090x_activate_modcod_single()
1189 if (STV090x_WRITE_DEMOD(state, MODCODLSTD, 0x00) < 0) in stv090x_activate_modcod_single()
1191 if (STV090x_WRITE_DEMOD(state, MODCODLSTE, 0x00) < 0) in stv090x_activate_modcod_single()
1193 if (STV090x_WRITE_DEMOD(state, MODCODLSTF, 0x0f) < 0) in stv090x_activate_modcod_single()
1203 static int stv090x_vitclk_ctl(struct stv090x_state *state, int enable) in stv090x_vitclk_ctl() argument
1207 switch (state->demod) { in stv090x_vitclk_ctl()
1209 mutex_lock(&state->internal->demod_lock); in stv090x_vitclk_ctl()
1210 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_vitclk_ctl()
1212 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_vitclk_ctl()
1214 mutex_unlock(&state->internal->demod_lock); in stv090x_vitclk_ctl()
1218 mutex_lock(&state->internal->demod_lock); in stv090x_vitclk_ctl()
1219 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_vitclk_ctl()
1221 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_vitclk_ctl()
1223 mutex_unlock(&state->internal->demod_lock); in stv090x_vitclk_ctl()
1232 mutex_unlock(&state->internal->demod_lock); in stv090x_vitclk_ctl()
1237 static int stv090x_dvbs_track_crl(struct stv090x_state *state) in stv090x_dvbs_track_crl() argument
1239 if (state->internal->dev_ver >= 0x30) { in stv090x_dvbs_track_crl()
1241 if (state->srate >= 15000000) { in stv090x_dvbs_track_crl()
1242 if (STV090x_WRITE_DEMOD(state, ACLC, 0x2b) < 0) in stv090x_dvbs_track_crl()
1244 if (STV090x_WRITE_DEMOD(state, BCLC, 0x1a) < 0) in stv090x_dvbs_track_crl()
1246 } else if ((state->srate >= 7000000) && (15000000 > state->srate)) { in stv090x_dvbs_track_crl()
1247 if (STV090x_WRITE_DEMOD(state, ACLC, 0x0c) < 0) in stv090x_dvbs_track_crl()
1249 if (STV090x_WRITE_DEMOD(state, BCLC, 0x1b) < 0) in stv090x_dvbs_track_crl()
1251 } else if (state->srate < 7000000) { in stv090x_dvbs_track_crl()
1252 if (STV090x_WRITE_DEMOD(state, ACLC, 0x2c) < 0) in stv090x_dvbs_track_crl()
1254 if (STV090x_WRITE_DEMOD(state, BCLC, 0x1c) < 0) in stv090x_dvbs_track_crl()
1260 if (STV090x_WRITE_DEMOD(state, ACLC, 0x1a) < 0) in stv090x_dvbs_track_crl()
1262 if (STV090x_WRITE_DEMOD(state, BCLC, 0x09) < 0) in stv090x_dvbs_track_crl()
1271 static int stv090x_delivery_search(struct stv090x_state *state) in stv090x_delivery_search() argument
1275 switch (state->search_mode) { in stv090x_delivery_search()
1278 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_delivery_search()
1281 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_delivery_search()
1287 if (stv090x_vitclk_ctl(state, 0) < 0) in stv090x_delivery_search()
1290 if (stv090x_dvbs_track_crl(state) < 0) in stv090x_delivery_search()
1293 if (STV090x_WRITE_DEMOD(state, CAR2CFG, 0x22) < 0) /* disable DVB-S2 */ in stv090x_delivery_search()
1296 if (stv090x_set_vit_thacq(state) < 0) in stv090x_delivery_search()
1298 if (stv090x_set_viterbi(state) < 0) in stv090x_delivery_search()
1303 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_delivery_search()
1306 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_delivery_search()
1310 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_delivery_search()
1313 if (stv090x_vitclk_ctl(state, 1) < 0) in stv090x_delivery_search()
1316 if (STV090x_WRITE_DEMOD(state, ACLC, 0x1a) < 0) /* stop DVB-S CR loop */ in stv090x_delivery_search()
1318 if (STV090x_WRITE_DEMOD(state, BCLC, 0x09) < 0) in stv090x_delivery_search()
1321 if (state->internal->dev_ver <= 0x20) { in stv090x_delivery_search()
1323 if (STV090x_WRITE_DEMOD(state, CAR2CFG, 0x26) < 0) in stv090x_delivery_search()
1327 if (STV090x_WRITE_DEMOD(state, CAR2CFG, 0x66) < 0) in stv090x_delivery_search()
1331 if (state->demod_mode != STV090x_SINGLE) { in stv090x_delivery_search()
1333 if (stv090x_activate_modcod(state) < 0) in stv090x_delivery_search()
1340 if (stv090x_activate_modcod_single(state) < 0) in stv090x_delivery_search()
1344 if (stv090x_set_vit_thtracq(state) < 0) in stv090x_delivery_search()
1351 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_delivery_search()
1354 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_delivery_search()
1358 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_delivery_search()
1361 if (stv090x_vitclk_ctl(state, 0) < 0) in stv090x_delivery_search()
1364 if (stv090x_dvbs_track_crl(state) < 0) in stv090x_delivery_search()
1367 if (state->internal->dev_ver <= 0x20) { in stv090x_delivery_search()
1369 if (STV090x_WRITE_DEMOD(state, CAR2CFG, 0x26) < 0) in stv090x_delivery_search()
1373 if (STV090x_WRITE_DEMOD(state, CAR2CFG, 0x66) < 0) in stv090x_delivery_search()
1377 if (state->demod_mode != STV090x_SINGLE) { in stv090x_delivery_search()
1379 if (stv090x_activate_modcod(state) < 0) in stv090x_delivery_search()
1386 if (stv090x_activate_modcod_single(state) < 0) in stv090x_delivery_search()
1390 if (stv090x_set_vit_thacq(state) < 0) in stv090x_delivery_search()
1393 if (stv090x_set_viterbi(state) < 0) in stv090x_delivery_search()
1403 static int stv090x_start_search(struct stv090x_state *state) in stv090x_start_search() argument
1409 reg = STV090x_READ_DEMOD(state, DMDISTATE); in stv090x_start_search()
1411 if (STV090x_WRITE_DEMOD(state, DMDISTATE, reg) < 0) in stv090x_start_search()
1414 if (state->internal->dev_ver <= 0x20) { in stv090x_start_search()
1415 if (state->srate <= 5000000) { in stv090x_start_search()
1416 if (STV090x_WRITE_DEMOD(state, CARCFG, 0x44) < 0) in stv090x_start_search()
1418 if (STV090x_WRITE_DEMOD(state, CFRUP1, 0x0f) < 0) in stv090x_start_search()
1420 if (STV090x_WRITE_DEMOD(state, CFRUP0, 0xff) < 0) in stv090x_start_search()
1422 if (STV090x_WRITE_DEMOD(state, CFRLOW1, 0xf0) < 0) in stv090x_start_search()
1424 if (STV090x_WRITE_DEMOD(state, CFRLOW0, 0x00) < 0) in stv090x_start_search()
1428 if (STV090x_WRITE_DEMOD(state, RTCS2, 0x68) < 0) in stv090x_start_search()
1433 if (STV090x_WRITE_DEMOD(state, CARCFG, 0xc4) < 0) in stv090x_start_search()
1436 if (STV090x_WRITE_DEMOD(state, RTCS2, 0x44) < 0) in stv090x_start_search()
1441 if (state->srate <= 5000000) { in stv090x_start_search()
1443 STV090x_WRITE_DEMOD(state, RTCS2, 0x68); in stv090x_start_search()
1446 STV090x_WRITE_DEMOD(state, RTCS2, 0x44); in stv090x_start_search()
1450 STV090x_WRITE_DEMOD(state, CARCFG, 0x46); in stv090x_start_search()
1452 if (state->algo == STV090x_WARM_SEARCH) { in stv090x_start_search()
1458 freq_abs /= (state->internal->mclk / 1000); in stv090x_start_search()
1466 freq_abs = (state->search_range / 2000) + 600; in stv090x_start_search()
1468 freq_abs /= (state->internal->mclk / 1000); in stv090x_start_search()
1472 if (STV090x_WRITE_DEMOD(state, CFRUP1, MSB(freq)) < 0) in stv090x_start_search()
1474 if (STV090x_WRITE_DEMOD(state, CFRUP0, LSB(freq)) < 0) in stv090x_start_search()
1479 if (STV090x_WRITE_DEMOD(state, CFRLOW1, MSB(freq)) < 0) in stv090x_start_search()
1481 if (STV090x_WRITE_DEMOD(state, CFRLOW0, LSB(freq)) < 0) in stv090x_start_search()
1486 if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0) < 0) in stv090x_start_search()
1488 if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0) < 0) in stv090x_start_search()
1491 if (state->internal->dev_ver >= 0x20) { in stv090x_start_search()
1492 if (STV090x_WRITE_DEMOD(state, EQUALCFG, 0x41) < 0) in stv090x_start_search()
1494 if (STV090x_WRITE_DEMOD(state, FFECFG, 0x41) < 0) in stv090x_start_search()
1497 if ((state->search_mode == STV090x_SEARCH_DVBS1) || in stv090x_start_search()
1498 (state->search_mode == STV090x_SEARCH_DSS) || in stv090x_start_search()
1499 (state->search_mode == STV090x_SEARCH_AUTO)) { in stv090x_start_search()
1501 if (STV090x_WRITE_DEMOD(state, VITSCALE, 0x82) < 0) in stv090x_start_search()
1503 if (STV090x_WRITE_DEMOD(state, VAVSRVIT, 0x00) < 0) in stv090x_start_search()
1508 if (STV090x_WRITE_DEMOD(state, SFRSTEP, 0x00) < 0) in stv090x_start_search()
1510 if (STV090x_WRITE_DEMOD(state, TMGTHRISE, 0xe0) < 0) in stv090x_start_search()
1512 if (STV090x_WRITE_DEMOD(state, TMGTHFALL, 0xc0) < 0) in stv090x_start_search()
1515 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_start_search()
1518 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_start_search()
1520 reg = STV090x_READ_DEMOD(state, DMDCFG2); in stv090x_start_search()
1522 if (STV090x_WRITE_DEMOD(state, DMDCFG2, reg) < 0) in stv090x_start_search()
1525 if (STV090x_WRITE_DEMOD(state, RTC, 0x88) < 0) in stv090x_start_search()
1528 if (state->internal->dev_ver >= 0x20) { in stv090x_start_search()
1530 if (state->srate < 2000000) { in stv090x_start_search()
1531 if (state->internal->dev_ver <= 0x20) { in stv090x_start_search()
1533 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x39) < 0) in stv090x_start_search()
1537 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x89) < 0) in stv090x_start_search()
1540 if (STV090x_WRITE_DEMOD(state, CARHDR, 0x40) < 0) in stv090x_start_search()
1542 } else if (state->srate < 10000000) { in stv090x_start_search()
1543 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x4c) < 0) in stv090x_start_search()
1545 if (STV090x_WRITE_DEMOD(state, CARHDR, 0x20) < 0) in stv090x_start_search()
1548 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x4b) < 0) in stv090x_start_search()
1550 if (STV090x_WRITE_DEMOD(state, CARHDR, 0x20) < 0) in stv090x_start_search()
1554 if (state->srate < 10000000) { in stv090x_start_search()
1555 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0xef) < 0) in stv090x_start_search()
1558 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0xed) < 0) in stv090x_start_search()
1563 switch (state->algo) { in stv090x_start_search()
1568 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_start_search()
1570 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x18) < 0) in stv090x_start_search()
1576 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_start_search()
1578 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0) in stv090x_start_search()
1591 static int stv090x_get_agc2_min_level(struct stv090x_state *state) in stv090x_get_agc2_min_level() argument
1596 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x38) < 0) in stv090x_get_agc2_min_level()
1598 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_get_agc2_min_level()
1601 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_get_agc2_min_level()
1604 if (STV090x_WRITE_DEMOD(state, SFRUP1, 0x83) < 0) /* SR = 65 Msps Max */ in stv090x_get_agc2_min_level()
1606 if (STV090x_WRITE_DEMOD(state, SFRUP0, 0xc0) < 0) in stv090x_get_agc2_min_level()
1608 if (STV090x_WRITE_DEMOD(state, SFRLOW1, 0x82) < 0) /* SR= 400 ksps Min */ in stv090x_get_agc2_min_level()
1610 if (STV090x_WRITE_DEMOD(state, SFRLOW0, 0xa0) < 0) in stv090x_get_agc2_min_level()
1612 if (STV090x_WRITE_DEMOD(state, DMDTOM, 0x00) < 0) /* stop acq @ coarse carrier state */ in stv090x_get_agc2_min_level()
1614 if (stv090x_set_srate(state, 1000000) < 0) in stv090x_get_agc2_min_level()
1617 steps = state->search_range / 1000000; in stv090x_get_agc2_min_level()
1622 freq_step = (1000000 * 256) / (state->internal->mclk / 256); in stv090x_get_agc2_min_level()
1633 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x5c) < 0) /* Demod RESET */ in stv090x_get_agc2_min_level()
1635 if (STV090x_WRITE_DEMOD(state, CFRINIT1, (freq_init >> 8) & 0xff) < 0) in stv090x_get_agc2_min_level()
1637 if (STV090x_WRITE_DEMOD(state, CFRINIT0, freq_init & 0xff) < 0) in stv090x_get_agc2_min_level()
1639 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x58) < 0) /* Demod RESET */ in stv090x_get_agc2_min_level()
1645 agc2 += (STV090x_READ_DEMOD(state, AGC2I1) << 8) | in stv090x_get_agc2_min_level()
1646 STV090x_READ_DEMOD(state, AGC2I0); in stv090x_get_agc2_min_level()
1659 static u32 stv090x_get_srate(struct stv090x_state *state, u32 clk) in stv090x_get_srate() argument
1664 r3 = STV090x_READ_DEMOD(state, SFR3); in stv090x_get_srate()
1665 r2 = STV090x_READ_DEMOD(state, SFR2); in stv090x_get_srate()
1666 r1 = STV090x_READ_DEMOD(state, SFR1); in stv090x_get_srate()
1667 r0 = STV090x_READ_DEMOD(state, SFR0); in stv090x_get_srate()
1684 static u32 stv090x_srate_srch_coarse(struct stv090x_state *state) in stv090x_srate_srch_coarse() argument
1686 struct dvb_frontend *fe = &state->frontend; in stv090x_srate_srch_coarse()
1693 if (state->internal->dev_ver >= 0x30) in stv090x_srate_srch_coarse()
1698 reg = STV090x_READ_DEMOD(state, DMDISTATE); in stv090x_srate_srch_coarse()
1700 if (STV090x_WRITE_DEMOD(state, DMDISTATE, reg) < 0) in stv090x_srate_srch_coarse()
1702 if (STV090x_WRITE_DEMOD(state, TMGCFG, 0x12) < 0) in stv090x_srate_srch_coarse()
1704 if (STV090x_WRITE_DEMOD(state, TMGCFG2, 0xc0) < 0) in stv090x_srate_srch_coarse()
1706 if (STV090x_WRITE_DEMOD(state, TMGTHRISE, 0xf0) < 0) in stv090x_srate_srch_coarse()
1708 if (STV090x_WRITE_DEMOD(state, TMGTHFALL, 0xe0) < 0) in stv090x_srate_srch_coarse()
1710 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_srate_srch_coarse()
1713 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_srate_srch_coarse()
1716 if (STV090x_WRITE_DEMOD(state, SFRUP1, 0x83) < 0) in stv090x_srate_srch_coarse()
1718 if (STV090x_WRITE_DEMOD(state, SFRUP0, 0xc0) < 0) in stv090x_srate_srch_coarse()
1720 if (STV090x_WRITE_DEMOD(state, SFRLOW1, 0x82) < 0) in stv090x_srate_srch_coarse()
1722 if (STV090x_WRITE_DEMOD(state, SFRLOW0, 0xa0) < 0) in stv090x_srate_srch_coarse()
1724 if (STV090x_WRITE_DEMOD(state, DMDTOM, 0x00) < 0) in stv090x_srate_srch_coarse()
1726 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x50) < 0) in stv090x_srate_srch_coarse()
1729 if (state->internal->dev_ver >= 0x30) { in stv090x_srate_srch_coarse()
1730 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x99) < 0) in stv090x_srate_srch_coarse()
1732 if (STV090x_WRITE_DEMOD(state, SFRSTEP, 0x98) < 0) in stv090x_srate_srch_coarse()
1735 } else if (state->internal->dev_ver >= 0x20) { in stv090x_srate_srch_coarse()
1736 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x6a) < 0) in stv090x_srate_srch_coarse()
1738 if (STV090x_WRITE_DEMOD(state, SFRSTEP, 0x95) < 0) in stv090x_srate_srch_coarse()
1742 if (state->srate <= 2000000) in stv090x_srate_srch_coarse()
1744 else if (state->srate <= 5000000) in stv090x_srate_srch_coarse()
1746 else if (state->srate <= 12000000) in stv090x_srate_srch_coarse()
1751 steps = -1 + ((state->search_range / 1000) / car_step); in stv090x_srate_srch_coarse()
1758 car_step = (state->search_range / 1000) / 10; in stv090x_srate_srch_coarse()
1762 freq = state->frequency; in stv090x_srate_srch_coarse()
1765 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x5f) < 0) /* Demod RESET */ in stv090x_srate_srch_coarse()
1767 if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0x00) < 0) in stv090x_srate_srch_coarse()
1769 if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0x00) < 0) in stv090x_srate_srch_coarse()
1771 if (STV090x_WRITE_DEMOD(state, SFRINIT1, 0x00) < 0) in stv090x_srate_srch_coarse()
1773 if (STV090x_WRITE_DEMOD(state, SFRINIT0, 0x00) < 0) in stv090x_srate_srch_coarse()
1776 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x40) < 0) in stv090x_srate_srch_coarse()
1780 reg = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_srate_srch_coarse()
1783 agc2 += (STV090x_READ_DEMOD(state, AGC2I1) << 8) | in stv090x_srate_srch_coarse()
1784 STV090x_READ_DEMOD(state, AGC2I0); in stv090x_srate_srch_coarse()
1787 srate_coarse = stv090x_get_srate(state, state->internal->mclk); in stv090x_srate_srch_coarse()
1800 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_srate_srch_coarse()
1803 if (state->config->tuner_set_frequency) { in stv090x_srate_srch_coarse()
1804 if (state->config->tuner_set_frequency(fe, freq) < 0) in stv090x_srate_srch_coarse()
1808 if (state->config->tuner_set_bandwidth) { in stv090x_srate_srch_coarse()
1809 if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0) in stv090x_srate_srch_coarse()
1813 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_srate_srch_coarse()
1818 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_srate_srch_coarse()
1821 if (state->config->tuner_get_status) { in stv090x_srate_srch_coarse()
1822 if (state->config->tuner_get_status(fe, ®) < 0) in stv090x_srate_srch_coarse()
1831 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_srate_srch_coarse()
1839 srate_coarse = stv090x_get_srate(state, state->internal->mclk); in stv090x_srate_srch_coarse()
1844 stv090x_i2c_gate_ctrl(state, 0); in stv090x_srate_srch_coarse()
1850 static u32 stv090x_srate_srch_fine(struct stv090x_state *state) in stv090x_srate_srch_fine() argument
1854 srate_coarse = stv090x_get_srate(state, state->internal->mclk); in stv090x_srate_srch_fine()
1855 freq_coarse = STV090x_READ_DEMOD(state, CFR2) << 8; in stv090x_srate_srch_fine()
1856 freq_coarse |= STV090x_READ_DEMOD(state, CFR1); in stv090x_srate_srch_fine()
1859 if (sym < state->srate) in stv090x_srate_srch_fine()
1862 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) /* Demod RESET */ in stv090x_srate_srch_fine()
1864 if (STV090x_WRITE_DEMOD(state, TMGCFG2, 0xc1) < 0) in stv090x_srate_srch_fine()
1866 if (STV090x_WRITE_DEMOD(state, TMGTHRISE, 0x20) < 0) in stv090x_srate_srch_fine()
1868 if (STV090x_WRITE_DEMOD(state, TMGTHFALL, 0x00) < 0) in stv090x_srate_srch_fine()
1870 if (STV090x_WRITE_DEMOD(state, TMGCFG, 0xd2) < 0) in stv090x_srate_srch_fine()
1872 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_srate_srch_fine()
1874 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_srate_srch_fine()
1877 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x38) < 0) in stv090x_srate_srch_fine()
1880 if (state->internal->dev_ver >= 0x30) { in stv090x_srate_srch_fine()
1881 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x79) < 0) in stv090x_srate_srch_fine()
1883 } else if (state->internal->dev_ver >= 0x20) { in stv090x_srate_srch_fine()
1884 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x49) < 0) in stv090x_srate_srch_fine()
1891 sym /= (state->internal->mclk / 1000); in stv090x_srate_srch_fine()
1892 if (STV090x_WRITE_DEMOD(state, SFRUP1, (sym >> 8) & 0x7f) < 0) in stv090x_srate_srch_fine()
1894 if (STV090x_WRITE_DEMOD(state, SFRUP0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1898 sym /= (state->internal->mclk / 1000); in stv090x_srate_srch_fine()
1899 if (STV090x_WRITE_DEMOD(state, SFRLOW1, (sym >> 8) & 0x7f) < 0) in stv090x_srate_srch_fine()
1901 if (STV090x_WRITE_DEMOD(state, SFRLOW0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1904 sym /= (state->internal->mclk / 1000); in stv090x_srate_srch_fine()
1905 if (STV090x_WRITE_DEMOD(state, SFRINIT1, (sym >> 8) & 0xff) < 0) in stv090x_srate_srch_fine()
1907 if (STV090x_WRITE_DEMOD(state, SFRINIT0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1912 sym /= (state->internal->mclk / 100); in stv090x_srate_srch_fine()
1913 if (STV090x_WRITE_DEMOD(state, SFRUP1, (sym >> 8) & 0x7f) < 0) in stv090x_srate_srch_fine()
1915 if (STV090x_WRITE_DEMOD(state, SFRUP0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1919 sym /= (state->internal->mclk / 100); in stv090x_srate_srch_fine()
1920 if (STV090x_WRITE_DEMOD(state, SFRLOW1, (sym >> 8) & 0x7f) < 0) in stv090x_srate_srch_fine()
1922 if (STV090x_WRITE_DEMOD(state, SFRLOW0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1925 sym /= (state->internal->mclk / 100); in stv090x_srate_srch_fine()
1926 if (STV090x_WRITE_DEMOD(state, SFRINIT1, (sym >> 8) & 0xff) < 0) in stv090x_srate_srch_fine()
1928 if (STV090x_WRITE_DEMOD(state, SFRINIT0, sym & 0xff) < 0) in stv090x_srate_srch_fine()
1931 if (STV090x_WRITE_DEMOD(state, DMDTOM, 0x20) < 0) in stv090x_srate_srch_fine()
1933 if (STV090x_WRITE_DEMOD(state, CFRINIT1, (freq_coarse >> 8) & 0xff) < 0) in stv090x_srate_srch_fine()
1935 if (STV090x_WRITE_DEMOD(state, CFRINIT0, freq_coarse & 0xff) < 0) in stv090x_srate_srch_fine()
1937 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0) /* trigger acquisition */ in stv090x_srate_srch_fine()
1948 static int stv090x_get_dmdlock(struct stv090x_state *state, s32 timeout) in stv090x_get_dmdlock() argument
1955 reg = STV090x_READ_DEMOD(state, DMDSTATE); in stv090x_get_dmdlock()
1967 reg = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_get_dmdlock()
1982 static int stv090x_blind_search(struct stv090x_state *state) in stv090x_blind_search() argument
1993 agc2 = stv090x_get_agc2_min_level(state); in stv090x_blind_search()
1995 if (agc2 > STV090x_SEARCH_AGC2_TH(state->internal->dev_ver)) { in stv090x_blind_search()
1999 if (state->internal->dev_ver <= 0x20) { in stv090x_blind_search()
2000 if (STV090x_WRITE_DEMOD(state, CARCFG, 0xc4) < 0) in stv090x_blind_search()
2004 if (STV090x_WRITE_DEMOD(state, CARCFG, 0x06) < 0) in stv090x_blind_search()
2008 if (STV090x_WRITE_DEMOD(state, RTCS2, 0x44) < 0) in stv090x_blind_search()
2011 if (state->internal->dev_ver >= 0x20) { in stv090x_blind_search()
2012 if (STV090x_WRITE_DEMOD(state, EQUALCFG, 0x41) < 0) in stv090x_blind_search()
2014 if (STV090x_WRITE_DEMOD(state, FFECFG, 0x41) < 0) in stv090x_blind_search()
2016 if (STV090x_WRITE_DEMOD(state, VITSCALE, 0x82) < 0) in stv090x_blind_search()
2018 if (STV090x_WRITE_DEMOD(state, VAVSRVIT, 0x00) < 0) /* set viterbi hysteresis */ in stv090x_blind_search()
2024 if (STV090x_WRITE_DEMOD(state, KREFTMG, k_ref) < 0) in stv090x_blind_search()
2026 if (stv090x_srate_srch_coarse(state) != 0) { in stv090x_blind_search()
2027 srate_coarse = stv090x_srate_srch_fine(state); in stv090x_blind_search()
2029 stv090x_get_lock_tmg(state); in stv090x_blind_search()
2030 lock = stv090x_get_dmdlock(state, in stv090x_blind_search()
2031 state->DemodTimeout); in stv090x_blind_search()
2039 agc2 += (STV090x_READ_DEMOD(state, AGC2I1) << 8) | in stv090x_blind_search()
2040 STV090x_READ_DEMOD(state, AGC2I0); in stv090x_blind_search()
2043 reg = STV090x_READ_DEMOD(state, DSTATUS2); in stv090x_blind_search()
2065 static int stv090x_chk_tmg(struct stv090x_state *state) in stv090x_chk_tmg() argument
2072 freq = STV090x_READ_DEMOD(state, CARFREQ); in stv090x_chk_tmg()
2073 tmg_thh = STV090x_READ_DEMOD(state, TMGTHRISE); in stv090x_chk_tmg()
2074 tmg_thl = STV090x_READ_DEMOD(state, TMGTHFALL); in stv090x_chk_tmg()
2075 if (STV090x_WRITE_DEMOD(state, TMGTHRISE, 0x20) < 0) in stv090x_chk_tmg()
2077 if (STV090x_WRITE_DEMOD(state, TMGTHFALL, 0x00) < 0) in stv090x_chk_tmg()
2080 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_chk_tmg()
2082 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_chk_tmg()
2084 if (STV090x_WRITE_DEMOD(state, RTC, 0x80) < 0) in stv090x_chk_tmg()
2087 if (STV090x_WRITE_DEMOD(state, RTCS2, 0x40) < 0) in stv090x_chk_tmg()
2089 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x00) < 0) in stv090x_chk_tmg()
2092 if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0x00) < 0) /* set car ofset to 0 */ in stv090x_chk_tmg()
2094 if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0x00) < 0) in stv090x_chk_tmg()
2096 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x65) < 0) in stv090x_chk_tmg()
2099 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x18) < 0) /* trigger acquisition */ in stv090x_chk_tmg()
2104 reg = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_chk_tmg()
2112 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x38) < 0) in stv090x_chk_tmg()
2114 if (STV090x_WRITE_DEMOD(state, RTC, 0x88) < 0) /* DVB-S1 timing */ in stv090x_chk_tmg()
2116 if (STV090x_WRITE_DEMOD(state, RTCS2, 0x68) < 0) /* DVB-S2 timing */ in stv090x_chk_tmg()
2119 if (STV090x_WRITE_DEMOD(state, CARFREQ, freq) < 0) in stv090x_chk_tmg()
2121 if (STV090x_WRITE_DEMOD(state, TMGTHRISE, tmg_thh) < 0) in stv090x_chk_tmg()
2123 if (STV090x_WRITE_DEMOD(state, TMGTHFALL, tmg_thl) < 0) in stv090x_chk_tmg()
2133 static int stv090x_get_coldlock(struct stv090x_state *state, s32 timeout_dmd) in stv090x_get_coldlock() argument
2135 struct dvb_frontend *fe = &state->frontend; in stv090x_get_coldlock()
2141 if (state->srate >= 10000000) in stv090x_get_coldlock()
2146 lock = stv090x_get_dmdlock(state, timeout_lock); /* cold start wait */ in stv090x_get_coldlock()
2148 if (state->srate >= 10000000) { in stv090x_get_coldlock()
2149 if (stv090x_chk_tmg(state)) { in stv090x_get_coldlock()
2150 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_get_coldlock()
2152 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0) in stv090x_get_coldlock()
2154 lock = stv090x_get_dmdlock(state, timeout_dmd); in stv090x_get_coldlock()
2159 if (state->srate <= 4000000) in stv090x_get_coldlock()
2161 else if (state->srate <= 7000000) in stv090x_get_coldlock()
2163 else if (state->srate <= 10000000) in stv090x_get_coldlock()
2168 steps = (state->search_range / 1000) / car_step; in stv090x_get_coldlock()
2180 freq = state->frequency; in stv090x_get_coldlock()
2181 state->tuner_bw = stv090x_car_width(state->srate, state->rolloff) + state->srate; in stv090x_get_coldlock()
2189 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_get_coldlock()
2192 if (state->config->tuner_set_frequency) { in stv090x_get_coldlock()
2193 if (state->config->tuner_set_frequency(fe, freq) < 0) in stv090x_get_coldlock()
2197 if (state->config->tuner_set_bandwidth) { in stv090x_get_coldlock()
2198 if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0) in stv090x_get_coldlock()
2202 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_get_coldlock()
2207 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_get_coldlock()
2210 if (state->config->tuner_get_status) { in stv090x_get_coldlock()
2211 if (state->config->tuner_get_status(fe, ®) < 0) in stv090x_get_coldlock()
2220 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_get_coldlock()
2223 STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1c); in stv090x_get_coldlock()
2224 if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0x00) < 0) in stv090x_get_coldlock()
2226 if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0x00) < 0) in stv090x_get_coldlock()
2228 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_get_coldlock()
2230 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0) in stv090x_get_coldlock()
2232 lock = stv090x_get_dmdlock(state, (timeout_dmd / 3)); in stv090x_get_coldlock()
2244 stv090x_i2c_gate_ctrl(state, 0); in stv090x_get_coldlock()
2250 static int stv090x_get_loop_params(struct stv090x_state *state, s32 *freq_inc, s32 *timeout_sw, s32… in stv090x_get_loop_params() argument
2254 srate = state->srate; in stv090x_get_loop_params()
2255 car_max = state->search_range / 1000; in stv090x_get_loop_params()
2258 car_max /= (state->internal->mclk / 1000); in stv090x_get_loop_params()
2264 inc /= state->internal->mclk / 1000; in stv090x_get_loop_params()
2269 switch (state->search_mode) { in stv090x_get_loop_params()
2310 static int stv090x_chk_signal(struct stv090x_state *state) in stv090x_chk_signal() argument
2315 offst_car = STV090x_READ_DEMOD(state, CFR2) << 8; in stv090x_chk_signal()
2316 offst_car |= STV090x_READ_DEMOD(state, CFR1); in stv090x_chk_signal()
2319 agc2 = STV090x_READ_DEMOD(state, AGC2I1) << 8; in stv090x_chk_signal()
2320 agc2 |= STV090x_READ_DEMOD(state, AGC2I0); in stv090x_chk_signal()
2321 car_max = state->search_range / 1000; in stv090x_chk_signal()
2325 car_max /= state->internal->mclk / 1000; in stv090x_chk_signal()
2341 static int stv090x_search_car_loop(struct stv090x_state *state, s32 inc, s32 timeout, int zigzag, s… in stv090x_search_car_loop() argument
2347 car_max = state->search_range / 1000; in stv090x_search_car_loop()
2350 car_max /= (state->internal->mclk / 1000); in stv090x_search_car_loop()
2360 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1c) < 0) in stv090x_search_car_loop()
2362 if (STV090x_WRITE_DEMOD(state, CFRINIT1, ((offst_freq / 256) & 0xff)) < 0) in stv090x_search_car_loop()
2364 if (STV090x_WRITE_DEMOD(state, CFRINIT0, offst_freq & 0xff) < 0) in stv090x_search_car_loop()
2366 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x18) < 0) in stv090x_search_car_loop()
2369 reg = STV090x_READ_DEMOD(state, PDELCTRL1); in stv090x_search_car_loop()
2371 if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) in stv090x_search_car_loop()
2385 lock = stv090x_get_dmdlock(state, timeout); in stv090x_search_car_loop()
2386 no_signal = stv090x_chk_signal(state); in stv090x_search_car_loop()
2394 reg = STV090x_READ_DEMOD(state, PDELCTRL1); in stv090x_search_car_loop()
2396 if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) in stv090x_search_car_loop()
2405 static int stv090x_sw_algo(struct stv090x_state *state) in stv090x_sw_algo() argument
2414 stv090x_get_loop_params(state, &inc, &timeout_step, &steps_max); in stv090x_sw_algo()
2416 switch (state->search_mode) { in stv090x_sw_algo()
2420 if (state->internal->dev_ver >= 0x20) { in stv090x_sw_algo()
2421 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x3B) < 0) in stv090x_sw_algo()
2425 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, 0x49) < 0) in stv090x_sw_algo()
2431 if (state->internal->dev_ver >= 0x20) { in stv090x_sw_algo()
2432 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x79) < 0) in stv090x_sw_algo()
2436 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, 0x89) < 0) in stv090x_sw_algo()
2444 if (state->internal->dev_ver >= 0x20) { in stv090x_sw_algo()
2445 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x3b) < 0) in stv090x_sw_algo()
2447 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x79) < 0) in stv090x_sw_algo()
2451 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, 0xc9) < 0) in stv090x_sw_algo()
2459 lock = stv090x_search_car_loop(state, inc, timeout_step, zigzag, steps_max); in stv090x_sw_algo()
2460 no_signal = stv090x_chk_signal(state); in stv090x_sw_algo()
2466 if (state->internal->dev_ver >= 0x20) { in stv090x_sw_algo()
2467 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x49) < 0) in stv090x_sw_algo()
2469 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x9e) < 0) in stv090x_sw_algo()
2473 reg = STV090x_READ_DEMOD(state, DMDSTATE); in stv090x_sw_algo()
2477 reg = STV090x_READ_DEMOD(state, DMDFLYW); in stv090x_sw_algo()
2481 reg = STV090x_READ_DEMOD(state, DMDFLYW); in stv090x_sw_algo()
2488 if (state->internal->dev_ver >= 0x20) { in stv090x_sw_algo()
2489 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x79) < 0) in stv090x_sw_algo()
2493 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, 0x89) < 0) in stv090x_sw_algo()
2507 static enum stv090x_delsys stv090x_get_std(struct stv090x_state *state) in stv090x_get_std() argument
2512 reg = STV090x_READ_DEMOD(state, DMDSTATE); in stv090x_get_std()
2516 reg = STV090x_READ_DEMOD(state, FECM); in stv090x_get_std()
2529 static s32 stv090x_get_car_freq(struct stv090x_state *state, u32 mclk) in stv090x_get_car_freq() argument
2533 derot = STV090x_READ_DEMOD(state, CFR2) << 16; in stv090x_get_car_freq()
2534 derot |= STV090x_READ_DEMOD(state, CFR1) << 8; in stv090x_get_car_freq()
2535 derot |= STV090x_READ_DEMOD(state, CFR0); in stv090x_get_car_freq()
2552 static int stv090x_get_viterbi(struct stv090x_state *state) in stv090x_get_viterbi() argument
2556 reg = STV090x_READ_DEMOD(state, VITCURPUN); in stv090x_get_viterbi()
2561 state->fec = STV090x_PR12; in stv090x_get_viterbi()
2565 state->fec = STV090x_PR23; in stv090x_get_viterbi()
2569 state->fec = STV090x_PR34; in stv090x_get_viterbi()
2573 state->fec = STV090x_PR56; in stv090x_get_viterbi()
2577 state->fec = STV090x_PR67; in stv090x_get_viterbi()
2581 state->fec = STV090x_PR78; in stv090x_get_viterbi()
2585 state->fec = STV090x_PRERR; in stv090x_get_viterbi()
2592 static enum stv090x_signal_state stv090x_get_sig_params(struct stv090x_state *state) in stv090x_get_sig_params() argument
2594 struct dvb_frontend *fe = &state->frontend; in stv090x_get_sig_params()
2602 if (state->algo == STV090x_BLIND_SEARCH) { in stv090x_get_sig_params()
2603 tmg = STV090x_READ_DEMOD(state, TMGREG2); in stv090x_get_sig_params()
2604 STV090x_WRITE_DEMOD(state, SFRSTEP, 0x5c); in stv090x_get_sig_params()
2606 tmg = STV090x_READ_DEMOD(state, TMGREG2); in stv090x_get_sig_params()
2611 state->delsys = stv090x_get_std(state); in stv090x_get_sig_params()
2613 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_get_sig_params()
2616 if (state->config->tuner_get_frequency) { in stv090x_get_sig_params()
2617 if (state->config->tuner_get_frequency(fe, &state->frequency) < 0) in stv090x_get_sig_params()
2621 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_get_sig_params()
2624 offst_freq = stv090x_get_car_freq(state, state->internal->mclk) / 1000; in stv090x_get_sig_params()
2625 state->frequency += offst_freq; in stv090x_get_sig_params()
2627 if (stv090x_get_viterbi(state) < 0) in stv090x_get_sig_params()
2630 reg = STV090x_READ_DEMOD(state, DMDMODCOD); in stv090x_get_sig_params()
2631 state->modcod = STV090x_GETFIELD_Px(reg, DEMOD_MODCOD_FIELD); in stv090x_get_sig_params()
2632 state->pilots = STV090x_GETFIELD_Px(reg, DEMOD_TYPE_FIELD) & 0x01; in stv090x_get_sig_params()
2633 state->frame_len = STV090x_GETFIELD_Px(reg, DEMOD_TYPE_FIELD) >> 1; in stv090x_get_sig_params()
2634 reg = STV090x_READ_DEMOD(state, TMGOBS); in stv090x_get_sig_params()
2635 state->rolloff = STV090x_GETFIELD_Px(reg, ROLLOFF_STATUS_FIELD); in stv090x_get_sig_params()
2636 reg = STV090x_READ_DEMOD(state, FECM); in stv090x_get_sig_params()
2637 state->inversion = STV090x_GETFIELD_Px(reg, IQINV_FIELD); in stv090x_get_sig_params()
2639 if ((state->algo == STV090x_BLIND_SEARCH) || (state->srate < 10000000)) { in stv090x_get_sig_params()
2641 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_get_sig_params()
2644 if (state->config->tuner_get_frequency) { in stv090x_get_sig_params()
2645 if (state->config->tuner_get_frequency(fe, &state->frequency) < 0) in stv090x_get_sig_params()
2649 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_get_sig_params()
2652 if (abs(offst_freq) <= ((state->search_range / 2000) + 500)) in stv090x_get_sig_params()
2654 else if (abs(offst_freq) <= (stv090x_car_width(state->srate, state->rolloff) / 2000)) in stv090x_get_sig_params()
2659 if (abs(offst_freq) <= ((state->search_range / 2000) + 500)) in stv090x_get_sig_params()
2668 stv090x_i2c_gate_ctrl(state, 0); in stv090x_get_sig_params()
2674 static u32 stv090x_get_tmgoffst(struct stv090x_state *state, u32 srate) in stv090x_get_tmgoffst() argument
2678 offst_tmg = STV090x_READ_DEMOD(state, TMGREG2) << 16; in stv090x_get_tmgoffst()
2679 offst_tmg |= STV090x_READ_DEMOD(state, TMGREG1) << 8; in stv090x_get_tmgoffst()
2680 offst_tmg |= STV090x_READ_DEMOD(state, TMGREG0); in stv090x_get_tmgoffst()
2692 static u8 stv090x_optimize_carloop(struct stv090x_state *state, enum stv090x_modcod modcod, s32 pil… in stv090x_optimize_carloop() argument
2698 if (state->internal->dev_ver == 0x20) { in stv090x_optimize_carloop()
2734 if (state->srate <= 3000000) in stv090x_optimize_carloop()
2736 else if (state->srate <= 7000000) in stv090x_optimize_carloop()
2738 else if (state->srate <= 15000000) in stv090x_optimize_carloop()
2740 else if (state->srate <= 25000000) in stv090x_optimize_carloop()
2745 if (state->srate <= 3000000) in stv090x_optimize_carloop()
2747 else if (state->srate <= 7000000) in stv090x_optimize_carloop()
2749 else if (state->srate <= 15000000) in stv090x_optimize_carloop()
2751 else if (state->srate <= 25000000) in stv090x_optimize_carloop()
2759 if (state->srate <= 3000000) in stv090x_optimize_carloop()
2761 else if (state->srate <= 7000000) in stv090x_optimize_carloop()
2763 else if (state->srate <= 15000000) in stv090x_optimize_carloop()
2765 else if (state->srate <= 25000000) in stv090x_optimize_carloop()
2770 if (state->srate <= 3000000) in stv090x_optimize_carloop()
2772 else if (state->srate <= 7000000) in stv090x_optimize_carloop()
2774 else if (state->srate <= 15000000) in stv090x_optimize_carloop()
2776 else if (state->srate <= 25000000) in stv090x_optimize_carloop()
2782 if (state->srate <= 3000000) in stv090x_optimize_carloop()
2784 else if (state->srate <= 7000000) in stv090x_optimize_carloop()
2786 else if (state->srate <= 15000000) in stv090x_optimize_carloop()
2788 else if (state->srate <= 25000000) in stv090x_optimize_carloop()
2797 static u8 stv090x_optimize_carloop_short(struct stv090x_state *state) in stv090x_optimize_carloop_short() argument
2803 switch (state->modulation) { in stv090x_optimize_carloop_short()
2819 if (state->internal->dev_ver >= 0x30) { in stv090x_optimize_carloop_short()
2827 if (state->srate <= 3000000) in stv090x_optimize_carloop_short()
2829 else if (state->srate <= 7000000) in stv090x_optimize_carloop_short()
2831 else if (state->srate <= 15000000) in stv090x_optimize_carloop_short()
2833 else if (state->srate <= 25000000) in stv090x_optimize_carloop_short()
2841 static int stv090x_optimize_track(struct stv090x_state *state) in stv090x_optimize_track() argument
2843 struct dvb_frontend *fe = &state->frontend; in stv090x_optimize_track()
2851 srate = stv090x_get_srate(state, state->internal->mclk); in stv090x_optimize_track()
2852 srate += stv090x_get_tmgoffst(state, srate); in stv090x_optimize_track()
2854 switch (state->delsys) { in stv090x_optimize_track()
2857 if (state->search_mode == STV090x_SEARCH_AUTO) { in stv090x_optimize_track()
2858 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_optimize_track()
2861 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_optimize_track()
2864 reg = STV090x_READ_DEMOD(state, DEMOD); in stv090x_optimize_track()
2865 STV090x_SETFIELD_Px(reg, ROLLOFF_CONTROL_FIELD, state->rolloff); in stv090x_optimize_track()
2867 if (STV090x_WRITE_DEMOD(state, DEMOD, reg) < 0) in stv090x_optimize_track()
2870 if (state->internal->dev_ver >= 0x30) { in stv090x_optimize_track()
2871 if (stv090x_get_viterbi(state) < 0) in stv090x_optimize_track()
2874 if (state->fec == STV090x_PR12) { in stv090x_optimize_track()
2875 if (STV090x_WRITE_DEMOD(state, GAUSSR0, 0x98) < 0) in stv090x_optimize_track()
2877 if (STV090x_WRITE_DEMOD(state, CCIR0, 0x18) < 0) in stv090x_optimize_track()
2880 if (STV090x_WRITE_DEMOD(state, GAUSSR0, 0x18) < 0) in stv090x_optimize_track()
2882 if (STV090x_WRITE_DEMOD(state, CCIR0, 0x18) < 0) in stv090x_optimize_track()
2887 if (STV090x_WRITE_DEMOD(state, ERRCTRL1, 0x75) < 0) in stv090x_optimize_track()
2892 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_optimize_track()
2895 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_optimize_track()
2897 if (state->internal->dev_ver >= 0x30) { in stv090x_optimize_track()
2898 if (STV090x_WRITE_DEMOD(state, ACLC, 0) < 0) in stv090x_optimize_track()
2900 if (STV090x_WRITE_DEMOD(state, BCLC, 0) < 0) in stv090x_optimize_track()
2903 if (state->frame_len == STV090x_LONG_FRAME) { in stv090x_optimize_track()
2904 reg = STV090x_READ_DEMOD(state, DMDMODCOD); in stv090x_optimize_track()
2907 aclc = stv090x_optimize_carloop(state, modcod, pilots); in stv090x_optimize_track()
2909 STV090x_WRITE_DEMOD(state, ACLC2S2Q, aclc); in stv090x_optimize_track()
2911 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2913 if (STV090x_WRITE_DEMOD(state, ACLC2S28, aclc) < 0) in stv090x_optimize_track()
2916 if ((state->demod_mode == STV090x_SINGLE) && (modcod > STV090x_8PSK_910)) { in stv090x_optimize_track()
2918 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2920 if (STV090x_WRITE_DEMOD(state, ACLC2S216A, aclc) < 0) in stv090x_optimize_track()
2923 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2925 if (STV090x_WRITE_DEMOD(state, ACLC2S232A, aclc) < 0) in stv090x_optimize_track()
2931 aclc = stv090x_optimize_carloop_short(state); in stv090x_optimize_track()
2932 if (state->modulation == STV090x_QPSK) { in stv090x_optimize_track()
2933 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, aclc) < 0) in stv090x_optimize_track()
2935 } else if (state->modulation == STV090x_8PSK) { in stv090x_optimize_track()
2936 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2938 if (STV090x_WRITE_DEMOD(state, ACLC2S28, aclc) < 0) in stv090x_optimize_track()
2940 } else if (state->modulation == STV090x_16APSK) { in stv090x_optimize_track()
2941 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2943 if (STV090x_WRITE_DEMOD(state, ACLC2S216A, aclc) < 0) in stv090x_optimize_track()
2945 } else if (state->modulation == STV090x_32APSK) { in stv090x_optimize_track()
2946 if (STV090x_WRITE_DEMOD(state, ACLC2S2Q, 0x2a) < 0) in stv090x_optimize_track()
2948 if (STV090x_WRITE_DEMOD(state, ACLC2S232A, aclc) < 0) in stv090x_optimize_track()
2953 STV090x_WRITE_DEMOD(state, ERRCTRL1, 0x67); /* PER */ in stv090x_optimize_track()
2958 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_optimize_track()
2961 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_optimize_track()
2966 f_1 = STV090x_READ_DEMOD(state, CFR2); in stv090x_optimize_track()
2967 f_0 = STV090x_READ_DEMOD(state, CFR1); in stv090x_optimize_track()
2968 reg = STV090x_READ_DEMOD(state, TMGOBS); in stv090x_optimize_track()
2971 if (state->algo == STV090x_BLIND_SEARCH) { in stv090x_optimize_track()
2972 STV090x_WRITE_DEMOD(state, SFRSTEP, 0x00); in stv090x_optimize_track()
2973 reg = STV090x_READ_DEMOD(state, DMDCFGMD); in stv090x_optimize_track()
2976 if (STV090x_WRITE_DEMOD(state, DMDCFGMD, reg) < 0) in stv090x_optimize_track()
2978 if (STV090x_WRITE_DEMOD(state, TMGCFG2, 0xc1) < 0) in stv090x_optimize_track()
2981 if (stv090x_set_srate(state, srate) < 0) in stv090x_optimize_track()
2985 if (stv090x_dvbs_track_crl(state) < 0) in stv090x_optimize_track()
2989 if (state->internal->dev_ver >= 0x20) { in stv090x_optimize_track()
2990 if ((state->search_mode == STV090x_SEARCH_DVBS1) || in stv090x_optimize_track()
2991 (state->search_mode == STV090x_SEARCH_DSS) || in stv090x_optimize_track()
2992 (state->search_mode == STV090x_SEARCH_AUTO)) { in stv090x_optimize_track()
2994 if (STV090x_WRITE_DEMOD(state, VAVSRVIT, 0x0a) < 0) in stv090x_optimize_track()
2996 if (STV090x_WRITE_DEMOD(state, VITSCALE, 0x00) < 0) in stv090x_optimize_track()
3001 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x38) < 0) in stv090x_optimize_track()
3005 if (STV090x_WRITE_DEMOD(state, SFRUP1, 0x80) < 0) in stv090x_optimize_track()
3008 if (STV090x_WRITE_DEMOD(state, SFRLOW1, 0x80) < 0) in stv090x_optimize_track()
3011 if ((state->internal->dev_ver >= 0x20) || (blind_tune == 1) || in stv090x_optimize_track()
3012 (state->srate < 10000000)) { in stv090x_optimize_track()
3014 if (STV090x_WRITE_DEMOD(state, CFRINIT1, f_1) < 0) in stv090x_optimize_track()
3016 if (STV090x_WRITE_DEMOD(state, CFRINIT0, f_0) < 0) in stv090x_optimize_track()
3018 state->tuner_bw = stv090x_car_width(srate, state->rolloff) + 10000000; in stv090x_optimize_track()
3020 if ((state->internal->dev_ver >= 0x20) || (blind_tune == 1)) { in stv090x_optimize_track()
3022 if (state->algo != STV090x_WARM_SEARCH) { in stv090x_optimize_track()
3024 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_optimize_track()
3027 if (state->config->tuner_set_bandwidth) { in stv090x_optimize_track()
3028 if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0) in stv090x_optimize_track()
3032 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_optimize_track()
3037 if ((state->algo == STV090x_BLIND_SEARCH) || (state->srate < 10000000)) in stv090x_optimize_track()
3042 stv090x_get_lock_tmg(state); in stv090x_optimize_track()
3044 if (!(stv090x_get_dmdlock(state, (state->DemodTimeout / 2)))) { in stv090x_optimize_track()
3045 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_optimize_track()
3047 if (STV090x_WRITE_DEMOD(state, CFRINIT1, f_1) < 0) in stv090x_optimize_track()
3049 if (STV090x_WRITE_DEMOD(state, CFRINIT0, f_0) < 0) in stv090x_optimize_track()
3051 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x18) < 0) in stv090x_optimize_track()
3056 while ((!(stv090x_get_dmdlock(state, (state->DemodTimeout / 2)))) && (i <= 2)) { in stv090x_optimize_track()
3058 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0) in stv090x_optimize_track()
3060 if (STV090x_WRITE_DEMOD(state, CFRINIT1, f_1) < 0) in stv090x_optimize_track()
3062 if (STV090x_WRITE_DEMOD(state, CFRINIT0, f_0) < 0) in stv090x_optimize_track()
3064 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x18) < 0) in stv090x_optimize_track()
3072 if (state->internal->dev_ver >= 0x20) { in stv090x_optimize_track()
3073 if (STV090x_WRITE_DEMOD(state, CARFREQ, 0x49) < 0) in stv090x_optimize_track()
3077 if ((state->delsys == STV090x_DVBS1) || (state->delsys == STV090x_DSS)) in stv090x_optimize_track()
3078 stv090x_set_vit_thtracq(state); in stv090x_optimize_track()
3083 stv090x_i2c_gate_ctrl(state, 0); in stv090x_optimize_track()
3089 static int stv090x_get_feclock(struct stv090x_state *state, s32 timeout) in stv090x_get_feclock() argument
3095 reg = STV090x_READ_DEMOD(state, DMDSTATE); in stv090x_get_feclock()
3106 reg = STV090x_READ_DEMOD(state, PDELSTATUS1); in stv090x_get_feclock()
3111 reg = STV090x_READ_DEMOD(state, VSTATUSVIT); in stv090x_get_feclock()
3123 static int stv090x_get_lock(struct stv090x_state *state, s32 timeout_dmd, s32 timeout_fec) in stv090x_get_lock() argument
3129 lock = stv090x_get_dmdlock(state, timeout_dmd); in stv090x_get_lock()
3131 lock = stv090x_get_feclock(state, timeout_fec); in stv090x_get_lock()
3137 reg = STV090x_READ_DEMOD(state, TSSTATUS); in stv090x_get_lock()
3147 static int stv090x_set_s2rolloff(struct stv090x_state *state) in stv090x_set_s2rolloff() argument
3151 if (state->internal->dev_ver <= 0x20) { in stv090x_set_s2rolloff()
3153 reg = STV090x_READ_DEMOD(state, DEMOD); in stv090x_set_s2rolloff()
3155 if (STV090x_WRITE_DEMOD(state, DEMOD, reg) < 0) in stv090x_set_s2rolloff()
3159 reg = STV090x_READ_DEMOD(state, DEMOD); in stv090x_set_s2rolloff()
3161 if (STV090x_WRITE_DEMOD(state, DEMOD, reg) < 0) in stv090x_set_s2rolloff()
3171 static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state) in stv090x_algo() argument
3173 struct dvb_frontend *fe = &state->frontend; in stv090x_algo()
3179 reg = STV090x_READ_DEMOD(state, TSCFGH); in stv090x_algo()
3181 if (STV090x_WRITE_DEMOD(state, TSCFGH, reg) < 0) in stv090x_algo()
3184 if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x5c) < 0) /* Demod stop */ in stv090x_algo()
3187 if (state->internal->dev_ver >= 0x20) { in stv090x_algo()
3188 if (state->srate > 5000000) { in stv090x_algo()
3189 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x9e) < 0) in stv090x_algo()
3192 if (STV090x_WRITE_DEMOD(state, CORRELABS, 0x82) < 0) in stv090x_algo()
3197 stv090x_get_lock_tmg(state); in stv090x_algo()
3199 if (state->algo == STV090x_BLIND_SEARCH) { in stv090x_algo()
3200 state->tuner_bw = 2 * 36000000; /* wide bw for unknown srate */ in stv090x_algo()
3201 if (STV090x_WRITE_DEMOD(state, TMGCFG2, 0xc0) < 0) /* wider srate scan */ in stv090x_algo()
3203 if (STV090x_WRITE_DEMOD(state, CORRELMANT, 0x70) < 0) in stv090x_algo()
3205 if (stv090x_set_srate(state, 1000000) < 0) /* initial srate = 1Msps */ in stv090x_algo()
3209 if (STV090x_WRITE_DEMOD(state, DMDTOM, 0x20) < 0) in stv090x_algo()
3211 if (STV090x_WRITE_DEMOD(state, TMGCFG, 0xd2) < 0) in stv090x_algo()
3214 if (state->srate < 2000000) { in stv090x_algo()
3216 if (STV090x_WRITE_DEMOD(state, CORRELMANT, 0x63) < 0) in stv090x_algo()
3220 if (STV090x_WRITE_DEMOD(state, CORRELMANT, 0x70) < 0) in stv090x_algo()
3224 if (STV090x_WRITE_DEMOD(state, AGC2REF, 0x38) < 0) in stv090x_algo()
3227 if (state->internal->dev_ver >= 0x20) { in stv090x_algo()
3228 if (STV090x_WRITE_DEMOD(state, KREFTMG, 0x5a) < 0) in stv090x_algo()
3230 if (state->algo == STV090x_COLD_SEARCH) in stv090x_algo()
3231 state->tuner_bw = (15 * (stv090x_car_width(state->srate, state->rolloff) + 10000000)) / 10; in stv090x_algo()
3232 else if (state->algo == STV090x_WARM_SEARCH) in stv090x_algo()
3233 state->tuner_bw = stv090x_car_width(state->srate, state->rolloff) + 10000000; in stv090x_algo()
3239 if (STV090x_WRITE_DEMOD(state, TMGCFG2, 0xc1) < 0) /* narrow srate scan */ in stv090x_algo()
3242 if (stv090x_set_srate(state, state->srate) < 0) in stv090x_algo()
3245 if (stv090x_set_max_srate(state, state->internal->mclk, in stv090x_algo()
3246 state->srate) < 0) in stv090x_algo()
3248 if (stv090x_set_min_srate(state, state->internal->mclk, in stv090x_algo()
3249 state->srate) < 0) in stv090x_algo()
3252 if (state->srate >= 10000000) in stv090x_algo()
3259 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_algo()
3262 if (state->config->tuner_set_bbgain) { in stv090x_algo()
3263 reg = state->config->tuner_bbgain; in stv090x_algo()
3266 if (state->config->tuner_set_bbgain(fe, reg) < 0) in stv090x_algo()
3270 if (state->config->tuner_set_frequency) { in stv090x_algo()
3271 if (state->config->tuner_set_frequency(fe, state->frequency) < 0) in stv090x_algo()
3275 if (state->config->tuner_set_bandwidth) { in stv090x_algo()
3276 if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0) in stv090x_algo()
3280 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_algo()
3285 if (state->config->tuner_get_status) { in stv090x_algo()
3286 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_algo()
3288 if (state->config->tuner_get_status(fe, ®) < 0) in stv090x_algo()
3290 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_algo()
3302 agc1_power = MAKEWORD16(STV090x_READ_DEMOD(state, AGCIQIN1), in stv090x_algo()
3303 STV090x_READ_DEMOD(state, AGCIQIN0)); in stv090x_algo()
3310 power_iq += (STV090x_READ_DEMOD(state, POWERI) + in stv090x_algo()
3311 STV090x_READ_DEMOD(state, POWERQ)) >> 1; in stv090x_algo()
3321 reg = STV090x_READ_DEMOD(state, DEMOD); in stv090x_algo()
3322 STV090x_SETFIELD_Px(reg, SPECINV_CONTROL_FIELD, state->inversion); in stv090x_algo()
3324 if (state->internal->dev_ver <= 0x20) { in stv090x_algo()
3331 if (STV090x_WRITE_DEMOD(state, DEMOD, reg) < 0) in stv090x_algo()
3334 if (stv090x_delivery_search(state) < 0) in stv090x_algo()
3337 if (state->algo != STV090x_BLIND_SEARCH) { in stv090x_algo()
3338 if (stv090x_start_search(state) < 0) in stv090x_algo()
3346 if (state->algo == STV090x_BLIND_SEARCH) in stv090x_algo()
3347 lock = stv090x_blind_search(state); in stv090x_algo()
3349 else if (state->algo == STV090x_COLD_SEARCH) in stv090x_algo()
3350 lock = stv090x_get_coldlock(state, state->DemodTimeout); in stv090x_algo()
3352 else if (state->algo == STV090x_WARM_SEARCH) in stv090x_algo()
3353 lock = stv090x_get_dmdlock(state, state->DemodTimeout); in stv090x_algo()
3355 if ((!lock) && (state->algo == STV090x_COLD_SEARCH)) { in stv090x_algo()
3357 if (stv090x_chk_tmg(state)) in stv090x_algo()
3358 lock = stv090x_sw_algo(state); in stv090x_algo()
3363 signal_state = stv090x_get_sig_params(state); in stv090x_algo()
3366 stv090x_optimize_track(state); in stv090x_algo()
3368 if (state->internal->dev_ver >= 0x20) { in stv090x_algo()
3372 reg = STV090x_READ_DEMOD(state, TSCFGH); in stv090x_algo()
3374 if (STV090x_WRITE_DEMOD(state, TSCFGH, reg) < 0) in stv090x_algo()
3380 if (STV090x_WRITE_DEMOD(state, TSCFGH, reg) < 0) in stv090x_algo()
3384 if (STV090x_WRITE_DEMOD(state, TSCFGH, reg) < 0) in stv090x_algo()
3388 lock = stv090x_get_lock(state, state->FecTimeout, in stv090x_algo()
3389 state->FecTimeout); in stv090x_algo()
3391 if (state->delsys == STV090x_DVBS2) { in stv090x_algo()
3392 stv090x_set_s2rolloff(state); in stv090x_algo()
3394 reg = STV090x_READ_DEMOD(state, PDELCTRL2); in stv090x_algo()
3396 if (STV090x_WRITE_DEMOD(state, PDELCTRL2, reg) < 0) in stv090x_algo()
3399 reg = STV090x_READ_DEMOD(state, PDELCTRL2); in stv090x_algo()
3401 if (STV090x_WRITE_DEMOD(state, PDELCTRL2, reg) < 0) in stv090x_algo()
3404 if (STV090x_WRITE_DEMOD(state, ERRCTRL1, 0x67) < 0) /* PER */ in stv090x_algo()
3407 if (STV090x_WRITE_DEMOD(state, ERRCTRL1, 0x75) < 0) in stv090x_algo()
3411 if (STV090x_WRITE_DEMOD(state, FBERCPT4, 0x00) < 0) in stv090x_algo()
3414 if (STV090x_WRITE_DEMOD(state, ERRCTRL2, 0xc1) < 0) in stv090x_algo()
3418 no_signal = stv090x_chk_signal(state); in stv090x_algo()
3424 stv090x_i2c_gate_ctrl(state, 0); in stv090x_algo()
3432 struct stv090x_state *state = fe->demodulator_priv; in stv090x_search() local
3438 state->delsys = props->delivery_system; in stv090x_search()
3439 state->frequency = props->frequency; in stv090x_search()
3440 state->srate = props->symbol_rate; in stv090x_search()
3441 state->search_mode = STV090x_SEARCH_AUTO; in stv090x_search()
3442 state->algo = STV090x_COLD_SEARCH; in stv090x_search()
3443 state->fec = STV090x_PRERR; in stv090x_search()
3444 if (state->srate > 10000000) { in stv090x_search()
3446 state->search_range = 10000000; in stv090x_search()
3449 state->search_range = 5000000; in stv090x_search()
3452 if (stv090x_algo(state) == STV090x_RANGEOK) { in stv090x_search()
3465 struct stv090x_state *state = fe->demodulator_priv; in stv090x_read_status() local
3471 dstatus = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_read_status()
3475 reg = STV090x_READ_DEMOD(state, DMDSTATE); in stv090x_read_status()
3488 reg = STV090x_READ_DEMOD(state, PDELSTATUS1); in stv090x_read_status()
3491 reg = STV090x_READ_DEMOD(state, TSSTATUS); in stv090x_read_status()
3501 reg = STV090x_READ_DEMOD(state, VSTATUSVIT); in stv090x_read_status()
3504 reg = STV090x_READ_DEMOD(state, TSSTATUS); in stv090x_read_status()
3517 struct stv090x_state *state = fe->demodulator_priv; in stv090x_read_per() local
3528 reg = STV090x_READ_DEMOD(state, ERRCNT22); in stv090x_read_per()
3531 reg = STV090x_READ_DEMOD(state, ERRCNT21); in stv090x_read_per()
3534 reg = STV090x_READ_DEMOD(state, ERRCNT20); in stv090x_read_per()
3539 count_4 = STV090x_READ_DEMOD(state, FBERCPT4); in stv090x_read_per()
3540 count_3 = STV090x_READ_DEMOD(state, FBERCPT3); in stv090x_read_per()
3541 count_2 = STV090x_READ_DEMOD(state, FBERCPT2); in stv090x_read_per()
3542 count_1 = STV090x_READ_DEMOD(state, FBERCPT1); in stv090x_read_per()
3543 count_0 = STV090x_READ_DEMOD(state, FBERCPT0); in stv090x_read_per()
3555 if (STV090x_WRITE_DEMOD(state, FBERCPT4, 0) < 0) in stv090x_read_per()
3557 if (STV090x_WRITE_DEMOD(state, ERRCTRL2, 0xc1) < 0) in stv090x_read_per()
3604 struct stv090x_state *state = fe->demodulator_priv; in stv090x_read_signal_strength() local
3609 reg = STV090x_READ_DEMOD(state, AGCIQIN1); in stv090x_read_signal_strength()
3611 reg = STV090x_READ_DEMOD(state, AGCIQIN0); in stv090x_read_signal_strength()
3628 struct stv090x_state *state = fe->demodulator_priv; in stv090x_read_cnr() local
3635 switch (state->delsys) { in stv090x_read_cnr()
3637 reg = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_read_cnr()
3642 reg_1 = STV090x_READ_DEMOD(state, NNOSPLHT1); in stv090x_read_cnr()
3644 reg_0 = STV090x_READ_DEMOD(state, NNOSPLHT0); in stv090x_read_cnr()
3659 reg = STV090x_READ_DEMOD(state, DSTATUS); in stv090x_read_cnr()
3664 reg_1 = STV090x_READ_DEMOD(state, NOSDATAT1); in stv090x_read_cnr()
3666 reg_0 = STV090x_READ_DEMOD(state, NOSDATAT0); in stv090x_read_cnr()
3687 struct stv090x_state *state = fe->demodulator_priv; in stv090x_set_tone() local
3690 reg = STV090x_READ_DEMOD(state, DISTXCTL); in stv090x_set_tone()
3695 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_set_tone()
3698 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_set_tone()
3705 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_set_tone()
3726 struct stv090x_state *state = fe->demodulator_priv; in stv090x_send_diseqc_msg() local
3730 reg = STV090x_READ_DEMOD(state, DISTXCTL); in stv090x_send_diseqc_msg()
3733 (state->config->diseqc_envelope_mode) ? 4 : 2); in stv090x_send_diseqc_msg()
3735 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_msg()
3738 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_msg()
3742 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_msg()
3748 reg = STV090x_READ_DEMOD(state, DISTXSTATUS); in stv090x_send_diseqc_msg()
3752 if (STV090x_WRITE_DEMOD(state, DISTXDATA, cmd->msg[i]) < 0) in stv090x_send_diseqc_msg()
3755 reg = STV090x_READ_DEMOD(state, DISTXCTL); in stv090x_send_diseqc_msg()
3757 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_msg()
3763 reg = STV090x_READ_DEMOD(state, DISTXSTATUS); in stv090x_send_diseqc_msg()
3777 struct stv090x_state *state = fe->demodulator_priv; in stv090x_send_diseqc_burst() local
3782 reg = STV090x_READ_DEMOD(state, DISTXCTL); in stv090x_send_diseqc_burst()
3785 mode = (state->config->diseqc_envelope_mode) ? 5 : 3; in stv090x_send_diseqc_burst()
3788 mode = (state->config->diseqc_envelope_mode) ? 4 : 2; in stv090x_send_diseqc_burst()
3794 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_burst()
3797 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_burst()
3801 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_burst()
3805 reg = STV090x_READ_DEMOD(state, DISTXSTATUS); in stv090x_send_diseqc_burst()
3809 if (STV090x_WRITE_DEMOD(state, DISTXDATA, value) < 0) in stv090x_send_diseqc_burst()
3812 reg = STV090x_READ_DEMOD(state, DISTXCTL); in stv090x_send_diseqc_burst()
3814 if (STV090x_WRITE_DEMOD(state, DISTXCTL, reg) < 0) in stv090x_send_diseqc_burst()
3820 reg = STV090x_READ_DEMOD(state, DISTXSTATUS); in stv090x_send_diseqc_burst()
3834 struct stv090x_state *state = fe->demodulator_priv; in stv090x_recv_slave_reply() local
3840 reg = STV090x_READ_DEMOD(state, DISRX_ST0); in stv090x_recv_slave_reply()
3847 reply->msg[i] = STV090x_READ_DEMOD(state, DISRXDATA); in stv090x_recv_slave_reply()
3855 struct stv090x_state *state = fe->demodulator_priv; in stv090x_sleep() local
3859 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_sleep()
3862 if (state->config->tuner_sleep) { in stv090x_sleep()
3863 if (state->config->tuner_sleep(fe) < 0) in stv090x_sleep()
3867 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_sleep()
3871 state->device == STV0900 ? "STV0900" : "STV0903", in stv090x_sleep()
3872 state->demod); in stv090x_sleep()
3874 mutex_lock(&state->internal->demod_lock); in stv090x_sleep()
3876 switch (state->demod) { in stv090x_sleep()
3879 reg = stv090x_read_reg(state, STV090x_TSTTNR1); in stv090x_sleep()
3881 if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0) in stv090x_sleep()
3884 reg = stv090x_read_reg(state, STV090x_TSTTNR2); in stv090x_sleep()
3886 if (stv090x_write_reg(state, STV090x_TSTTNR2, reg) < 0) in stv090x_sleep()
3891 reg = stv090x_read_reg(state, STV090x_TSTTNR3); in stv090x_sleep()
3896 reg = stv090x_read_reg(state, STV090x_STOPCLK1); in stv090x_sleep()
3905 if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0) in stv090x_sleep()
3907 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_sleep()
3916 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_sleep()
3922 reg = stv090x_read_reg(state, STV090x_TSTTNR3); in stv090x_sleep()
3924 if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0) in stv090x_sleep()
3927 reg = stv090x_read_reg(state, STV090x_TSTTNR4); in stv090x_sleep()
3929 if (stv090x_write_reg(state, STV090x_TSTTNR4, reg) < 0) in stv090x_sleep()
3934 reg = stv090x_read_reg(state, STV090x_TSTTNR1); in stv090x_sleep()
3939 reg = stv090x_read_reg(state, STV090x_STOPCLK1); in stv090x_sleep()
3948 if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0) in stv090x_sleep()
3950 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_sleep()
3959 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_sleep()
3970 reg = stv090x_read_reg(state, STV090x_SYNTCTRL); in stv090x_sleep()
3972 if (stv090x_write_reg(state, STV090x_SYNTCTRL, reg) < 0) in stv090x_sleep()
3976 mutex_unlock(&state->internal->demod_lock); in stv090x_sleep()
3980 stv090x_i2c_gate_ctrl(state, 0); in stv090x_sleep()
3982 mutex_unlock(&state->internal->demod_lock); in stv090x_sleep()
3989 struct stv090x_state *state = fe->demodulator_priv; in stv090x_wakeup() local
3993 state->device == STV0900 ? "STV0900" : "STV0903", in stv090x_wakeup()
3994 state->demod); in stv090x_wakeup()
3996 mutex_lock(&state->internal->demod_lock); in stv090x_wakeup()
3999 reg = stv090x_read_reg(state, STV090x_SYNTCTRL); in stv090x_wakeup()
4001 if (stv090x_write_reg(state, STV090x_SYNTCTRL, reg) < 0) in stv090x_wakeup()
4004 switch (state->demod) { in stv090x_wakeup()
4007 reg = stv090x_read_reg(state, STV090x_TSTTNR1); in stv090x_wakeup()
4009 if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0) in stv090x_wakeup()
4012 reg = stv090x_read_reg(state, STV090x_TSTTNR2); in stv090x_wakeup()
4014 if (stv090x_write_reg(state, STV090x_TSTTNR2, reg) < 0) in stv090x_wakeup()
4018 reg = stv090x_read_reg(state, STV090x_STOPCLK1); in stv090x_wakeup()
4025 if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0) in stv090x_wakeup()
4027 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_wakeup()
4034 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_wakeup()
4040 reg = stv090x_read_reg(state, STV090x_TSTTNR3); in stv090x_wakeup()
4042 if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0) in stv090x_wakeup()
4045 reg = stv090x_read_reg(state, STV090x_TSTTNR4); in stv090x_wakeup()
4047 if (stv090x_write_reg(state, STV090x_TSTTNR4, reg) < 0) in stv090x_wakeup()
4051 reg = stv090x_read_reg(state, STV090x_STOPCLK1); in stv090x_wakeup()
4058 if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0) in stv090x_wakeup()
4060 reg = stv090x_read_reg(state, STV090x_STOPCLK2); in stv090x_wakeup()
4067 if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0) in stv090x_wakeup()
4076 mutex_unlock(&state->internal->demod_lock); in stv090x_wakeup()
4079 mutex_unlock(&state->internal->demod_lock); in stv090x_wakeup()
4086 struct stv090x_state *state = fe->demodulator_priv; in stv090x_release() local
4088 state->internal->num_used--; in stv090x_release()
4089 if (state->internal->num_used <= 0) { in stv090x_release()
4093 remove_dev(state->internal); in stv090x_release()
4094 kfree(state->internal); in stv090x_release()
4097 kfree(state); in stv090x_release()
4100 static int stv090x_ldpc_mode(struct stv090x_state *state, enum stv090x_mode ldpc_mode) in stv090x_ldpc_mode() argument
4104 reg = stv090x_read_reg(state, STV090x_GENCFG); in stv090x_ldpc_mode()
4109 if ((state->demod_mode != STV090x_DUAL) || (STV090x_GETFIELD(reg, DDEMOD_FIELD) != 1)) { in stv090x_ldpc_mode()
4111 if (stv090x_write_reg(state, STV090x_GENCFG, 0x1d) < 0) in stv090x_ldpc_mode()
4114 state->demod_mode = STV090x_DUAL; in stv090x_ldpc_mode()
4116 reg = stv090x_read_reg(state, STV090x_TSTRES0); in stv090x_ldpc_mode()
4118 if (stv090x_write_reg(state, STV090x_TSTRES0, reg) < 0) in stv090x_ldpc_mode()
4121 if (stv090x_write_reg(state, STV090x_TSTRES0, reg) < 0) in stv090x_ldpc_mode()
4124 if (STV090x_WRITE_DEMOD(state, MODCODLST0, 0xff) < 0) in stv090x_ldpc_mode()
4126 if (STV090x_WRITE_DEMOD(state, MODCODLST1, 0xff) < 0) in stv090x_ldpc_mode()
4128 if (STV090x_WRITE_DEMOD(state, MODCODLST2, 0xff) < 0) in stv090x_ldpc_mode()
4130 if (STV090x_WRITE_DEMOD(state, MODCODLST3, 0xff) < 0) in stv090x_ldpc_mode()
4132 if (STV090x_WRITE_DEMOD(state, MODCODLST4, 0xff) < 0) in stv090x_ldpc_mode()
4134 if (STV090x_WRITE_DEMOD(state, MODCODLST5, 0xff) < 0) in stv090x_ldpc_mode()
4136 if (STV090x_WRITE_DEMOD(state, MODCODLST6, 0xff) < 0) in stv090x_ldpc_mode()
4139 if (STV090x_WRITE_DEMOD(state, MODCODLST7, 0xcc) < 0) in stv090x_ldpc_mode()
4141 if (STV090x_WRITE_DEMOD(state, MODCODLST8, 0xcc) < 0) in stv090x_ldpc_mode()
4143 if (STV090x_WRITE_DEMOD(state, MODCODLST9, 0xcc) < 0) in stv090x_ldpc_mode()
4145 if (STV090x_WRITE_DEMOD(state, MODCODLSTA, 0xcc) < 0) in stv090x_ldpc_mode()
4147 if (STV090x_WRITE_DEMOD(state, MODCODLSTB, 0xcc) < 0) in stv090x_ldpc_mode()
4149 if (STV090x_WRITE_DEMOD(state, MODCODLSTC, 0xcc) < 0) in stv090x_ldpc_mode()
4151 if (STV090x_WRITE_DEMOD(state, MODCODLSTD, 0xcc) < 0) in stv090x_ldpc_mode()
4154 if (STV090x_WRITE_DEMOD(state, MODCODLSTE, 0xff) < 0) in stv090x_ldpc_mode()
4156 if (STV090x_WRITE_DEMOD(state, MODCODLSTF, 0xcf) < 0) in stv090x_ldpc_mode()
4162 if (stv090x_stop_modcod(state) < 0) in stv090x_ldpc_mode()
4164 if (stv090x_activate_modcod_single(state) < 0) in stv090x_ldpc_mode()
4167 if (state->demod == STV090x_DEMODULATOR_1) { in stv090x_ldpc_mode()
4168 if (stv090x_write_reg(state, STV090x_GENCFG, 0x06) < 0) /* path 2 */ in stv090x_ldpc_mode()
4171 if (stv090x_write_reg(state, STV090x_GENCFG, 0x04) < 0) /* path 1 */ in stv090x_ldpc_mode()
4175 reg = stv090x_read_reg(state, STV090x_TSTRES0); in stv090x_ldpc_mode()
4177 if (stv090x_write_reg(state, STV090x_TSTRES0, reg) < 0) in stv090x_ldpc_mode()
4180 if (stv090x_write_reg(state, STV090x_TSTRES0, reg) < 0) in stv090x_ldpc_mode()
4183 reg = STV090x_READ_DEMOD(state, PDELCTRL1); in stv090x_ldpc_mode()
4185 if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) in stv090x_ldpc_mode()
4188 if (STV090x_WRITE_DEMOD(state, PDELCTRL1, reg) < 0) in stv090x_ldpc_mode()
4200 static u32 stv090x_get_mclk(struct stv090x_state *state) in stv090x_get_mclk() argument
4202 const struct stv090x_config *config = state->config; in stv090x_get_mclk()
4206 div = stv090x_read_reg(state, STV090x_NCOARSE); in stv090x_get_mclk()
4207 reg = stv090x_read_reg(state, STV090x_SYNTCTRL); in stv090x_get_mclk()
4213 static int stv090x_set_mclk(struct stv090x_state *state, u32 mclk, u32 clk) in stv090x_set_mclk() argument
4215 const struct stv090x_config *config = state->config; in stv090x_set_mclk()
4218 reg = stv090x_read_reg(state, STV090x_SYNTCTRL); in stv090x_set_mclk()
4223 reg = stv090x_read_reg(state, STV090x_NCOARSE); in stv090x_set_mclk()
4225 if (stv090x_write_reg(state, STV090x_NCOARSE, reg) < 0) in stv090x_set_mclk()
4228 state->internal->mclk = stv090x_get_mclk(state); in stv090x_set_mclk()
4231 div = state->internal->mclk / 704000; in stv090x_set_mclk()
4232 if (STV090x_WRITE_DEMOD(state, F22TX, div) < 0) in stv090x_set_mclk()
4234 if (STV090x_WRITE_DEMOD(state, F22RX, div) < 0) in stv090x_set_mclk()
4243 static int stv090x_set_tspath(struct stv090x_state *state) in stv090x_set_tspath() argument
4247 if (state->internal->dev_ver >= 0x20) { in stv090x_set_tspath()
4248 switch (state->config->ts1_mode) { in stv090x_set_tspath()
4251 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4255 stv090x_write_reg(state, STV090x_TSGENERAL, 0x00); in stv090x_set_tspath()
4260 if (stv090x_write_reg(state, STV090x_TSGENERAL, 0x06) < 0) /* Mux'd stream mode */ in stv090x_set_tspath()
4262 reg = stv090x_read_reg(state, STV090x_P1_TSCFGM); in stv090x_set_tspath()
4264 if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0) in stv090x_set_tspath()
4266 reg = stv090x_read_reg(state, STV090x_P2_TSCFGM); in stv090x_set_tspath()
4268 if (stv090x_write_reg(state, STV090x_P2_TSCFGM, reg) < 0) in stv090x_set_tspath()
4270 if (stv090x_write_reg(state, STV090x_P1_TSSPEED, 0x14) < 0) in stv090x_set_tspath()
4272 if (stv090x_write_reg(state, STV090x_P2_TSSPEED, 0x28) < 0) in stv090x_set_tspath()
4281 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4285 if (stv090x_write_reg(state, STV090x_TSGENERAL, 0x0c) < 0) in stv090x_set_tspath()
4291 if (stv090x_write_reg(state, STV090x_TSGENERAL, 0x0a) < 0) in stv090x_set_tspath()
4298 switch (state->config->ts1_mode) { in stv090x_set_tspath()
4301 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4305 stv090x_write_reg(state, STV090x_TSGENERAL1X, 0x10); in stv090x_set_tspath()
4310 stv090x_write_reg(state, STV090x_TSGENERAL1X, 0x16); in stv090x_set_tspath()
4311 reg = stv090x_read_reg(state, STV090x_P1_TSCFGM); in stv090x_set_tspath()
4313 if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0) in stv090x_set_tspath()
4315 reg = stv090x_read_reg(state, STV090x_P1_TSCFGM); in stv090x_set_tspath()
4317 if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0) in stv090x_set_tspath()
4319 if (stv090x_write_reg(state, STV090x_P1_TSSPEED, 0x14) < 0) in stv090x_set_tspath()
4321 if (stv090x_write_reg(state, STV090x_P2_TSSPEED, 0x28) < 0) in stv090x_set_tspath()
4330 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4334 stv090x_write_reg(state, STV090x_TSGENERAL1X, 0x14); in stv090x_set_tspath()
4339 stv090x_write_reg(state, STV090x_TSGENERAL1X, 0x12); in stv090x_set_tspath()
4346 switch (state->config->ts1_mode) { in stv090x_set_tspath()
4348 reg = stv090x_read_reg(state, STV090x_P1_TSCFGH); in stv090x_set_tspath()
4349 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts1_tei); in stv090x_set_tspath()
4352 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4357 reg = stv090x_read_reg(state, STV090x_P1_TSCFGH); in stv090x_set_tspath()
4358 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts1_tei); in stv090x_set_tspath()
4361 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4366 reg = stv090x_read_reg(state, STV090x_P1_TSCFGH); in stv090x_set_tspath()
4367 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts1_tei); in stv090x_set_tspath()
4370 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4375 reg = stv090x_read_reg(state, STV090x_P1_TSCFGH); in stv090x_set_tspath()
4376 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts1_tei); in stv090x_set_tspath()
4379 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4387 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4389 reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); in stv090x_set_tspath()
4390 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts2_tei); in stv090x_set_tspath()
4393 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4398 reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); in stv090x_set_tspath()
4399 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts2_tei); in stv090x_set_tspath()
4402 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4407 reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); in stv090x_set_tspath()
4408 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts2_tei); in stv090x_set_tspath()
4411 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4416 reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); in stv090x_set_tspath()
4417 STV090x_SETFIELD_Px(reg, TSFIFO_TEIUPDATE_FIELD, state->config->ts2_tei); in stv090x_set_tspath()
4420 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4428 if (state->config->ts1_clk > 0) { in stv090x_set_tspath()
4431 switch (state->config->ts1_mode) { in stv090x_set_tspath()
4435 speed = state->internal->mclk / in stv090x_set_tspath()
4436 (state->config->ts1_clk / 4); in stv090x_set_tspath()
4444 speed = state->internal->mclk / in stv090x_set_tspath()
4445 (state->config->ts1_clk / 32); in stv090x_set_tspath()
4452 reg = stv090x_read_reg(state, STV090x_P1_TSCFGM); in stv090x_set_tspath()
4454 if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0) in stv090x_set_tspath()
4456 if (stv090x_write_reg(state, STV090x_P1_TSSPEED, speed) < 0) in stv090x_set_tspath()
4460 if (state->config->ts2_clk > 0) { in stv090x_set_tspath()
4463 switch (state->config->ts2_mode) { in stv090x_set_tspath()
4467 speed = state->internal->mclk / in stv090x_set_tspath()
4468 (state->config->ts2_clk / 4); in stv090x_set_tspath()
4476 speed = state->internal->mclk / in stv090x_set_tspath()
4477 (state->config->ts2_clk / 32); in stv090x_set_tspath()
4484 reg = stv090x_read_reg(state, STV090x_P2_TSCFGM); in stv090x_set_tspath()
4486 if (stv090x_write_reg(state, STV090x_P2_TSCFGM, reg) < 0) in stv090x_set_tspath()
4488 if (stv090x_write_reg(state, STV090x_P2_TSSPEED, speed) < 0) in stv090x_set_tspath()
4492 reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); in stv090x_set_tspath()
4494 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4497 if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) in stv090x_set_tspath()
4500 reg = stv090x_read_reg(state, STV090x_P1_TSCFGH); in stv090x_set_tspath()
4502 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4505 if (stv090x_write_reg(state, STV090x_P1_TSCFGH, reg) < 0) in stv090x_set_tspath()
4516 struct stv090x_state *state = fe->demodulator_priv; in stv090x_init() local
4517 const struct stv090x_config *config = state->config; in stv090x_init()
4520 if (state->internal->mclk == 0) { in stv090x_init()
4524 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_init()
4532 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_init()
4535 stv090x_set_mclk(state, 135000000, config->xtal); /* 135 Mhz */ in stv090x_init()
4537 if (stv090x_write_reg(state, STV090x_SYNTCTRL, in stv090x_init()
4540 stv090x_get_mclk(state); in stv090x_init()
4548 if (stv090x_ldpc_mode(state, state->demod_mode) < 0) in stv090x_init()
4551 reg = STV090x_READ_DEMOD(state, TNRCFG2); in stv090x_init()
4552 STV090x_SETFIELD_Px(reg, TUN_IQSWAP_FIELD, state->inversion); in stv090x_init()
4553 if (STV090x_WRITE_DEMOD(state, TNRCFG2, reg) < 0) in stv090x_init()
4555 reg = STV090x_READ_DEMOD(state, DEMOD); in stv090x_init()
4556 STV090x_SETFIELD_Px(reg, ROLLOFF_CONTROL_FIELD, state->rolloff); in stv090x_init()
4557 if (STV090x_WRITE_DEMOD(state, DEMOD, reg) < 0) in stv090x_init()
4560 if (stv090x_i2c_gate_ctrl(state, 1) < 0) in stv090x_init()
4573 if (stv090x_i2c_gate_ctrl(state, 0) < 0) in stv090x_init()
4576 if (stv090x_set_tspath(state) < 0) in stv090x_init()
4582 stv090x_i2c_gate_ctrl(state, 0); in stv090x_init()
4590 struct stv090x_state *state = fe->demodulator_priv; in stv090x_setup() local
4591 const struct stv090x_config *config = state->config; in stv090x_setup()
4599 if (state->device == STV0900) { in stv090x_setup()
4605 } else if (state->device == STV0903) { in stv090x_setup()
4616 if (stv090x_write_reg(state, STV090x_P1_DMDISTATE, 0x5c) < 0) in stv090x_setup()
4618 if (stv090x_write_reg(state, STV090x_P2_DMDISTATE, 0x5c) < 0) in stv090x_setup()
4624 if (stv090x_write_reg(state, STV090x_P1_TNRCFG, 0x6c) < 0) in stv090x_setup()
4626 if (stv090x_write_reg(state, STV090x_P2_TNRCFG, 0x6c) < 0) in stv090x_setup()
4631 if (stv090x_write_reg(state, STV090x_P1_I2CRPT, reg) < 0) in stv090x_setup()
4633 if (stv090x_write_reg(state, STV090x_P2_I2CRPT, reg) < 0) in stv090x_setup()
4636 if (stv090x_write_reg(state, STV090x_NCOARSE, 0x13) < 0) /* set PLL divider */ in stv090x_setup()
4639 if (stv090x_write_reg(state, STV090x_I2CCFG, 0x08) < 0) /* 1/41 oversampling */ in stv090x_setup()
4641 if (stv090x_write_reg(state, STV090x_SYNTCTRL, 0x20 | config->clk_mode) < 0) /* enable PLL */ in stv090x_setup()
4648 if (stv090x_write_reg(state, stv090x_initval[i].addr, stv090x_initval[i].data) < 0) in stv090x_setup()
4652 state->internal->dev_ver = stv090x_read_reg(state, STV090x_MID); in stv090x_setup()
4653 if (state->internal->dev_ver >= 0x20) { in stv090x_setup()
4654 if (stv090x_write_reg(state, STV090x_TSGENERAL, 0x0c) < 0) in stv090x_setup()
4660 if (stv090x_write_reg(state, stv090x_cut20_val[i].addr, stv090x_cut20_val[i].data) < 0) in stv090x_setup()
4664 } else if (state->internal->dev_ver < 0x20) { in stv090x_setup()
4666 state->internal->dev_ver); in stv090x_setup()
4669 } else if (state->internal->dev_ver > 0x30) { in stv090x_setup()
4672 state->internal->dev_ver); in stv090x_setup()
4676 reg = stv090x_read_reg(state, STV090x_TSTTNR1); in stv090x_setup()
4679 if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0) in stv090x_setup()
4683 reg = stv090x_read_reg(state, STV090x_TSTTNR3); in stv090x_setup()
4686 if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0) in stv090x_setup()
4689 if (stv090x_write_reg(state, STV090x_TSTRES0, 0x80) < 0) in stv090x_setup()
4691 if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0) in stv090x_setup()
4703 struct stv090x_state *state = fe->demodulator_priv; in stv090x_set_gpio() local
4710 return stv090x_write_reg(state, STV090x_GPIOxCFG(gpio), reg); in stv090x_set_gpio()
4753 struct stv090x_state *state = NULL; in stv090x_attach() local
4756 state = kzalloc(sizeof (struct stv090x_state), GFP_KERNEL); in stv090x_attach()
4757 if (state == NULL) in stv090x_attach()
4760 state->verbose = &verbose; in stv090x_attach()
4761 state->config = config; in stv090x_attach()
4762 state->i2c = i2c; in stv090x_attach()
4763 state->frontend.ops = stv090x_ops; in stv090x_attach()
4764 state->frontend.demodulator_priv = state; in stv090x_attach()
4765 state->demod = demod; in stv090x_attach()
4766 state->demod_mode = config->demod_mode; /* Single or Dual mode */ in stv090x_attach()
4767 state->device = config->device; in stv090x_attach()
4768 state->rolloff = STV090x_RO_35; /* default */ in stv090x_attach()
4770 temp_int = find_dev(state->i2c, in stv090x_attach()
4771 state->config->address); in stv090x_attach()
4773 if ((temp_int != NULL) && (state->demod_mode == STV090x_DUAL)) { in stv090x_attach()
4774 state->internal = temp_int->internal; in stv090x_attach()
4775 state->internal->num_used++; in stv090x_attach()
4778 state->internal = kmalloc(sizeof(struct stv090x_internal), in stv090x_attach()
4780 if (!state->internal) in stv090x_attach()
4782 temp_int = append_internal(state->internal); in stv090x_attach()
4784 kfree(state->internal); in stv090x_attach()
4787 state->internal->num_used = 1; in stv090x_attach()
4788 state->internal->mclk = 0; in stv090x_attach()
4789 state->internal->dev_ver = 0; in stv090x_attach()
4790 state->internal->i2c_adap = state->i2c; in stv090x_attach()
4791 state->internal->i2c_addr = state->config->address; in stv090x_attach()
4794 mutex_init(&state->internal->demod_lock); in stv090x_attach()
4795 mutex_init(&state->internal->tuner_lock); in stv090x_attach()
4797 if (stv090x_setup(&state->frontend) < 0) { in stv090x_attach()
4805 stv090x_send_diseqc_burst(&state->frontend, SEC_MINI_A); in stv090x_attach()
4808 state->device == STV0900 ? "STV0900" : "STV0903", in stv090x_attach()
4810 state->internal->dev_ver); in stv090x_attach()
4812 return &state->frontend; in stv090x_attach()
4815 remove_dev(state->internal); in stv090x_attach()
4816 kfree(state->internal); in stv090x_attach()
4818 kfree(state); in stv090x_attach()