3858
3872
if (stv090x_i2c_gate_ctrl(state, 0) < 0)
3861
dprintk(FE_DEBUG, 1, "Set %s to sleep",
3862
state->device == STV0900 ? "STV0900" : "STV0903");
3864
reg = stv090x_read_reg(state, STV090x_SYNTCTRL);
3865
STV090x_SETFIELD(reg, STANDBY_FIELD, 0x01);
3866
if (stv090x_write_reg(state, STV090x_SYNTCTRL, reg) < 0)
3869
reg = stv090x_read_reg(state, STV090x_TSTTNR1);
3870
STV090x_SETFIELD(reg, ADC1_PON_FIELD, 0);
3871
if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0)
3875
dprintk(FE_DEBUG, 1, "Set %s(%d) to sleep",
3876
state->device == STV0900 ? "STV0900" : "STV0903",
3879
mutex_lock(&state->internal->demod_lock);
3881
switch (state->demod) {
3882
case STV090x_DEMODULATOR_0:
3883
/* power off ADC 1 */
3884
reg = stv090x_read_reg(state, STV090x_TSTTNR1);
3885
STV090x_SETFIELD(reg, ADC1_PON_FIELD, 0);
3886
if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0)
3888
/* power off DiSEqC 1 */
3889
reg = stv090x_read_reg(state, STV090x_TSTTNR2);
3890
STV090x_SETFIELD(reg, DISEQC1_PON_FIELD, 0);
3891
if (stv090x_write_reg(state, STV090x_TSTTNR2, reg) < 0)
3894
/* check whether path 2 is already sleeping, that is when
3896
reg = stv090x_read_reg(state, STV090x_TSTTNR3);
3897
if (STV090x_GETFIELD(reg, ADC2_PON_FIELD) == 0)
3901
reg = stv090x_read_reg(state, STV090x_STOPCLK1);
3902
/* packet delineator 1 clock */
3903
STV090x_SETFIELD(reg, STOP_CLKPKDT1_FIELD, 1);
3905
STV090x_SETFIELD(reg, STOP_CLKADCI1_FIELD, 1);
3906
/* FEC clock is shared between the two paths, only stop it
3907
when full standby is possible */
3909
STV090x_SETFIELD(reg, STOP_CLKFEC_FIELD, 1);
3910
if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0)
3912
reg = stv090x_read_reg(state, STV090x_STOPCLK2);
3913
/* sampling 1 clock */
3914
STV090x_SETFIELD(reg, STOP_CLKSAMP1_FIELD, 1);
3915
/* viterbi 1 clock */
3916
STV090x_SETFIELD(reg, STOP_CLKVIT1_FIELD, 1);
3917
/* TS clock is shared between the two paths, only stop it
3918
when full standby is possible */
3920
STV090x_SETFIELD(reg, STOP_CLKTS_FIELD, 1);
3921
if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0)
3925
case STV090x_DEMODULATOR_1:
3926
/* power off ADC 2 */
3927
reg = stv090x_read_reg(state, STV090x_TSTTNR3);
3928
STV090x_SETFIELD(reg, ADC2_PON_FIELD, 0);
3929
if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0)
3931
/* power off DiSEqC 2 */
3932
reg = stv090x_read_reg(state, STV090x_TSTTNR4);
3933
STV090x_SETFIELD(reg, DISEQC2_PON_FIELD, 0);
3934
if (stv090x_write_reg(state, STV090x_TSTTNR4, reg) < 0)
3937
/* check whether path 1 is already sleeping, that is when
3939
reg = stv090x_read_reg(state, STV090x_TSTTNR1);
3940
if (STV090x_GETFIELD(reg, ADC1_PON_FIELD) == 0)
3944
reg = stv090x_read_reg(state, STV090x_STOPCLK1);
3945
/* packet delineator 2 clock */
3946
STV090x_SETFIELD(reg, STOP_CLKPKDT2_FIELD, 1);
3948
STV090x_SETFIELD(reg, STOP_CLKADCI2_FIELD, 1);
3949
/* FEC clock is shared between the two paths, only stop it
3950
when full standby is possible */
3952
STV090x_SETFIELD(reg, STOP_CLKFEC_FIELD, 1);
3953
if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0)
3955
reg = stv090x_read_reg(state, STV090x_STOPCLK2);
3956
/* sampling 2 clock */
3957
STV090x_SETFIELD(reg, STOP_CLKSAMP2_FIELD, 1);
3958
/* viterbi 2 clock */
3959
STV090x_SETFIELD(reg, STOP_CLKVIT2_FIELD, 1);
3960
/* TS clock is shared between the two paths, only stop it
3961
when full standby is possible */
3963
STV090x_SETFIELD(reg, STOP_CLKTS_FIELD, 1);
3964
if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0)
3969
dprintk(FE_ERROR, 1, "Wrong demodulator!");
3974
/* general power off */
3975
reg = stv090x_read_reg(state, STV090x_SYNTCTRL);
3976
STV090x_SETFIELD(reg, STANDBY_FIELD, 0x01);
3977
if (stv090x_write_reg(state, STV090x_SYNTCTRL, reg) < 0)
3981
mutex_unlock(&state->internal->demod_lock);
3877
3985
stv090x_i2c_gate_ctrl(state, 0);
3987
mutex_unlock(&state->internal->demod_lock);
3879
3988
dprintk(FE_ERROR, 1, "I/O error");
3885
3994
struct stv090x_state *state = fe->demodulator_priv;
3888
dprintk(FE_DEBUG, 1, "Wake %s from standby",
3889
state->device == STV0900 ? "STV0900" : "STV0903");
3997
dprintk(FE_DEBUG, 1, "Wake %s(%d) from standby",
3998
state->device == STV0900 ? "STV0900" : "STV0903",
4001
mutex_lock(&state->internal->demod_lock);
4003
/* general power on */
3891
4004
reg = stv090x_read_reg(state, STV090x_SYNTCTRL);
3892
4005
STV090x_SETFIELD(reg, STANDBY_FIELD, 0x00);
3893
4006
if (stv090x_write_reg(state, STV090x_SYNTCTRL, reg) < 0)
3896
reg = stv090x_read_reg(state, STV090x_TSTTNR1);
3897
STV090x_SETFIELD(reg, ADC1_PON_FIELD, 1);
3898
if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0)
4009
switch (state->demod) {
4010
case STV090x_DEMODULATOR_0:
4011
/* power on ADC 1 */
4012
reg = stv090x_read_reg(state, STV090x_TSTTNR1);
4013
STV090x_SETFIELD(reg, ADC1_PON_FIELD, 1);
4014
if (stv090x_write_reg(state, STV090x_TSTTNR1, reg) < 0)
4016
/* power on DiSEqC 1 */
4017
reg = stv090x_read_reg(state, STV090x_TSTTNR2);
4018
STV090x_SETFIELD(reg, DISEQC1_PON_FIELD, 1);
4019
if (stv090x_write_reg(state, STV090x_TSTTNR2, reg) < 0)
4022
/* activate clocks */
4023
reg = stv090x_read_reg(state, STV090x_STOPCLK1);
4024
/* packet delineator 1 clock */
4025
STV090x_SETFIELD(reg, STOP_CLKPKDT1_FIELD, 0);
4027
STV090x_SETFIELD(reg, STOP_CLKADCI1_FIELD, 0);
4029
STV090x_SETFIELD(reg, STOP_CLKFEC_FIELD, 0);
4030
if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0)
4032
reg = stv090x_read_reg(state, STV090x_STOPCLK2);
4033
/* sampling 1 clock */
4034
STV090x_SETFIELD(reg, STOP_CLKSAMP1_FIELD, 0);
4035
/* viterbi 1 clock */
4036
STV090x_SETFIELD(reg, STOP_CLKVIT1_FIELD, 0);
4038
STV090x_SETFIELD(reg, STOP_CLKTS_FIELD, 0);
4039
if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0)
4043
case STV090x_DEMODULATOR_1:
4044
/* power on ADC 2 */
4045
reg = stv090x_read_reg(state, STV090x_TSTTNR3);
4046
STV090x_SETFIELD(reg, ADC2_PON_FIELD, 1);
4047
if (stv090x_write_reg(state, STV090x_TSTTNR3, reg) < 0)
4049
/* power on DiSEqC 2 */
4050
reg = stv090x_read_reg(state, STV090x_TSTTNR4);
4051
STV090x_SETFIELD(reg, DISEQC2_PON_FIELD, 1);
4052
if (stv090x_write_reg(state, STV090x_TSTTNR4, reg) < 0)
4055
/* activate clocks */
4056
reg = stv090x_read_reg(state, STV090x_STOPCLK1);
4057
/* packet delineator 2 clock */
4058
STV090x_SETFIELD(reg, STOP_CLKPKDT2_FIELD, 0);
4060
STV090x_SETFIELD(reg, STOP_CLKADCI2_FIELD, 0);
4062
STV090x_SETFIELD(reg, STOP_CLKFEC_FIELD, 0);
4063
if (stv090x_write_reg(state, STV090x_STOPCLK1, reg) < 0)
4065
reg = stv090x_read_reg(state, STV090x_STOPCLK2);
4066
/* sampling 2 clock */
4067
STV090x_SETFIELD(reg, STOP_CLKSAMP2_FIELD, 0);
4068
/* viterbi 2 clock */
4069
STV090x_SETFIELD(reg, STOP_CLKVIT2_FIELD, 0);
4071
STV090x_SETFIELD(reg, STOP_CLKTS_FIELD, 0);
4072
if (stv090x_write_reg(state, STV090x_STOPCLK2, reg) < 0)
4077
dprintk(FE_ERROR, 1, "Wrong demodulator!");
4081
mutex_unlock(&state->internal->demod_lock);
4084
mutex_unlock(&state->internal->demod_lock);
3903
4085
dprintk(FE_ERROR, 1, "I/O error");
4506
4696
if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0)
4509
/* workaround for stuck DiSEqC output */
4510
if (config->diseqc_envelope_mode)
4511
stv090x_send_diseqc_burst(fe, SEC_MINI_A);
4515
4701
dprintk(FE_ERROR, 1, "I/O error");
4705
int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, u8 dir, u8 value,
4708
struct stv090x_state *state = fe->demodulator_priv;
4711
STV090x_SETFIELD(reg, GPIOx_OPD_FIELD, dir);
4712
STV090x_SETFIELD(reg, GPIOx_CONFIG_FIELD, value);
4713
STV090x_SETFIELD(reg, GPIOx_XOR_FIELD, xor_value);
4715
return stv090x_write_reg(state, STV090x_GPIOxCFG(gpio), reg);
4717
EXPORT_SYMBOL(stv090x_set_gpio);
4519
4719
static struct dvb_frontend_ops stv090x_ops = {
4580
4780
state->internal = temp_int->internal;
4581
4781
state->internal->num_used++;
4582
4782
dprintk(FE_INFO, 1, "Found Internal Structure!");
4583
dprintk(FE_ERROR, 1, "Attaching %s demodulator(%d) Cut=0x%02x",
4584
state->device == STV0900 ? "STV0900" : "STV0903",
4586
state->internal->dev_ver);
4587
return &state->frontend;
4589
4784
state->internal = kmalloc(sizeof(struct stv090x_internal),
4786
if (!state->internal)
4591
4788
temp_int = append_internal(state->internal);
4790
kfree(state->internal);
4592
4793
state->internal->num_used = 1;
4593
4794
state->internal->mclk = 0;
4594
4795
state->internal->dev_ver = 0;
4595
4796
state->internal->i2c_adap = state->i2c;
4596
4797
state->internal->i2c_addr = state->config->address;
4597
4798
dprintk(FE_INFO, 1, "Create New Internal Structure!");
4600
mutex_init(&state->internal->demod_lock);
4601
mutex_init(&state->internal->tuner_lock);
4603
if (stv090x_sleep(&state->frontend) < 0) {
4604
dprintk(FE_ERROR, 1, "Error putting device to sleep");
4608
if (stv090x_setup(&state->frontend) < 0) {
4609
dprintk(FE_ERROR, 1, "Error setting up device");
4612
if (stv090x_wakeup(&state->frontend) < 0) {
4613
dprintk(FE_ERROR, 1, "Error waking device");
4800
mutex_init(&state->internal->demod_lock);
4801
mutex_init(&state->internal->tuner_lock);
4803
if (stv090x_setup(&state->frontend) < 0) {
4804
dprintk(FE_ERROR, 1, "Error setting up device");
4809
/* workaround for stuck DiSEqC output */
4810
if (config->diseqc_envelope_mode)
4811
stv090x_send_diseqc_burst(&state->frontend, SEC_MINI_A);
4617
4813
dprintk(FE_ERROR, 1, "Attaching %s demodulator(%d) Cut=0x%02x",
4618
4814
state->device == STV0900 ? "STV0900" : "STV0903",