diff options
Diffstat (limited to 'drivers/media/dvb/frontends/stv0367.c')
-rw-r--r-- | drivers/media/dvb/frontends/stv0367.c | 156 |
1 files changed, 75 insertions, 81 deletions
diff --git a/drivers/media/dvb/frontends/stv0367.c b/drivers/media/dvb/frontends/stv0367.c index e57ab53e2e27..fdd20c7737b5 100644 --- a/drivers/media/dvb/frontends/stv0367.c +++ b/drivers/media/dvb/frontends/stv0367.c | |||
@@ -1577,9 +1577,9 @@ int stv0367ter_init(struct dvb_frontend *fe) | |||
1577 | return 0; | 1577 | return 0; |
1578 | } | 1578 | } |
1579 | 1579 | ||
1580 | static int stv0367ter_algo(struct dvb_frontend *fe, | 1580 | static int stv0367ter_algo(struct dvb_frontend *fe) |
1581 | struct dvb_frontend_parameters *param) | ||
1582 | { | 1581 | { |
1582 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; | ||
1583 | struct stv0367_state *state = fe->demodulator_priv; | 1583 | struct stv0367_state *state = fe->demodulator_priv; |
1584 | struct stv0367ter_state *ter_state = state->ter_state; | 1584 | struct stv0367ter_state *ter_state = state->ter_state; |
1585 | int offset = 0, tempo = 0; | 1585 | int offset = 0, tempo = 0; |
@@ -1591,7 +1591,7 @@ static int stv0367ter_algo(struct dvb_frontend *fe, | |||
1591 | 1591 | ||
1592 | dprintk("%s:\n", __func__); | 1592 | dprintk("%s:\n", __func__); |
1593 | 1593 | ||
1594 | ter_state->frequency = param->frequency; | 1594 | ter_state->frequency = p->frequency; |
1595 | ter_state->force = FE_TER_FORCENONE | 1595 | ter_state->force = FE_TER_FORCENONE |
1596 | + stv0367_readbits(state, F367TER_FORCE) * 2; | 1596 | + stv0367_readbits(state, F367TER_FORCE) * 2; |
1597 | ter_state->if_iq_mode = state->config->if_iq_mode; | 1597 | ter_state->if_iq_mode = state->config->if_iq_mode; |
@@ -1620,7 +1620,7 @@ static int stv0367ter_algo(struct dvb_frontend *fe, | |||
1620 | 1620 | ||
1621 | usleep_range(5000, 7000); | 1621 | usleep_range(5000, 7000); |
1622 | 1622 | ||
1623 | switch (param->inversion) { | 1623 | switch (p->inversion) { |
1624 | case INVERSION_AUTO: | 1624 | case INVERSION_AUTO: |
1625 | default: | 1625 | default: |
1626 | dprintk("%s: inversion AUTO\n", __func__); | 1626 | dprintk("%s: inversion AUTO\n", __func__); |
@@ -1636,10 +1636,10 @@ static int stv0367ter_algo(struct dvb_frontend *fe, | |||
1636 | case INVERSION_OFF: | 1636 | case INVERSION_OFF: |
1637 | if (ter_state->if_iq_mode == FE_TER_IQ_TUNER) | 1637 | if (ter_state->if_iq_mode == FE_TER_IQ_TUNER) |
1638 | stv0367_writebits(state, F367TER_IQ_INVERT, | 1638 | stv0367_writebits(state, F367TER_IQ_INVERT, |
1639 | param->inversion); | 1639 | p->inversion); |
1640 | else | 1640 | else |
1641 | stv0367_writebits(state, F367TER_INV_SPECTR, | 1641 | stv0367_writebits(state, F367TER_INV_SPECTR, |
1642 | param->inversion); | 1642 | p->inversion); |
1643 | 1643 | ||
1644 | break; | 1644 | break; |
1645 | } | 1645 | } |
@@ -1806,10 +1806,9 @@ static int stv0367ter_algo(struct dvb_frontend *fe, | |||
1806 | return 0; | 1806 | return 0; |
1807 | } | 1807 | } |
1808 | 1808 | ||
1809 | static int stv0367ter_set_frontend(struct dvb_frontend *fe, | 1809 | static int stv0367ter_set_frontend(struct dvb_frontend *fe) |
1810 | struct dvb_frontend_parameters *param) | ||
1811 | { | 1810 | { |
1812 | struct dvb_ofdm_parameters *op = ¶m->u.ofdm; | 1811 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; |
1813 | struct stv0367_state *state = fe->demodulator_priv; | 1812 | struct stv0367_state *state = fe->demodulator_priv; |
1814 | struct stv0367ter_state *ter_state = state->ter_state; | 1813 | struct stv0367ter_state *ter_state = state->ter_state; |
1815 | 1814 | ||
@@ -1822,12 +1821,12 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe, | |||
1822 | if (fe->ops.tuner_ops.set_params) { | 1821 | if (fe->ops.tuner_ops.set_params) { |
1823 | if (fe->ops.i2c_gate_ctrl) | 1822 | if (fe->ops.i2c_gate_ctrl) |
1824 | fe->ops.i2c_gate_ctrl(fe, 1); | 1823 | fe->ops.i2c_gate_ctrl(fe, 1); |
1825 | fe->ops.tuner_ops.set_params(fe, param); | 1824 | fe->ops.tuner_ops.set_params(fe); |
1826 | if (fe->ops.i2c_gate_ctrl) | 1825 | if (fe->ops.i2c_gate_ctrl) |
1827 | fe->ops.i2c_gate_ctrl(fe, 0); | 1826 | fe->ops.i2c_gate_ctrl(fe, 0); |
1828 | } | 1827 | } |
1829 | 1828 | ||
1830 | switch (op->transmission_mode) { | 1829 | switch (p->transmission_mode) { |
1831 | default: | 1830 | default: |
1832 | case TRANSMISSION_MODE_AUTO: | 1831 | case TRANSMISSION_MODE_AUTO: |
1833 | case TRANSMISSION_MODE_2K: | 1832 | case TRANSMISSION_MODE_2K: |
@@ -1841,34 +1840,34 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe, | |||
1841 | break; | 1840 | break; |
1842 | } | 1841 | } |
1843 | 1842 | ||
1844 | switch (op->guard_interval) { | 1843 | switch (p->guard_interval) { |
1845 | default: | 1844 | default: |
1846 | case GUARD_INTERVAL_1_32: | 1845 | case GUARD_INTERVAL_1_32: |
1847 | case GUARD_INTERVAL_1_16: | 1846 | case GUARD_INTERVAL_1_16: |
1848 | case GUARD_INTERVAL_1_8: | 1847 | case GUARD_INTERVAL_1_8: |
1849 | case GUARD_INTERVAL_1_4: | 1848 | case GUARD_INTERVAL_1_4: |
1850 | ter_state->guard = op->guard_interval; | 1849 | ter_state->guard = p->guard_interval; |
1851 | break; | 1850 | break; |
1852 | case GUARD_INTERVAL_AUTO: | 1851 | case GUARD_INTERVAL_AUTO: |
1853 | ter_state->guard = GUARD_INTERVAL_1_32; | 1852 | ter_state->guard = GUARD_INTERVAL_1_32; |
1854 | break; | 1853 | break; |
1855 | } | 1854 | } |
1856 | 1855 | ||
1857 | switch (op->bandwidth) { | 1856 | switch (p->bandwidth_hz) { |
1858 | case BANDWIDTH_6_MHZ: | 1857 | case 6000000: |
1859 | ter_state->bw = FE_TER_CHAN_BW_6M; | 1858 | ter_state->bw = FE_TER_CHAN_BW_6M; |
1860 | break; | 1859 | break; |
1861 | case BANDWIDTH_7_MHZ: | 1860 | case 7000000: |
1862 | ter_state->bw = FE_TER_CHAN_BW_7M; | 1861 | ter_state->bw = FE_TER_CHAN_BW_7M; |
1863 | break; | 1862 | break; |
1864 | case BANDWIDTH_8_MHZ: | 1863 | case 8000000: |
1865 | default: | 1864 | default: |
1866 | ter_state->bw = FE_TER_CHAN_BW_8M; | 1865 | ter_state->bw = FE_TER_CHAN_BW_8M; |
1867 | } | 1866 | } |
1868 | 1867 | ||
1869 | ter_state->hierarchy = FE_TER_HIER_NONE; | 1868 | ter_state->hierarchy = FE_TER_HIER_NONE; |
1870 | 1869 | ||
1871 | switch (param->inversion) { | 1870 | switch (p->inversion) { |
1872 | case INVERSION_OFF: | 1871 | case INVERSION_OFF: |
1873 | case INVERSION_ON: | 1872 | case INVERSION_ON: |
1874 | num_trials = 1; | 1873 | num_trials = 1; |
@@ -1885,14 +1884,14 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe, | |||
1885 | 1884 | ||
1886 | while (((index) < num_trials) && (ter_state->state != FE_TER_LOCKOK)) { | 1885 | while (((index) < num_trials) && (ter_state->state != FE_TER_LOCKOK)) { |
1887 | if (!ter_state->first_lock) { | 1886 | if (!ter_state->first_lock) { |
1888 | if (param->inversion == INVERSION_AUTO) | 1887 | if (p->inversion == INVERSION_AUTO) |
1889 | ter_state->sense = SenseTrials[index]; | 1888 | ter_state->sense = SenseTrials[index]; |
1890 | 1889 | ||
1891 | } | 1890 | } |
1892 | stv0367ter_algo(fe,/* &pLook, result,*/ param); | 1891 | stv0367ter_algo(fe); |
1893 | 1892 | ||
1894 | if ((ter_state->state == FE_TER_LOCKOK) && | 1893 | if ((ter_state->state == FE_TER_LOCKOK) && |
1895 | (param->inversion == INVERSION_AUTO) && | 1894 | (p->inversion == INVERSION_AUTO) && |
1896 | (index == 1)) { | 1895 | (index == 1)) { |
1897 | /* invert spectrum sense */ | 1896 | /* invert spectrum sense */ |
1898 | SenseTrials[index] = SenseTrials[0]; | 1897 | SenseTrials[index] = SenseTrials[0]; |
@@ -1927,50 +1926,48 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) | |||
1927 | return 0; | 1926 | return 0; |
1928 | } | 1927 | } |
1929 | 1928 | ||
1930 | static int stv0367ter_get_frontend(struct dvb_frontend *fe, | 1929 | static int stv0367ter_get_frontend(struct dvb_frontend *fe) |
1931 | struct dvb_frontend_parameters *param) | ||
1932 | { | 1930 | { |
1931 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; | ||
1933 | struct stv0367_state *state = fe->demodulator_priv; | 1932 | struct stv0367_state *state = fe->demodulator_priv; |
1934 | struct stv0367ter_state *ter_state = state->ter_state; | 1933 | struct stv0367ter_state *ter_state = state->ter_state; |
1935 | struct dvb_ofdm_parameters *op = ¶m->u.ofdm; | ||
1936 | struct dtv_frontend_properties *c = &fe->dtv_property_cache; | ||
1937 | 1934 | ||
1938 | int error = 0; | 1935 | int error = 0; |
1939 | enum stv0367_ter_mode mode; | 1936 | enum stv0367_ter_mode mode; |
1940 | int constell = 0,/* snr = 0,*/ Data = 0; | 1937 | int constell = 0,/* snr = 0,*/ Data = 0; |
1941 | 1938 | ||
1942 | param->frequency = stv0367_get_tuner_freq(fe); | 1939 | p->frequency = stv0367_get_tuner_freq(fe); |
1943 | if ((int)param->frequency < 0) | 1940 | if ((int)p->frequency < 0) |
1944 | param->frequency = c->frequency; | 1941 | p->frequency = -p->frequency; |
1945 | 1942 | ||
1946 | constell = stv0367_readbits(state, F367TER_TPS_CONST); | 1943 | constell = stv0367_readbits(state, F367TER_TPS_CONST); |
1947 | if (constell == 0) | 1944 | if (constell == 0) |
1948 | op->constellation = QPSK; | 1945 | p->modulation = QPSK; |
1949 | else if (constell == 1) | 1946 | else if (constell == 1) |
1950 | op->constellation = QAM_16; | 1947 | p->modulation = QAM_16; |
1951 | else | 1948 | else |
1952 | op->constellation = QAM_64; | 1949 | p->modulation = QAM_64; |
1953 | 1950 | ||
1954 | param->inversion = stv0367_readbits(state, F367TER_INV_SPECTR); | 1951 | p->inversion = stv0367_readbits(state, F367TER_INV_SPECTR); |
1955 | 1952 | ||
1956 | /* Get the Hierarchical mode */ | 1953 | /* Get the Hierarchical mode */ |
1957 | Data = stv0367_readbits(state, F367TER_TPS_HIERMODE); | 1954 | Data = stv0367_readbits(state, F367TER_TPS_HIERMODE); |
1958 | 1955 | ||
1959 | switch (Data) { | 1956 | switch (Data) { |
1960 | case 0: | 1957 | case 0: |
1961 | op->hierarchy_information = HIERARCHY_NONE; | 1958 | p->hierarchy = HIERARCHY_NONE; |
1962 | break; | 1959 | break; |
1963 | case 1: | 1960 | case 1: |
1964 | op->hierarchy_information = HIERARCHY_1; | 1961 | p->hierarchy = HIERARCHY_1; |
1965 | break; | 1962 | break; |
1966 | case 2: | 1963 | case 2: |
1967 | op->hierarchy_information = HIERARCHY_2; | 1964 | p->hierarchy = HIERARCHY_2; |
1968 | break; | 1965 | break; |
1969 | case 3: | 1966 | case 3: |
1970 | op->hierarchy_information = HIERARCHY_4; | 1967 | p->hierarchy = HIERARCHY_4; |
1971 | break; | 1968 | break; |
1972 | default: | 1969 | default: |
1973 | op->hierarchy_information = HIERARCHY_AUTO; | 1970 | p->hierarchy = HIERARCHY_AUTO; |
1974 | break; /* error */ | 1971 | break; /* error */ |
1975 | } | 1972 | } |
1976 | 1973 | ||
@@ -1982,22 +1979,22 @@ static int stv0367ter_get_frontend(struct dvb_frontend *fe, | |||
1982 | 1979 | ||
1983 | switch (Data) { | 1980 | switch (Data) { |
1984 | case 0: | 1981 | case 0: |
1985 | op->code_rate_HP = FEC_1_2; | 1982 | p->code_rate_HP = FEC_1_2; |
1986 | break; | 1983 | break; |
1987 | case 1: | 1984 | case 1: |
1988 | op->code_rate_HP = FEC_2_3; | 1985 | p->code_rate_HP = FEC_2_3; |
1989 | break; | 1986 | break; |
1990 | case 2: | 1987 | case 2: |
1991 | op->code_rate_HP = FEC_3_4; | 1988 | p->code_rate_HP = FEC_3_4; |
1992 | break; | 1989 | break; |
1993 | case 3: | 1990 | case 3: |
1994 | op->code_rate_HP = FEC_5_6; | 1991 | p->code_rate_HP = FEC_5_6; |
1995 | break; | 1992 | break; |
1996 | case 4: | 1993 | case 4: |
1997 | op->code_rate_HP = FEC_7_8; | 1994 | p->code_rate_HP = FEC_7_8; |
1998 | break; | 1995 | break; |
1999 | default: | 1996 | default: |
2000 | op->code_rate_HP = FEC_AUTO; | 1997 | p->code_rate_HP = FEC_AUTO; |
2001 | break; /* error */ | 1998 | break; /* error */ |
2002 | } | 1999 | } |
2003 | 2000 | ||
@@ -2005,19 +2002,19 @@ static int stv0367ter_get_frontend(struct dvb_frontend *fe, | |||
2005 | 2002 | ||
2006 | switch (mode) { | 2003 | switch (mode) { |
2007 | case FE_TER_MODE_2K: | 2004 | case FE_TER_MODE_2K: |
2008 | op->transmission_mode = TRANSMISSION_MODE_2K; | 2005 | p->transmission_mode = TRANSMISSION_MODE_2K; |
2009 | break; | 2006 | break; |
2010 | /* case FE_TER_MODE_4K: | 2007 | /* case FE_TER_MODE_4K: |
2011 | op->transmission_mode = TRANSMISSION_MODE_4K; | 2008 | p->transmission_mode = TRANSMISSION_MODE_4K; |
2012 | break;*/ | 2009 | break;*/ |
2013 | case FE_TER_MODE_8K: | 2010 | case FE_TER_MODE_8K: |
2014 | op->transmission_mode = TRANSMISSION_MODE_8K; | 2011 | p->transmission_mode = TRANSMISSION_MODE_8K; |
2015 | break; | 2012 | break; |
2016 | default: | 2013 | default: |
2017 | op->transmission_mode = TRANSMISSION_MODE_AUTO; | 2014 | p->transmission_mode = TRANSMISSION_MODE_AUTO; |
2018 | } | 2015 | } |
2019 | 2016 | ||
2020 | op->guard_interval = stv0367_readbits(state, F367TER_SYR_GUARD); | 2017 | p->guard_interval = stv0367_readbits(state, F367TER_SYR_GUARD); |
2021 | 2018 | ||
2022 | return error; | 2019 | return error; |
2023 | } | 2020 | } |
@@ -2265,9 +2262,9 @@ static void stv0367_release(struct dvb_frontend *fe) | |||
2265 | } | 2262 | } |
2266 | 2263 | ||
2267 | static struct dvb_frontend_ops stv0367ter_ops = { | 2264 | static struct dvb_frontend_ops stv0367ter_ops = { |
2265 | .delsys = { SYS_DVBT }, | ||
2268 | .info = { | 2266 | .info = { |
2269 | .name = "ST STV0367 DVB-T", | 2267 | .name = "ST STV0367 DVB-T", |
2270 | .type = FE_OFDM, | ||
2271 | .frequency_min = 47000000, | 2268 | .frequency_min = 47000000, |
2272 | .frequency_max = 862000000, | 2269 | .frequency_max = 862000000, |
2273 | .frequency_stepsize = 15625, | 2270 | .frequency_stepsize = 15625, |
@@ -2822,9 +2819,8 @@ int stv0367cab_init(struct dvb_frontend *fe) | |||
2822 | } | 2819 | } |
2823 | static | 2820 | static |
2824 | enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | 2821 | enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, |
2825 | struct dvb_frontend_parameters *param) | 2822 | struct dtv_frontend_properties *p) |
2826 | { | 2823 | { |
2827 | struct dvb_qam_parameters *op = ¶m->u.qam; | ||
2828 | struct stv0367cab_state *cab_state = state->cab_state; | 2824 | struct stv0367cab_state *cab_state = state->cab_state; |
2829 | enum stv0367_cab_signal_type signalType = FE_CAB_NOAGC; | 2825 | enum stv0367_cab_signal_type signalType = FE_CAB_NOAGC; |
2830 | u32 QAMFEC_Lock, QAM_Lock, u32_tmp, | 2826 | u32 QAMFEC_Lock, QAM_Lock, u32_tmp, |
@@ -2839,7 +2835,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
2839 | /* A max lock time of 25 ms is allowed for delayed AGC */ | 2835 | /* A max lock time of 25 ms is allowed for delayed AGC */ |
2840 | AGCTimeOut = 25; | 2836 | AGCTimeOut = 25; |
2841 | /* 100000 symbols needed by the TRL as a maximum value */ | 2837 | /* 100000 symbols needed by the TRL as a maximum value */ |
2842 | TRLTimeOut = 100000000 / op->symbol_rate; | 2838 | TRLTimeOut = 100000000 / p->symbol_rate; |
2843 | /* CRLSymbols is the needed number of symbols to achieve a lock | 2839 | /* CRLSymbols is the needed number of symbols to achieve a lock |
2844 | within [-4%, +4%] of the symbol rate. | 2840 | within [-4%, +4%] of the symbol rate. |
2845 | CRL timeout is calculated | 2841 | CRL timeout is calculated |
@@ -2849,7 +2845,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
2849 | A characterization must be performed | 2845 | A characterization must be performed |
2850 | with these echoes to get new timeout values. | 2846 | with these echoes to get new timeout values. |
2851 | */ | 2847 | */ |
2852 | switch (op->modulation) { | 2848 | switch (p->modulation) { |
2853 | case QAM_16: | 2849 | case QAM_16: |
2854 | CRLSymbols = 150000; | 2850 | CRLSymbols = 150000; |
2855 | EQLTimeOut = 100; | 2851 | EQLTimeOut = 100; |
@@ -2883,9 +2879,9 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
2883 | } else | 2879 | } else |
2884 | #endif | 2880 | #endif |
2885 | CRLTimeOut = (25 * CRLSymbols * (cab_state->search_range / 1000)) / | 2881 | CRLTimeOut = (25 * CRLSymbols * (cab_state->search_range / 1000)) / |
2886 | (op->symbol_rate / 1000); | 2882 | (p->symbol_rate / 1000); |
2887 | 2883 | ||
2888 | CRLTimeOut = (1000 * CRLTimeOut) / op->symbol_rate; | 2884 | CRLTimeOut = (1000 * CRLTimeOut) / p->symbol_rate; |
2889 | /* Timeouts below 50ms are coerced */ | 2885 | /* Timeouts below 50ms are coerced */ |
2890 | if (CRLTimeOut < 50) | 2886 | if (CRLTimeOut < 50) |
2891 | CRLTimeOut = 50; | 2887 | CRLTimeOut = 50; |
@@ -2915,7 +2911,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
2915 | stv0367cab_set_derot_freq(state, cab_state->adc_clk, | 2911 | stv0367cab_set_derot_freq(state, cab_state->adc_clk, |
2916 | (1000 * (s32)state->config->if_khz + cab_state->derot_offset)); | 2912 | (1000 * (s32)state->config->if_khz + cab_state->derot_offset)); |
2917 | /* Disable the Allpass Filter when the symbol rate is out of range */ | 2913 | /* Disable the Allpass Filter when the symbol rate is out of range */ |
2918 | if ((op->symbol_rate > 10800000) | (op->symbol_rate < 1800000)) { | 2914 | if ((p->symbol_rate > 10800000) | (p->symbol_rate < 1800000)) { |
2919 | stv0367_writebits(state, F367CAB_ADJ_EN, 0); | 2915 | stv0367_writebits(state, F367CAB_ADJ_EN, 0); |
2920 | stv0367_writebits(state, F367CAB_ALLPASSFILT_EN, 0); | 2916 | stv0367_writebits(state, F367CAB_ALLPASSFILT_EN, 0); |
2921 | } | 2917 | } |
@@ -2999,7 +2995,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
2999 | 2995 | ||
3000 | if (QAMFEC_Lock) { | 2996 | if (QAMFEC_Lock) { |
3001 | signalType = FE_CAB_DATAOK; | 2997 | signalType = FE_CAB_DATAOK; |
3002 | cab_state->modulation = op->modulation; | 2998 | cab_state->modulation = p->modulation; |
3003 | cab_state->spect_inv = stv0367_readbits(state, | 2999 | cab_state->spect_inv = stv0367_readbits(state, |
3004 | F367CAB_QUAD_INV); | 3000 | F367CAB_QUAD_INV); |
3005 | #if 0 | 3001 | #if 0 |
@@ -3081,20 +3077,19 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, | |||
3081 | return signalType; | 3077 | return signalType; |
3082 | } | 3078 | } |
3083 | 3079 | ||
3084 | static int stv0367cab_set_frontend(struct dvb_frontend *fe, | 3080 | static int stv0367cab_set_frontend(struct dvb_frontend *fe) |
3085 | struct dvb_frontend_parameters *param) | ||
3086 | { | 3081 | { |
3082 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; | ||
3087 | struct stv0367_state *state = fe->demodulator_priv; | 3083 | struct stv0367_state *state = fe->demodulator_priv; |
3088 | struct stv0367cab_state *cab_state = state->cab_state; | 3084 | struct stv0367cab_state *cab_state = state->cab_state; |
3089 | struct dvb_qam_parameters *op = ¶m->u.qam; | ||
3090 | enum stv0367cab_mod QAMSize = 0; | 3085 | enum stv0367cab_mod QAMSize = 0; |
3091 | 3086 | ||
3092 | dprintk("%s: freq = %d, srate = %d\n", __func__, | 3087 | dprintk("%s: freq = %d, srate = %d\n", __func__, |
3093 | param->frequency, op->symbol_rate); | 3088 | p->frequency, p->symbol_rate); |
3094 | 3089 | ||
3095 | cab_state->derot_offset = 0; | 3090 | cab_state->derot_offset = 0; |
3096 | 3091 | ||
3097 | switch (op->modulation) { | 3092 | switch (p->modulation) { |
3098 | case QAM_16: | 3093 | case QAM_16: |
3099 | QAMSize = FE_CAB_MOD_QAM16; | 3094 | QAMSize = FE_CAB_MOD_QAM16; |
3100 | break; | 3095 | break; |
@@ -3120,77 +3115,76 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe, | |||
3120 | if (fe->ops.tuner_ops.set_params) { | 3115 | if (fe->ops.tuner_ops.set_params) { |
3121 | if (fe->ops.i2c_gate_ctrl) | 3116 | if (fe->ops.i2c_gate_ctrl) |
3122 | fe->ops.i2c_gate_ctrl(fe, 1); | 3117 | fe->ops.i2c_gate_ctrl(fe, 1); |
3123 | fe->ops.tuner_ops.set_params(fe, param); | 3118 | fe->ops.tuner_ops.set_params(fe); |
3124 | if (fe->ops.i2c_gate_ctrl) | 3119 | if (fe->ops.i2c_gate_ctrl) |
3125 | fe->ops.i2c_gate_ctrl(fe, 0); | 3120 | fe->ops.i2c_gate_ctrl(fe, 0); |
3126 | } | 3121 | } |
3127 | 3122 | ||
3128 | stv0367cab_SetQamSize( | 3123 | stv0367cab_SetQamSize( |
3129 | state, | 3124 | state, |
3130 | op->symbol_rate, | 3125 | p->symbol_rate, |
3131 | QAMSize); | 3126 | QAMSize); |
3132 | 3127 | ||
3133 | stv0367cab_set_srate(state, | 3128 | stv0367cab_set_srate(state, |
3134 | cab_state->adc_clk, | 3129 | cab_state->adc_clk, |
3135 | cab_state->mclk, | 3130 | cab_state->mclk, |
3136 | op->symbol_rate, | 3131 | p->symbol_rate, |
3137 | QAMSize); | 3132 | QAMSize); |
3138 | /* Search algorithm launch, [-1.1*RangeOffset, +1.1*RangeOffset] scan */ | 3133 | /* Search algorithm launch, [-1.1*RangeOffset, +1.1*RangeOffset] scan */ |
3139 | cab_state->state = stv0367cab_algo(state, param); | 3134 | cab_state->state = stv0367cab_algo(state, p); |
3140 | return 0; | 3135 | return 0; |
3141 | } | 3136 | } |
3142 | 3137 | ||
3143 | static int stv0367cab_get_frontend(struct dvb_frontend *fe, | 3138 | static int stv0367cab_get_frontend(struct dvb_frontend *fe) |
3144 | struct dvb_frontend_parameters *param) | ||
3145 | { | 3139 | { |
3140 | struct dtv_frontend_properties *p = &fe->dtv_property_cache; | ||
3146 | struct stv0367_state *state = fe->demodulator_priv; | 3141 | struct stv0367_state *state = fe->demodulator_priv; |
3147 | struct stv0367cab_state *cab_state = state->cab_state; | 3142 | struct stv0367cab_state *cab_state = state->cab_state; |
3148 | struct dvb_qam_parameters *op = ¶m->u.qam; | ||
3149 | 3143 | ||
3150 | enum stv0367cab_mod QAMSize; | 3144 | enum stv0367cab_mod QAMSize; |
3151 | 3145 | ||
3152 | dprintk("%s:\n", __func__); | 3146 | dprintk("%s:\n", __func__); |
3153 | 3147 | ||
3154 | op->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk); | 3148 | p->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk); |
3155 | 3149 | ||
3156 | QAMSize = stv0367_readbits(state, F367CAB_QAM_MODE); | 3150 | QAMSize = stv0367_readbits(state, F367CAB_QAM_MODE); |
3157 | switch (QAMSize) { | 3151 | switch (QAMSize) { |
3158 | case FE_CAB_MOD_QAM16: | 3152 | case FE_CAB_MOD_QAM16: |
3159 | op->modulation = QAM_16; | 3153 | p->modulation = QAM_16; |
3160 | break; | 3154 | break; |
3161 | case FE_CAB_MOD_QAM32: | 3155 | case FE_CAB_MOD_QAM32: |
3162 | op->modulation = QAM_32; | 3156 | p->modulation = QAM_32; |
3163 | break; | 3157 | break; |
3164 | case FE_CAB_MOD_QAM64: | 3158 | case FE_CAB_MOD_QAM64: |
3165 | op->modulation = QAM_64; | 3159 | p->modulation = QAM_64; |
3166 | break; | 3160 | break; |
3167 | case FE_CAB_MOD_QAM128: | 3161 | case FE_CAB_MOD_QAM128: |
3168 | op->modulation = QAM_128; | 3162 | p->modulation = QAM_128; |
3169 | break; | 3163 | break; |
3170 | case QAM_256: | 3164 | case QAM_256: |
3171 | op->modulation = QAM_256; | 3165 | p->modulation = QAM_256; |
3172 | break; | 3166 | break; |
3173 | default: | 3167 | default: |
3174 | break; | 3168 | break; |
3175 | } | 3169 | } |
3176 | 3170 | ||
3177 | param->frequency = stv0367_get_tuner_freq(fe); | 3171 | p->frequency = stv0367_get_tuner_freq(fe); |
3178 | 3172 | ||
3179 | dprintk("%s: tuner frequency = %d\n", __func__, param->frequency); | 3173 | dprintk("%s: tuner frequency = %d\n", __func__, p->frequency); |
3180 | 3174 | ||
3181 | if (state->config->if_khz == 0) { | 3175 | if (state->config->if_khz == 0) { |
3182 | param->frequency += | 3176 | p->frequency += |
3183 | (stv0367cab_get_derot_freq(state, cab_state->adc_clk) - | 3177 | (stv0367cab_get_derot_freq(state, cab_state->adc_clk) - |
3184 | cab_state->adc_clk / 4000); | 3178 | cab_state->adc_clk / 4000); |
3185 | return 0; | 3179 | return 0; |
3186 | } | 3180 | } |
3187 | 3181 | ||
3188 | if (state->config->if_khz > cab_state->adc_clk / 1000) | 3182 | if (state->config->if_khz > cab_state->adc_clk / 1000) |
3189 | param->frequency += (state->config->if_khz | 3183 | p->frequency += (state->config->if_khz |
3190 | - stv0367cab_get_derot_freq(state, cab_state->adc_clk) | 3184 | - stv0367cab_get_derot_freq(state, cab_state->adc_clk) |
3191 | - cab_state->adc_clk / 1000); | 3185 | - cab_state->adc_clk / 1000); |
3192 | else | 3186 | else |
3193 | param->frequency += (state->config->if_khz | 3187 | p->frequency += (state->config->if_khz |
3194 | - stv0367cab_get_derot_freq(state, cab_state->adc_clk)); | 3188 | - stv0367cab_get_derot_freq(state, cab_state->adc_clk)); |
3195 | 3189 | ||
3196 | return 0; | 3190 | return 0; |
@@ -3386,9 +3380,9 @@ static int stv0367cab_read_ucblcks(struct dvb_frontend *fe, u32 *ucblocks) | |||
3386 | }; | 3380 | }; |
3387 | 3381 | ||
3388 | static struct dvb_frontend_ops stv0367cab_ops = { | 3382 | static struct dvb_frontend_ops stv0367cab_ops = { |
3383 | .delsys = { SYS_DVBC_ANNEX_A }, | ||
3389 | .info = { | 3384 | .info = { |
3390 | .name = "ST STV0367 DVB-C", | 3385 | .name = "ST STV0367 DVB-C", |
3391 | .type = FE_QAM, | ||
3392 | .frequency_min = 47000000, | 3386 | .frequency_min = 47000000, |
3393 | .frequency_max = 862000000, | 3387 | .frequency_max = 862000000, |
3394 | .frequency_stepsize = 62500, | 3388 | .frequency_stepsize = 62500, |