Lines Matching refs:state

213 static int _stb0899_read_reg(struct stb0899_state *state, unsigned int reg)
222 .addr = state->config->demod_address,
227 .addr = state->config->demod_address,
234 ret = i2c_transfer(state->i2c, msg, 2);
237 dprintk(state->verbose, FE_ERROR, 1,
243 if (unlikely(*state->verbose >= FE_DEBUGREG))
244 dprintk(state->verbose, FE_ERROR, 1, "Reg=[0x%02x], data=%02x",
250 int stb0899_read_reg(struct stb0899_state *state, unsigned int reg)
254 result = _stb0899_read_reg(state, reg);
262 _stb0899_read_reg(state, (reg | 0x00ff));
267 u32 _stb0899_read_s2reg(struct stb0899_state *state,
291 .addr = state->config->demod_address,
298 .addr = state->config->demod_address,
305 .addr = state->config->demod_address,
318 status = i2c_transfer(state->i2c, &msg_0, 1);
328 status = i2c_transfer(state->i2c, &msg_1, 1);
332 status = i2c_transfer(state->i2c, &msg_r, 1);
340 status = i2c_transfer(state->i2c, &msg_1, 1);
348 status = i2c_transfer(state->i2c, &msg_r, 1);
357 if (unlikely(*state->verbose >= FE_DEBUGREG))
367 int stb0899_write_s2reg(struct stb0899_state *state,
394 .addr = state->config->demod_address,
401 .addr = state->config->demod_address,
414 if (unlikely(*state->verbose >= FE_DEBUGREG))
418 status = i2c_transfer(state->i2c, &msg_0, 1);
425 status = i2c_transfer(state->i2c, &msg_1, 1);
440 int stb0899_read_regs(struct stb0899_state *state, unsigned int reg, u8 *buf, u32 count)
448 .addr = state->config->demod_address,
453 .addr = state->config->demod_address,
460 status = i2c_transfer(state->i2c, msg, 2);
474 _stb0899_read_reg(state, (reg | 0x00ff));
476 dprintk(state->verbose, FE_DEBUGREG, 1,
484 int stb0899_write_regs(struct stb0899_state *state, unsigned int reg, u8 *data, u32 count)
489 .addr = state->config->demod_address,
506 dprintk(state->verbose, FE_DEBUGREG, 1,
508 ret = i2c_transfer(state->i2c, &i2c_msg, 1);
516 stb0899_read_reg(state, (reg | 0x00ff));
520 dprintk(state->verbose, FE_ERROR, 1, "Reg=[0x%04x], Data=[0x%02x ...], Count=%u, Status=%d",
528 int stb0899_write_reg(struct stb0899_state *state, unsigned int reg, u8 data)
531 return stb0899_write_regs(state, reg, &tmp, 1);
539 static u32 stb0899_get_mclk(struct stb0899_state *state)
543 div = stb0899_read_reg(state, STB0899_NCOARSE);
544 mclk = (div + 1) * state->config->xtal_freq / 6;
545 dprintk(state->verbose, FE_DEBUG, 1, "div=%d, mclk=%d", div, mclk);
556 static void stb0899_set_mclk(struct stb0899_state *state, u32 Mclk)
558 struct stb0899_internal *internal = &state->internal;
561 dprintk(state->verbose, FE_DEBUG, 1, "state->config=%p", state->config);
562 mdiv = ((6 * Mclk) / state->config->xtal_freq) - 1;
563 dprintk(state->verbose, FE_DEBUG, 1, "mdiv=%d", mdiv);
565 stb0899_write_reg(state, STB0899_NCOARSE, mdiv);
566 internal->master_clk = stb0899_get_mclk(state);
568 dprintk(state->verbose, FE_DEBUG, 1, "MasterCLOCK=%d", internal->master_clk);
571 static int stb0899_postproc(struct stb0899_state *state, u8 ctl, int enable)
573 struct stb0899_config *config = state->config;
580 stb0899_write_reg(state, postproc[ctl].gpio, 0x02);
582 stb0899_write_reg(state, postproc[ctl].gpio, 0x82);
585 stb0899_write_reg(state, postproc[ctl].gpio, 0x82);
587 stb0899_write_reg(state, postproc[ctl].gpio, 0x02);
595 struct stb0899_state *state = fe->demodulator_priv;
598 stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 0);
603 struct stb0899_state *state = fe->demodulator_priv;
605 dprintk(state->verbose, FE_DEBUG, 1, "Release Frontend");
606 kfree(state);
613 static int stb0899_get_alpha(struct stb0899_state *state)
617 mode_coeff = stb0899_read_reg(state, STB0899_DEMOD);
628 static void stb0899_init_calc(struct stb0899_state *state)
630 struct stb0899_internal *internal = &state->internal;
636 stb0899_read_regs(state, STB0899_AGC1REF, agc, 2); /* AGC1R and AGC2O */
639 master_clk = stb0899_get_mclk(state);
644 internal->rolloff = stb0899_get_alpha(state);
651 stb0899_write_s2reg(state, STB0899_S2DEMOD, STB0899_BASE_IF_AGC_CNTRL, STB0899_OFF0_IF_AGC_CNTRL, reg);
668 static int stb0899_wait_diseqc_fifo_empty(struct stb0899_state *state, int timeout)
674 reg = stb0899_read_reg(state, STB0899_DISSTATUS);
678 dprintk(state->verbose, FE_ERROR, 1, "timed out !!");
688 struct stb0899_state *state = fe->demodulator_priv;
695 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
697 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
700 if (stb0899_wait_diseqc_fifo_empty(state, 100) < 0)
703 stb0899_write_reg(state, STB0899_DISFIFO, cmd->msg[i]);
705 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
707 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
712 static int stb0899_wait_diseqc_rxidle(struct stb0899_state *state, int timeout)
718 reg = stb0899_read_reg(state, STB0899_DISRX_ST0);
720 dprintk(state->verbose, FE_ERROR, 1, "timed out!!");
731 struct stb0899_state *state = fe->demodulator_priv;
735 if (stb0899_wait_diseqc_rxidle(state, 100) < 0)
738 reg = stb0899_read_reg(state, STB0899_DISRX_ST0);
741 reg = stb0899_read_reg(state, STB0899_DISRX_ST1);
752 reply->msg[i] = stb0899_read_reg(state, STB0899_DISFIFO);
761 static int stb0899_wait_diseqc_txidle(struct stb0899_state *state, int timeout)
767 reg = stb0899_read_reg(state, STB0899_DISSTATUS);
769 dprintk(state->verbose, FE_ERROR, 1, "timed out!!");
780 struct stb0899_state *state = fe->demodulator_priv;
784 if (stb0899_wait_diseqc_txidle(state, 100) < 0)
787 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
792 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
796 stb0899_write_reg(state, STB0899_DISFIFO, 0x00);
800 stb0899_write_reg(state, STB0899_DISFIFO, 0xff);
803 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
805 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
807 if (stb0899_wait_diseqc_txidle(state, 100) < 0)
810 /* restore state */
811 stb0899_write_reg(state, STB0899_DISCNTRL1, old_state);
816 static int stb0899_diseqc_init(struct stb0899_state *state)
824 reg = stb0899_read_reg(state, STB0899_DISCNTRL2);
826 stb0899_write_reg(state, STB0899_DISCNTRL2, reg);
829 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
831 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
833 reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
835 stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
837 mclk = stb0899_get_mclk(state);
839 stb0899_write_reg(state, STB0899_DISF22, f22_tx); /* DiSEqC Tx freq */
840 state->rx_freq = 20000;
847 struct stb0899_state *state = fe->demodulator_priv;
851 dprintk(state->verbose, FE_DEBUG, 1, "Going to Sleep .. (Really tired .. :-))");
853 stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 0);
861 struct stb0899_state *state = fe->demodulator_priv;
863 if ((rc = stb0899_write_reg(state, STB0899_SYNTCTRL, STB0899_SELOSCI)))
866 if ((rc = stb0899_write_reg(state, STB0899_STOPCLK1, 0x00)))
868 if ((rc = stb0899_write_reg(state, STB0899_STOPCLK2, 0x00)))
872 stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 1);
880 struct stb0899_state *state = fe->demodulator_priv;
881 struct stb0899_config *config = state->config;
883 dprintk(state->verbose, FE_DEBUG, 1, "Initializing STB0899 ... ");
886 dprintk(state->verbose, FE_DEBUG, 1, "init device");
888 stb0899_write_reg(state, config->init_dev[i].address, config->init_dev[i].data);
890 dprintk(state->verbose, FE_DEBUG, 1, "init S2 demod");
893 stb0899_write_s2reg(state, STB0899_S2DEMOD,
898 dprintk(state->verbose, FE_DEBUG, 1, "init S1 demod");
901 stb0899_write_reg(state, config->init_s1_demod[i].address, config->init_s1_demod[i].data);
903 dprintk(state->verbose, FE_DEBUG, 1, "init S2 FEC");
906 stb0899_write_s2reg(state, STB0899_S2FEC,
911 dprintk(state->verbose, FE_DEBUG, 1, "init TST");
914 stb0899_write_reg(state, config->init_tst[i].address, config->init_tst[i].data);
916 stb0899_init_calc(state);
917 stb0899_diseqc_init(state);
950 struct stb0899_state *state = fe->demodulator_priv;
951 struct stb0899_internal *internal = &state->internal;
956 switch (state->delsys) {
960 reg = stb0899_read_reg(state, STB0899_VSTATUS);
963 reg = stb0899_read_reg(state, STB0899_AGCIQIN);
968 dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm",
980 dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
985 dprintk(state->verbose, FE_DEBUG, 1, "Unsupported delivery system");
994 struct stb0899_state *state = fe->demodulator_priv;
995 struct stb0899_internal *internal = &state->internal;
1002 reg = stb0899_read_reg(state, STB0899_VSTATUS);
1003 switch (state->delsys) {
1009 stb0899_read_regs(state, STB0899_NIRM, buf, 2);
1013 dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n",
1037 dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm",
1042 dprintk(state->verbose, FE_DEBUG, 1, "Unsupported delivery system");
1051 struct stb0899_state *state = fe->demodulator_priv;
1052 struct stb0899_internal *internal = &state->internal;
1056 switch (state->delsys) {
1059 dprintk(state->verbose, FE_DEBUG, 1, "Delivery system DVB-S/DSS");
1061 reg = stb0899_read_reg(state, STB0899_VSTATUS);
1063 dprintk(state->verbose, FE_DEBUG, 1, "--------> FE_HAS_CARRIER | FE_HAS_LOCK");
1066 reg = stb0899_read_reg(state, STB0899_PLPARM);
1068 dprintk(state->verbose, FE_DEBUG, 1, "--------> FE_HAS_VITERBI | FE_HAS_SYNC");
1071 stb0899_postproc(state, STB0899_POSTPROC_GPIO_LOCK, 1);
1077 dprintk(state->verbose, FE_DEBUG, 1, "Delivery system DVB-S2");
1082 dprintk(state->verbose, FE_DEBUG, 1,
1085 reg = stb0899_read_reg(state, STB0899_CFGPDELSTATUS1);
1088 dprintk(state->verbose, FE_DEBUG, 1,
1094 dprintk(state->verbose, FE_DEBUG, 1,
1099 dprintk(state->verbose, FE_DEBUG, 1,
1102 stb0899_postproc(state, STB0899_POSTPROC_GPIO_LOCK, 1);
1108 dprintk(state->verbose, FE_DEBUG, 1, "Unsupported delivery system");
1122 struct stb0899_state *state = fe->demodulator_priv;
1123 struct stb0899_internal *internal = &state->internal;
1129 switch (state->delsys) {
1133 lsb = stb0899_read_reg(state, STB0899_ECNT1L);
1134 msb = stb0899_read_reg(state, STB0899_ECNT1M);
1148 lsb = stb0899_read_reg(state, STB0899_ECNT1L);
1149 msb = stb0899_read_reg(state, STB0899_ECNT1M);
1157 dprintk(state->verbose, FE_DEBUG, 1, "Unsupported delivery system");
1167 struct stb0899_state *state = fe->demodulator_priv;
1171 stb0899_write_reg(state, STB0899_GPIO00CFG, 0x82);
1172 stb0899_write_reg(state, STB0899_GPIO01CFG, 0x02);
1173 stb0899_write_reg(state, STB0899_GPIO02CFG, 0x00);
1176 stb0899_write_reg(state, STB0899_GPIO00CFG, 0x02);
1177 stb0899_write_reg(state, STB0899_GPIO01CFG, 0x02);
1178 stb0899_write_reg(state, STB0899_GPIO02CFG, 0x82);
1181 stb0899_write_reg(state, STB0899_GPIO00CFG, 0x82);
1182 stb0899_write_reg(state, STB0899_GPIO01CFG, 0x82);
1183 stb0899_write_reg(state, STB0899_GPIO02CFG, 0x82);
1194 struct stb0899_state *state = fe->demodulator_priv;
1195 struct stb0899_internal *internal = &state->internal;
1200 if (stb0899_wait_diseqc_txidle(state, 100) < 0)
1207 stb0899_write_reg(state, STB0899_DISEQCOCFG, 0x66);
1208 reg = stb0899_read_reg(state, STB0899_ACRPRESC);
1210 stb0899_write_reg(state, STB0899_ACRPRESC, reg);
1211 stb0899_write_reg(state, STB0899_ACRDIV1, div);
1214 stb0899_write_reg(state, STB0899_DISEQCOCFG, 0x20);
1225 struct stb0899_state *state = fe->demodulator_priv;
1227 i2c_stat = stb0899_read_reg(state, STB0899_I2CRPT);
1232 dprintk(state->verbose, FE_DEBUG, 1, "Enabling I2C Repeater ...");
1234 if (stb0899_write_reg(state, STB0899_I2CRPT, i2c_stat) < 0)
1237 dprintk(state->verbose, FE_DEBUG, 1, "Disabling I2C Repeater ...");
1239 if (stb0899_write_reg(state, STB0899_I2CRPT, i2c_stat) < 0)
1244 dprintk(state->verbose, FE_ERROR, 1, "I2C Repeater control failed");
1258 static int stb0899_get_dev_id(struct stb0899_state *state)
1266 id = stb0899_read_reg(state, STB0899_DEV_ID);
1267 dprintk(state->verbose, FE_DEBUG, 1, "ID reg=[0x%02x]", id);
1271 dprintk(state->verbose, FE_ERROR, 1, "Device ID=[%d], Release=[%d]",
1277 dprintk(state->verbose, FE_ERROR, 1, "Demodulator Core ID=[%s], Version=[%d]", (char *) &demod_str, demod_ver);
1281 dprintk(state->verbose, FE_ERROR, 1, "couldn't find a STB 0899");
1285 dprintk(state->verbose, FE_ERROR, 1, "FEC Core ID=[%s], Version=[%d]", (char*) &fec_str, fec_ver);
1290 static void stb0899_set_delivery(struct stb0899_state *state)
1295 stop_clk[0] = stb0899_read_reg(state, STB0899_STOPCLK1);
1296 stop_clk[1] = stb0899_read_reg(state, STB0899_STOPCLK2);
1298 switch (state->delsys) {
1300 dprintk(state->verbose, FE_DEBUG, 1, "Delivery System -- DVB-S");
1302 reg = stb0899_read_reg(state, STB0899_FECM);
1305 stb0899_write_reg(state, STB0899_FECM, reg);
1307 stb0899_write_reg(state, STB0899_RSULC, 0xb1);
1308 stb0899_write_reg(state, STB0899_TSULC, 0x40);
1309 stb0899_write_reg(state, STB0899_RSLLC, 0x42);
1310 stb0899_write_reg(state, STB0899_TSLPL, 0x12);
1312 reg = stb0899_read_reg(state, STB0899_TSTRES);
1314 stb0899_write_reg(state, STB0899_TSTRES, reg);
1330 reg = stb0899_read_reg(state, STB0899_FECM);
1333 stb0899_write_reg(state, STB0899_FECM, reg);
1335 stb0899_write_reg(state, STB0899_RSULC, 0xb1);
1336 stb0899_write_reg(state, STB0899_TSULC, 0x42);
1337 stb0899_write_reg(state, STB0899_RSLLC, 0x40);
1338 stb0899_write_reg(state, STB0899_TSLPL, 0x02);
1340 reg = stb0899_read_reg(state, STB0899_TSTRES);
1342 stb0899_write_reg(state, STB0899_TSTRES, reg);
1358 reg = stb0899_read_reg(state, STB0899_FECM);
1361 stb0899_write_reg(state, STB0899_FECM, reg);
1363 stb0899_write_reg(state, STB0899_RSULC, 0xa1);
1364 stb0899_write_reg(state, STB0899_TSULC, 0x61);
1365 stb0899_write_reg(state, STB0899_RSLLC, 0x42);
1367 reg = stb0899_read_reg(state, STB0899_TSTRES);
1369 stb0899_write_reg(state, STB0899_TSTRES, reg);
1383 dprintk(state->verbose, FE_ERROR, 1, "Unsupported delivery system");
1387 stb0899_write_regs(state, STB0899_STOPCLK1, stop_clk, 2);
1394 static void stb0899_set_iterations(struct stb0899_state *state)
1396 struct stb0899_internal *internal = &state->internal;
1397 struct stb0899_config *config = state->config;
1412 stb0899_write_s2reg(state, STB0899_S2FEC, STB0899_BASE_MAX_ITER, STB0899_OFF0_MAX_ITER, reg);
1417 struct stb0899_state *state = fe->demodulator_priv;
1418 struct stb0899_params *i_params = &state->params;
1419 struct stb0899_internal *internal = &state->internal;
1420 struct stb0899_config *config = state->config;
1427 state->delsys = props->delivery_system;
1428 dprintk(state->verbose, FE_DEBUG, 1, "delivery system=%d", state->delsys);
1431 dprintk(state->verbose, FE_DEBUG, 1, "Frequency=%d, Srate=%d", i_params->freq, i_params->srate);
1434 dprintk(state->verbose, FE_DEBUG, 1, "Parameters IN RANGE");
1435 stb0899_set_delivery(state);
1437 if (state->config->tuner_set_rfsiggain) {
1444 state->config->tuner_set_rfsiggain(fe, gain);
1448 stb0899_set_mclk(state, config->lo_clk);
1450 stb0899_set_mclk(state, config->hi_clk);
1452 switch (state->delsys) {
1455 dprintk(state->verbose, FE_DEBUG, 1, "DVB-S delivery system");
1469 stb0899_i2c_gate_ctrl(&state->frontend, 1);
1471 if (state->config->tuner_set_bandwidth)
1472 state->config->tuner_set_bandwidth(fe, (13 * (stb0899_carr_width(state) + SearchRange)) / 10);
1473 if (state->config->tuner_get_bandwidth)
1474 state->config->tuner_get_bandwidth(fe, &internal->tuner_bw);
1477 stb0899_i2c_gate_ctrl(&state->frontend, 0);
1480 stb0899_write_reg(state, STB0899_AGCRFCFG, 0x11);
1483 dprintk(state->verbose, FE_DEBUG, 1, "running DVB-S search algo ..");
1484 if (stb0899_dvbs_algo(state) == RANGEOK) {
1486 dprintk(state->verbose, FE_DEBUG, 1,
1489 // stb0899_write_reg(state, STB0899_ERRCTRL1, 0x3d); /* Viterbi Errors */
1490 // internal->v_status = stb0899_read_reg(state, STB0899_VSTATUS);
1491 // internal->err_ctrl = stb0899_read_reg(state, STB0899_ERRCTRL1);
1492 // dprintk(state->verbose, FE_DEBUG, 1, "VSTATUS=0x%02x", internal->v_status);
1493 // dprintk(state->verbose, FE_DEBUG, 1, "ERR_CTRL=0x%02x", internal->err_ctrl);
1508 stb0899_i2c_gate_ctrl(&state->frontend, 1);
1510 if (state->config->tuner_set_bandwidth)
1511 state->config->tuner_set_bandwidth(fe, (stb0899_carr_width(state) + SearchRange));
1512 if (state->config->tuner_get_bandwidth)
1513 state->config->tuner_get_bandwidth(fe, &internal->tuner_bw);
1516 stb0899_i2c_gate_ctrl(&state->frontend, 0);
1521 stb0899_write_reg(state, STB0899_AGCRFCFG, 0x1c);
1524 stb0899_set_iterations(state);
1527 dprintk(state->verbose, FE_DEBUG, 1, "running DVB-S2 search algo ..");
1528 if (stb0899_dvbs2_algo(state) == DVBS2_FEC_LOCK) {
1530 dprintk(state->verbose, FE_DEBUG, 1,
1533 // stb0899_write_reg(state, STB0899_ERRCTRL1, 0xb6); /* Packet Errors */
1534 // internal->v_status = stb0899_read_reg(state, STB0899_VSTATUS);
1535 // internal->err_ctrl = stb0899_read_reg(state, STB0899_ERRCTRL1);
1545 dprintk(state->verbose, FE_ERROR, 1, "Unsupported delivery system");
1556 struct stb0899_state *state = fe->demodulator_priv;
1557 struct stb0899_internal *internal = &state->internal;
1559 dprintk(state->verbose, FE_DEBUG, 1, "Get params");
1614 struct stb0899_state *state = NULL;
1616 state = kzalloc(sizeof (struct stb0899_state), GFP_KERNEL);
1617 if (state == NULL)
1620 state->verbose = &verbose;
1621 state->config = config;
1622 state->i2c = i2c;
1623 state->frontend.ops = stb0899_ops;
1624 state->frontend.demodulator_priv = state;
1626 state->internal.inversion = config->inversion;
1628 stb0899_wakeup(&state->frontend);
1629 if (stb0899_get_dev_id(state) == -ENODEV) {
1635 return &state->frontend;
1638 kfree(state);