aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2011-12-26 11:03:00 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-12-31 06:33:42 -0500
commit285d55ad5f2cc0b8a316c3574e2faa0a5b45bd0f (patch)
tree0a4c0c260c2c7231c0b43de0e060d224e8c35841
parent5ebffc39929d553f26599976b7393e425a07bd36 (diff)
[media] stv0367: convert set_fontend to use DVBv5 parameters
Instead of using dvb_frontend_parameters struct, that were designed for a subset of the supported standards, use the DVBv5 cache information. Also, fill the supported delivery systems at dvb_frontend_ops struct. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/frontends/stv0367.c154
1 files changed, 75 insertions, 79 deletions
diff --git a/drivers/media/dvb/frontends/stv0367.c b/drivers/media/dvb/frontends/stv0367.c
index e0a243857c1..7c8964f67ad 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
1580static int stv0367ter_algo(struct dvb_frontend *fe, 1580static 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
1809static int stv0367ter_set_frontend(struct dvb_frontend *fe, 1809static int stv0367ter_set_frontend(struct dvb_frontend *fe)
1810 struct dvb_frontend_parameters *param)
1811{ 1810{
1812 struct dvb_ofdm_parameters *op = &param->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
@@ -1827,7 +1826,7 @@ static int stv0367ter_set_frontend(struct dvb_frontend *fe,
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];
@@ -1928,49 +1927,47 @@ static int stv0367ter_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
1928} 1927}
1929 1928
1930static int stv0367ter_get_frontend(struct dvb_frontend *fe, 1929static int stv0367ter_get_frontend(struct dvb_frontend *fe,
1931 struct dvb_frontend_parameters *param) 1930 struct dtv_frontend_properties *p)
1932{ 1931{
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 = &param->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,6 +2262,7 @@ static void stv0367_release(struct dvb_frontend *fe)
2265} 2262}
2266 2263
2267static struct dvb_frontend_ops stv0367ter_ops = { 2264static 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, 2268 .type = FE_OFDM,
@@ -2285,8 +2283,8 @@ static struct dvb_frontend_ops stv0367ter_ops = {
2285 .init = stv0367ter_init, 2283 .init = stv0367ter_init,
2286 .sleep = stv0367ter_sleep, 2284 .sleep = stv0367ter_sleep,
2287 .i2c_gate_ctrl = stv0367ter_gate_ctrl, 2285 .i2c_gate_ctrl = stv0367ter_gate_ctrl,
2288 .set_frontend_legacy = stv0367ter_set_frontend, 2286 .set_frontend = stv0367ter_set_frontend,
2289 .get_frontend_legacy = stv0367ter_get_frontend, 2287 .get_frontend = stv0367ter_get_frontend,
2290 .get_tune_settings = stv0367_get_tune_settings, 2288 .get_tune_settings = stv0367_get_tune_settings,
2291 .read_status = stv0367ter_read_status, 2289 .read_status = stv0367ter_read_status,
2292 .read_ber = stv0367ter_read_ber,/* too slow */ 2290 .read_ber = stv0367ter_read_ber,/* too slow */
@@ -2822,9 +2820,8 @@ int stv0367cab_init(struct dvb_frontend *fe)
2822} 2820}
2823static 2821static
2824enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state, 2822enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
2825 struct dvb_frontend_parameters *param) 2823 struct dtv_frontend_properties *p)
2826{ 2824{
2827 struct dvb_qam_parameters *op = &param->u.qam;
2828 struct stv0367cab_state *cab_state = state->cab_state; 2825 struct stv0367cab_state *cab_state = state->cab_state;
2829 enum stv0367_cab_signal_type signalType = FE_CAB_NOAGC; 2826 enum stv0367_cab_signal_type signalType = FE_CAB_NOAGC;
2830 u32 QAMFEC_Lock, QAM_Lock, u32_tmp, 2827 u32 QAMFEC_Lock, QAM_Lock, u32_tmp,
@@ -2839,7 +2836,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 */ 2836 /* A max lock time of 25 ms is allowed for delayed AGC */
2840 AGCTimeOut = 25; 2837 AGCTimeOut = 25;
2841 /* 100000 symbols needed by the TRL as a maximum value */ 2838 /* 100000 symbols needed by the TRL as a maximum value */
2842 TRLTimeOut = 100000000 / op->symbol_rate; 2839 TRLTimeOut = 100000000 / p->symbol_rate;
2843 /* CRLSymbols is the needed number of symbols to achieve a lock 2840 /* CRLSymbols is the needed number of symbols to achieve a lock
2844 within [-4%, +4%] of the symbol rate. 2841 within [-4%, +4%] of the symbol rate.
2845 CRL timeout is calculated 2842 CRL timeout is calculated
@@ -2849,7 +2846,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
2849 A characterization must be performed 2846 A characterization must be performed
2850 with these echoes to get new timeout values. 2847 with these echoes to get new timeout values.
2851 */ 2848 */
2852 switch (op->modulation) { 2849 switch (p->modulation) {
2853 case QAM_16: 2850 case QAM_16:
2854 CRLSymbols = 150000; 2851 CRLSymbols = 150000;
2855 EQLTimeOut = 100; 2852 EQLTimeOut = 100;
@@ -2883,9 +2880,9 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
2883 } else 2880 } else
2884#endif 2881#endif
2885 CRLTimeOut = (25 * CRLSymbols * (cab_state->search_range / 1000)) / 2882 CRLTimeOut = (25 * CRLSymbols * (cab_state->search_range / 1000)) /
2886 (op->symbol_rate / 1000); 2883 (p->symbol_rate / 1000);
2887 2884
2888 CRLTimeOut = (1000 * CRLTimeOut) / op->symbol_rate; 2885 CRLTimeOut = (1000 * CRLTimeOut) / p->symbol_rate;
2889 /* Timeouts below 50ms are coerced */ 2886 /* Timeouts below 50ms are coerced */
2890 if (CRLTimeOut < 50) 2887 if (CRLTimeOut < 50)
2891 CRLTimeOut = 50; 2888 CRLTimeOut = 50;
@@ -2915,7 +2912,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
2915 stv0367cab_set_derot_freq(state, cab_state->adc_clk, 2912 stv0367cab_set_derot_freq(state, cab_state->adc_clk,
2916 (1000 * (s32)state->config->if_khz + cab_state->derot_offset)); 2913 (1000 * (s32)state->config->if_khz + cab_state->derot_offset));
2917 /* Disable the Allpass Filter when the symbol rate is out of range */ 2914 /* Disable the Allpass Filter when the symbol rate is out of range */
2918 if ((op->symbol_rate > 10800000) | (op->symbol_rate < 1800000)) { 2915 if ((p->symbol_rate > 10800000) | (p->symbol_rate < 1800000)) {
2919 stv0367_writebits(state, F367CAB_ADJ_EN, 0); 2916 stv0367_writebits(state, F367CAB_ADJ_EN, 0);
2920 stv0367_writebits(state, F367CAB_ALLPASSFILT_EN, 0); 2917 stv0367_writebits(state, F367CAB_ALLPASSFILT_EN, 0);
2921 } 2918 }
@@ -2999,7 +2996,7 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
2999 2996
3000 if (QAMFEC_Lock) { 2997 if (QAMFEC_Lock) {
3001 signalType = FE_CAB_DATAOK; 2998 signalType = FE_CAB_DATAOK;
3002 cab_state->modulation = op->modulation; 2999 cab_state->modulation = p->modulation;
3003 cab_state->spect_inv = stv0367_readbits(state, 3000 cab_state->spect_inv = stv0367_readbits(state,
3004 F367CAB_QUAD_INV); 3001 F367CAB_QUAD_INV);
3005#if 0 3002#if 0
@@ -3081,20 +3078,19 @@ enum stv0367_cab_signal_type stv0367cab_algo(struct stv0367_state *state,
3081 return signalType; 3078 return signalType;
3082} 3079}
3083 3080
3084static int stv0367cab_set_frontend(struct dvb_frontend *fe, 3081static int stv0367cab_set_frontend(struct dvb_frontend *fe)
3085 struct dvb_frontend_parameters *param)
3086{ 3082{
3083 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
3087 struct stv0367_state *state = fe->demodulator_priv; 3084 struct stv0367_state *state = fe->demodulator_priv;
3088 struct stv0367cab_state *cab_state = state->cab_state; 3085 struct stv0367cab_state *cab_state = state->cab_state;
3089 struct dvb_qam_parameters *op = &param->u.qam;
3090 enum stv0367cab_mod QAMSize = 0; 3086 enum stv0367cab_mod QAMSize = 0;
3091 3087
3092 dprintk("%s: freq = %d, srate = %d\n", __func__, 3088 dprintk("%s: freq = %d, srate = %d\n", __func__,
3093 param->frequency, op->symbol_rate); 3089 p->frequency, p->symbol_rate);
3094 3090
3095 cab_state->derot_offset = 0; 3091 cab_state->derot_offset = 0;
3096 3092
3097 switch (op->modulation) { 3093 switch (p->modulation) {
3098 case QAM_16: 3094 case QAM_16:
3099 QAMSize = FE_CAB_MOD_QAM16; 3095 QAMSize = FE_CAB_MOD_QAM16;
3100 break; 3096 break;
@@ -3127,70 +3123,69 @@ static int stv0367cab_set_frontend(struct dvb_frontend *fe,
3127 3123
3128 stv0367cab_SetQamSize( 3124 stv0367cab_SetQamSize(
3129 state, 3125 state,
3130 op->symbol_rate, 3126 p->symbol_rate,
3131 QAMSize); 3127 QAMSize);
3132 3128
3133 stv0367cab_set_srate(state, 3129 stv0367cab_set_srate(state,
3134 cab_state->adc_clk, 3130 cab_state->adc_clk,
3135 cab_state->mclk, 3131 cab_state->mclk,
3136 op->symbol_rate, 3132 p->symbol_rate,
3137 QAMSize); 3133 QAMSize);
3138 /* Search algorithm launch, [-1.1*RangeOffset, +1.1*RangeOffset] scan */ 3134 /* Search algorithm launch, [-1.1*RangeOffset, +1.1*RangeOffset] scan */
3139 cab_state->state = stv0367cab_algo(state, param); 3135 cab_state->state = stv0367cab_algo(state, p);
3140 return 0; 3136 return 0;
3141} 3137}
3142 3138
3143static int stv0367cab_get_frontend(struct dvb_frontend *fe, 3139static int stv0367cab_get_frontend(struct dvb_frontend *fe,
3144 struct dvb_frontend_parameters *param) 3140 struct dtv_frontend_properties *p)
3145{ 3141{
3146 struct stv0367_state *state = fe->demodulator_priv; 3142 struct stv0367_state *state = fe->demodulator_priv;
3147 struct stv0367cab_state *cab_state = state->cab_state; 3143 struct stv0367cab_state *cab_state = state->cab_state;
3148 struct dvb_qam_parameters *op = &param->u.qam;
3149 3144
3150 enum stv0367cab_mod QAMSize; 3145 enum stv0367cab_mod QAMSize;
3151 3146
3152 dprintk("%s:\n", __func__); 3147 dprintk("%s:\n", __func__);
3153 3148
3154 op->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk); 3149 p->symbol_rate = stv0367cab_GetSymbolRate(state, cab_state->mclk);
3155 3150
3156 QAMSize = stv0367_readbits(state, F367CAB_QAM_MODE); 3151 QAMSize = stv0367_readbits(state, F367CAB_QAM_MODE);
3157 switch (QAMSize) { 3152 switch (QAMSize) {
3158 case FE_CAB_MOD_QAM16: 3153 case FE_CAB_MOD_QAM16:
3159 op->modulation = QAM_16; 3154 p->modulation = QAM_16;
3160 break; 3155 break;
3161 case FE_CAB_MOD_QAM32: 3156 case FE_CAB_MOD_QAM32:
3162 op->modulation = QAM_32; 3157 p->modulation = QAM_32;
3163 break; 3158 break;
3164 case FE_CAB_MOD_QAM64: 3159 case FE_CAB_MOD_QAM64:
3165 op->modulation = QAM_64; 3160 p->modulation = QAM_64;
3166 break; 3161 break;
3167 case FE_CAB_MOD_QAM128: 3162 case FE_CAB_MOD_QAM128:
3168 op->modulation = QAM_128; 3163 p->modulation = QAM_128;
3169 break; 3164 break;
3170 case QAM_256: 3165 case QAM_256:
3171 op->modulation = QAM_256; 3166 p->modulation = QAM_256;
3172 break; 3167 break;
3173 default: 3168 default:
3174 break; 3169 break;
3175 } 3170 }
3176 3171
3177 param->frequency = stv0367_get_tuner_freq(fe); 3172 p->frequency = stv0367_get_tuner_freq(fe);
3178 3173
3179 dprintk("%s: tuner frequency = %d\n", __func__, param->frequency); 3174 dprintk("%s: tuner frequency = %d\n", __func__, p->frequency);
3180 3175
3181 if (state->config->if_khz == 0) { 3176 if (state->config->if_khz == 0) {
3182 param->frequency += 3177 p->frequency +=
3183 (stv0367cab_get_derot_freq(state, cab_state->adc_clk) - 3178 (stv0367cab_get_derot_freq(state, cab_state->adc_clk) -
3184 cab_state->adc_clk / 4000); 3179 cab_state->adc_clk / 4000);
3185 return 0; 3180 return 0;
3186 } 3181 }
3187 3182
3188 if (state->config->if_khz > cab_state->adc_clk / 1000) 3183 if (state->config->if_khz > cab_state->adc_clk / 1000)
3189 param->frequency += (state->config->if_khz 3184 p->frequency += (state->config->if_khz
3190 - stv0367cab_get_derot_freq(state, cab_state->adc_clk) 3185 - stv0367cab_get_derot_freq(state, cab_state->adc_clk)
3191 - cab_state->adc_clk / 1000); 3186 - cab_state->adc_clk / 1000);
3192 else 3187 else
3193 param->frequency += (state->config->if_khz 3188 p->frequency += (state->config->if_khz
3194 - stv0367cab_get_derot_freq(state, cab_state->adc_clk)); 3189 - stv0367cab_get_derot_freq(state, cab_state->adc_clk));
3195 3190
3196 return 0; 3191 return 0;
@@ -3386,6 +3381,7 @@ static int stv0367cab_read_ucblcks(struct dvb_frontend *fe, u32 *ucblocks)
3386}; 3381};
3387 3382
3388static struct dvb_frontend_ops stv0367cab_ops = { 3383static struct dvb_frontend_ops stv0367cab_ops = {
3384 .delsys = { SYS_DVBC_ANNEX_A },
3389 .info = { 3385 .info = {
3390 .name = "ST STV0367 DVB-C", 3386 .name = "ST STV0367 DVB-C",
3391 .type = FE_QAM, 3387 .type = FE_QAM,
@@ -3403,8 +3399,8 @@ static struct dvb_frontend_ops stv0367cab_ops = {
3403 .init = stv0367cab_init, 3399 .init = stv0367cab_init,
3404 .sleep = stv0367cab_sleep, 3400 .sleep = stv0367cab_sleep,
3405 .i2c_gate_ctrl = stv0367cab_gate_ctrl, 3401 .i2c_gate_ctrl = stv0367cab_gate_ctrl,
3406 .set_frontend_legacy = stv0367cab_set_frontend, 3402 .set_frontend = stv0367cab_set_frontend,
3407 .get_frontend_legacy = stv0367cab_get_frontend, 3403 .get_frontend = stv0367cab_get_frontend,
3408 .read_status = stv0367cab_read_status, 3404 .read_status = stv0367cab_read_status,
3409/* .read_ber = stv0367cab_read_ber, */ 3405/* .read_ber = stv0367cab_read_ber, */
3410 .read_signal_strength = stv0367cab_read_strength, 3406 .read_signal_strength = stv0367cab_read_strength,