Lines Matching +full:bit +full:- +full:banging
1 // SPDX-License-Identifier: GPL-2.0-or-later
300 /* 8 bit registers, 16 bit values */
306 struct i2c_msg msg = { .addr = state->config->demod_address, in s5h1409_writereg()
309 ret = i2c_transfer(state->i2c, &msg, 1); in s5h1409_writereg()
315 return (ret != 1) ? -1 : 0; in s5h1409_writereg()
325 { .addr = state->config->demod_address, .flags = 0, in s5h1409_readreg()
327 { .addr = state->config->demod_address, .flags = I2C_M_RD, in s5h1409_readreg()
330 ret = i2c_transfer(state->i2c, msg, 2); in s5h1409_readreg()
339 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_softreset()
345 state->is_qam_locked = 0; in s5h1409_softreset()
346 state->qam_state = QAM_STATE_UNTUNED; in s5h1409_softreset()
351 #define S5H1409_QAM_IF_FREQ (state->config->qam_if)
355 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_if_freq()
373 state->if_freq = KHz; in s5h1409_set_if_freq()
380 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_spectralinversion()
393 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_enable_modulation()
400 if (state->if_freq != S5H1409_VSB_IF_FREQ) in s5h1409_enable_modulation()
408 if (state->if_freq != S5H1409_QAM_IF_FREQ) in s5h1409_enable_modulation()
415 return -EINVAL; in s5h1409_enable_modulation()
418 state->current_modulation = m; in s5h1409_enable_modulation()
426 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_i2c_gate_ctrl()
438 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_gpio()
452 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_sleep()
461 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_register_reset()
470 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_qam_amhum_mode()
473 if (state->qam_state < QAM_STATE_INTERLEAVE_SET) { in s5h1409_set_qam_amhum_mode()
479 if (state->qam_state == QAM_STATE_QAM_OPTIMIZED_L3) { in s5h1409_set_qam_amhum_mode()
481 don't bother banging on the status registers */ in s5h1409_set_qam_amhum_mode()
493 if (state->qam_state < QAM_STATE_QAM_OPTIMIZED_L3) { in s5h1409_set_qam_amhum_mode()
498 state->qam_state = QAM_STATE_QAM_OPTIMIZED_L3; in s5h1409_set_qam_amhum_mode()
501 if (state->qam_state < QAM_STATE_QAM_OPTIMIZED_L2) { in s5h1409_set_qam_amhum_mode()
506 state->qam_state = QAM_STATE_QAM_OPTIMIZED_L2; in s5h1409_set_qam_amhum_mode()
511 if (state->qam_state < QAM_STATE_QAM_OPTIMIZED_L1) { in s5h1409_set_qam_amhum_mode()
516 state->qam_state = QAM_STATE_QAM_OPTIMIZED_L1; in s5h1409_set_qam_amhum_mode()
523 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_qam_amhum_mode_legacy()
526 if (state->is_qam_locked) in s5h1409_set_qam_amhum_mode_legacy()
534 state->is_qam_locked = 1; in s5h1409_set_qam_amhum_mode_legacy()
555 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_qam_interleave_mode()
558 if (state->qam_state >= QAM_STATE_INTERLEAVE_SET) { in s5h1409_set_qam_interleave_mode()
567 if (state->qam_state == QAM_STATE_UNTUNED || in s5h1409_set_qam_interleave_mode()
568 state->qam_state == QAM_STATE_TUNING_STARTED) { in s5h1409_set_qam_interleave_mode()
577 state->qam_state = QAM_STATE_INTERLEAVE_SET; in s5h1409_set_qam_interleave_mode()
580 if (state->qam_state == QAM_STATE_UNTUNED) { in s5h1409_set_qam_interleave_mode()
586 state->qam_state = QAM_STATE_TUNING_STARTED; in s5h1409_set_qam_interleave_mode()
593 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_qam_interleave_mode_legacy()
600 if (state->qam_state != 2) { in s5h1409_set_qam_interleave_mode_legacy()
601 state->qam_state = 2; in s5h1409_set_qam_interleave_mode_legacy()
612 if (state->qam_state != 1) { in s5h1409_set_qam_interleave_mode_legacy()
613 state->qam_state = 1; in s5h1409_set_qam_interleave_mode_legacy()
624 struct dtv_frontend_properties *p = &fe->dtv_property_cache; in s5h1409_set_frontend()
625 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_frontend()
627 dprintk("%s(frequency=%d)\n", __func__, p->frequency); in s5h1409_set_frontend()
631 state->current_frequency = p->frequency; in s5h1409_set_frontend()
633 s5h1409_enable_modulation(fe, p->modulation); in s5h1409_set_frontend()
635 if (fe->ops.tuner_ops.set_params) { in s5h1409_set_frontend()
636 if (fe->ops.i2c_gate_ctrl) in s5h1409_set_frontend()
637 fe->ops.i2c_gate_ctrl(fe, 1); in s5h1409_set_frontend()
638 fe->ops.tuner_ops.set_params(fe); in s5h1409_set_frontend()
639 if (fe->ops.i2c_gate_ctrl) in s5h1409_set_frontend()
640 fe->ops.i2c_gate_ctrl(fe, 0); in s5h1409_set_frontend()
648 if (state->current_modulation != VSB_8) { in s5h1409_set_frontend()
650 only do it for the HVR-1600. Once the other boards are in s5h1409_set_frontend()
652 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { in s5h1409_set_frontend()
666 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_set_mpeg_timing()
687 return -EINVAL; in s5h1409_set_mpeg_timing()
700 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_init()
710 state->current_modulation = VSB_8; in s5h1409_init()
712 /* Optimize for the HVR-1600 if appropriate. Note that some of these in s5h1409_init()
715 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { in s5h1409_init()
727 if (state->config->output_mode == S5H1409_SERIAL_OUTPUT) in s5h1409_init()
734 s5h1409_set_spectralinversion(fe, state->config->inversion); in s5h1409_init()
735 s5h1409_set_if_freq(fe, state->if_freq); in s5h1409_init()
736 s5h1409_set_gpio(fe, state->config->gpio); in s5h1409_init()
737 s5h1409_set_mpeg_timing(fe, state->config->mpeg_timing); in s5h1409_init()
748 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_read_status()
755 if (state->current_modulation != VSB_8) { in s5h1409_read_status()
757 only do it for the HVR-1600. Once the other boards are in s5h1409_read_status()
759 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { in s5h1409_read_status()
772 switch (state->config->status_mode) { in s5h1409_read_status()
779 if (fe->ops.tuner_ops.get_status) { in s5h1409_read_status()
780 if (fe->ops.i2c_gate_ctrl) in s5h1409_read_status()
781 fe->ops.i2c_gate_ctrl(fe, 1); in s5h1409_read_status()
783 fe->ops.tuner_ops.get_status(fe, &tuner_status); in s5h1409_read_status()
785 if (fe->ops.i2c_gate_ctrl) in s5h1409_read_status()
786 fe->ops.i2c_gate_ctrl(fe, 0); in s5h1409_read_status()
800 int i, ret = -EINVAL; in s5h1409_qam256_lookup_snr()
815 int i, ret = -EINVAL; in s5h1409_qam64_lookup_snr()
830 int i, ret = -EINVAL; in s5h1409_vsb_lookup_snr()
846 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_read_snr()
850 switch (state->current_modulation) { in s5h1409_read_snr()
864 return -EINVAL; in s5h1409_read_snr()
885 * purely for the sake of code re-use from the in s5h1409_read_signal_strength()
888 /* Convert from SNR in dB * 10 to 8.24 fixed-point */ in s5h1409_read_signal_strength()
891 /* Convert from 8.24 fixed-point to in s5h1409_read_signal_strength()
892 * scale the range 0 - 35*2^24 into 0 - 65535*/ in s5h1409_read_signal_strength()
904 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_read_ucblocks()
919 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_get_frontend()
921 p->frequency = state->current_frequency; in s5h1409_get_frontend()
922 p->modulation = state->current_modulation; in s5h1409_get_frontend()
930 tune->min_delay_ms = 1000; in s5h1409_get_tune_settings()
936 struct s5h1409_state *state = fe->demodulator_priv; in s5h1409_release()
954 state->config = config; in s5h1409_attach()
955 state->i2c = i2c; in s5h1409_attach()
956 state->current_modulation = 0; in s5h1409_attach()
957 state->if_freq = S5H1409_VSB_IF_FREQ; in s5h1409_attach()
965 memcpy(&state->frontend.ops, &s5h1409_ops, in s5h1409_attach()
967 state->frontend.demodulator_priv = state; in s5h1409_attach()
969 if (s5h1409_init(&state->frontend) != 0) { in s5h1409_attach()
976 s5h1409_i2c_gate_ctrl(&state->frontend, 1); in s5h1409_attach()
978 return &state->frontend; in s5h1409_attach()
1009 MODULE_DESCRIPTION("Samsung S5H1409 QAM-B/ATSC Demodulator driver");