Lines Matching refs:state
245 static int cx24123_i2c_writereg(struct cx24123_state *state, in cx24123_i2c_writereg() argument
256 err = i2c_transfer(state->i2c, &msg, 1); in cx24123_i2c_writereg()
266 static int cx24123_i2c_readreg(struct cx24123_state *state, u8 i2c_addr, u8 reg) in cx24123_i2c_readreg() argument
275 ret = i2c_transfer(state->i2c, msg, 2); in cx24123_i2c_readreg()
287 #define cx24123_readreg(state, reg) \ argument
288 cx24123_i2c_readreg(state, state->config->demod_address, reg)
289 #define cx24123_writereg(state, reg, val) \ argument
290 cx24123_i2c_writereg(state, state->config->demod_address, reg, val)
292 static int cx24123_set_inversion(struct cx24123_state *state, in cx24123_set_inversion() argument
295 u8 nom_reg = cx24123_readreg(state, 0x0e); in cx24123_set_inversion()
296 u8 auto_reg = cx24123_readreg(state, 0x10); in cx24123_set_inversion()
301 cx24123_writereg(state, 0x0e, nom_reg & ~0x80); in cx24123_set_inversion()
302 cx24123_writereg(state, 0x10, auto_reg | 0x80); in cx24123_set_inversion()
306 cx24123_writereg(state, 0x0e, nom_reg | 0x80); in cx24123_set_inversion()
307 cx24123_writereg(state, 0x10, auto_reg | 0x80); in cx24123_set_inversion()
311 cx24123_writereg(state, 0x10, auto_reg & ~0x80); in cx24123_set_inversion()
320 static int cx24123_get_inversion(struct cx24123_state *state, in cx24123_get_inversion() argument
325 val = cx24123_readreg(state, 0x1b) >> 7; in cx24123_get_inversion()
338 static int cx24123_set_fec(struct cx24123_state *state, fe_code_rate_t fec) in cx24123_set_fec() argument
340 u8 nom_reg = cx24123_readreg(state, 0x0e) & ~0x07; in cx24123_set_fec()
347 cx24123_writereg(state, 0x43, in cx24123_set_fec()
348 cx24123_readreg(state, 0x43) | 0x01); in cx24123_set_fec()
350 cx24123_writereg(state, 0x43, in cx24123_set_fec()
351 cx24123_readreg(state, 0x43) & ~0x01); in cx24123_set_fec()
356 cx24123_writereg(state, 0x0e, nom_reg | 0x01); in cx24123_set_fec()
357 cx24123_writereg(state, 0x0f, 0x02); in cx24123_set_fec()
361 cx24123_writereg(state, 0x0e, nom_reg | 0x02); in cx24123_set_fec()
362 cx24123_writereg(state, 0x0f, 0x04); in cx24123_set_fec()
366 cx24123_writereg(state, 0x0e, nom_reg | 0x03); in cx24123_set_fec()
367 cx24123_writereg(state, 0x0f, 0x08); in cx24123_set_fec()
371 cx24123_writereg(state, 0x0e, nom_reg | 0x04); in cx24123_set_fec()
372 cx24123_writereg(state, 0x0f, 0x10); in cx24123_set_fec()
376 cx24123_writereg(state, 0x0e, nom_reg | 0x05); in cx24123_set_fec()
377 cx24123_writereg(state, 0x0f, 0x20); in cx24123_set_fec()
381 cx24123_writereg(state, 0x0e, nom_reg | 0x06); in cx24123_set_fec()
382 cx24123_writereg(state, 0x0f, 0x40); in cx24123_set_fec()
386 cx24123_writereg(state, 0x0e, nom_reg | 0x07); in cx24123_set_fec()
387 cx24123_writereg(state, 0x0f, 0x80); in cx24123_set_fec()
391 cx24123_writereg(state, 0x0f, 0xfe); in cx24123_set_fec()
400 static int cx24123_get_fec(struct cx24123_state *state, fe_code_rate_t *fec) in cx24123_get_fec() argument
404 ret = cx24123_readreg(state, 0x1b); in cx24123_get_fec()
454 static int cx24123_set_symbolrate(struct cx24123_state *state, u32 srate) in cx24123_set_symbolrate() argument
461 if ((srate > state->frontend.ops.info.symbol_rate_max) || in cx24123_set_symbolrate()
462 (srate < state->frontend.ops.info.symbol_rate_min)) in cx24123_set_symbolrate()
493 cx24123_writereg(state, 0x01, pll_mult * 6); in cx24123_set_symbolrate()
495 cx24123_writereg(state, 0x08, (ratio >> 16) & 0x3f); in cx24123_set_symbolrate()
496 cx24123_writereg(state, 0x09, (ratio >> 8) & 0xff); in cx24123_set_symbolrate()
497 cx24123_writereg(state, 0x0a, ratio & 0xff); in cx24123_set_symbolrate()
501 tmp = cx24123_readreg(state, 0x0c) & ~0xe0; in cx24123_set_symbolrate()
502 cx24123_writereg(state, 0x0c, tmp | sample_gain << 5); in cx24123_set_symbolrate()
518 struct cx24123_state *state = fe->demodulator_priv; in cx24123_pll_calculate() local
528 state->VCAarg = cx24123_AGC_vals[0].VCAprogdata; in cx24123_pll_calculate()
529 state->VGAarg = cx24123_AGC_vals[0].VGAprogdata; in cx24123_pll_calculate()
530 state->bandselectarg = cx24123_bandselect_vals[0].progdata; in cx24123_pll_calculate()
539 state->VCAarg = agcv->VCAprogdata; in cx24123_pll_calculate()
540 state->VGAarg = agcv->VGAprogdata; in cx24123_pll_calculate()
541 state->FILTune = agcv->FILTune; in cx24123_pll_calculate()
556 state->bandselectarg = cx24123_bandselect_vals[band].progdata; in cx24123_pll_calculate()
579 state->pllarg = (3 << 19) | (3 << 17) | (1 << 16) | in cx24123_pll_calculate()
592 struct cx24123_state *state = fe->demodulator_priv; in cx24123_pll_writereg() local
601 cx24123_writereg(state, 0x21, 0x15); in cx24123_pll_writereg()
605 cx24123_writereg(state, 0x22, (data >> 16) & 0xff); in cx24123_pll_writereg()
606 while ((cx24123_readreg(state, 0x20) & 0x40) == 0) { in cx24123_pll_writereg()
617 cx24123_writereg(state, 0x22, (data >> 8) & 0xff); in cx24123_pll_writereg()
618 while ((cx24123_readreg(state, 0x20) & 0x40) == 0) { in cx24123_pll_writereg()
630 cx24123_writereg(state, 0x22, (data) & 0xff); in cx24123_pll_writereg()
631 while ((cx24123_readreg(state, 0x20) & 0x80)) { in cx24123_pll_writereg()
641 cx24123_writereg(state, 0x20, cx24123_readreg(state, 0x20) | 2); in cx24123_pll_writereg()
642 cx24123_writereg(state, 0x20, cx24123_readreg(state, 0x20) & 0xfd); in cx24123_pll_writereg()
650 struct cx24123_state *state = fe->demodulator_priv; in cx24123_pll_tune() local
661 cx24123_pll_writereg(fe, state->VCAarg); in cx24123_pll_tune()
662 cx24123_pll_writereg(fe, state->VGAarg); in cx24123_pll_tune()
665 cx24123_pll_writereg(fe, state->bandselectarg); in cx24123_pll_tune()
666 cx24123_pll_writereg(fe, state->pllarg); in cx24123_pll_tune()
669 val = cx24123_readreg(state, 0x28) & ~0x3; in cx24123_pll_tune()
670 cx24123_writereg(state, 0x27, state->FILTune >> 2); in cx24123_pll_tune()
671 cx24123_writereg(state, 0x28, val | (state->FILTune & 0x3)); in cx24123_pll_tune()
673 dprintk("pll tune VCA=%d, band=%d, pll=%d\n", state->VCAarg, in cx24123_pll_tune()
674 state->bandselectarg, state->pllarg); in cx24123_pll_tune()
689 static int cx24123_repeater_mode(struct cx24123_state *state, u8 mode, u8 start) in cx24123_repeater_mode() argument
691 u8 r = cx24123_readreg(state, 0x23) & 0x1e; in cx24123_repeater_mode()
696 return cx24123_writereg(state, 0x23, r); in cx24123_repeater_mode()
701 struct cx24123_state *state = fe->demodulator_priv; in cx24123_initfe() local
708 cx24123_writereg(state, cx24123_regdata[i].reg, in cx24123_initfe()
712 if (state->config->lnb_polarity) in cx24123_initfe()
713 cx24123_writereg(state, 0x32, in cx24123_initfe()
714 cx24123_readreg(state, 0x32) | 0x02); in cx24123_initfe()
716 if (state->config->dont_use_pll) in cx24123_initfe()
717 cx24123_repeater_mode(state, 1, 0); in cx24123_initfe()
725 struct cx24123_state *state = fe->demodulator_priv; in cx24123_set_voltage() local
728 val = cx24123_readreg(state, 0x29) & ~0x40; in cx24123_set_voltage()
733 return cx24123_writereg(state, 0x29, val & 0x7f); in cx24123_set_voltage()
736 return cx24123_writereg(state, 0x29, val | 0x80); in cx24123_set_voltage()
748 static void cx24123_wait_for_diseqc(struct cx24123_state *state) in cx24123_wait_for_diseqc() argument
751 while (!(cx24123_readreg(state, 0x29) & 0x40)) { in cx24123_wait_for_diseqc()
764 struct cx24123_state *state = fe->demodulator_priv; in cx24123_send_diseqc_msg() local
770 tone = cx24123_readreg(state, 0x29); in cx24123_send_diseqc_msg()
772 cx24123_writereg(state, 0x29, tone & ~0x50); in cx24123_send_diseqc_msg()
775 cx24123_wait_for_diseqc(state); in cx24123_send_diseqc_msg()
778 cx24123_writereg(state, 0x2a, cx24123_readreg(state, 0x2a) & 0xfb); in cx24123_send_diseqc_msg()
781 cx24123_writereg(state, 0x2C + i, cmd->msg[i]); in cx24123_send_diseqc_msg()
783 val = cx24123_readreg(state, 0x29); in cx24123_send_diseqc_msg()
784 cx24123_writereg(state, 0x29, ((val & 0x90) | 0x40) | in cx24123_send_diseqc_msg()
788 cx24123_wait_for_diseqc(state); in cx24123_send_diseqc_msg()
792 cx24123_writereg(state, 0x29, tone & ~0x40); in cx24123_send_diseqc_msg()
800 struct cx24123_state *state = fe->demodulator_priv; in cx24123_diseqc_send_burst() local
806 tone = cx24123_readreg(state, 0x29); in cx24123_diseqc_send_burst()
808 cx24123_writereg(state, 0x29, tone & ~0x50); in cx24123_diseqc_send_burst()
811 cx24123_wait_for_diseqc(state); in cx24123_diseqc_send_burst()
814 cx24123_writereg(state, 0x2a, cx24123_readreg(state, 0x2a) | 0x4); in cx24123_diseqc_send_burst()
816 val = cx24123_readreg(state, 0x29); in cx24123_diseqc_send_burst()
818 cx24123_writereg(state, 0x29, ((val & 0x90) | 0x40 | 0x00)); in cx24123_diseqc_send_burst()
820 cx24123_writereg(state, 0x29, ((val & 0x90) | 0x40 | 0x08)); in cx24123_diseqc_send_burst()
824 cx24123_wait_for_diseqc(state); in cx24123_diseqc_send_burst()
825 cx24123_writereg(state, 0x2a, cx24123_readreg(state, 0x2a) & 0xfb); in cx24123_diseqc_send_burst()
829 cx24123_writereg(state, 0x29, tone & ~0x40); in cx24123_diseqc_send_burst()
836 struct cx24123_state *state = fe->demodulator_priv; in cx24123_read_status() local
837 int sync = cx24123_readreg(state, 0x14); in cx24123_read_status()
840 if (state->config->dont_use_pll) { in cx24123_read_status()
847 int lock = cx24123_readreg(state, 0x20); in cx24123_read_status()
873 struct cx24123_state *state = fe->demodulator_priv; in cx24123_read_ber() local
877 *ber = ((cx24123_readreg(state, 0x1c) & 0x3f) << 16) | in cx24123_read_ber()
878 (cx24123_readreg(state, 0x1d) << 8 | in cx24123_read_ber()
879 cx24123_readreg(state, 0x1e)); in cx24123_read_ber()
889 struct cx24123_state *state = fe->demodulator_priv; in cx24123_read_signal_strength() local
892 *signal_strength = cx24123_readreg(state, 0x3b) << 8; in cx24123_read_signal_strength()
901 struct cx24123_state *state = fe->demodulator_priv; in cx24123_read_snr() local
905 *snr = 65535 - (((u16)cx24123_readreg(state, 0x18) << 8) | in cx24123_read_snr()
906 (u16)cx24123_readreg(state, 0x19)); in cx24123_read_snr()
915 struct cx24123_state *state = fe->demodulator_priv; in cx24123_set_frontend() local
920 if (state->config->set_ts_params) in cx24123_set_frontend()
921 state->config->set_ts_params(fe, 0); in cx24123_set_frontend()
923 state->currentfreq = p->frequency; in cx24123_set_frontend()
924 state->currentsymbolrate = p->symbol_rate; in cx24123_set_frontend()
926 cx24123_set_inversion(state, p->inversion); in cx24123_set_frontend()
927 cx24123_set_fec(state, p->fec_inner); in cx24123_set_frontend()
928 cx24123_set_symbolrate(state, p->symbol_rate); in cx24123_set_frontend()
930 if (!state->config->dont_use_pll) in cx24123_set_frontend()
938 cx24123_writereg(state, 0x03, (cx24123_readreg(state, 0x03) | 0x07)); in cx24123_set_frontend()
939 cx24123_writereg(state, 0x00, 0x10); in cx24123_set_frontend()
940 cx24123_writereg(state, 0x00, 0); in cx24123_set_frontend()
942 if (state->config->agc_callback) in cx24123_set_frontend()
943 state->config->agc_callback(fe); in cx24123_set_frontend()
951 struct cx24123_state *state = fe->demodulator_priv; in cx24123_get_frontend() local
955 if (cx24123_get_inversion(state, &p->inversion) != 0) { in cx24123_get_frontend()
959 if (cx24123_get_fec(state, &p->fec_inner) != 0) { in cx24123_get_frontend()
963 p->frequency = state->currentfreq; in cx24123_get_frontend()
964 p->symbol_rate = state->currentsymbolrate; in cx24123_get_frontend()
971 struct cx24123_state *state = fe->demodulator_priv; in cx24123_set_tone() local
975 cx24123_wait_for_diseqc(state); in cx24123_set_tone()
977 val = cx24123_readreg(state, 0x29) & ~0x40; in cx24123_set_tone()
982 return cx24123_writereg(state, 0x29, val | 0x10); in cx24123_set_tone()
985 return cx24123_writereg(state, 0x29, val & 0xef); in cx24123_set_tone()
1019 struct cx24123_state *state = fe->demodulator_priv; in cx24123_release() local
1021 i2c_del_adapter(&state->tuner_i2c_adapter); in cx24123_release()
1022 kfree(state); in cx24123_release()
1028 struct cx24123_state *state = i2c_get_adapdata(i2c_adap); in cx24123_tuner_i2c_tuner_xfer() local
1030 cx24123_repeater_mode(state, 1, 1); in cx24123_tuner_i2c_tuner_xfer()
1031 return i2c_transfer(state->i2c, msg, num); in cx24123_tuner_i2c_tuner_xfer()
1047 struct cx24123_state *state = fe->demodulator_priv; in cx24123_get_tuner_i2c_adapter() local
1048 return &state->tuner_i2c_adapter; in cx24123_get_tuner_i2c_adapter()
1058 struct cx24123_state *state = in cx24123_attach() local
1062 if (state == NULL) { in cx24123_attach()
1068 state->config = config; in cx24123_attach()
1069 state->i2c = i2c; in cx24123_attach()
1072 state->demod_rev = cx24123_readreg(state, 0x00); in cx24123_attach()
1073 switch (state->demod_rev) { in cx24123_attach()
1081 err("wrong demod revision: %x\n", state->demod_rev); in cx24123_attach()
1086 memcpy(&state->frontend.ops, &cx24123_ops, in cx24123_attach()
1088 state->frontend.demodulator_priv = state; in cx24123_attach()
1092 cx24123_repeater_mode(state, 1, 0); in cx24123_attach()
1094 strlcpy(state->tuner_i2c_adapter.name, "CX24123 tuner I2C bus", in cx24123_attach()
1095 sizeof(state->tuner_i2c_adapter.name)); in cx24123_attach()
1096 state->tuner_i2c_adapter.algo = &cx24123_tuner_i2c_algo; in cx24123_attach()
1097 state->tuner_i2c_adapter.algo_data = NULL; in cx24123_attach()
1098 state->tuner_i2c_adapter.dev.parent = i2c->dev.parent; in cx24123_attach()
1099 i2c_set_adapdata(&state->tuner_i2c_adapter, state); in cx24123_attach()
1100 if (i2c_add_adapter(&state->tuner_i2c_adapter) < 0) { in cx24123_attach()
1105 return &state->frontend; in cx24123_attach()
1108 kfree(state); in cx24123_attach()