26 #include <linux/kernel.h>
27 #include <linux/module.h>
28 #include <linux/string.h>
29 #include <linux/slab.h>
30 #include <linux/i2c.h>
56 if (temp_chip !=
NULL) {
60 while ((temp_chip !=
NULL) &&
61 ((temp_chip->
internal->i2c_adap != i2c_adap) ||
62 (temp_chip->
internal->i2c_addr != i2c_addr)))
78 if (del_node !=
NULL) {
79 if (del_node == stv0900_first_inode) {
101 if (new_node ==
NULL) {
103 stv0900_first_inode = new_node;
116 if (new_node !=
NULL) {
129 return (a >= (1 << (width - 1))) ? (a - (1 <<
width)) :
a;
144 data[0] =
MSB(reg_addr);
145 data[1] =
LSB(reg_addr);
150 dprintk(
"%s: i2c error %d\n", __func__, ret);
174 dprintk(
"%s: i2c error %d, reg[0x%02x]\n",
182 u8 position = 0,
i = 0;
184 (*mask) = label & 0xff;
186 while ((position == 0) && (
i < 8)) {
187 position = ((*mask) >>
i) & 0x01;
199 extract_mask_pos(label, &mask, &pos);
201 val = mask & (val <<
pos);
203 reg = (reg & (~mask)) |
val;
213 extract_mask_pos(label, &mask, &pos);
216 val = (val &
mask) >> pos;
259 for (i = 0; i < 181; i++)
261 STV0900_InitVal[i][1]);
265 for (i = 0; i < 32; i++)
267 STV0900_Cut20_AddOnVal[i][1]);
292 mclk = (
div + 1) * ext_clk / ad_div;
294 dprintk(
"%s: Calculated Mclk = %d\n", __func__, mclk);
309 dprintk(
"%s: Mclk set to %d, Quartz = %d\n", __func__, mclk,
313 m_div = ((clk_sel *
mclk) / intp->
quartz) - 1;
315 intp->
mclk = stv0900_get_mclk_freq(intp,
324 m_div = intp->
mclk / 704000;
356 err_val = (hsb << 16) + (msb << 8) + (
lsb);
419 dprintk(
"%s: 0x0a\n", __func__);
465 dprintk(
"%s: 0x12\n", __func__);
528 frontend_ops = &fe->
ops;
535 dprintk(
"%s: Invalid parameter\n", __func__);
537 dprintk(
"%s: Frequency=%d\n", __func__, frequency);
543 dprintk(
"%s: Invalid parameter\n", __func__);
545 dprintk(
"%s: Bandwidth=%d\n", __func__, bandwidth);
556 frontend_ops = &fe->
ops;
563 dprintk(
"%s: Invalid parameter\n", __func__);
565 dprintk(
"%s: Bandwidth=%d\n", __func__, bandwidth);
582 freq = (freq * 1000) / 64;
587 round = (round * 1000) / 2048;
593 u32 Bandwidth,
int demod)
599 tunerFrequency = (Frequency * 64) / 1000;
622 if ((lookup ==
NULL) || (lookup->
size <= 0))
629 imax = lookup->
size - 1;
631 lookup->
table[imax].regval)) {
632 while ((imax - imin) > 1) {
633 i = (imax + imin) >> 1;
637 lookup->
table[i].regval))
643 rf_lvl = (
s32)agc_gain - lookup->
table[imin].regval;
644 rf_lvl *= (lookup->
table[imax].realval -
645 lookup->
table[imin].realval);
646 rf_lvl /= (lookup->
table[imax].regval -
647 lookup->
table[imin].regval);
648 rf_lvl += lookup->
table[imin].realval;
649 }
else if (agc_gain > lookup->
table[0].regval)
651 else if (agc_gain < lookup->
table[lookup->
size-1].regval)
654 dprintk(
"%s: RFLevel = %d\n", __func__, rf_lvl);
659 static int stv0900_read_signal_strength(
struct dvb_frontend *fe,
u16 *strength)
663 s32 rflevel = stv0900_get_rf_level(
internal, &stv0900_rf,
666 rflevel = (rflevel + 100) * (65535 / 70);
704 if ((lookup !=
NULL) && lookup->
size) {
707 for (i = 0; i < 16; i++) {
717 imax = lookup->
size - 1;
720 lookup->
table[imax].regval)) {
721 while ((imax - imin) > 1) {
722 i = (imax + imin) >> 1;
725 lookup->
table[i].regval))
732 * (lookup->
table[imax].realval
733 - lookup->
table[imin].realval)
734 / (lookup->
table[imax].regval
735 - lookup->
table[imin].regval))
736 + lookup->
table[imin].realval;
745 static int stv0900_read_ucblocks(
struct dvb_frontend *fe,
u32 * ucblocks)
750 u8 err_val1, err_val0;
751 u32 header_err_val = 0;
760 header_err_val = (err_val1 << 8) | err_val0;
765 *ucblocks = (err_val1 << 8) | err_val0;
766 *ucblocks += header_err_val;
774 s32 snrlcl = stv0900_carr_get_quality(fe,
776 snrlcl = (snrlcl + 30) * 384;
791 u32 ber = 10000000,
i;
796 switch (demod_state) {
804 for (i = 0; i < 5; i++) {
806 ber += stv0900_get_err_count(intp, 0, demod);
818 for (i = 0; i < 5; i++) {
820 ber += stv0900_get_err_count(intp, 0, demod);
840 *ber = stv0900_get_ber(
internal, state->
demod);
853 while ((timer < time_out) && (
lock == 0)) {
855 dprintk(
"Demod State = %d\n", dmd_state);
892 for (i = 0; i < 16; i++)
911 matype = mod_code & 0x3;
912 mod_code = (mod_code & 0x7f) >> 2;
915 field_index = mod_code % 2;
935 if (field_index == 0)
943 }
else if (intp->
chip_id >= 0x12) {
944 for (reg_index = 0; reg_index < 7; reg_index++)
949 for (reg_index = 0; reg_index < 8; reg_index++)
966 for (reg_index = 0; reg_index < 13; reg_index++)
1011 freq /= (intp->
mclk / 1000);
1012 freq_s16 = (
s16)freq;
1021 freq /= (intp->
mclk / 1000);
1022 freq_s16 = (
s16)freq;
1095 u8 aclc_value = 0x29;
1101 if (chip_id <= 0x12) {
1102 cls2 = FE_STV0900_S2CarLoop;
1103 cllqs2 = FE_STV0900_S2LowQPCarLoopCut30;
1104 cllas2 = FE_STV0900_S2APSKCarLoopCut30;
1105 }
else if (chip_id == 0x20) {
1106 cls2 = FE_STV0900_S2CarLoopCut20;
1107 cllqs2 = FE_STV0900_S2LowQPCarLoopCut20;
1108 cllas2 = FE_STV0900_S2APSKCarLoopCut20;
1110 cls2 = FE_STV0900_S2CarLoopCut30;
1111 cllqs2 = FE_STV0900_S2LowQPCarLoopCut30;
1112 cllas2 = FE_STV0900_S2APSKCarLoopCut30;
1117 while ((i < 3) && (modcode != cllqs2[i].modcode))
1124 while ((i < 14) && (modcode != cls2[i].modcode))
1129 while ((i < 11) && (modcode != cllas2[i].modcode))
1139 if (srate <= 3000000)
1141 else if (srate <= 7000000)
1143 else if (srate <= 15000000)
1145 else if (srate <= 25000000)
1150 if (srate <= 3000000)
1152 else if (srate <= 7000000)
1154 else if (srate <= 15000000)
1156 else if (srate <= 25000000)
1164 if (srate <= 3000000)
1166 else if (srate <= 7000000)
1168 else if (srate <= 15000000)
1170 else if (srate <= 25000000)
1175 if (srate <= 3000000)
1177 else if (srate <= 7000000)
1179 else if (srate <= 15000000)
1181 else if (srate <= 25000000)
1188 if (srate <= 3000000)
1190 else if (srate <= 7000000)
1192 else if (srate <= 15000000)
1194 else if (srate <= 25000000)
1210 u8 aclc_value = 0x0b;
1214 s2scl = FE_STV0900_S2ShortCarLoop;
1215 s2sclc30 = FE_STV0900_S2ShortCarLoopCut30;
1217 switch (modulation) {
1233 if (chip_id >= 0x30) {
1234 if (srate <= 3000000)
1236 else if (srate <= 7000000)
1238 else if (srate <= 15000000)
1240 else if (srate <= 25000000)
1245 }
else if (chip_id >= 0x20) {
1246 if (srate <= 3000000)
1248 else if (srate <= 7000000)
1250 else if (srate <= 15000000)
1252 else if (srate <= 25000000)
1258 if (srate <= 3000000)
1260 else if (srate <= 7000000)
1262 else if (srate <= 15000000)
1264 else if (srate <= 25000000)
1284 switch (LDPC_Mode) {
1296 for (reg_ind = 0; reg_ind < 7; reg_ind++)
1300 for (reg_ind = 0; reg_ind < 8; reg_ind++)
1308 for (reg_ind = 0; reg_ind < 7; reg_ind++)
1312 for (reg_ind = 0; reg_ind < 8; reg_ind++)
1359 state->
config->demod_address);
1366 dprintk(
"%s: Find Internal Structure!\n", __func__);
1373 temp_int = append_internal(state->
internal);
1374 if (temp_int ==
NULL) {
1384 dprintk(
"%s: Create New Internal Structure!\n", __func__);
1392 demodError = stv0900_initialize(state->
internal);
1417 stv0900_set_ts_parallel_serial(intp,
1421 for (i = 0; intp->
ts_config[
i].addr != 0xffff; i++)
1496 stv0900_set_mclk(intp, 135000000);
1511 intp->
mclk = stv0900_get_mclk_freq(intp, intp->
quartz);
1523 u8 tsbitrate0_val, tsbitrate1_val;
1527 switch (demod_state) {
1545 dprintk(
"%s: locked = %d\n", __func__, locked);
1552 bitrate = (stv0900_get_mclk_freq(intp, intp->
quartz)/1000000)
1553 * (tsbitrate1_val << 8 | tsbitrate0_val);
1555 dprintk(
"TS bitrate = %d Mbit/sec\n", bitrate);
1578 if (state->
config->set_ts_params)
1579 state->
config->set_ts_params(fe, 0);
1582 p_search.path = demod;
1585 p_search.search_range = 10000000;
1596 intp->
srch_range[demod] = p_search.search_range;
1597 intp->
freq[demod] = p_search.frequency;
1598 intp->
srch_algo[demod] = p_search.search_algo;
1600 intp->
fec[demod] = p_search.fec;
1616 switch (intp->
err[demod]) {
1649 if (state->
config->set_lock_led)
1650 state->
config->set_lock_led(fe, 1);
1653 if (state->
config->set_lock_led)
1654 state->
config->set_lock_led(fe, 0);
1661 static int stv0900_stop_ts(
struct dvb_frontend *fe,
int stop_ts)
1668 if (stop_ts ==
TRUE)
1676 static int stv0900_diseqc_init(
struct dvb_frontend *fe)
1693 stv0900_stop_ts(fe, 1);
1694 stv0900_diseqc_init(fe);
1705 while (i < NbData) {
1722 static int stv0900_send_master_cmd(
struct dvb_frontend *fe,
1727 return stv0900_diseqc_send(state->
internal,
1745 stv0900_diseqc_send(intp, &data, 1, state->
demod);
1750 stv0900_diseqc_send(intp, &data, 1, state->
demod);
1757 static int stv0900_recv_slave_reply(
struct dvb_frontend *fe,
1775 for (i = 0; i < reply->
msg_len; i++)
1788 dprintk(
"%s: %s\n", __func__, ((toneoff == 0) ?
"On" :
"Off"));
1802 state->
config->diseqc_mode);
1820 if (state->
config->set_lock_led)
1821 state->
config->set_lock_led(fe, 0);
1823 if ((--(state->
internal->dmds_used)) <= 0) {
1825 dprintk(
"%s: Actually removing\n", __func__);
1840 if (state->
config->set_lock_led)
1841 state->
config->set_lock_led(fe, 0);
1846 static int stv0900_get_frontend(
struct dvb_frontend *fe)
1862 .name =
"STV0900 frontend",
1863 .frequency_min = 950000,
1864 .frequency_max = 2150000,
1865 .frequency_stepsize = 125,
1866 .frequency_tolerance = 0,
1867 .symbol_rate_min = 1000000,
1868 .symbol_rate_max = 45000000,
1869 .symbol_rate_tolerance = 500,
1876 .release = stv0900_release,
1877 .init = stv0900_init,
1878 .get_frontend = stv0900_get_frontend,
1879 .sleep = stv0900_sleep,
1880 .get_frontend_algo = stv0900_frontend_algo,
1881 .i2c_gate_ctrl = stv0900_i2c_gate_ctrl,
1882 .diseqc_send_master_cmd = stv0900_send_master_cmd,
1883 .diseqc_send_burst = stv0900_send_burst,
1884 .diseqc_recv_slave_reply = stv0900_recv_slave_reply,
1885 .set_tone = stv0900_set_tone,
1886 .search = stv0900_search,
1887 .read_status = stv0900_read_status,
1888 .read_ber = stv0900_read_ber,
1889 .read_signal_strength = stv0900_read_signal_strength,
1890 .read_snr = stv0900_read_snr,
1891 .read_ucblocks = stv0900_read_ucblocks,
1906 state->
demod = demod;
1932 err_stv0900 = stv0900_init_internal(&state->
frontend,
1944 dprintk(
"%s: Attaching STV0900 demodulator(%d) \n", __func__, demod);
1948 dprintk(
"%s: Failed to attach STV0900 demodulator(%d) \n",