Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] af9013: rewrite whole driver

Rewrite whole af9013 demod driver in order to decrease I2C I/O.

We need to decrease I2C load since AF9015 (I2C adapter / USB-bridge used)
seems to have some problems under heavy I2C traffic.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Antti Palosaari and committed by
Mauro Carvalho Chehab
f571e004 e90ab840

+1012 -1022
+42 -40
drivers/media/dvb/dvb-usb/af9015.c
··· 50 50 51 51 static struct af9013_config af9015_af9013_config[] = { 52 52 { 53 - .demod_address = AF9015_I2C_DEMOD, 54 - .output_mode = AF9013_OUTPUT_MODE_USB, 53 + .i2c_addr = AF9015_I2C_DEMOD, 54 + .ts_mode = AF9013_TS_USB, 55 55 .api_version = { 0, 1, 9, 0 }, 56 56 .gpio[0] = AF9013_GPIO_HI, 57 57 .gpio[3] = AF9013_GPIO_TUNER_ON, 58 58 59 59 }, { 60 - .output_mode = AF9013_OUTPUT_MODE_SERIAL, 60 + .ts_mode = AF9013_TS_SERIAL, 61 61 .api_version = { 0, 1, 9, 0 }, 62 62 .gpio[0] = AF9013_GPIO_TUNER_ON, 63 63 .gpio[1] = AF9013_GPIO_LO, ··· 216 216 { 217 217 struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val}; 218 218 219 - if (addr == af9015_af9013_config[0].demod_address || 220 - addr == af9015_af9013_config[1].demod_address) 219 + if (addr == af9015_af9013_config[0].i2c_addr || 220 + addr == af9015_af9013_config[1].i2c_addr) 221 221 req.addr_len = 3; 222 222 223 223 return af9015_ctrl_msg(d, &req); ··· 228 228 { 229 229 struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val}; 230 230 231 - if (addr == af9015_af9013_config[0].demod_address || 232 - addr == af9015_af9013_config[1].demod_address) 231 + if (addr == af9015_af9013_config[0].i2c_addr || 232 + addr == af9015_af9013_config[1].i2c_addr) 233 233 req.addr_len = 3; 234 234 235 235 return af9015_ctrl_msg(d, &req); ··· 271 271 return -EAGAIN; 272 272 273 273 while (i < num) { 274 - if (msg[i].addr == af9015_af9013_config[0].demod_address || 275 - msg[i].addr == af9015_af9013_config[1].demod_address) { 274 + if (msg[i].addr == af9015_af9013_config[0].i2c_addr || 275 + msg[i].addr == af9015_af9013_config[1].i2c_addr) { 276 276 addr = msg[i].buf[0] << 8; 277 277 addr += msg[i].buf[1]; 278 278 mbox = msg[i].buf[2]; ··· 288 288 ret = -EOPNOTSUPP; 289 289 goto error; 290 290 } 291 - if (msg[i].addr == 292 - af9015_af9013_config[0].demod_address) 291 + if (msg[i].addr == af9015_af9013_config[0].i2c_addr) 293 292 req.cmd = READ_MEMORY; 294 293 else 295 294 req.cmd = READ_I2C; ··· 306 307 goto error; 307 308 } 308 309 if (msg[i].addr == 309 - af9015_af9013_config[0].demod_address) { 310 + af9015_af9013_config[0].i2c_addr) { 310 311 ret = -EINVAL; 311 312 goto error; 312 313 } ··· 324 325 ret = -EOPNOTSUPP; 325 326 goto error; 326 327 } 327 - if (msg[i].addr == 328 - af9015_af9013_config[0].demod_address) 328 + if (msg[i].addr == af9015_af9013_config[0].i2c_addr) 329 329 req.cmd = WRITE_MEMORY; 330 330 else 331 331 req.cmd = WRITE_I2C; ··· 506 508 msleep(100); 507 509 508 510 ret = af9015_read_reg_i2c(d, 509 - af9015_af9013_config[1].demod_address, 0x98be, &val); 511 + af9015_af9013_config[1].i2c_addr, 0x98be, &val); 510 512 if (ret) 511 513 goto error; 512 514 else ··· 534 536 goto error; 535 537 536 538 /* request boot firmware */ 537 - ret = af9015_write_reg_i2c(d, af9015_af9013_config[1].demod_address, 539 + ret = af9015_write_reg_i2c(d, af9015_af9013_config[1].i2c_addr, 538 540 0xe205, 1); 539 541 deb_info("%s: firmware boot cmd status:%d\n", __func__, ret); 540 542 if (ret) ··· 545 547 546 548 /* check firmware status */ 547 549 ret = af9015_read_reg_i2c(d, 548 - af9015_af9013_config[1].demod_address, 0x98be, &val); 550 + af9015_af9013_config[1].i2c_addr, 0x98be, &val); 549 551 deb_info("%s: firmware status cmd status:%d fw status:%02x\n", 550 552 __func__, ret, val); 551 553 if (ret) ··· 838 840 if (ret) 839 841 goto error; 840 842 841 - deb_info("%s: IR mode:%d\n", __func__, val); 843 + deb_info("%s: IR mode=%d\n", __func__, val); 842 844 for (i = 0; i < af9015_properties_count; i++) { 843 845 if (val == AF9015_IR_MODE_DISABLED) 844 846 af9015_properties[i].rc.core.rc_codes = NULL; ··· 852 854 if (ret) 853 855 goto error; 854 856 af9015_config.dual_mode = val; 855 - deb_info("%s: TS mode:%d\n", __func__, af9015_config.dual_mode); 857 + deb_info("%s: TS mode=%d\n", __func__, af9015_config.dual_mode); 856 858 857 859 /* Set adapter0 buffer size according to USB port speed, adapter1 buffer 858 860 size can be static because it is enabled only USB2.0 */ ··· 876 878 ret = af9015_rw_udev(udev, &req); 877 879 if (ret) 878 880 goto error; 879 - af9015_af9013_config[1].demod_address = val; 881 + af9015_af9013_config[1].i2c_addr = val; 880 882 881 883 /* enable 2nd adapter */ 882 884 for (i = 0; i < af9015_properties_count; i++) ··· 898 900 goto error; 899 901 switch (val) { 900 902 case 0: 901 - af9015_af9013_config[i].adc_clock = 28800; 903 + af9015_af9013_config[i].clock = 28800000; 902 904 break; 903 905 case 1: 904 - af9015_af9013_config[i].adc_clock = 20480; 906 + af9015_af9013_config[i].clock = 20480000; 905 907 break; 906 908 case 2: 907 - af9015_af9013_config[i].adc_clock = 28000; 909 + af9015_af9013_config[i].clock = 28000000; 908 910 break; 909 911 case 3: 910 - af9015_af9013_config[i].adc_clock = 25000; 912 + af9015_af9013_config[i].clock = 25000000; 911 913 break; 912 914 }; 913 - deb_info("%s: [%d] xtal:%d set adc_clock:%d\n", __func__, i, 914 - val, af9015_af9013_config[i].adc_clock); 915 + deb_info("%s: [%d] xtal=%d set clock=%d\n", __func__, i, 916 + val, af9015_af9013_config[i].clock); 915 917 916 - /* tuner IF */ 918 + /* IF frequency */ 917 919 req.addr = AF9015_EEPROM_IF1H + offset; 918 920 ret = af9015_rw_udev(udev, &req); 919 921 if (ret) 920 922 goto error; 921 - af9015_af9013_config[i].tuner_if = val << 8; 923 + 924 + af9015_af9013_config[i].if_frequency = val << 8; 925 + 922 926 req.addr = AF9015_EEPROM_IF1L + offset; 923 927 ret = af9015_rw_udev(udev, &req); 924 928 if (ret) 925 929 goto error; 926 - af9015_af9013_config[i].tuner_if += val; 927 - deb_info("%s: [%d] IF1:%d\n", __func__, i, 928 - af9015_af9013_config[0].tuner_if); 930 + 931 + af9015_af9013_config[i].if_frequency += val; 932 + af9015_af9013_config[i].if_frequency *= 1000; 933 + deb_info("%s: [%d] IF frequency=%d\n", __func__, i, 934 + af9015_af9013_config[0].if_frequency); 929 935 930 936 /* MT2060 IF1 */ 931 937 req.addr = AF9015_EEPROM_MT2060_IF1H + offset; ··· 942 940 if (ret) 943 941 goto error; 944 942 af9015_config.mt2060_if1[i] += val; 945 - deb_info("%s: [%d] MT2060 IF1:%d\n", __func__, i, 943 + deb_info("%s: [%d] MT2060 IF1=%d\n", __func__, i, 946 944 af9015_config.mt2060_if1[i]); 947 945 948 946 /* tuner */ ··· 959 957 case AF9013_TUNER_TDA18271: 960 958 case AF9013_TUNER_QT1010A: 961 959 case AF9013_TUNER_TDA18218: 962 - af9015_af9013_config[i].rf_spec_inv = 1; 960 + af9015_af9013_config[i].spec_inv = 1; 963 961 break; 964 962 case AF9013_TUNER_MXL5003D: 965 963 case AF9013_TUNER_MXL5005D: 966 964 case AF9013_TUNER_MXL5005R: 967 965 case AF9013_TUNER_MXL5007T: 968 - af9015_af9013_config[i].rf_spec_inv = 0; 966 + af9015_af9013_config[i].spec_inv = 0; 969 967 break; 970 968 case AF9013_TUNER_MC44S803: 971 969 af9015_af9013_config[i].gpio[1] = AF9013_GPIO_LO; 972 - af9015_af9013_config[i].rf_spec_inv = 1; 970 + af9015_af9013_config[i].spec_inv = 1; 973 971 break; 974 972 default: 975 - warn("tuner id:%d not supported, please report!", val); 973 + warn("tuner id=%d not supported, please report!", val); 976 974 return -ENODEV; 977 975 }; 978 976 979 977 af9015_af9013_config[i].tuner = val; 980 - deb_info("%s: [%d] tuner id:%d\n", __func__, i, val); 978 + deb_info("%s: [%d] tuner id=%d\n", __func__, i, val); 981 979 } 982 980 983 981 error: 984 982 if (ret) 985 - err("eeprom read failed:%d", ret); 983 + err("eeprom read failed=%d", ret); 986 984 987 985 /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM 988 986 content :-( Override some wrong values here. Ditto for the ··· 1000 998 af9015_properties[i].num_adapters = 1; 1001 999 1002 1000 /* set correct IF */ 1003 - af9015_af9013_config[0].tuner_if = 4570; 1001 + af9015_af9013_config[0].if_frequency = 4570000; 1004 1002 } 1005 1003 1006 1004 return ret; ··· 1158 1156 if (mutex_lock_interruptible(&adap->dev->usb_mutex)) 1159 1157 return -EAGAIN; 1160 1158 1161 - ret = priv->init[adap->id](fe); 1159 + ret = priv->sleep[adap->id](fe); 1162 1160 1163 1161 mutex_unlock(&adap->dev->usb_mutex); 1164 1162
+863 -883
drivers/media/dvb/frontends/af9013.c
··· 2 2 * Afatech AF9013 demodulator driver 3 3 * 4 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 + * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 5 6 * 6 7 * Thanks to Afatech who kindly provided information. 7 8 * ··· 22 21 * 23 22 */ 24 23 25 - #include <linux/kernel.h> 26 - #include <linux/module.h> 27 - #include <linux/moduleparam.h> 28 - #include <linux/init.h> 29 - #include <linux/delay.h> 30 - #include <linux/string.h> 31 - #include <linux/slab.h> 32 - #include <linux/firmware.h> 33 - 34 - #include "dvb_frontend.h" 35 24 #include "af9013_priv.h" 36 - #include "af9013.h" 37 25 38 26 int af9013_debug; 27 + module_param_named(debug, af9013_debug, int, 0644); 28 + MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off)."); 39 29 40 30 struct af9013_state { 41 31 struct i2c_adapter *i2c; 42 - struct dvb_frontend frontend; 43 - 32 + struct dvb_frontend fe; 44 33 struct af9013_config config; 45 34 46 35 /* tuner/demod RF and IF AGC limits used for signal strength calc */ ··· 39 48 u32 ber; 40 49 u32 ucblocks; 41 50 u16 snr; 42 - u32 frequency; 43 - unsigned long next_statistics_check; 51 + u32 bandwidth_hz; 52 + fe_status_t fe_status; 53 + unsigned long set_frontend_jiffies; 54 + unsigned long read_status_jiffies; 55 + bool first_tune; 56 + bool i2c_gate_state; 57 + unsigned int statistics_step:3; 58 + struct delayed_work statistics_work; 44 59 }; 45 60 46 - static u8 regmask[8] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; 47 - 48 - static int af9013_write_regs(struct af9013_state *state, u8 mbox, u16 reg, 49 - u8 *val, u8 len) 61 + /* write multiple registers */ 62 + static int af9013_wr_regs_i2c(struct af9013_state *priv, u8 mbox, u16 reg, 63 + const u8 *val, int len) 50 64 { 65 + int ret; 51 66 u8 buf[3+len]; 52 - struct i2c_msg msg = { 53 - .addr = state->config.demod_address, 54 - .flags = 0, 55 - .len = sizeof(buf), 56 - .buf = buf }; 67 + struct i2c_msg msg[1] = { 68 + { 69 + .addr = priv->config.i2c_addr, 70 + .flags = 0, 71 + .len = sizeof(buf), 72 + .buf = buf, 73 + } 74 + }; 57 75 58 - buf[0] = reg >> 8; 59 - buf[1] = reg & 0xff; 76 + buf[0] = (reg >> 8) & 0xff; 77 + buf[1] = (reg >> 0) & 0xff; 60 78 buf[2] = mbox; 61 79 memcpy(&buf[3], val, len); 62 80 63 - if (i2c_transfer(state->i2c, &msg, 1) != 1) { 64 - warn("I2C write failed reg:%04x len:%d", reg, len); 65 - return -EREMOTEIO; 81 + ret = i2c_transfer(priv->i2c, msg, 1); 82 + if (ret == 1) { 83 + ret = 0; 84 + } else { 85 + warn("i2c wr failed=%d reg=%04x len=%d", ret, reg, len); 86 + ret = -EREMOTEIO; 66 87 } 88 + return ret; 89 + } 90 + 91 + /* read multiple registers */ 92 + static int af9013_rd_regs_i2c(struct af9013_state *priv, u8 mbox, u16 reg, 93 + u8 *val, int len) 94 + { 95 + int ret; 96 + u8 buf[3]; 97 + struct i2c_msg msg[2] = { 98 + { 99 + .addr = priv->config.i2c_addr, 100 + .flags = 0, 101 + .len = 3, 102 + .buf = buf, 103 + }, { 104 + .addr = priv->config.i2c_addr, 105 + .flags = I2C_M_RD, 106 + .len = len, 107 + .buf = val, 108 + } 109 + }; 110 + 111 + buf[0] = (reg >> 8) & 0xff; 112 + buf[1] = (reg >> 0) & 0xff; 113 + buf[2] = mbox; 114 + 115 + ret = i2c_transfer(priv->i2c, msg, 2); 116 + if (ret == 2) { 117 + ret = 0; 118 + } else { 119 + warn("i2c rd failed=%d reg=%04x len=%d", ret, reg, len); 120 + ret = -EREMOTEIO; 121 + } 122 + return ret; 123 + } 124 + 125 + /* write multiple registers */ 126 + static int af9013_wr_regs(struct af9013_state *priv, u16 reg, const u8 *val, 127 + int len) 128 + { 129 + int ret, i; 130 + u8 mbox = (0 << 7)|(0 << 6)|(1 << 1)|(1 << 0); 131 + 132 + if ((priv->config.ts_mode == AF9013_TS_USB) & 133 + ((reg & 0xff00) != 0xff00) & ((reg & 0xff00) != 0xae00)) { 134 + mbox |= ((len - 1) << 2); 135 + ret = af9013_wr_regs_i2c(priv, mbox, reg, val, len); 136 + } else { 137 + for (i = 0; i < len; i++) { 138 + ret = af9013_wr_regs_i2c(priv, mbox, reg+i, val+i, 1); 139 + if (ret) 140 + goto err; 141 + } 142 + } 143 + 144 + err: 67 145 return 0; 68 146 } 69 147 70 - static int af9013_write_ofdm_regs(struct af9013_state *state, u16 reg, u8 *val, 71 - u8 len) 148 + /* read multiple registers */ 149 + static int af9013_rd_regs(struct af9013_state *priv, u16 reg, u8 *val, int len) 72 150 { 73 - u8 mbox = (1 << 0)|(1 << 1)|((len - 1) << 2)|(0 << 6)|(0 << 7); 74 - return af9013_write_regs(state, mbox, reg, val, len); 151 + int ret, i; 152 + u8 mbox = (0 << 7)|(0 << 6)|(1 << 1)|(0 << 0); 153 + 154 + if ((priv->config.ts_mode == AF9013_TS_USB) & 155 + ((reg & 0xff00) != 0xff00) & ((reg & 0xff00) != 0xae00)) { 156 + mbox |= ((len - 1) << 2); 157 + ret = af9013_rd_regs_i2c(priv, mbox, reg, val, len); 158 + } else { 159 + for (i = 0; i < len; i++) { 160 + ret = af9013_rd_regs_i2c(priv, mbox, reg+i, val+i, 1); 161 + if (ret) 162 + goto err; 163 + } 164 + } 165 + 166 + err: 167 + return 0; 168 + } 169 + 170 + /* write single register */ 171 + static int af9013_wr_reg(struct af9013_state *priv, u16 reg, u8 val) 172 + { 173 + return af9013_wr_regs(priv, reg, &val, 1); 174 + } 175 + 176 + /* read single register */ 177 + static int af9013_rd_reg(struct af9013_state *priv, u16 reg, u8 *val) 178 + { 179 + return af9013_rd_regs(priv, reg, val, 1); 75 180 } 76 181 77 182 static int af9013_write_ofsm_regs(struct af9013_state *state, u16 reg, u8 *val, 78 183 u8 len) 79 184 { 80 - u8 mbox = (1 << 0)|(1 << 1)|((len - 1) << 2)|(1 << 6)|(1 << 7); 81 - return af9013_write_regs(state, mbox, reg, val, len); 185 + u8 mbox = (1 << 7)|(1 << 6)|((len - 1) << 2)|(1 << 1)|(1 << 0); 186 + return af9013_wr_regs_i2c(state, mbox, reg, val, len); 82 187 } 83 188 84 - /* write single register */ 85 - static int af9013_write_reg(struct af9013_state *state, u16 reg, u8 val) 86 - { 87 - return af9013_write_ofdm_regs(state, reg, &val, 1); 88 - } 89 - 90 - /* read single register */ 91 - static int af9013_read_reg(struct af9013_state *state, u16 reg, u8 *val) 92 - { 93 - u8 obuf[3] = { reg >> 8, reg & 0xff, 0 }; 94 - u8 ibuf[1]; 95 - struct i2c_msg msg[2] = { 96 - { 97 - .addr = state->config.demod_address, 98 - .flags = 0, 99 - .len = sizeof(obuf), 100 - .buf = obuf 101 - }, { 102 - .addr = state->config.demod_address, 103 - .flags = I2C_M_RD, 104 - .len = sizeof(ibuf), 105 - .buf = ibuf 106 - } 107 - }; 108 - 109 - if (i2c_transfer(state->i2c, msg, 2) != 2) { 110 - warn("I2C read failed reg:%04x", reg); 111 - return -EREMOTEIO; 112 - } 113 - *val = ibuf[0]; 114 - return 0; 115 - } 116 - 117 - static int af9013_write_reg_bits(struct af9013_state *state, u16 reg, u8 pos, 118 - u8 len, u8 val) 189 + static int af9013_wr_reg_bits(struct af9013_state *state, u16 reg, int pos, 190 + int len, u8 val) 119 191 { 120 192 int ret; 121 193 u8 tmp, mask; 122 194 123 - ret = af9013_read_reg(state, reg, &tmp); 124 - if (ret) 125 - return ret; 195 + /* no need for read if whole reg is written */ 196 + if (len != 8) { 197 + ret = af9013_rd_reg(state, reg, &tmp); 198 + if (ret) 199 + return ret; 126 200 127 - mask = regmask[len - 1] << pos; 128 - tmp = (tmp & ~mask) | ((val << pos) & mask); 201 + mask = (0xff >> (8 - len)) << pos; 202 + val <<= pos; 203 + tmp &= ~mask; 204 + val |= tmp; 205 + } 129 206 130 - return af9013_write_reg(state, reg, tmp); 207 + return af9013_wr_reg(state, reg, val); 131 208 } 132 209 133 - static int af9013_read_reg_bits(struct af9013_state *state, u16 reg, u8 pos, 134 - u8 len, u8 *val) 210 + static int af9013_rd_reg_bits(struct af9013_state *state, u16 reg, int pos, 211 + int len, u8 *val) 135 212 { 136 213 int ret; 137 214 u8 tmp; 138 215 139 - ret = af9013_read_reg(state, reg, &tmp); 216 + ret = af9013_rd_reg(state, reg, &tmp); 140 217 if (ret) 141 218 return ret; 142 - *val = (tmp >> pos) & regmask[len - 1]; 219 + 220 + *val = (tmp >> pos); 221 + *val &= (0xff >> (8 - len)); 222 + 143 223 return 0; 144 224 } 145 225 ··· 219 157 int ret; 220 158 u8 pos; 221 159 u16 addr; 222 - deb_info("%s: gpio:%d gpioval:%02x\n", __func__, gpio, gpioval); 223 160 224 - /* GPIO0 & GPIO1 0xd735 225 - GPIO2 & GPIO3 0xd736 */ 161 + dbg("%s: gpio=%d gpioval=%02x", __func__, gpio, gpioval); 162 + 163 + /* 164 + * GPIO0 & GPIO1 0xd735 165 + * GPIO2 & GPIO3 0xd736 166 + */ 226 167 227 168 switch (gpio) { 228 169 case 0: ··· 240 175 default: 241 176 err("invalid gpio:%d\n", gpio); 242 177 ret = -EINVAL; 243 - goto error; 178 + goto err; 244 179 }; 245 180 246 181 switch (gpio) { ··· 255 190 break; 256 191 }; 257 192 258 - ret = af9013_write_reg_bits(state, addr, pos, 4, gpioval); 193 + ret = af9013_wr_reg_bits(state, addr, pos, 4, gpioval); 194 + if (ret) 195 + goto err; 259 196 260 - error: 197 + return ret; 198 + err: 199 + dbg("%s: failed=%d", __func__, ret); 261 200 return ret; 262 201 } 263 202 264 203 static u32 af913_div(u32 a, u32 b, u32 x) 265 204 { 266 205 u32 r = 0, c = 0, i; 267 - deb_info("%s: a:%d b:%d x:%d\n", __func__, a, b, x); 206 + 207 + dbg("%s: a=%d b=%d x=%d", __func__, a, b, x); 268 208 269 209 if (a > b) { 270 210 c = a / b; ··· 286 216 } 287 217 r = (c << (u32)x) + r; 288 218 289 - deb_info("%s: a:%d b:%d x:%d r:%d r:%x\n", __func__, a, b, x, r, r); 219 + dbg("%s: a=%d b=%d x=%d r=%x", __func__, a, b, x, r); 290 220 return r; 291 221 } 292 222 293 - static int af9013_set_coeff(struct af9013_state *state, fe_bandwidth_t bw) 223 + static int af9013_power_ctrl(struct af9013_state *state, u8 onoff) 294 224 { 295 - int ret, i, j, found; 296 - deb_info("%s: adc_clock:%d bw:%d\n", __func__, 297 - state->config.adc_clock, bw); 225 + int ret, i; 226 + u8 tmp; 298 227 299 - /* lookup coeff from table */ 300 - for (i = 0, found = 0; i < ARRAY_SIZE(coeff_table); i++) { 301 - if (coeff_table[i].adc_clock == state->config.adc_clock && 302 - coeff_table[i].bw == bw) { 303 - found = 1; 304 - break; 305 - } 306 - } 228 + dbg("%s: onoff=%d", __func__, onoff); 307 229 308 - if (!found) { 309 - err("invalid bw or clock"); 310 - ret = -EINVAL; 311 - goto error; 312 - } 230 + /* enable reset */ 231 + ret = af9013_wr_reg_bits(state, 0xd417, 4, 1, 1); 232 + if (ret) 233 + goto err; 313 234 314 - deb_info("%s: coeff: ", __func__); 315 - debug_dump(coeff_table[i].val, sizeof(coeff_table[i].val), deb_info); 235 + /* start reset mechanism */ 236 + ret = af9013_wr_reg(state, 0xaeff, 1); 237 + if (ret) 238 + goto err; 316 239 317 - /* program */ 318 - for (j = 0; j < sizeof(coeff_table[i].val); j++) { 319 - ret = af9013_write_reg(state, 0xae00 + j, 320 - coeff_table[i].val[j]); 240 + /* wait reset performs */ 241 + for (i = 0; i < 150; i++) { 242 + ret = af9013_rd_reg_bits(state, 0xd417, 1, 1, &tmp); 321 243 if (ret) 322 - break; 244 + goto err; 245 + 246 + if (tmp) 247 + break; /* reset done */ 248 + 249 + usleep_range(5000, 25000); 323 250 } 324 251 325 - error: 252 + if (!tmp) 253 + return -ETIMEDOUT; 254 + 255 + if (onoff) { 256 + /* clear reset */ 257 + ret = af9013_wr_reg_bits(state, 0xd417, 1, 1, 0); 258 + if (ret) 259 + goto err; 260 + 261 + /* disable reset */ 262 + ret = af9013_wr_reg_bits(state, 0xd417, 4, 1, 0); 263 + 264 + /* power on */ 265 + ret = af9013_wr_reg_bits(state, 0xd73a, 3, 1, 0); 266 + } else { 267 + /* power off */ 268 + ret = af9013_wr_reg_bits(state, 0xd73a, 3, 1, 1); 269 + } 270 + 271 + return ret; 272 + err: 273 + dbg("%s: failed=%d", __func__, ret); 326 274 return ret; 327 275 } 328 276 329 - static int af9013_set_adc_ctrl(struct af9013_state *state) 277 + static int af9013_statistics_ber_unc_start(struct dvb_frontend *fe) 330 278 { 279 + struct af9013_state *state = fe->demodulator_priv; 331 280 int ret; 332 - u8 buf[3], tmp, i; 333 - u32 adc_cw; 334 281 335 - deb_info("%s: adc_clock:%d\n", __func__, state->config.adc_clock); 282 + dbg("%s", __func__); 336 283 337 - /* adc frequency type */ 338 - switch (state->config.adc_clock) { 339 - case 28800: /* 28.800 MHz */ 340 - tmp = 0; 284 + /* reset and start BER counter */ 285 + ret = af9013_wr_reg_bits(state, 0xd391, 4, 1, 1); 286 + if (ret) 287 + goto err; 288 + 289 + return ret; 290 + err: 291 + dbg("%s: failed=%d", __func__, ret); 292 + return ret; 293 + } 294 + 295 + static int af9013_statistics_ber_unc_result(struct dvb_frontend *fe) 296 + { 297 + struct af9013_state *state = fe->demodulator_priv; 298 + int ret; 299 + u8 buf[5]; 300 + 301 + dbg("%s", __func__); 302 + 303 + /* check if error bit count is ready */ 304 + ret = af9013_rd_reg_bits(state, 0xd391, 4, 1, &buf[0]); 305 + if (ret) 306 + goto err; 307 + 308 + if (!buf[0]) { 309 + dbg("%s: not ready", __func__); 310 + return 0; 311 + } 312 + 313 + ret = af9013_rd_regs(state, 0xd387, buf, 5); 314 + if (ret) 315 + goto err; 316 + 317 + state->ber = (buf[2] << 16) | (buf[1] << 8) | buf[0]; 318 + state->ucblocks += (buf[4] << 8) | buf[3]; 319 + 320 + return ret; 321 + err: 322 + dbg("%s: failed=%d", __func__, ret); 323 + return ret; 324 + } 325 + 326 + static int af9013_statistics_snr_start(struct dvb_frontend *fe) 327 + { 328 + struct af9013_state *state = fe->demodulator_priv; 329 + int ret; 330 + 331 + dbg("%s", __func__); 332 + 333 + /* start SNR meas */ 334 + ret = af9013_wr_reg_bits(state, 0xd2e1, 3, 1, 1); 335 + if (ret) 336 + goto err; 337 + 338 + return ret; 339 + err: 340 + dbg("%s: failed=%d", __func__, ret); 341 + return ret; 342 + } 343 + 344 + static int af9013_statistics_snr_result(struct dvb_frontend *fe) 345 + { 346 + struct af9013_state *state = fe->demodulator_priv; 347 + int ret, i, len; 348 + u8 buf[3], tmp; 349 + u32 snr_val; 350 + const struct af9013_snr *uninitialized_var(snr_lut); 351 + 352 + dbg("%s", __func__); 353 + 354 + /* check if SNR ready */ 355 + ret = af9013_rd_reg_bits(state, 0xd2e1, 3, 1, &tmp); 356 + if (ret) 357 + goto err; 358 + 359 + if (!tmp) { 360 + dbg("%s: not ready", __func__); 361 + return 0; 362 + } 363 + 364 + /* read value */ 365 + ret = af9013_rd_regs(state, 0xd2e3, buf, 3); 366 + if (ret) 367 + goto err; 368 + 369 + snr_val = (buf[2] << 16) | (buf[1] << 8) | buf[0]; 370 + 371 + /* read current modulation */ 372 + ret = af9013_rd_reg(state, 0xd3c1, &tmp); 373 + if (ret) 374 + goto err; 375 + 376 + switch ((tmp >> 6) & 3) { 377 + case 0: 378 + len = ARRAY_SIZE(qpsk_snr_lut); 379 + snr_lut = qpsk_snr_lut; 341 380 break; 342 - case 20480: /* 20.480 MHz */ 343 - tmp = 1; 381 + case 1: 382 + len = ARRAY_SIZE(qam16_snr_lut); 383 + snr_lut = qam16_snr_lut; 344 384 break; 345 - case 28000: /* 28.000 MHz */ 346 - tmp = 2; 347 - break; 348 - case 25000: /* 25.000 MHz */ 349 - tmp = 3; 385 + case 2: 386 + len = ARRAY_SIZE(qam64_snr_lut); 387 + snr_lut = qam64_snr_lut; 350 388 break; 351 389 default: 352 - err("invalid xtal"); 353 - return -EINVAL; 390 + goto err; 391 + break; 354 392 } 355 393 356 - adc_cw = af913_div(state->config.adc_clock*1000, 1000000ul, 19ul); 394 + for (i = 0; i < len; i++) { 395 + tmp = snr_lut[i].snr; 357 396 358 - buf[0] = (u8) ((adc_cw & 0x000000ff)); 359 - buf[1] = (u8) ((adc_cw & 0x0000ff00) >> 8); 360 - buf[2] = (u8) ((adc_cw & 0x00ff0000) >> 16); 361 - 362 - deb_info("%s: adc_cw:", __func__); 363 - debug_dump(buf, sizeof(buf), deb_info); 364 - 365 - /* program */ 366 - for (i = 0; i < sizeof(buf); i++) { 367 - ret = af9013_write_reg(state, 0xd180 + i, buf[i]); 368 - if (ret) 369 - goto error; 397 + if (snr_val < snr_lut[i].val) 398 + break; 370 399 } 371 - ret = af9013_write_reg_bits(state, 0x9bd2, 0, 4, tmp); 372 - error: 400 + state->snr = tmp * 10; /* dB/10 */ 401 + 402 + return ret; 403 + err: 404 + dbg("%s: failed=%d", __func__, ret); 373 405 return ret; 374 406 } 375 407 376 - static int af9013_set_freq_ctrl(struct af9013_state *state, 377 - struct dvb_frontend *fe) 408 + static int af9013_statistics_signal_strength(struct dvb_frontend *fe) 409 + { 410 + struct af9013_state *state = fe->demodulator_priv; 411 + int ret = 0; 412 + u8 buf[2], rf_gain, if_gain; 413 + int signal_strength; 414 + 415 + dbg("%s", __func__); 416 + 417 + if (!state->signal_strength_en) 418 + return 0; 419 + 420 + ret = af9013_rd_regs(state, 0xd07c, buf, 2); 421 + if (ret) 422 + goto err; 423 + 424 + rf_gain = buf[0]; 425 + if_gain = buf[1]; 426 + 427 + signal_strength = (0xffff / \ 428 + (9 * (state->rf_50 + state->if_50) - \ 429 + 11 * (state->rf_80 + state->if_80))) * \ 430 + (10 * (rf_gain + if_gain) - \ 431 + 11 * (state->rf_80 + state->if_80)); 432 + if (signal_strength < 0) 433 + signal_strength = 0; 434 + else if (signal_strength > 0xffff) 435 + signal_strength = 0xffff; 436 + 437 + state->signal_strength = signal_strength; 438 + 439 + return ret; 440 + err: 441 + dbg("%s: failed=%d", __func__, ret); 442 + return ret; 443 + } 444 + 445 + static void af9013_statistics_work(struct work_struct *work) 378 446 { 379 447 int ret; 380 - u16 addr; 381 - u8 buf[3], i, j; 382 - u32 adc_freq, freq_cw; 383 - s8 bfs_spec_inv; 384 - int if_sample_freq; 448 + struct af9013_state *state = container_of(work, 449 + struct af9013_state, statistics_work.work); 450 + unsigned int next_msec; 385 451 386 - for (j = 0; j < 3; j++) { 387 - if (j == 0) { 388 - addr = 0xd140; /* fcw normal */ 389 - bfs_spec_inv = state->config.rf_spec_inv ? -1 : 1; 390 - } else if (j == 1) { 391 - addr = 0x9be7; /* fcw dummy ram */ 392 - bfs_spec_inv = state->config.rf_spec_inv ? -1 : 1; 393 - } else { 394 - addr = 0x9bea; /* fcw inverted */ 395 - bfs_spec_inv = state->config.rf_spec_inv ? 1 : -1; 452 + /* update only signal strength when demod is not locked */ 453 + if (!(state->fe_status & FE_HAS_LOCK)) { 454 + state->statistics_step = 0; 455 + state->ber = 0; 456 + state->snr = 0; 457 + } 458 + 459 + switch (state->statistics_step) { 460 + default: 461 + state->statistics_step = 0; 462 + case 0: 463 + ret = af9013_statistics_signal_strength(&state->fe); 464 + state->statistics_step++; 465 + next_msec = 300; 466 + break; 467 + case 1: 468 + ret = af9013_statistics_snr_start(&state->fe); 469 + state->statistics_step++; 470 + next_msec = 200; 471 + break; 472 + case 2: 473 + ret = af9013_statistics_ber_unc_start(&state->fe); 474 + state->statistics_step++; 475 + next_msec = 1000; 476 + break; 477 + case 3: 478 + ret = af9013_statistics_snr_result(&state->fe); 479 + state->statistics_step++; 480 + next_msec = 400; 481 + break; 482 + case 4: 483 + ret = af9013_statistics_ber_unc_result(&state->fe); 484 + state->statistics_step++; 485 + next_msec = 100; 486 + break; 487 + } 488 + 489 + schedule_delayed_work(&state->statistics_work, 490 + msecs_to_jiffies(next_msec)); 491 + 492 + return; 493 + } 494 + 495 + static int af9013_get_tune_settings(struct dvb_frontend *fe, 496 + struct dvb_frontend_tune_settings *fesettings) 497 + { 498 + fesettings->min_delay_ms = 800; 499 + fesettings->step_size = 0; 500 + fesettings->max_drift = 0; 501 + 502 + return 0; 503 + } 504 + 505 + static int af9013_set_frontend(struct dvb_frontend *fe, 506 + struct dvb_frontend_parameters *p) 507 + { 508 + struct af9013_state *state = fe->demodulator_priv; 509 + struct dtv_frontend_properties *c = &fe->dtv_property_cache; 510 + int ret, i, sampling_freq; 511 + bool auto_mode, spec_inv; 512 + u8 buf[6]; 513 + u32 if_frequency, freq_cw; 514 + 515 + dbg("%s: frequency=%d bandwidth_hz=%d", __func__, 516 + c->frequency, c->bandwidth_hz); 517 + 518 + /* program tuner */ 519 + if (fe->ops.tuner_ops.set_params) 520 + fe->ops.tuner_ops.set_params(fe, p); 521 + 522 + /* program CFOE coefficients */ 523 + if (c->bandwidth_hz != state->bandwidth_hz) { 524 + for (i = 0; i < ARRAY_SIZE(coeff_lut); i++) { 525 + if (coeff_lut[i].clock == state->config.clock && 526 + coeff_lut[i].bandwidth_hz == c->bandwidth_hz) { 527 + break; 528 + } 396 529 } 397 530 398 - adc_freq = state->config.adc_clock * 1000; 531 + ret = af9013_wr_regs(state, 0xae00, coeff_lut[i].val, 532 + sizeof(coeff_lut[i].val)); 533 + } 399 534 535 + /* program frequency control */ 536 + if (c->bandwidth_hz != state->bandwidth_hz || state->first_tune) { 400 537 /* get used IF frequency */ 401 538 if (fe->ops.tuner_ops.get_if_frequency) 402 - fe->ops.tuner_ops.get_if_frequency(fe, &if_sample_freq); 539 + fe->ops.tuner_ops.get_if_frequency(fe, &if_frequency); 403 540 else 404 - if_sample_freq = state->config.tuner_if * 1000; 541 + if_frequency = state->config.if_frequency; 405 542 406 - while (if_sample_freq > (adc_freq / 2)) 407 - if_sample_freq = if_sample_freq - adc_freq; 543 + sampling_freq = if_frequency; 408 544 409 - if (if_sample_freq >= 0) 410 - bfs_spec_inv = bfs_spec_inv * (-1); 411 - else 412 - if_sample_freq = if_sample_freq * (-1); 545 + while (sampling_freq > (state->config.clock / 2)) 546 + sampling_freq -= state->config.clock; 413 547 414 - freq_cw = af913_div(if_sample_freq, adc_freq, 23ul); 415 - 416 - if (bfs_spec_inv == -1) 417 - freq_cw = 0x00800000 - freq_cw; 418 - 419 - buf[0] = (u8) ((freq_cw & 0x000000ff)); 420 - buf[1] = (u8) ((freq_cw & 0x0000ff00) >> 8); 421 - buf[2] = (u8) ((freq_cw & 0x007f0000) >> 16); 422 - 423 - 424 - deb_info("%s: freq_cw:", __func__); 425 - debug_dump(buf, sizeof(buf), deb_info); 426 - 427 - /* program */ 428 - for (i = 0; i < sizeof(buf); i++) { 429 - ret = af9013_write_reg(state, addr++, buf[i]); 430 - if (ret) 431 - goto error; 548 + if (sampling_freq < 0) { 549 + sampling_freq *= -1; 550 + spec_inv = state->config.spec_inv; 551 + } else { 552 + spec_inv = !state->config.spec_inv; 432 553 } 554 + 555 + freq_cw = af913_div(sampling_freq, state->config.clock, 23); 556 + 557 + if (spec_inv) 558 + freq_cw = 0x800000 - freq_cw; 559 + 560 + buf[0] = (freq_cw >> 0) & 0xff; 561 + buf[1] = (freq_cw >> 8) & 0xff; 562 + buf[2] = (freq_cw >> 16) & 0x7f; 563 + 564 + freq_cw = 0x800000 - freq_cw; 565 + 566 + buf[3] = (freq_cw >> 0) & 0xff; 567 + buf[4] = (freq_cw >> 8) & 0xff; 568 + buf[5] = (freq_cw >> 16) & 0x7f; 569 + 570 + ret = af9013_wr_regs(state, 0xd140, buf, 3); 571 + if (ret) 572 + goto err; 573 + 574 + ret = af9013_wr_regs(state, 0x9be7, buf, 6); 575 + if (ret) 576 + goto err; 433 577 } 434 - error: 435 - return ret; 436 - } 437 578 438 - static int af9013_set_ofdm_params(struct af9013_state *state, 439 - struct dvb_ofdm_parameters *params, u8 *auto_mode) 440 - { 441 - int ret; 442 - u8 i, buf[3] = {0, 0, 0}; 443 - *auto_mode = 0; /* set if parameters are requested to auto set */ 579 + /* clear TPS lock flag */ 580 + ret = af9013_wr_reg_bits(state, 0xd330, 3, 1, 1); 581 + if (ret) 582 + goto err; 444 583 445 - /* Try auto-detect transmission parameters in case of AUTO requested or 446 - garbage parameters given by application for compatibility. 447 - MPlayer seems to provide garbage parameters currently. */ 584 + /* clear MPEG2 lock flag */ 585 + ret = af9013_wr_reg_bits(state, 0xd507, 6, 1, 0); 586 + if (ret) 587 + goto err; 448 588 449 - switch (params->transmission_mode) { 589 + /* empty channel function */ 590 + ret = af9013_wr_reg_bits(state, 0x9bfe, 0, 1, 0); 591 + if (ret) 592 + goto err; 593 + 594 + /* empty DVB-T channel function */ 595 + ret = af9013_wr_reg_bits(state, 0x9bc2, 0, 1, 0); 596 + if (ret) 597 + goto err; 598 + 599 + /* transmission parameters */ 600 + auto_mode = false; 601 + memset(buf, 0, 3); 602 + 603 + switch (c->transmission_mode) { 450 604 case TRANSMISSION_MODE_AUTO: 451 - *auto_mode = 1; 605 + auto_mode = 1; 606 + break; 452 607 case TRANSMISSION_MODE_2K: 453 608 break; 454 609 case TRANSMISSION_MODE_8K: 455 610 buf[0] |= (1 << 0); 456 611 break; 457 612 default: 458 - deb_info("%s: invalid transmission_mode\n", __func__); 459 - *auto_mode = 1; 613 + dbg("%s: invalid transmission_mode", __func__); 614 + auto_mode = 1; 460 615 } 461 616 462 - switch (params->guard_interval) { 617 + switch (c->guard_interval) { 463 618 case GUARD_INTERVAL_AUTO: 464 - *auto_mode = 1; 619 + auto_mode = 1; 620 + break; 465 621 case GUARD_INTERVAL_1_32: 466 622 break; 467 623 case GUARD_INTERVAL_1_16: ··· 700 404 buf[0] |= (3 << 2); 701 405 break; 702 406 default: 703 - deb_info("%s: invalid guard_interval\n", __func__); 704 - *auto_mode = 1; 407 + dbg("%s: invalid guard_interval", __func__); 408 + auto_mode = 1; 705 409 } 706 410 707 - switch (params->hierarchy_information) { 411 + switch (c->hierarchy) { 708 412 case HIERARCHY_AUTO: 709 - *auto_mode = 1; 413 + auto_mode = 1; 414 + break; 710 415 case HIERARCHY_NONE: 711 416 break; 712 417 case HIERARCHY_1: ··· 720 423 buf[0] |= (3 << 4); 721 424 break; 722 425 default: 723 - deb_info("%s: invalid hierarchy_information\n", __func__); 724 - *auto_mode = 1; 426 + dbg("%s: invalid hierarchy", __func__); 427 + auto_mode = 1; 725 428 }; 726 429 727 - switch (params->constellation) { 430 + switch (c->modulation) { 728 431 case QAM_AUTO: 729 - *auto_mode = 1; 432 + auto_mode = 1; 433 + break; 730 434 case QPSK: 731 435 break; 732 436 case QAM_16: ··· 737 439 buf[1] |= (2 << 6); 738 440 break; 739 441 default: 740 - deb_info("%s: invalid constellation\n", __func__); 741 - *auto_mode = 1; 442 + dbg("%s: invalid modulation", __func__); 443 + auto_mode = 1; 742 444 } 743 445 744 446 /* Use HP. How and which case we can switch to LP? */ 745 447 buf[1] |= (1 << 4); 746 448 747 - switch (params->code_rate_HP) { 449 + switch (c->code_rate_HP) { 748 450 case FEC_AUTO: 749 - *auto_mode = 1; 451 + auto_mode = 1; 452 + break; 750 453 case FEC_1_2: 751 454 break; 752 455 case FEC_2_3: ··· 763 464 buf[2] |= (4 << 0); 764 465 break; 765 466 default: 766 - deb_info("%s: invalid code_rate_HP\n", __func__); 767 - *auto_mode = 1; 467 + dbg("%s: invalid code_rate_HP", __func__); 468 + auto_mode = 1; 768 469 } 769 470 770 - switch (params->code_rate_LP) { 471 + switch (c->code_rate_LP) { 771 472 case FEC_AUTO: 772 - /* if HIERARCHY_NONE and FEC_NONE then LP FEC is set to FEC_AUTO 773 - by dvb_frontend.c for compatibility */ 774 - if (params->hierarchy_information != HIERARCHY_NONE) 775 - *auto_mode = 1; 473 + auto_mode = 1; 474 + break; 776 475 case FEC_1_2: 777 476 break; 778 477 case FEC_2_3: ··· 786 489 buf[2] |= (4 << 3); 787 490 break; 788 491 case FEC_NONE: 789 - if (params->hierarchy_information == HIERARCHY_AUTO) 790 - break; 492 + break; 791 493 default: 792 - deb_info("%s: invalid code_rate_LP\n", __func__); 793 - *auto_mode = 1; 494 + dbg("%s: invalid code_rate_LP", __func__); 495 + auto_mode = 1; 794 496 } 795 497 796 - switch (params->bandwidth) { 797 - case BANDWIDTH_6_MHZ: 498 + switch (c->bandwidth_hz) { 499 + case 6000000: 798 500 break; 799 - case BANDWIDTH_7_MHZ: 501 + case 7000000: 800 502 buf[1] |= (1 << 2); 801 503 break; 802 - case BANDWIDTH_8_MHZ: 504 + case 8000000: 803 505 buf[1] |= (2 << 2); 804 506 break; 805 507 default: 806 - deb_info("%s: invalid bandwidth\n", __func__); 807 - buf[1] |= (2 << 2); /* cannot auto-detect BW, try 8 MHz */ 508 + dbg("%s: invalid bandwidth_hz", __func__); 509 + ret = -EINVAL; 510 + goto err; 808 511 } 809 512 810 - /* program */ 811 - for (i = 0; i < sizeof(buf); i++) { 812 - ret = af9013_write_reg(state, 0xd3c0 + i, buf[i]); 813 - if (ret) 814 - break; 815 - } 816 - 817 - return ret; 818 - } 819 - 820 - static int af9013_reset(struct af9013_state *state, u8 sleep) 821 - { 822 - int ret; 823 - u8 tmp, i; 824 - deb_info("%s\n", __func__); 825 - 826 - /* enable OFDM reset */ 827 - ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 1); 513 + ret = af9013_wr_regs(state, 0xd3c0, buf, 3); 828 514 if (ret) 829 - goto error; 830 - 831 - /* start reset mechanism */ 832 - ret = af9013_write_reg(state, 0xaeff, 1); 833 - if (ret) 834 - goto error; 835 - 836 - /* reset is done when bit 1 is set */ 837 - for (i = 0; i < 150; i++) { 838 - ret = af9013_read_reg_bits(state, 0xd417, 1, 1, &tmp); 839 - if (ret) 840 - goto error; 841 - if (tmp) 842 - break; /* reset done */ 843 - msleep(10); 844 - } 845 - if (!tmp) 846 - return -ETIMEDOUT; 847 - 848 - /* don't clear reset when going to sleep */ 849 - if (!sleep) { 850 - /* clear OFDM reset */ 851 - ret = af9013_write_reg_bits(state, 0xd417, 1, 1, 0); 852 - if (ret) 853 - goto error; 854 - 855 - /* disable OFDM reset */ 856 - ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 0); 857 - } 858 - error: 859 - return ret; 860 - } 861 - 862 - static int af9013_power_ctrl(struct af9013_state *state, u8 onoff) 863 - { 864 - int ret; 865 - deb_info("%s: onoff:%d\n", __func__, onoff); 866 - 867 - if (onoff) { 868 - /* power on */ 869 - ret = af9013_write_reg_bits(state, 0xd73a, 3, 1, 0); 870 - if (ret) 871 - goto error; 872 - ret = af9013_write_reg_bits(state, 0xd417, 1, 1, 0); 873 - if (ret) 874 - goto error; 875 - ret = af9013_write_reg_bits(state, 0xd417, 4, 1, 0); 876 - } else { 877 - /* power off */ 878 - ret = af9013_reset(state, 1); 879 - if (ret) 880 - goto error; 881 - ret = af9013_write_reg_bits(state, 0xd73a, 3, 1, 1); 882 - } 883 - error: 884 - return ret; 885 - } 886 - 887 - static int af9013_lock_led(struct af9013_state *state, u8 onoff) 888 - { 889 - deb_info("%s: onoff:%d\n", __func__, onoff); 890 - 891 - return af9013_write_reg_bits(state, 0xd730, 0, 1, onoff); 892 - } 893 - 894 - static int af9013_set_frontend(struct dvb_frontend *fe, 895 - struct dvb_frontend_parameters *params) 896 - { 897 - struct af9013_state *state = fe->demodulator_priv; 898 - int ret; 899 - u8 auto_mode; /* auto set TPS */ 900 - 901 - deb_info("%s: freq:%d bw:%d\n", __func__, params->frequency, 902 - params->u.ofdm.bandwidth); 903 - 904 - state->frequency = params->frequency; 905 - 906 - /* program tuner */ 907 - if (fe->ops.tuner_ops.set_params) 908 - fe->ops.tuner_ops.set_params(fe, params); 909 - 910 - /* program CFOE coefficients */ 911 - ret = af9013_set_coeff(state, params->u.ofdm.bandwidth); 912 - if (ret) 913 - goto error; 914 - 915 - /* program frequency control */ 916 - ret = af9013_set_freq_ctrl(state, fe); 917 - if (ret) 918 - goto error; 919 - 920 - /* clear TPS lock flag (inverted flag) */ 921 - ret = af9013_write_reg_bits(state, 0xd330, 3, 1, 1); 922 - if (ret) 923 - goto error; 924 - 925 - /* clear MPEG2 lock flag */ 926 - ret = af9013_write_reg_bits(state, 0xd507, 6, 1, 0); 927 - if (ret) 928 - goto error; 929 - 930 - /* empty channel function */ 931 - ret = af9013_write_reg_bits(state, 0x9bfe, 0, 1, 0); 932 - if (ret) 933 - goto error; 934 - 935 - /* empty DVB-T channel function */ 936 - ret = af9013_write_reg_bits(state, 0x9bc2, 0, 1, 0); 937 - if (ret) 938 - goto error; 939 - 940 - /* program TPS and bandwidth, check if auto mode needed */ 941 - ret = af9013_set_ofdm_params(state, &params->u.ofdm, &auto_mode); 942 - if (ret) 943 - goto error; 515 + goto err; 944 516 945 517 if (auto_mode) { 946 518 /* clear easy mode flag */ 947 - ret = af9013_write_reg(state, 0xaefd, 0); 948 - deb_info("%s: auto TPS\n", __func__); 519 + ret = af9013_wr_reg(state, 0xaefd, 0); 520 + if (ret) 521 + goto err; 522 + 523 + dbg("%s: auto params", __func__); 949 524 } else { 950 525 /* set easy mode flag */ 951 - ret = af9013_write_reg(state, 0xaefd, 1); 526 + ret = af9013_wr_reg(state, 0xaefd, 1); 952 527 if (ret) 953 - goto error; 954 - ret = af9013_write_reg(state, 0xaefe, 0); 955 - deb_info("%s: manual TPS\n", __func__); 528 + goto err; 529 + 530 + ret = af9013_wr_reg(state, 0xaefe, 0); 531 + if (ret) 532 + goto err; 533 + 534 + dbg("%s: manual params", __func__); 956 535 } 957 - if (ret) 958 - goto error; 959 536 960 - /* everything is set, lets try to receive channel - OFSM GO! */ 961 - ret = af9013_write_reg(state, 0xffff, 0); 537 + /* tune */ 538 + ret = af9013_wr_reg(state, 0xffff, 0); 962 539 if (ret) 963 - goto error; 540 + goto err; 964 541 965 - error: 542 + state->bandwidth_hz = c->bandwidth_hz; 543 + state->set_frontend_jiffies = jiffies; 544 + state->first_tune = false; 545 + 546 + return ret; 547 + err: 548 + dbg("%s: failed=%d", __func__, ret); 966 549 return ret; 967 550 } 968 551 ··· 850 673 struct dvb_frontend_parameters *p) 851 674 { 852 675 struct af9013_state *state = fe->demodulator_priv; 676 + struct dtv_frontend_properties *c = &fe->dtv_property_cache; 853 677 int ret; 854 - u8 i, buf[3]; 855 - deb_info("%s\n", __func__); 678 + u8 buf[3]; 856 679 857 - /* read TPS registers */ 858 - for (i = 0; i < 3; i++) { 859 - ret = af9013_read_reg(state, 0xd3c0 + i, &buf[i]); 860 - if (ret) 861 - goto error; 862 - } 680 + dbg("%s", __func__); 681 + 682 + ret = af9013_rd_regs(state, 0xd3c0, buf, 3); 683 + if (ret) 684 + goto err; 863 685 864 686 switch ((buf[1] >> 6) & 3) { 865 687 case 0: 866 - p->u.ofdm.constellation = QPSK; 688 + c->modulation = QPSK; 867 689 break; 868 690 case 1: 869 - p->u.ofdm.constellation = QAM_16; 691 + c->modulation = QAM_16; 870 692 break; 871 693 case 2: 872 - p->u.ofdm.constellation = QAM_64; 694 + c->modulation = QAM_64; 873 695 break; 874 696 } 875 697 876 698 switch ((buf[0] >> 0) & 3) { 877 699 case 0: 878 - p->u.ofdm.transmission_mode = TRANSMISSION_MODE_2K; 700 + c->transmission_mode = TRANSMISSION_MODE_2K; 879 701 break; 880 702 case 1: 881 - p->u.ofdm.transmission_mode = TRANSMISSION_MODE_8K; 703 + c->transmission_mode = TRANSMISSION_MODE_8K; 882 704 } 883 705 884 706 switch ((buf[0] >> 2) & 3) { 885 707 case 0: 886 - p->u.ofdm.guard_interval = GUARD_INTERVAL_1_32; 708 + c->transmission_mode = GUARD_INTERVAL_1_32; 887 709 break; 888 710 case 1: 889 - p->u.ofdm.guard_interval = GUARD_INTERVAL_1_16; 711 + c->transmission_mode = GUARD_INTERVAL_1_16; 890 712 break; 891 713 case 2: 892 - p->u.ofdm.guard_interval = GUARD_INTERVAL_1_8; 714 + c->transmission_mode = GUARD_INTERVAL_1_8; 893 715 break; 894 716 case 3: 895 - p->u.ofdm.guard_interval = GUARD_INTERVAL_1_4; 717 + c->transmission_mode = GUARD_INTERVAL_1_4; 896 718 break; 897 719 } 898 720 899 721 switch ((buf[0] >> 4) & 7) { 900 722 case 0: 901 - p->u.ofdm.hierarchy_information = HIERARCHY_NONE; 723 + c->hierarchy = HIERARCHY_NONE; 902 724 break; 903 725 case 1: 904 - p->u.ofdm.hierarchy_information = HIERARCHY_1; 726 + c->hierarchy = HIERARCHY_1; 905 727 break; 906 728 case 2: 907 - p->u.ofdm.hierarchy_information = HIERARCHY_2; 729 + c->hierarchy = HIERARCHY_2; 908 730 break; 909 731 case 3: 910 - p->u.ofdm.hierarchy_information = HIERARCHY_4; 732 + c->hierarchy = HIERARCHY_4; 911 733 break; 912 734 } 913 735 914 736 switch ((buf[2] >> 0) & 7) { 915 737 case 0: 916 - p->u.ofdm.code_rate_HP = FEC_1_2; 738 + c->code_rate_HP = FEC_1_2; 917 739 break; 918 740 case 1: 919 - p->u.ofdm.code_rate_HP = FEC_2_3; 741 + c->code_rate_HP = FEC_2_3; 920 742 break; 921 743 case 2: 922 - p->u.ofdm.code_rate_HP = FEC_3_4; 744 + c->code_rate_HP = FEC_3_4; 923 745 break; 924 746 case 3: 925 - p->u.ofdm.code_rate_HP = FEC_5_6; 747 + c->code_rate_HP = FEC_5_6; 926 748 break; 927 749 case 4: 928 - p->u.ofdm.code_rate_HP = FEC_7_8; 750 + c->code_rate_HP = FEC_7_8; 929 751 break; 930 752 } 931 753 932 754 switch ((buf[2] >> 3) & 7) { 933 755 case 0: 934 - p->u.ofdm.code_rate_LP = FEC_1_2; 756 + c->code_rate_LP = FEC_1_2; 935 757 break; 936 758 case 1: 937 - p->u.ofdm.code_rate_LP = FEC_2_3; 759 + c->code_rate_LP = FEC_2_3; 938 760 break; 939 761 case 2: 940 - p->u.ofdm.code_rate_LP = FEC_3_4; 762 + c->code_rate_LP = FEC_3_4; 941 763 break; 942 764 case 3: 943 - p->u.ofdm.code_rate_LP = FEC_5_6; 765 + c->code_rate_LP = FEC_5_6; 944 766 break; 945 767 case 4: 946 - p->u.ofdm.code_rate_LP = FEC_7_8; 768 + c->code_rate_LP = FEC_7_8; 947 769 break; 948 770 } 949 771 950 772 switch ((buf[1] >> 2) & 3) { 951 773 case 0: 952 - p->u.ofdm.bandwidth = BANDWIDTH_6_MHZ; 774 + c->bandwidth_hz = 6000000; 953 775 break; 954 776 case 1: 955 - p->u.ofdm.bandwidth = BANDWIDTH_7_MHZ; 777 + c->bandwidth_hz = 7000000; 956 778 break; 957 779 case 2: 958 - p->u.ofdm.bandwidth = BANDWIDTH_8_MHZ; 780 + c->bandwidth_hz = 8000000; 959 781 break; 960 782 } 961 783 962 - p->inversion = INVERSION_AUTO; 963 - p->frequency = state->frequency; 964 - 965 - error: 966 784 return ret; 967 - } 968 - 969 - static int af9013_update_ber_unc(struct dvb_frontend *fe) 970 - { 971 - struct af9013_state *state = fe->demodulator_priv; 972 - int ret; 973 - u8 buf[3], i; 974 - u32 error_bit_count = 0; 975 - u32 total_bit_count = 0; 976 - u32 abort_packet_count = 0; 977 - 978 - state->ber = 0; 979 - 980 - /* check if error bit count is ready */ 981 - ret = af9013_read_reg_bits(state, 0xd391, 4, 1, &buf[0]); 982 - if (ret) 983 - goto error; 984 - if (!buf[0]) 985 - goto exit; 986 - 987 - /* get RSD packet abort count */ 988 - for (i = 0; i < 2; i++) { 989 - ret = af9013_read_reg(state, 0xd38a + i, &buf[i]); 990 - if (ret) 991 - goto error; 992 - } 993 - abort_packet_count = (buf[1] << 8) + buf[0]; 994 - 995 - /* get error bit count */ 996 - for (i = 0; i < 3; i++) { 997 - ret = af9013_read_reg(state, 0xd387 + i, &buf[i]); 998 - if (ret) 999 - goto error; 1000 - } 1001 - error_bit_count = (buf[2] << 16) + (buf[1] << 8) + buf[0]; 1002 - error_bit_count = error_bit_count - abort_packet_count * 8 * 8; 1003 - 1004 - /* get used RSD counting period (10000 RSD packets used) */ 1005 - for (i = 0; i < 2; i++) { 1006 - ret = af9013_read_reg(state, 0xd385 + i, &buf[i]); 1007 - if (ret) 1008 - goto error; 1009 - } 1010 - total_bit_count = (buf[1] << 8) + buf[0]; 1011 - total_bit_count = total_bit_count - abort_packet_count; 1012 - total_bit_count = total_bit_count * 204 * 8; 1013 - 1014 - if (total_bit_count) 1015 - state->ber = error_bit_count * 1000000000 / total_bit_count; 1016 - 1017 - state->ucblocks += abort_packet_count; 1018 - 1019 - deb_info("%s: err bits:%d total bits:%d abort count:%d\n", __func__, 1020 - error_bit_count, total_bit_count, abort_packet_count); 1021 - 1022 - /* set BER counting range */ 1023 - ret = af9013_write_reg(state, 0xd385, 10000 & 0xff); 1024 - if (ret) 1025 - goto error; 1026 - ret = af9013_write_reg(state, 0xd386, 10000 >> 8); 1027 - if (ret) 1028 - goto error; 1029 - /* reset and start BER counter */ 1030 - ret = af9013_write_reg_bits(state, 0xd391, 4, 1, 1); 1031 - if (ret) 1032 - goto error; 1033 - 1034 - exit: 1035 - error: 785 + err: 786 + dbg("%s: failed=%d", __func__, ret); 1036 787 return ret; 1037 - } 1038 - 1039 - static int af9013_update_snr(struct dvb_frontend *fe) 1040 - { 1041 - struct af9013_state *state = fe->demodulator_priv; 1042 - int ret; 1043 - u8 buf[3], i, len; 1044 - u32 quant = 0; 1045 - struct snr_table *uninitialized_var(snr_table); 1046 - 1047 - /* check if quantizer ready (for snr) */ 1048 - ret = af9013_read_reg_bits(state, 0xd2e1, 3, 1, &buf[0]); 1049 - if (ret) 1050 - goto error; 1051 - if (buf[0]) { 1052 - /* quantizer ready - read it */ 1053 - for (i = 0; i < 3; i++) { 1054 - ret = af9013_read_reg(state, 0xd2e3 + i, &buf[i]); 1055 - if (ret) 1056 - goto error; 1057 - } 1058 - quant = (buf[2] << 16) + (buf[1] << 8) + buf[0]; 1059 - 1060 - /* read current constellation */ 1061 - ret = af9013_read_reg(state, 0xd3c1, &buf[0]); 1062 - if (ret) 1063 - goto error; 1064 - 1065 - switch ((buf[0] >> 6) & 3) { 1066 - case 0: 1067 - len = ARRAY_SIZE(qpsk_snr_table); 1068 - snr_table = qpsk_snr_table; 1069 - break; 1070 - case 1: 1071 - len = ARRAY_SIZE(qam16_snr_table); 1072 - snr_table = qam16_snr_table; 1073 - break; 1074 - case 2: 1075 - len = ARRAY_SIZE(qam64_snr_table); 1076 - snr_table = qam64_snr_table; 1077 - break; 1078 - default: 1079 - len = 0; 1080 - break; 1081 - } 1082 - 1083 - if (len) { 1084 - for (i = 0; i < len; i++) { 1085 - if (quant < snr_table[i].val) { 1086 - state->snr = snr_table[i].snr * 10; 1087 - break; 1088 - } 1089 - } 1090 - } 1091 - 1092 - /* set quantizer super frame count */ 1093 - ret = af9013_write_reg(state, 0xd2e2, 1); 1094 - if (ret) 1095 - goto error; 1096 - 1097 - /* check quantizer availability */ 1098 - for (i = 0; i < 10; i++) { 1099 - msleep(10); 1100 - ret = af9013_read_reg_bits(state, 0xd2e6, 0, 1, 1101 - &buf[0]); 1102 - if (ret) 1103 - goto error; 1104 - if (!buf[0]) 1105 - break; 1106 - } 1107 - 1108 - /* reset quantizer */ 1109 - ret = af9013_write_reg_bits(state, 0xd2e1, 3, 1, 1); 1110 - if (ret) 1111 - goto error; 1112 - } 1113 - 1114 - error: 1115 - return ret; 1116 - } 1117 - 1118 - static int af9013_update_signal_strength(struct dvb_frontend *fe) 1119 - { 1120 - struct af9013_state *state = fe->demodulator_priv; 1121 - int ret = 0; 1122 - u8 rf_gain, if_gain; 1123 - int signal_strength; 1124 - 1125 - deb_info("%s\n", __func__); 1126 - 1127 - if (state->signal_strength_en) { 1128 - ret = af9013_read_reg(state, 0xd07c, &rf_gain); 1129 - if (ret) 1130 - goto error; 1131 - ret = af9013_read_reg(state, 0xd07d, &if_gain); 1132 - if (ret) 1133 - goto error; 1134 - signal_strength = (0xffff / \ 1135 - (9 * (state->rf_50 + state->if_50) - \ 1136 - 11 * (state->rf_80 + state->if_80))) * \ 1137 - (10 * (rf_gain + if_gain) - \ 1138 - 11 * (state->rf_80 + state->if_80)); 1139 - if (signal_strength < 0) 1140 - signal_strength = 0; 1141 - else if (signal_strength > 0xffff) 1142 - signal_strength = 0xffff; 1143 - 1144 - state->signal_strength = signal_strength; 1145 - } else { 1146 - state->signal_strength = 0; 1147 - } 1148 - 1149 - error: 1150 - return ret; 1151 - } 1152 - 1153 - static int af9013_update_statistics(struct dvb_frontend *fe) 1154 - { 1155 - struct af9013_state *state = fe->demodulator_priv; 1156 - int ret; 1157 - 1158 - if (time_before(jiffies, state->next_statistics_check)) 1159 - return 0; 1160 - 1161 - /* set minimum statistic update interval */ 1162 - state->next_statistics_check = jiffies + msecs_to_jiffies(1200); 1163 - 1164 - ret = af9013_update_signal_strength(fe); 1165 - if (ret) 1166 - goto error; 1167 - ret = af9013_update_snr(fe); 1168 - if (ret) 1169 - goto error; 1170 - ret = af9013_update_ber_unc(fe); 1171 - if (ret) 1172 - goto error; 1173 - 1174 - error: 1175 - return ret; 1176 - } 1177 - 1178 - static int af9013_get_tune_settings(struct dvb_frontend *fe, 1179 - struct dvb_frontend_tune_settings *fesettings) 1180 - { 1181 - fesettings->min_delay_ms = 800; 1182 - fesettings->step_size = 0; 1183 - fesettings->max_drift = 0; 1184 - 1185 - return 0; 1186 788 } 1187 789 1188 790 static int af9013_read_status(struct dvb_frontend *fe, fe_status_t *status) 1189 791 { 1190 792 struct af9013_state *state = fe->demodulator_priv; 1191 - int ret = 0; 793 + int ret; 1192 794 u8 tmp; 1193 - *status = 0; 795 + 796 + /* 797 + * Return status from the cache if it is younger than 2000ms with the 798 + * exception of last tune is done during 4000ms. 799 + */ 800 + if (time_is_after_jiffies( 801 + state->read_status_jiffies + msecs_to_jiffies(2000)) && 802 + time_is_before_jiffies( 803 + state->set_frontend_jiffies + msecs_to_jiffies(4000)) 804 + ) { 805 + *status = state->fe_status; 806 + return 0; 807 + } else { 808 + *status = 0; 809 + } 1194 810 1195 811 /* MPEG2 lock */ 1196 - ret = af9013_read_reg_bits(state, 0xd507, 6, 1, &tmp); 812 + ret = af9013_rd_reg_bits(state, 0xd507, 6, 1, &tmp); 1197 813 if (ret) 1198 - goto error; 814 + goto err; 815 + 1199 816 if (tmp) 1200 817 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | 1201 818 FE_HAS_SYNC | FE_HAS_LOCK; 1202 819 1203 820 if (!*status) { 1204 821 /* TPS lock */ 1205 - ret = af9013_read_reg_bits(state, 0xd330, 3, 1, &tmp); 822 + ret = af9013_rd_reg_bits(state, 0xd330, 3, 1, &tmp); 1206 823 if (ret) 1207 - goto error; 824 + goto err; 825 + 1208 826 if (tmp) 1209 827 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | 1210 828 FE_HAS_VITERBI; 1211 829 } 1212 830 1213 - if (!*status) { 1214 - /* CFO lock */ 1215 - ret = af9013_read_reg_bits(state, 0xd333, 7, 1, &tmp); 1216 - if (ret) 1217 - goto error; 1218 - if (tmp) 1219 - *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER; 1220 - } 831 + state->fe_status = *status; 832 + state->read_status_jiffies = jiffies; 1221 833 1222 - if (!*status) { 1223 - /* SFOE lock */ 1224 - ret = af9013_read_reg_bits(state, 0xd334, 6, 1, &tmp); 1225 - if (ret) 1226 - goto error; 1227 - if (tmp) 1228 - *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER; 1229 - } 1230 - 1231 - if (!*status) { 1232 - /* AGC lock */ 1233 - ret = af9013_read_reg_bits(state, 0xd1a0, 6, 1, &tmp); 1234 - if (ret) 1235 - goto error; 1236 - if (tmp) 1237 - *status |= FE_HAS_SIGNAL; 1238 - } 1239 - 1240 - ret = af9013_update_statistics(fe); 1241 - 1242 - error: 1243 834 return ret; 1244 - } 1245 - 1246 - 1247 - static int af9013_read_ber(struct dvb_frontend *fe, u32 *ber) 1248 - { 1249 - struct af9013_state *state = fe->demodulator_priv; 1250 - int ret; 1251 - ret = af9013_update_statistics(fe); 1252 - *ber = state->ber; 1253 - return ret; 1254 - } 1255 - 1256 - static int af9013_read_signal_strength(struct dvb_frontend *fe, u16 *strength) 1257 - { 1258 - struct af9013_state *state = fe->demodulator_priv; 1259 - int ret; 1260 - ret = af9013_update_statistics(fe); 1261 - *strength = state->signal_strength; 835 + err: 836 + dbg("%s: failed=%d", __func__, ret); 1262 837 return ret; 1263 838 } 1264 839 1265 840 static int af9013_read_snr(struct dvb_frontend *fe, u16 *snr) 1266 841 { 1267 842 struct af9013_state *state = fe->demodulator_priv; 1268 - int ret; 1269 - ret = af9013_update_statistics(fe); 1270 843 *snr = state->snr; 1271 - return ret; 844 + return 0; 845 + } 846 + 847 + static int af9013_read_signal_strength(struct dvb_frontend *fe, u16 *strength) 848 + { 849 + struct af9013_state *state = fe->demodulator_priv; 850 + *strength = state->signal_strength; 851 + return 0; 852 + } 853 + 854 + static int af9013_read_ber(struct dvb_frontend *fe, u32 *ber) 855 + { 856 + struct af9013_state *state = fe->demodulator_priv; 857 + *ber = state->ber; 858 + return 0; 1272 859 } 1273 860 1274 861 static int af9013_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) 1275 862 { 1276 863 struct af9013_state *state = fe->demodulator_priv; 1277 - int ret; 1278 - ret = af9013_update_statistics(fe); 1279 864 *ucblocks = state->ucblocks; 1280 - return ret; 1281 - } 1282 - 1283 - static int af9013_sleep(struct dvb_frontend *fe) 1284 - { 1285 - struct af9013_state *state = fe->demodulator_priv; 1286 - int ret; 1287 - deb_info("%s\n", __func__); 1288 - 1289 - ret = af9013_lock_led(state, 0); 1290 - if (ret) 1291 - goto error; 1292 - 1293 - ret = af9013_power_ctrl(state, 0); 1294 - error: 1295 - return ret; 865 + return 0; 1296 866 } 1297 867 1298 868 static int af9013_init(struct dvb_frontend *fe) 1299 869 { 1300 870 struct af9013_state *state = fe->demodulator_priv; 1301 871 int ret, i, len; 1302 - u8 tmp0, tmp1; 1303 - struct regdesc *init; 1304 - deb_info("%s\n", __func__); 872 + u8 buf[3], tmp; 873 + u32 adc_cw; 874 + const struct af9013_reg_bit *init; 1305 875 1306 - /* reset OFDM */ 1307 - ret = af9013_reset(state, 0); 1308 - if (ret) 1309 - goto error; 876 + dbg("%s", __func__); 1310 877 1311 878 /* power on */ 1312 879 ret = af9013_power_ctrl(state, 1); 1313 880 if (ret) 1314 - goto error; 881 + goto err; 1315 882 1316 883 /* enable ADC */ 1317 - ret = af9013_write_reg(state, 0xd73a, 0xa4); 884 + ret = af9013_wr_reg(state, 0xd73a, 0xa4); 1318 885 if (ret) 1319 - goto error; 886 + goto err; 1320 887 1321 888 /* write API version to firmware */ 1322 - for (i = 0; i < sizeof(state->config.api_version); i++) { 1323 - ret = af9013_write_reg(state, 0x9bf2 + i, 1324 - state->config.api_version[i]); 1325 - if (ret) 1326 - goto error; 1327 - } 889 + ret = af9013_wr_regs(state, 0x9bf2, state->config.api_version, 4); 890 + if (ret) 891 + goto err; 1328 892 1329 893 /* program ADC control */ 1330 - ret = af9013_set_adc_ctrl(state); 894 + switch (state->config.clock) { 895 + case 28800000: /* 28.800 MHz */ 896 + tmp = 0; 897 + break; 898 + case 20480000: /* 20.480 MHz */ 899 + tmp = 1; 900 + break; 901 + case 28000000: /* 28.000 MHz */ 902 + tmp = 2; 903 + break; 904 + case 25000000: /* 25.000 MHz */ 905 + tmp = 3; 906 + break; 907 + default: 908 + err("invalid clock"); 909 + return -EINVAL; 910 + } 911 + 912 + adc_cw = af913_div(state->config.clock, 1000000ul, 19); 913 + buf[0] = (adc_cw >> 0) & 0xff; 914 + buf[1] = (adc_cw >> 8) & 0xff; 915 + buf[2] = (adc_cw >> 16) & 0xff; 916 + 917 + ret = af9013_wr_regs(state, 0xd180, buf, 3); 1331 918 if (ret) 1332 - goto error; 919 + goto err; 920 + 921 + ret = af9013_wr_reg_bits(state, 0x9bd2, 0, 4, tmp); 922 + if (ret) 923 + goto err; 1333 924 1334 925 /* set I2C master clock */ 1335 - ret = af9013_write_reg(state, 0xd416, 0x14); 926 + ret = af9013_wr_reg(state, 0xd416, 0x14); 1336 927 if (ret) 1337 - goto error; 928 + goto err; 1338 929 1339 930 /* set 16 embx */ 1340 - ret = af9013_write_reg_bits(state, 0xd700, 1, 1, 1); 931 + ret = af9013_wr_reg_bits(state, 0xd700, 1, 1, 1); 1341 932 if (ret) 1342 - goto error; 933 + goto err; 1343 934 1344 935 /* set no trigger */ 1345 - ret = af9013_write_reg_bits(state, 0xd700, 2, 1, 0); 936 + ret = af9013_wr_reg_bits(state, 0xd700, 2, 1, 0); 1346 937 if (ret) 1347 - goto error; 938 + goto err; 1348 939 1349 940 /* set read-update bit for constellation */ 1350 - ret = af9013_write_reg_bits(state, 0xd371, 1, 1, 1); 941 + ret = af9013_wr_reg_bits(state, 0xd371, 1, 1, 1); 1351 942 if (ret) 1352 - goto error; 943 + goto err; 1353 944 1354 - /* enable FEC monitor */ 1355 - ret = af9013_write_reg_bits(state, 0xd392, 1, 1, 1); 945 + /* settings for mp2if */ 946 + if (state->config.ts_mode == AF9013_TS_USB) { 947 + /* AF9015 split PSB to 1.5k + 0.5k */ 948 + ret = af9013_wr_reg_bits(state, 0xd50b, 2, 1, 1); 949 + if (ret) 950 + goto err; 951 + } else { 952 + /* AF9013 change the output bit to data7 */ 953 + ret = af9013_wr_reg_bits(state, 0xd500, 3, 1, 1); 954 + if (ret) 955 + goto err; 956 + 957 + /* AF9013 set mpeg to full speed */ 958 + ret = af9013_wr_reg_bits(state, 0xd502, 4, 1, 1); 959 + if (ret) 960 + goto err; 961 + } 962 + 963 + ret = af9013_wr_reg_bits(state, 0xd520, 4, 1, 1); 1356 964 if (ret) 1357 - goto error; 965 + goto err; 1358 966 1359 967 /* load OFSM settings */ 1360 - deb_info("%s: load ofsm settings\n", __func__); 968 + dbg("%s: load ofsm settings", __func__); 1361 969 len = ARRAY_SIZE(ofsm_init); 1362 970 init = ofsm_init; 1363 971 for (i = 0; i < len; i++) { 1364 - ret = af9013_write_reg_bits(state, init[i].addr, init[i].pos, 972 + ret = af9013_wr_reg_bits(state, init[i].addr, init[i].pos, 1365 973 init[i].len, init[i].val); 1366 974 if (ret) 1367 - goto error; 975 + goto err; 1368 976 } 1369 977 1370 978 /* load tuner specific settings */ 1371 - deb_info("%s: load tuner specific settings\n", __func__); 979 + dbg("%s: load tuner specific settings", __func__); 1372 980 switch (state->config.tuner) { 1373 981 case AF9013_TUNER_MXL5003D: 1374 982 len = ARRAY_SIZE(tuner_init_mxl5003d); ··· 1199 1237 } 1200 1238 1201 1239 for (i = 0; i < len; i++) { 1202 - ret = af9013_write_reg_bits(state, init[i].addr, init[i].pos, 1240 + ret = af9013_wr_reg_bits(state, init[i].addr, init[i].pos, 1203 1241 init[i].len, init[i].val); 1204 1242 if (ret) 1205 - goto error; 1243 + goto err; 1206 1244 } 1207 1245 1208 - /* set TS mode */ 1209 - deb_info("%s: setting ts mode\n", __func__); 1210 - tmp0 = 0; /* parallel mode */ 1211 - tmp1 = 0; /* serial mode */ 1212 - switch (state->config.output_mode) { 1213 - case AF9013_OUTPUT_MODE_PARALLEL: 1214 - tmp0 = 1; 1215 - break; 1216 - case AF9013_OUTPUT_MODE_SERIAL: 1217 - tmp1 = 1; 1218 - break; 1219 - case AF9013_OUTPUT_MODE_USB: 1220 - /* usb mode for AF9015 */ 1221 - default: 1222 - break; 1223 - } 1224 - ret = af9013_write_reg_bits(state, 0xd500, 1, 1, tmp0); /* parallel */ 1246 + /* TS mode */ 1247 + ret = af9013_wr_reg_bits(state, 0xd500, 1, 2, state->config.ts_mode); 1225 1248 if (ret) 1226 - goto error; 1227 - ret = af9013_write_reg_bits(state, 0xd500, 2, 1, tmp1); /* serial */ 1228 - if (ret) 1229 - goto error; 1249 + goto err; 1230 1250 1231 1251 /* enable lock led */ 1232 - ret = af9013_lock_led(state, 1); 1252 + ret = af9013_wr_reg_bits(state, 0xd730, 0, 1, 1); 1233 1253 if (ret) 1234 - goto error; 1254 + goto err; 1235 1255 1236 - /* read values needed for signal strength calculation */ 1237 - ret = af9013_read_reg_bits(state, 0x9bee, 0, 1, 1238 - &state->signal_strength_en); 1239 - if (ret) 1240 - goto error; 1241 - 1242 - if (state->signal_strength_en) { 1243 - ret = af9013_read_reg(state, 0x9bbd, &state->rf_50); 1256 + /* check if we support signal strength */ 1257 + if (!state->signal_strength_en) { 1258 + ret = af9013_rd_reg_bits(state, 0x9bee, 0, 1, 1259 + &state->signal_strength_en); 1244 1260 if (ret) 1245 - goto error; 1246 - ret = af9013_read_reg(state, 0x9bd0, &state->rf_80); 1247 - if (ret) 1248 - goto error; 1249 - ret = af9013_read_reg(state, 0x9be2, &state->if_50); 1250 - if (ret) 1251 - goto error; 1252 - ret = af9013_read_reg(state, 0x9be4, &state->if_80); 1253 - if (ret) 1254 - goto error; 1261 + goto err; 1255 1262 } 1256 1263 1257 - error: 1264 + /* read values needed for signal strength calculation */ 1265 + if (state->signal_strength_en && !state->rf_50) { 1266 + ret = af9013_rd_reg(state, 0x9bbd, &state->rf_50); 1267 + if (ret) 1268 + goto err; 1269 + 1270 + ret = af9013_rd_reg(state, 0x9bd0, &state->rf_80); 1271 + if (ret) 1272 + goto err; 1273 + 1274 + ret = af9013_rd_reg(state, 0x9be2, &state->if_50); 1275 + if (ret) 1276 + goto err; 1277 + 1278 + ret = af9013_rd_reg(state, 0x9be4, &state->if_80); 1279 + if (ret) 1280 + goto err; 1281 + } 1282 + 1283 + /* SNR */ 1284 + ret = af9013_wr_reg(state, 0xd2e2, 1); 1285 + if (ret) 1286 + goto err; 1287 + 1288 + /* BER / UCB */ 1289 + buf[0] = (10000 >> 0) & 0xff; 1290 + buf[1] = (10000 >> 8) & 0xff; 1291 + ret = af9013_wr_regs(state, 0xd385, buf, 2); 1292 + if (ret) 1293 + goto err; 1294 + 1295 + /* enable FEC monitor */ 1296 + ret = af9013_wr_reg_bits(state, 0xd392, 1, 1, 1); 1297 + if (ret) 1298 + goto err; 1299 + 1300 + state->first_tune = true; 1301 + schedule_delayed_work(&state->statistics_work, msecs_to_jiffies(400)); 1302 + 1258 1303 return ret; 1304 + err: 1305 + dbg("%s: failed=%d", __func__, ret); 1306 + return ret; 1307 + } 1308 + 1309 + static int af9013_sleep(struct dvb_frontend *fe) 1310 + { 1311 + struct af9013_state *state = fe->demodulator_priv; 1312 + int ret; 1313 + 1314 + dbg("%s", __func__); 1315 + 1316 + /* stop statistics polling */ 1317 + cancel_delayed_work_sync(&state->statistics_work); 1318 + 1319 + /* disable lock led */ 1320 + ret = af9013_wr_reg_bits(state, 0xd730, 0, 1, 0); 1321 + if (ret) 1322 + goto err; 1323 + 1324 + /* power off */ 1325 + ret = af9013_power_ctrl(state, 0); 1326 + if (ret) 1327 + goto err; 1328 + 1329 + return ret; 1330 + err: 1331 + dbg("%s: failed=%d", __func__, ret); 1332 + return ret; 1333 + } 1334 + 1335 + static int af9013_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) 1336 + { 1337 + int ret; 1338 + struct af9013_state *state = fe->demodulator_priv; 1339 + 1340 + dbg("%s: enable=%d", __func__, enable); 1341 + 1342 + /* gate already open or close */ 1343 + if (state->i2c_gate_state == enable) 1344 + return 0; 1345 + 1346 + if (state->config.ts_mode == AF9013_TS_USB) 1347 + ret = af9013_wr_reg_bits(state, 0xd417, 3, 1, enable); 1348 + else 1349 + ret = af9013_wr_reg_bits(state, 0xd607, 2, 1, enable); 1350 + if (ret) 1351 + goto err; 1352 + 1353 + state->i2c_gate_state = enable; 1354 + 1355 + return ret; 1356 + err: 1357 + dbg("%s: failed=%d", __func__, ret); 1358 + return ret; 1359 + } 1360 + 1361 + static void af9013_release(struct dvb_frontend *fe) 1362 + { 1363 + struct af9013_state *state = fe->demodulator_priv; 1364 + kfree(state); 1259 1365 } 1260 1366 1261 1367 static struct dvb_frontend_ops af9013_ops; ··· 1339 1309 1340 1310 msleep(100); 1341 1311 /* check whether firmware is already running */ 1342 - ret = af9013_read_reg(state, 0x98be, &val); 1312 + ret = af9013_rd_reg(state, 0x98be, &val); 1343 1313 if (ret) 1344 - goto error; 1314 + goto err; 1345 1315 else 1346 - deb_info("%s: firmware status:%02x\n", __func__, val); 1316 + dbg("%s: firmware status=%02x", __func__, val); 1347 1317 1348 1318 if (val == 0x0c) /* fw is running, no need for download */ 1349 1319 goto exit; ··· 1358 1328 "Please see linux/Documentation/dvb/ for more details" \ 1359 1329 " on firmware-problems. (%d)", 1360 1330 fw_file, ret); 1361 - goto error; 1331 + goto err; 1362 1332 } 1363 1333 1364 1334 info("downloading firmware from file '%s'", fw_file); ··· 1376 1346 ret = af9013_write_ofsm_regs(state, 0x50fc, 1377 1347 fw_params, sizeof(fw_params)); 1378 1348 if (ret) 1379 - goto error_release; 1349 + goto err_release; 1380 1350 1381 1351 #define FW_ADDR 0x5100 /* firmware start address */ 1382 1352 #define LEN_MAX 16 /* max packet size */ ··· 1390 1360 (u8 *) &fw->data[fw->size - remaining], len); 1391 1361 if (ret) { 1392 1362 err("firmware download failed:%d", ret); 1393 - goto error_release; 1363 + goto err_release; 1394 1364 } 1395 1365 } 1396 1366 1397 1367 /* request boot firmware */ 1398 - ret = af9013_write_reg(state, 0xe205, 1); 1368 + ret = af9013_wr_reg(state, 0xe205, 1); 1399 1369 if (ret) 1400 - goto error_release; 1370 + goto err_release; 1401 1371 1402 1372 for (i = 0; i < 15; i++) { 1403 1373 msleep(100); 1404 1374 1405 1375 /* check firmware status */ 1406 - ret = af9013_read_reg(state, 0x98be, &val); 1376 + ret = af9013_rd_reg(state, 0x98be, &val); 1407 1377 if (ret) 1408 - goto error_release; 1378 + goto err_release; 1409 1379 1410 - deb_info("%s: firmware status:%02x\n", __func__, val); 1380 + dbg("%s: firmware status=%02x", __func__, val); 1411 1381 1412 1382 if (val == 0x0c || val == 0x04) /* success or fail */ 1413 1383 break; ··· 1415 1385 1416 1386 if (val == 0x04) { 1417 1387 err("firmware did not run"); 1418 - ret = -1; 1388 + ret = -ENODEV; 1419 1389 } else if (val != 0x0c) { 1420 1390 err("firmware boot timeout"); 1421 - ret = -1; 1391 + ret = -ENODEV; 1422 1392 } 1423 1393 1424 - error_release: 1394 + err_release: 1425 1395 release_firmware(fw); 1426 - error: 1396 + err: 1427 1397 exit: 1428 1398 if (!ret) 1429 1399 info("found a '%s' in warm state.", af9013_ops.info.name); 1430 1400 return ret; 1431 1401 } 1432 - 1433 - static int af9013_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) 1434 - { 1435 - int ret; 1436 - struct af9013_state *state = fe->demodulator_priv; 1437 - deb_info("%s: enable:%d\n", __func__, enable); 1438 - 1439 - if (state->config.output_mode == AF9013_OUTPUT_MODE_USB) 1440 - ret = af9013_write_reg_bits(state, 0xd417, 3, 1, enable); 1441 - else 1442 - ret = af9013_write_reg_bits(state, 0xd607, 2, 1, enable); 1443 - 1444 - return ret; 1445 - } 1446 - 1447 - static void af9013_release(struct dvb_frontend *fe) 1448 - { 1449 - struct af9013_state *state = fe->demodulator_priv; 1450 - kfree(state); 1451 - } 1452 - 1453 - static struct dvb_frontend_ops af9013_ops; 1454 1402 1455 1403 struct dvb_frontend *af9013_attach(const struct af9013_config *config, 1456 1404 struct i2c_adapter *i2c) ··· 1440 1432 /* allocate memory for the internal state */ 1441 1433 state = kzalloc(sizeof(struct af9013_state), GFP_KERNEL); 1442 1434 if (state == NULL) 1443 - goto error; 1435 + goto err; 1444 1436 1445 1437 /* setup the state */ 1446 1438 state->i2c = i2c; 1447 1439 memcpy(&state->config, config, sizeof(struct af9013_config)); 1448 1440 1449 1441 /* download firmware */ 1450 - if (state->config.output_mode != AF9013_OUTPUT_MODE_USB) { 1442 + if (state->config.ts_mode != AF9013_TS_USB) { 1451 1443 ret = af9013_download_firmware(state); 1452 1444 if (ret) 1453 - goto error; 1445 + goto err; 1454 1446 } 1455 1447 1456 1448 /* firmware version */ 1457 - for (i = 0; i < 4; i++) { 1458 - ret = af9013_read_reg(state, 0x5103 + i, &buf[i]); 1459 - if (ret) 1460 - goto error; 1461 - } 1462 - info("firmware version:%d.%d.%d.%d", buf[0], buf[1], buf[2], buf[3]); 1463 - 1464 - /* chip version */ 1465 - ret = af9013_read_reg_bits(state, 0xd733, 4, 4, &buf[2]); 1449 + ret = af9013_rd_regs(state, 0x5103, buf, 4); 1466 1450 if (ret) 1467 - goto error; 1451 + goto err; 1468 1452 1469 - /* ROM version */ 1470 - for (i = 0; i < 2; i++) { 1471 - ret = af9013_read_reg(state, 0x116b + i, &buf[i]); 1472 - if (ret) 1473 - goto error; 1474 - } 1475 - deb_info("%s: chip version:%d ROM version:%d.%d\n", __func__, 1476 - buf[2], buf[0], buf[1]); 1477 - 1478 - /* settings for mp2if */ 1479 - if (state->config.output_mode == AF9013_OUTPUT_MODE_USB) { 1480 - /* AF9015 split PSB to 1.5k + 0.5k */ 1481 - ret = af9013_write_reg_bits(state, 0xd50b, 2, 1, 1); 1482 - } else { 1483 - /* AF9013 change the output bit to data7 */ 1484 - ret = af9013_write_reg_bits(state, 0xd500, 3, 1, 1); 1485 - if (ret) 1486 - goto error; 1487 - /* AF9013 set mpeg to full speed */ 1488 - ret = af9013_write_reg_bits(state, 0xd502, 4, 1, 1); 1489 - } 1490 - if (ret) 1491 - goto error; 1492 - ret = af9013_write_reg_bits(state, 0xd520, 4, 1, 1); 1493 - if (ret) 1494 - goto error; 1453 + info("firmware version %d.%d.%d.%d", buf[0], buf[1], buf[2], buf[3]); 1495 1454 1496 1455 /* set GPIOs */ 1497 1456 for (i = 0; i < sizeof(state->config.gpio); i++) { 1498 1457 ret = af9013_set_gpio(state, i, state->config.gpio[i]); 1499 1458 if (ret) 1500 - goto error; 1459 + goto err; 1501 1460 } 1502 1461 1503 1462 /* create dvb_frontend */ 1504 - memcpy(&state->frontend.ops, &af9013_ops, 1463 + memcpy(&state->fe.ops, &af9013_ops, 1505 1464 sizeof(struct dvb_frontend_ops)); 1506 - state->frontend.demodulator_priv = state; 1465 + state->fe.demodulator_priv = state; 1507 1466 1508 - return &state->frontend; 1509 - error: 1467 + INIT_DELAYED_WORK(&state->statistics_work, af9013_statistics_work); 1468 + 1469 + return &state->fe; 1470 + err: 1510 1471 kfree(state); 1511 1472 return NULL; 1512 1473 } ··· 1483 1506 1484 1507 static struct dvb_frontend_ops af9013_ops = { 1485 1508 .info = { 1486 - .name = "Afatech AF9013 DVB-T", 1509 + .name = "Afatech AF9013", 1487 1510 .type = FE_OFDM, 1488 1511 .frequency_min = 174000000, 1489 1512 .frequency_max = 862000000, 1490 1513 .frequency_stepsize = 250000, 1491 1514 .frequency_tolerance = 0, 1492 - .caps = 1493 - FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | 1494 - FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | 1495 - FE_CAN_QPSK | FE_CAN_QAM_16 | 1496 - FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | 1515 + .caps = FE_CAN_FEC_1_2 | 1516 + FE_CAN_FEC_2_3 | 1517 + FE_CAN_FEC_3_4 | 1518 + FE_CAN_FEC_5_6 | 1519 + FE_CAN_FEC_7_8 | 1520 + FE_CAN_FEC_AUTO | 1521 + FE_CAN_QPSK | 1522 + FE_CAN_QAM_16 | 1523 + FE_CAN_QAM_64 | 1524 + FE_CAN_QAM_AUTO | 1497 1525 FE_CAN_TRANSMISSION_MODE_AUTO | 1498 1526 FE_CAN_GUARD_INTERVAL_AUTO | 1499 1527 FE_CAN_HIERARCHY_AUTO | ··· 1507 1525 }, 1508 1526 1509 1527 .release = af9013_release, 1528 + 1510 1529 .init = af9013_init, 1511 1530 .sleep = af9013_sleep, 1512 - .i2c_gate_ctrl = af9013_i2c_gate_ctrl, 1513 1531 1532 + .get_tune_settings = af9013_get_tune_settings, 1514 1533 .set_frontend = af9013_set_frontend, 1515 1534 .get_frontend = af9013_get_frontend, 1516 1535 1517 - .get_tune_settings = af9013_get_tune_settings, 1518 - 1519 1536 .read_status = af9013_read_status, 1520 - .read_ber = af9013_read_ber, 1521 - .read_signal_strength = af9013_read_signal_strength, 1522 1537 .read_snr = af9013_read_snr, 1538 + .read_signal_strength = af9013_read_signal_strength, 1539 + .read_ber = af9013_read_ber, 1523 1540 .read_ucblocks = af9013_read_ucblocks, 1524 - }; 1525 1541 1526 - module_param_named(debug, af9013_debug, int, 0644); 1527 - MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off)."); 1542 + .i2c_gate_ctrl = af9013_i2c_gate_ctrl, 1543 + }; 1528 1544 1529 1545 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); 1530 1546 MODULE_DESCRIPTION("Afatech AF9013 DVB-T demodulator driver");
+61 -52
drivers/media/dvb/frontends/af9013.h
··· 2 2 * Afatech AF9013 demodulator driver 3 3 * 4 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 + * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 5 6 * 6 7 * Thanks to Afatech who kindly provided information. 7 8 * ··· 22 21 * 23 22 */ 24 23 25 - #ifndef _AF9013_H_ 26 - #define _AF9013_H_ 24 + #ifndef AF9013_H 25 + #define AF9013_H 27 26 28 27 #include <linux/dvb/frontend.h> 29 - 30 - enum af9013_ts_mode { 31 - AF9013_OUTPUT_MODE_PARALLEL, 32 - AF9013_OUTPUT_MODE_SERIAL, 33 - AF9013_OUTPUT_MODE_USB, /* only for AF9015 */ 34 - }; 35 - 36 - enum af9013_tuner { 37 - AF9013_TUNER_MXL5003D = 3, /* MaxLinear */ 38 - AF9013_TUNER_MXL5005D = 13, /* MaxLinear */ 39 - AF9013_TUNER_MXL5005R = 30, /* MaxLinear */ 40 - AF9013_TUNER_ENV77H11D5 = 129, /* Panasonic */ 41 - AF9013_TUNER_MT2060 = 130, /* Microtune */ 42 - AF9013_TUNER_MC44S803 = 133, /* Freescale */ 43 - AF9013_TUNER_QT1010 = 134, /* Quantek */ 44 - AF9013_TUNER_UNKNOWN = 140, /* for can tuners ? */ 45 - AF9013_TUNER_MT2060_2 = 147, /* Microtune */ 46 - AF9013_TUNER_TDA18271 = 156, /* NXP */ 47 - AF9013_TUNER_QT1010A = 162, /* Quantek */ 48 - AF9013_TUNER_MXL5007T = 177, /* MaxLinear */ 49 - AF9013_TUNER_TDA18218 = 179, /* NXP */ 50 - }; 51 28 52 29 /* AF9013/5 GPIOs (mostly guessed) 53 30 demod#1-gpio#0 - set demod#2 i2c-addr for dual devices ··· 34 55 demod#2-gpio#0 - tuner#2 35 56 demod#2-gpio#1 - xtal setting (?) 36 57 */ 58 + 59 + struct af9013_config { 60 + /* 61 + * I2C address 62 + */ 63 + u8 i2c_addr; 64 + 65 + /* 66 + * clock 67 + * 20480000, 25000000, 28000000, 28800000 68 + */ 69 + u32 clock; 70 + 71 + /* 72 + * tuner 73 + */ 74 + #define AF9013_TUNER_MXL5003D 3 /* MaxLinear */ 75 + #define AF9013_TUNER_MXL5005D 13 /* MaxLinear */ 76 + #define AF9013_TUNER_MXL5005R 30 /* MaxLinear */ 77 + #define AF9013_TUNER_ENV77H11D5 129 /* Panasonic */ 78 + #define AF9013_TUNER_MT2060 130 /* Microtune */ 79 + #define AF9013_TUNER_MC44S803 133 /* Freescale */ 80 + #define AF9013_TUNER_QT1010 134 /* Quantek */ 81 + #define AF9013_TUNER_UNKNOWN 140 /* for can tuners ? */ 82 + #define AF9013_TUNER_MT2060_2 147 /* Microtune */ 83 + #define AF9013_TUNER_TDA18271 156 /* NXP */ 84 + #define AF9013_TUNER_QT1010A 162 /* Quantek */ 85 + #define AF9013_TUNER_MXL5007T 177 /* MaxLinear */ 86 + #define AF9013_TUNER_TDA18218 179 /* NXP */ 87 + u8 tuner; 88 + 89 + /* 90 + * IF frequency 91 + */ 92 + u32 if_frequency; 93 + 94 + /* 95 + * TS settings 96 + */ 97 + #define AF9013_TS_USB 0 98 + #define AF9013_TS_PARALLEL 1 99 + #define AF9013_TS_SERIAL 2 100 + u8 ts_mode:2; 101 + 102 + /* 103 + * input spectrum inversion 104 + */ 105 + bool spec_inv; 106 + 107 + /* 108 + * firmware API version 109 + */ 110 + u8 api_version[4]; 111 + 112 + /* 113 + * GPIOs 114 + */ 37 115 #define AF9013_GPIO_ON (1 << 0) 38 116 #define AF9013_GPIO_EN (1 << 1) 39 117 #define AF9013_GPIO_O (1 << 2) 40 118 #define AF9013_GPIO_I (1 << 3) 41 - 42 119 #define AF9013_GPIO_LO (AF9013_GPIO_ON|AF9013_GPIO_EN) 43 120 #define AF9013_GPIO_HI (AF9013_GPIO_ON|AF9013_GPIO_EN|AF9013_GPIO_O) 44 - 45 121 #define AF9013_GPIO_TUNER_ON (AF9013_GPIO_ON|AF9013_GPIO_EN) 46 122 #define AF9013_GPIO_TUNER_OFF (AF9013_GPIO_ON|AF9013_GPIO_EN|AF9013_GPIO_O) 47 - 48 - struct af9013_config { 49 - /* demodulator's I2C address */ 50 - u8 demod_address; 51 - 52 - /* frequencies in kHz */ 53 - u32 adc_clock; 54 - 55 - /* tuner ID */ 56 - u8 tuner; 57 - 58 - /* tuner IF */ 59 - u16 tuner_if; 60 - 61 - /* TS data output mode */ 62 - u8 output_mode:2; 63 - 64 - /* RF spectrum inversion */ 65 - u8 rf_spec_inv:1; 66 - 67 - /* API version */ 68 - u8 api_version[4]; 69 - 70 - /* GPIOs */ 71 123 u8 gpio[4]; 72 124 }; 73 - 74 125 75 126 #if defined(CONFIG_DVB_AF9013) || \ 76 127 (defined(CONFIG_DVB_AF9013_MODULE) && defined(MODULE)) ··· 115 106 } 116 107 #endif /* CONFIG_DVB_AF9013 */ 117 108 118 - #endif /* _AF9013_H_ */ 109 + #endif /* AF9013_H */
+46 -47
drivers/media/dvb/frontends/af9013_priv.h
··· 2 2 * Afatech AF9013 demodulator driver 3 3 * 4 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 + * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 5 6 * 6 7 * Thanks to Afatech who kindly provided information. 7 8 * ··· 22 21 * 23 22 */ 24 23 25 - #ifndef _AF9013_PRIV_ 26 - #define _AF9013_PRIV_ 24 + #ifndef AF9013_PRIV_H 25 + #define AF9013_PRIV_H 26 + 27 + #include "dvb_frontend.h" 28 + #include "af9013.h" 29 + #include <linux/firmware.h> 27 30 28 31 #define LOG_PREFIX "af9013" 29 - extern int af9013_debug; 30 32 31 - #define dprintk(var, level, args...) \ 32 - do { if ((var & level)) printk(args); } while (0) 33 - 34 - #define debug_dump(b, l, func) {\ 35 - int loop_; \ 36 - for (loop_ = 0; loop_ < l; loop_++) \ 37 - func("%02x ", b[loop_]); \ 38 - func("\n");\ 39 - } 40 - 41 - #define deb_info(args...) dprintk(af9013_debug, 0x01, args) 42 - 33 + #undef dbg 34 + #define dbg(f, arg...) \ 35 + if (af9013_debug) \ 36 + printk(KERN_INFO LOG_PREFIX": " f "\n" , ## arg) 43 37 #undef err 44 38 #define err(f, arg...) printk(KERN_ERR LOG_PREFIX": " f "\n" , ## arg) 45 39 #undef info ··· 44 48 45 49 #define AF9013_DEFAULT_FIRMWARE "dvb-fe-af9013.fw" 46 50 47 - struct regdesc { 51 + struct af9013_reg_bit { 48 52 u16 addr; 49 53 u8 pos:4; 50 54 u8 len:4; 51 55 u8 val; 52 56 }; 53 57 54 - struct snr_table { 58 + struct af9013_snr { 55 59 u32 val; 56 60 u8 snr; 57 61 }; 58 62 59 - struct coeff { 60 - u32 adc_clock; 61 - fe_bandwidth_t bw; 63 + struct af9013_coeff { 64 + u32 clock; 65 + u32 bandwidth_hz; 62 66 u8 val[24]; 63 67 }; 64 68 65 69 /* pre-calculated coeff lookup table */ 66 - static struct coeff coeff_table[] = { 70 + static const struct af9013_coeff coeff_lut[] = { 67 71 /* 28.800 MHz */ 68 - { 28800, BANDWIDTH_8_MHZ, { 0x02, 0x8a, 0x28, 0xa3, 0x05, 0x14, 72 + { 28800000, 8000000, { 0x02, 0x8a, 0x28, 0xa3, 0x05, 0x14, 69 73 0x51, 0x11, 0x00, 0xa2, 0x8f, 0x3d, 0x00, 0xa2, 0x8a, 70 74 0x29, 0x00, 0xa2, 0x85, 0x14, 0x01, 0x45, 0x14, 0x14 } }, 71 - { 28800, BANDWIDTH_7_MHZ, { 0x02, 0x38, 0xe3, 0x8e, 0x04, 0x71, 75 + { 28800000, 7000000, { 0x02, 0x38, 0xe3, 0x8e, 0x04, 0x71, 72 76 0xc7, 0x07, 0x00, 0x8e, 0x3d, 0x55, 0x00, 0x8e, 0x38, 73 77 0xe4, 0x00, 0x8e, 0x34, 0x72, 0x01, 0x1c, 0x71, 0x32 } }, 74 - { 28800, BANDWIDTH_6_MHZ, { 0x01, 0xe7, 0x9e, 0x7a, 0x03, 0xcf, 78 + { 28800000, 6000000, { 0x01, 0xe7, 0x9e, 0x7a, 0x03, 0xcf, 75 79 0x3c, 0x3d, 0x00, 0x79, 0xeb, 0x6e, 0x00, 0x79, 0xe7, 76 80 0x9e, 0x00, 0x79, 0xe3, 0xcf, 0x00, 0xf3, 0xcf, 0x0f } }, 77 81 /* 20.480 MHz */ 78 - { 20480, BANDWIDTH_8_MHZ, { 0x03, 0x92, 0x49, 0x26, 0x07, 0x24, 82 + { 20480000, 8000000, { 0x03, 0x92, 0x49, 0x26, 0x07, 0x24, 79 83 0x92, 0x13, 0x00, 0xe4, 0x99, 0x6e, 0x00, 0xe4, 0x92, 80 84 0x49, 0x00, 0xe4, 0x8b, 0x25, 0x01, 0xc9, 0x24, 0x25 } }, 81 - { 20480, BANDWIDTH_7_MHZ, { 0x03, 0x20, 0x00, 0x01, 0x06, 0x40, 85 + { 20480000, 7000000, { 0x03, 0x20, 0x00, 0x01, 0x06, 0x40, 82 86 0x00, 0x00, 0x00, 0xc8, 0x06, 0x40, 0x00, 0xc8, 0x00, 83 87 0x00, 0x00, 0xc7, 0xf9, 0xc0, 0x01, 0x90, 0x00, 0x00 } }, 84 - { 20480, BANDWIDTH_6_MHZ, { 0x02, 0xad, 0xb6, 0xdc, 0x05, 0x5b, 88 + { 20480000, 6000000, { 0x02, 0xad, 0xb6, 0xdc, 0x05, 0x5b, 85 89 0x6d, 0x2e, 0x00, 0xab, 0x73, 0x13, 0x00, 0xab, 0x6d, 86 90 0xb7, 0x00, 0xab, 0x68, 0x5c, 0x01, 0x56, 0xdb, 0x1c } }, 87 91 /* 28.000 MHz */ 88 - { 28000, BANDWIDTH_8_MHZ, { 0x02, 0x9c, 0xbc, 0x15, 0x05, 0x39, 92 + { 28000000, 8000000, { 0x02, 0x9c, 0xbc, 0x15, 0x05, 0x39, 89 93 0x78, 0x0a, 0x00, 0xa7, 0x34, 0x3f, 0x00, 0xa7, 0x2f, 90 94 0x05, 0x00, 0xa7, 0x29, 0xcc, 0x01, 0x4e, 0x5e, 0x03 } }, 91 - { 28000, BANDWIDTH_7_MHZ, { 0x02, 0x49, 0x24, 0x92, 0x04, 0x92, 95 + { 28000000, 7000000, { 0x02, 0x49, 0x24, 0x92, 0x04, 0x92, 92 96 0x49, 0x09, 0x00, 0x92, 0x4d, 0xb7, 0x00, 0x92, 0x49, 93 97 0x25, 0x00, 0x92, 0x44, 0x92, 0x01, 0x24, 0x92, 0x12 } }, 94 - { 28000, BANDWIDTH_6_MHZ, { 0x01, 0xf5, 0x8d, 0x10, 0x03, 0xeb, 98 + { 28000000, 6000000, { 0x01, 0xf5, 0x8d, 0x10, 0x03, 0xeb, 95 99 0x1a, 0x08, 0x00, 0x7d, 0x67, 0x2f, 0x00, 0x7d, 0x63, 96 100 0x44, 0x00, 0x7d, 0x5f, 0x59, 0x00, 0xfa, 0xc6, 0x22 } }, 97 101 /* 25.000 MHz */ 98 - { 25000, BANDWIDTH_8_MHZ, { 0x02, 0xec, 0xfb, 0x9d, 0x05, 0xd9, 102 + { 25000000, 8000000, { 0x02, 0xec, 0xfb, 0x9d, 0x05, 0xd9, 99 103 0xf7, 0x0e, 0x00, 0xbb, 0x44, 0xc1, 0x00, 0xbb, 0x3e, 100 104 0xe7, 0x00, 0xbb, 0x39, 0x0d, 0x01, 0x76, 0x7d, 0x34 } }, 101 - { 25000, BANDWIDTH_7_MHZ, { 0x02, 0x8f, 0x5c, 0x29, 0x05, 0x1e, 105 + { 25000000, 7000000, { 0x02, 0x8f, 0x5c, 0x29, 0x05, 0x1e, 102 106 0xb8, 0x14, 0x00, 0xa3, 0xdc, 0x29, 0x00, 0xa3, 0xd7, 103 107 0x0a, 0x00, 0xa3, 0xd1, 0xec, 0x01, 0x47, 0xae, 0x05 } }, 104 - { 25000, BANDWIDTH_6_MHZ, { 0x02, 0x31, 0xbc, 0xb5, 0x04, 0x63, 108 + { 25000000, 6000000, { 0x02, 0x31, 0xbc, 0xb5, 0x04, 0x63, 105 109 0x79, 0x1b, 0x00, 0x8c, 0x73, 0x91, 0x00, 0x8c, 0x6f, 106 110 0x2d, 0x00, 0x8c, 0x6a, 0xca, 0x01, 0x18, 0xde, 0x17 } }, 107 111 }; 108 112 109 113 /* QPSK SNR lookup table */ 110 - static struct snr_table qpsk_snr_table[] = { 114 + static const struct af9013_snr qpsk_snr_lut[] = { 115 + { 0x000000, 0 }, 111 116 { 0x0b4771, 0 }, 112 117 { 0x0c1aed, 1 }, 113 118 { 0x0d0d27, 2 }, ··· 128 131 }; 129 132 130 133 /* QAM16 SNR lookup table */ 131 - static struct snr_table qam16_snr_table[] = { 134 + static const struct af9013_snr qam16_snr_lut[] = { 135 + { 0x000000, 0 }, 132 136 { 0x05eb62, 5 }, 133 137 { 0x05fecf, 6 }, 134 138 { 0x060b80, 7 }, ··· 149 151 }; 150 152 151 153 /* QAM64 SNR lookup table */ 152 - static struct snr_table qam64_snr_table[] = { 154 + static const struct af9013_snr qam64_snr_lut[] = { 155 + { 0x000000, 0 }, 153 156 { 0x03109b, 12 }, 154 157 { 0x0310d4, 13 }, 155 158 { 0x031920, 14 }, ··· 169 170 { 0xffffff, 27 }, 170 171 }; 171 172 172 - static struct regdesc ofsm_init[] = { 173 + static const struct af9013_reg_bit ofsm_init[] = { 173 174 { 0xd73a, 0, 8, 0xa1 }, 174 175 { 0xd73b, 0, 8, 0x1f }, 175 176 { 0xd73c, 4, 4, 0x0a }, ··· 251 252 252 253 /* Panasonic ENV77H11D5 tuner init 253 254 AF9013_TUNER_ENV77H11D5 = 129 */ 254 - static struct regdesc tuner_init_env77h11d5[] = { 255 + static const struct af9013_reg_bit tuner_init_env77h11d5[] = { 255 256 { 0x9bd5, 0, 8, 0x01 }, 256 257 { 0x9bd6, 0, 8, 0x03 }, 257 258 { 0x9bbe, 0, 8, 0x01 }, ··· 317 318 318 319 /* Microtune MT2060 tuner init 319 320 AF9013_TUNER_MT2060 = 130 */ 320 - static struct regdesc tuner_init_mt2060[] = { 321 + static const struct af9013_reg_bit tuner_init_mt2060[] = { 321 322 { 0x9bd5, 0, 8, 0x01 }, 322 323 { 0x9bd6, 0, 8, 0x07 }, 323 324 { 0xd1a0, 1, 1, 0x01 }, ··· 394 395 395 396 /* Microtune MT2060 tuner init 396 397 AF9013_TUNER_MT2060_2 = 147 */ 397 - static struct regdesc tuner_init_mt2060_2[] = { 398 + static const struct af9013_reg_bit tuner_init_mt2060_2[] = { 398 399 { 0x9bd5, 0, 8, 0x01 }, 399 400 { 0x9bd6, 0, 8, 0x06 }, 400 401 { 0x9bbe, 0, 8, 0x01 }, ··· 461 462 462 463 /* MaxLinear MXL5003 tuner init 463 464 AF9013_TUNER_MXL5003D = 3 */ 464 - static struct regdesc tuner_init_mxl5003d[] = { 465 + static const struct af9013_reg_bit tuner_init_mxl5003d[] = { 465 466 { 0x9bd5, 0, 8, 0x01 }, 466 467 { 0x9bd6, 0, 8, 0x09 }, 467 468 { 0xd1a0, 1, 1, 0x01 }, ··· 533 534 AF9013_TUNER_MXL5005D = 13 534 535 AF9013_TUNER_MXL5005R = 30 535 536 AF9013_TUNER_MXL5007T = 177 */ 536 - static struct regdesc tuner_init_mxl5005[] = { 537 + static const struct af9013_reg_bit tuner_init_mxl5005[] = { 537 538 { 0x9bd5, 0, 8, 0x01 }, 538 539 { 0x9bd6, 0, 8, 0x07 }, 539 540 { 0xd1a0, 1, 1, 0x01 }, ··· 612 613 /* Quantek QT1010 tuner init 613 614 AF9013_TUNER_QT1010 = 134 614 615 AF9013_TUNER_QT1010A = 162 */ 615 - static struct regdesc tuner_init_qt1010[] = { 616 + static const struct af9013_reg_bit tuner_init_qt1010[] = { 616 617 { 0x9bd5, 0, 8, 0x01 }, 617 618 { 0x9bd6, 0, 8, 0x09 }, 618 619 { 0xd1a0, 1, 1, 0x01 }, ··· 689 690 690 691 /* Freescale MC44S803 tuner init 691 692 AF9013_TUNER_MC44S803 = 133 */ 692 - static struct regdesc tuner_init_mc44s803[] = { 693 + static const struct af9013_reg_bit tuner_init_mc44s803[] = { 693 694 { 0x9bd5, 0, 8, 0x01 }, 694 695 { 0x9bd6, 0, 8, 0x06 }, 695 696 { 0xd1a0, 1, 1, 0x01 }, ··· 771 772 772 773 /* unknown, probably for tin can tuner, tuner init 773 774 AF9013_TUNER_UNKNOWN = 140 */ 774 - static struct regdesc tuner_init_unknown[] = { 775 + static const struct af9013_reg_bit tuner_init_unknown[] = { 775 776 { 0x9bd5, 0, 8, 0x01 }, 776 777 { 0x9bd6, 0, 8, 0x02 }, 777 778 { 0xd1a0, 1, 1, 0x01 }, ··· 844 845 /* NXP TDA18271 & TDA18218 tuner init 845 846 AF9013_TUNER_TDA18271 = 156 846 847 AF9013_TUNER_TDA18218 = 179 */ 847 - static struct regdesc tuner_init_tda18271[] = { 848 + static const struct af9013_reg_bit tuner_init_tda18271[] = { 848 849 { 0x9bd5, 0, 8, 0x01 }, 849 850 { 0x9bd6, 0, 8, 0x04 }, 850 851 { 0xd1a0, 1, 1, 0x01 }, ··· 919 920 { 0x9bee, 0, 1, 0x01 }, 920 921 }; 921 922 922 - #endif /* _AF9013_PRIV_ */ 923 + #endif /* AF9013_PRIV_H */