V4L/DVB (12098): Create table for customize stv0900 ts registers.
[pandora-kernel.git] / drivers / media / dvb / frontends / stv0900_core.c
index 9ab4f30..1da045f 100644 (file)
@@ -1393,7 +1393,7 @@ static enum fe_stv0900_error stv0900_init_internal(struct dvb_frontend *fe,
        struct stv0900_state *state = fe->demodulator_priv;
        enum fe_stv0900_error error = STV0900_NO_ERROR;
        enum fe_stv0900_error demodError = STV0900_NO_ERROR;
-       int selosci;
+       int selosci, i;
 
        struct stv0900_inode *temp_int = find_inode(state->i2c_adap,
                                                state->config->demod_address);
@@ -1440,7 +1440,23 @@ static enum fe_stv0900_error stv0900_init_internal(struct dvb_frontend *fe,
                                stv0900_write_bits(state->internal, F0900_P1_ROLLOFF_CONTROL, p_init->rolloff);
                                stv0900_write_bits(state->internal, F0900_P2_ROLLOFF_CONTROL, p_init->rolloff);
 
-                               stv0900_set_ts_parallel_serial(state->internal, p_init->path1_ts_clock, p_init->path2_ts_clock);
+                               state->internal->ts_config = p_init->ts_config;
+                               if (state->internal->ts_config == NULL)
+                                       stv0900_set_ts_parallel_serial(state->internal,
+                                                       p_init->path1_ts_clock,
+                                                       p_init->path2_ts_clock);
+                               else {
+                                       for (i = 0; state->internal->ts_config[i].addr != 0xffff; i++)
+                                               stv0900_write_reg(state->internal,
+                                                               state->internal->ts_config[i].addr,
+                                                               state->internal->ts_config[i].val);
+
+                                       stv0900_write_bits(state->internal, F0900_P2_RST_HWARE, 1);
+                                       stv0900_write_bits(state->internal, F0900_P2_RST_HWARE, 0);
+                                       stv0900_write_bits(state->internal, F0900_P1_RST_HWARE, 1);
+                                       stv0900_write_bits(state->internal, F0900_P1_RST_HWARE, 0);
+                               }
+
                                stv0900_write_bits(state->internal, F0900_P1_TUN_MADDRESS, p_init->tun1_maddress);
                                switch (p_init->tuner1_adc) {
                                case 1:
@@ -1954,6 +1970,7 @@ struct dvb_frontend *stv0900_attach(const struct stv0900_config *config,
                init_params.tun1_iq_inversion   = STV0900_IQ_NORMAL;
                init_params.tuner1_adc          = config->tun1_adc;
                init_params.path2_ts_clock      = config->path2_mode;
+               init_params.ts_config           = config->ts_config_regs;
                init_params.tun2_maddress       = config->tun2_maddress;
                init_params.tuner2_adc          = config->tun2_adc;
                init_params.tun2_iq_inversion   = STV0900_IQ_SWAPPED;