1 /* 2 * Afatech AF9013 demodulator driver 3 * 4 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5 * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 6 * 7 * Thanks to Afatech who kindly provided information. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 */ 20 21 #ifndef AF9013_PRIV_H 22 #define AF9013_PRIV_H 23 24 #include <media/dvb_frontend.h> 25 #include <media/dvb_math.h> 26 #include "af9013.h" 27 #include <linux/firmware.h> 28 #include <linux/i2c-mux.h> 29 #include <linux/math64.h> 30 #include <linux/regmap.h> 31 32 #define AF9013_FIRMWARE "dvb-fe-af9013.fw" 33 34 struct af9013_reg_mask_val { 35 u16 reg; 36 u8 mask; 37 u8 val; 38 }; 39 40 struct af9013_coeff { 41 u32 clock; 42 u32 bandwidth_hz; 43 u8 val[24]; 44 }; 45 46 /* pre-calculated coeff lookup table */ 47 static const struct af9013_coeff coeff_lut[] = { 48 /* 28.800 MHz */ 49 { 28800000, 8000000, { 0x02, 0x8a, 0x28, 0xa3, 0x05, 0x14, 50 0x51, 0x11, 0x00, 0xa2, 0x8f, 0x3d, 0x00, 0xa2, 0x8a, 51 0x29, 0x00, 0xa2, 0x85, 0x14, 0x01, 0x45, 0x14, 0x14 } }, 52 { 28800000, 7000000, { 0x02, 0x38, 0xe3, 0x8e, 0x04, 0x71, 53 0xc7, 0x07, 0x00, 0x8e, 0x3d, 0x55, 0x00, 0x8e, 0x38, 54 0xe4, 0x00, 0x8e, 0x34, 0x72, 0x01, 0x1c, 0x71, 0x32 } }, 55 { 28800000, 6000000, { 0x01, 0xe7, 0x9e, 0x7a, 0x03, 0xcf, 56 0x3c, 0x3d, 0x00, 0x79, 0xeb, 0x6e, 0x00, 0x79, 0xe7, 57 0x9e, 0x00, 0x79, 0xe3, 0xcf, 0x00, 0xf3, 0xcf, 0x0f } }, 58 /* 20.480 MHz */ 59 { 20480000, 8000000, { 0x03, 0x92, 0x49, 0x26, 0x07, 0x24, 60 0x92, 0x13, 0x00, 0xe4, 0x99, 0x6e, 0x00, 0xe4, 0x92, 61 0x49, 0x00, 0xe4, 0x8b, 0x25, 0x01, 0xc9, 0x24, 0x25 } }, 62 { 20480000, 7000000, { 0x03, 0x20, 0x00, 0x01, 0x06, 0x40, 63 0x00, 0x00, 0x00, 0xc8, 0x06, 0x40, 0x00, 0xc8, 0x00, 64 0x00, 0x00, 0xc7, 0xf9, 0xc0, 0x01, 0x90, 0x00, 0x00 } }, 65 { 20480000, 6000000, { 0x02, 0xad, 0xb6, 0xdc, 0x05, 0x5b, 66 0x6d, 0x2e, 0x00, 0xab, 0x73, 0x13, 0x00, 0xab, 0x6d, 67 0xb7, 0x00, 0xab, 0x68, 0x5c, 0x01, 0x56, 0xdb, 0x1c } }, 68 /* 28.000 MHz */ 69 { 28000000, 8000000, { 0x02, 0x9c, 0xbc, 0x15, 0x05, 0x39, 70 0x78, 0x0a, 0x00, 0xa7, 0x34, 0x3f, 0x00, 0xa7, 0x2f, 71 0x05, 0x00, 0xa7, 0x29, 0xcc, 0x01, 0x4e, 0x5e, 0x03 } }, 72 { 28000000, 7000000, { 0x02, 0x49, 0x24, 0x92, 0x04, 0x92, 73 0x49, 0x09, 0x00, 0x92, 0x4d, 0xb7, 0x00, 0x92, 0x49, 74 0x25, 0x00, 0x92, 0x44, 0x92, 0x01, 0x24, 0x92, 0x12 } }, 75 { 28000000, 6000000, { 0x01, 0xf5, 0x8d, 0x10, 0x03, 0xeb, 76 0x1a, 0x08, 0x00, 0x7d, 0x67, 0x2f, 0x00, 0x7d, 0x63, 77 0x44, 0x00, 0x7d, 0x5f, 0x59, 0x00, 0xfa, 0xc6, 0x22 } }, 78 /* 25.000 MHz */ 79 { 25000000, 8000000, { 0x02, 0xec, 0xfb, 0x9d, 0x05, 0xd9, 80 0xf7, 0x0e, 0x00, 0xbb, 0x44, 0xc1, 0x00, 0xbb, 0x3e, 81 0xe7, 0x00, 0xbb, 0x39, 0x0d, 0x01, 0x76, 0x7d, 0x34 } }, 82 { 25000000, 7000000, { 0x02, 0x8f, 0x5c, 0x29, 0x05, 0x1e, 83 0xb8, 0x14, 0x00, 0xa3, 0xdc, 0x29, 0x00, 0xa3, 0xd7, 84 0x0a, 0x00, 0xa3, 0xd1, 0xec, 0x01, 0x47, 0xae, 0x05 } }, 85 { 25000000, 6000000, { 0x02, 0x31, 0xbc, 0xb5, 0x04, 0x63, 86 0x79, 0x1b, 0x00, 0x8c, 0x73, 0x91, 0x00, 0x8c, 0x6f, 87 0x2d, 0x00, 0x8c, 0x6a, 0xca, 0x01, 0x18, 0xde, 0x17 } }, 88 }; 89 90 /* 91 * Afatech AF9013 demod init 92 */ 93 static const struct af9013_reg_mask_val demod_init_tab[] = { 94 {0xd73a, 0xff, 0xa1}, 95 {0xd73b, 0xff, 0x1f}, 96 {0xd73c, 0xf0, 0xa0}, 97 {0xd732, 0x08, 0x00}, 98 {0xd731, 0x30, 0x30}, 99 {0xd73d, 0x80, 0x80}, 100 {0xd740, 0x01, 0x00}, 101 {0xd740, 0x02, 0x00}, 102 {0xd740, 0x04, 0x00}, 103 {0xd740, 0x08, 0x08}, 104 {0xd3c1, 0x10, 0x10}, 105 {0x9124, 0xff, 0x58}, 106 {0x9125, 0x03, 0x02}, 107 {0xd3a2, 0xff, 0x00}, 108 {0xd3a3, 0xff, 0x04}, 109 {0xd305, 0xff, 0x32}, 110 {0xd306, 0xff, 0x10}, 111 {0xd304, 0xff, 0x04}, 112 {0x9112, 0x01, 0x01}, 113 {0x911d, 0x01, 0x01}, 114 {0x911a, 0x01, 0x01}, 115 {0x911b, 0x01, 0x01}, 116 {0x9bce, 0x0f, 0x02}, 117 {0x9116, 0x01, 0x01}, 118 {0x9122, 0xff, 0xd0}, 119 {0xd2e0, 0xff, 0xd0}, 120 {0xd2e9, 0x0f, 0x0d}, 121 {0xd38c, 0xff, 0xfc}, 122 {0xd38d, 0xff, 0x00}, 123 {0xd38e, 0xff, 0x7e}, 124 {0xd38f, 0xff, 0x00}, 125 {0xd390, 0xff, 0x2f}, 126 {0xd145, 0x10, 0x10}, 127 {0xd1a9, 0x10, 0x10}, 128 {0xd158, 0xe0, 0x20}, 129 {0xd159, 0x3f, 0x06}, 130 {0xd167, 0xff, 0x00}, 131 {0xd168, 0x0f, 0x07}, 132 {0xd1c3, 0xe0, 0x00}, 133 {0xd1c4, 0x3f, 0x00}, 134 {0xd1c5, 0x7f, 0x10}, 135 {0xd1c6, 0x07, 0x02}, 136 {0xd080, 0x7c, 0x0c}, 137 {0xd081, 0xf0, 0x90}, 138 {0xd098, 0xf0, 0xf0}, 139 {0xd098, 0x0f, 0x03}, 140 {0xdbc0, 0x10, 0x10}, 141 {0xdbc7, 0xff, 0x08}, 142 {0xdbc8, 0xf0, 0x00}, 143 {0xdbc9, 0x1f, 0x01}, 144 {0xd280, 0xff, 0xe0}, 145 {0xd281, 0xff, 0xff}, 146 {0xd282, 0xff, 0xff}, 147 {0xd283, 0xff, 0xc3}, 148 {0xd284, 0xff, 0xff}, 149 {0xd285, 0x0f, 0x01}, 150 {0xd0f0, 0x7f, 0x1a}, 151 {0xd0f1, 0x10, 0x10}, 152 {0xd0f2, 0xff, 0x0c}, 153 {0xd101, 0xe0, 0xc0}, 154 {0xd103, 0x0f, 0x08}, 155 {0xd0f8, 0x7f, 0x20}, 156 {0xd111, 0x20, 0x00}, 157 {0xd111, 0x40, 0x00}, 158 {0x910b, 0xff, 0x0a}, 159 {0x9115, 0xff, 0x02}, 160 {0x910c, 0xff, 0x02}, 161 {0x910d, 0xff, 0x08}, 162 {0x910e, 0xff, 0x0a}, 163 {0x9bf6, 0xff, 0x06}, 164 {0x9bf8, 0xff, 0x02}, 165 {0x9bf7, 0xff, 0x05}, 166 {0x9bf9, 0xff, 0x0f}, 167 {0x9bfc, 0xff, 0x13}, 168 {0x9bd3, 0xff, 0xff}, 169 {0x9bbe, 0x01, 0x01}, 170 {0x9bcc, 0x01, 0x01}, 171 }; 172 173 /* 174 * Panasonic ENV77H11D5 tuner init 175 * AF9013_TUNER_ENV77H11D5 0x81 176 */ 177 static const struct af9013_reg_mask_val tuner_init_tab_env77h11d5[] = { 178 {0x9bd5, 0xff, 0x01}, 179 {0x9bd6, 0xff, 0x03}, 180 {0x9bbe, 0xff, 0x01}, 181 {0xd1a0, 0x02, 0x02}, 182 {0xd000, 0x01, 0x01}, 183 {0xd000, 0x02, 0x00}, 184 {0xd001, 0x02, 0x02}, 185 {0xd001, 0x01, 0x00}, 186 {0xd001, 0x20, 0x00}, 187 {0xd002, 0x1f, 0x19}, 188 {0xd003, 0x1f, 0x1a}, 189 {0xd004, 0x1f, 0x19}, 190 {0xd005, 0x1f, 0x1a}, 191 {0xd00e, 0x1f, 0x10}, 192 {0xd00f, 0x07, 0x04}, 193 {0xd00f, 0x38, 0x28}, 194 {0xd010, 0x07, 0x04}, 195 {0xd010, 0x38, 0x28}, 196 {0xd016, 0xf0, 0x30}, 197 {0xd01f, 0x3f, 0x0a}, 198 {0xd020, 0x3f, 0x0a}, 199 {0x9bda, 0xff, 0x00}, 200 {0x9be3, 0xff, 0x00}, 201 {0xd015, 0xff, 0x50}, 202 {0xd016, 0x01, 0x00}, 203 {0xd044, 0xff, 0x46}, 204 {0xd045, 0x01, 0x00}, 205 {0xd008, 0xff, 0xdf}, 206 {0xd009, 0x03, 0x02}, 207 {0xd006, 0xff, 0x44}, 208 {0xd007, 0x03, 0x01}, 209 {0xd00c, 0xff, 0xeb}, 210 {0xd00d, 0x03, 0x02}, 211 {0xd00a, 0xff, 0xf4}, 212 {0xd00b, 0x03, 0x01}, 213 {0x9bba, 0xff, 0xf9}, 214 {0x9bc3, 0xff, 0xdf}, 215 {0x9bc4, 0xff, 0x02}, 216 {0x9bc5, 0xff, 0xeb}, 217 {0x9bc6, 0xff, 0x02}, 218 {0x9bc9, 0xff, 0x52}, 219 {0xd011, 0xff, 0x3c}, 220 {0xd012, 0x03, 0x01}, 221 {0xd013, 0xff, 0xf7}, 222 {0xd014, 0x03, 0x02}, 223 {0xd040, 0xff, 0x0b}, 224 {0xd041, 0x03, 0x02}, 225 {0xd042, 0xff, 0x4d}, 226 {0xd043, 0x03, 0x00}, 227 {0xd045, 0x02, 0x00}, 228 {0x9bcf, 0x01, 0x01}, 229 {0xd045, 0x04, 0x04}, 230 {0xd04f, 0xff, 0x9a}, 231 {0xd050, 0x01, 0x01}, 232 {0xd051, 0xff, 0x5a}, 233 {0xd052, 0x01, 0x01}, 234 {0xd053, 0xff, 0x50}, 235 {0xd054, 0xff, 0x46}, 236 {0x9bd7, 0xff, 0x0a}, 237 {0x9bd8, 0xff, 0x14}, 238 {0x9bd9, 0xff, 0x08}, 239 }; 240 241 /* 242 * Microtune MT2060 tuner init 243 * AF9013_TUNER_MT2060 0x82 244 */ 245 static const struct af9013_reg_mask_val tuner_init_tab_mt2060[] = { 246 {0x9bd5, 0xff, 0x01}, 247 {0x9bd6, 0xff, 0x07}, 248 {0xd1a0, 0x02, 0x02}, 249 {0xd000, 0x01, 0x01}, 250 {0xd000, 0x02, 0x00}, 251 {0xd001, 0x02, 0x02}, 252 {0xd001, 0x01, 0x00}, 253 {0xd001, 0x20, 0x00}, 254 {0xd002, 0x1f, 0x19}, 255 {0xd003, 0x1f, 0x1a}, 256 {0xd004, 0x1f, 0x19}, 257 {0xd005, 0x1f, 0x1a}, 258 {0xd00e, 0x1f, 0x10}, 259 {0xd00f, 0x07, 0x04}, 260 {0xd00f, 0x38, 0x28}, 261 {0xd010, 0x07, 0x04}, 262 {0xd010, 0x38, 0x28}, 263 {0xd016, 0xf0, 0x30}, 264 {0xd01f, 0x3f, 0x0a}, 265 {0xd020, 0x3f, 0x0a}, 266 {0x9bda, 0xff, 0x00}, 267 {0x9be3, 0xff, 0x00}, 268 {0x9bbe, 0x01, 0x00}, 269 {0x9bcc, 0x01, 0x00}, 270 {0x9bb9, 0xff, 0x75}, 271 {0x9bcd, 0xff, 0x24}, 272 {0x9bff, 0xff, 0x30}, 273 {0xd015, 0xff, 0x46}, 274 {0xd016, 0x01, 0x00}, 275 {0xd044, 0xff, 0x46}, 276 {0xd045, 0x01, 0x00}, 277 {0xd008, 0xff, 0x0f}, 278 {0xd009, 0x03, 0x02}, 279 {0xd006, 0xff, 0x32}, 280 {0xd007, 0x03, 0x01}, 281 {0xd00c, 0xff, 0x36}, 282 {0xd00d, 0x03, 0x03}, 283 {0xd00a, 0xff, 0x35}, 284 {0xd00b, 0x03, 0x01}, 285 {0x9bc7, 0xff, 0x07}, 286 {0x9bc8, 0xff, 0x90}, 287 {0x9bc3, 0xff, 0x0f}, 288 {0x9bc4, 0xff, 0x02}, 289 {0x9bc5, 0xff, 0x36}, 290 {0x9bc6, 0xff, 0x03}, 291 {0x9bba, 0xff, 0xc9}, 292 {0x9bc9, 0xff, 0x79}, 293 {0xd011, 0xff, 0x10}, 294 {0xd012, 0x03, 0x01}, 295 {0xd013, 0xff, 0x45}, 296 {0xd014, 0x03, 0x03}, 297 {0xd040, 0xff, 0x98}, 298 {0xd041, 0x03, 0x00}, 299 {0xd042, 0xff, 0xcf}, 300 {0xd043, 0x03, 0x03}, 301 {0xd045, 0x02, 0x00}, 302 {0x9bcf, 0x01, 0x01}, 303 {0xd045, 0x04, 0x04}, 304 {0xd04f, 0xff, 0x9a}, 305 {0xd050, 0x01, 0x01}, 306 {0xd051, 0xff, 0x5a}, 307 {0xd052, 0x01, 0x01}, 308 {0xd053, 0xff, 0x50}, 309 {0xd054, 0xff, 0x46}, 310 {0x9bd7, 0xff, 0x0a}, 311 {0x9bd8, 0xff, 0x14}, 312 {0x9bd9, 0xff, 0x08}, 313 {0x9bd0, 0xff, 0xcc}, 314 {0x9be4, 0xff, 0xa0}, 315 {0x9bbd, 0xff, 0x8e}, 316 {0x9be2, 0xff, 0x4d}, 317 {0x9bee, 0x01, 0x01}, 318 }; 319 320 /* 321 * Microtune MT2060 tuner init 322 * AF9013_TUNER_MT2060_2 0x93 323 */ 324 static const struct af9013_reg_mask_val tuner_init_tab_mt2060_2[] = { 325 {0x9bd5, 0xff, 0x01}, 326 {0x9bd6, 0xff, 0x06}, 327 {0x9bbe, 0xff, 0x01}, 328 {0xd1a0, 0x02, 0x02}, 329 {0xd000, 0x01, 0x01}, 330 {0xd000, 0x02, 0x00}, 331 {0xd001, 0x02, 0x02}, 332 {0xd001, 0x01, 0x00}, 333 {0xd001, 0x20, 0x00}, 334 {0xd002, 0x1f, 0x19}, 335 {0xd003, 0x1f, 0x1a}, 336 {0xd004, 0x1f, 0x19}, 337 {0xd005, 0x1f, 0x1a}, 338 {0xd00e, 0x1f, 0x10}, 339 {0xd00f, 0x07, 0x04}, 340 {0xd00f, 0x38, 0x28}, 341 {0xd010, 0x07, 0x04}, 342 {0xd010, 0x38, 0x28}, 343 {0xd016, 0xf0, 0x30}, 344 {0xd01f, 0x3f, 0x0a}, 345 {0xd020, 0x3f, 0x0a}, 346 {0xd015, 0xff, 0x46}, 347 {0xd016, 0x01, 0x00}, 348 {0xd044, 0xff, 0x46}, 349 {0xd045, 0x01, 0x00}, 350 {0xd008, 0xff, 0x0f}, 351 {0xd009, 0x03, 0x02}, 352 {0xd006, 0xff, 0x32}, 353 {0xd007, 0x03, 0x01}, 354 {0xd00c, 0xff, 0x36}, 355 {0xd00d, 0x03, 0x03}, 356 {0xd00a, 0xff, 0x35}, 357 {0xd00b, 0x03, 0x01}, 358 {0x9bc7, 0xff, 0x07}, 359 {0x9bc8, 0xff, 0x90}, 360 {0x9bc3, 0xff, 0x0f}, 361 {0x9bc4, 0xff, 0x02}, 362 {0x9bc5, 0xff, 0x36}, 363 {0x9bc6, 0xff, 0x03}, 364 {0x9bba, 0xff, 0xc9}, 365 {0x9bc9, 0xff, 0x79}, 366 {0xd011, 0xff, 0x10}, 367 {0xd012, 0x03, 0x01}, 368 {0xd013, 0xff, 0x45}, 369 {0xd014, 0x03, 0x03}, 370 {0xd040, 0xff, 0x98}, 371 {0xd041, 0x03, 0x00}, 372 {0xd042, 0xff, 0xcf}, 373 {0xd043, 0x03, 0x03}, 374 {0xd045, 0x02, 0x00}, 375 {0x9bcf, 0xff, 0x01}, 376 {0xd045, 0x04, 0x04}, 377 {0xd04f, 0xff, 0x9a}, 378 {0xd050, 0x01, 0x01}, 379 {0xd051, 0xff, 0x5a}, 380 {0xd052, 0x01, 0x01}, 381 {0xd053, 0xff, 0x96}, 382 {0xd054, 0xff, 0x46}, 383 {0xd045, 0x80, 0x00}, 384 {0x9bd7, 0xff, 0x0a}, 385 {0x9bd8, 0xff, 0x14}, 386 {0x9bd9, 0xff, 0x08}, 387 }; 388 389 /* 390 * MaxLinear MXL5003 tuner init 391 * AF9013_TUNER_MXL5003D 0x03 392 */ 393 static const struct af9013_reg_mask_val tuner_init_tab_mxl5003d[] = { 394 {0x9bd5, 0xff, 0x01}, 395 {0x9bd6, 0xff, 0x09}, 396 {0xd1a0, 0x02, 0x02}, 397 {0xd000, 0x01, 0x01}, 398 {0xd000, 0x02, 0x00}, 399 {0xd001, 0x02, 0x02}, 400 {0xd001, 0x01, 0x00}, 401 {0xd001, 0x20, 0x00}, 402 {0xd002, 0x1f, 0x19}, 403 {0xd003, 0x1f, 0x1a}, 404 {0xd004, 0x1f, 0x19}, 405 {0xd005, 0x1f, 0x1a}, 406 {0xd00e, 0x1f, 0x10}, 407 {0xd00f, 0x07, 0x04}, 408 {0xd00f, 0x38, 0x28}, 409 {0xd010, 0x07, 0x04}, 410 {0xd010, 0x38, 0x28}, 411 {0xd016, 0xf0, 0x30}, 412 {0xd01f, 0x3f, 0x0a}, 413 {0xd020, 0x3f, 0x0a}, 414 {0x9bda, 0xff, 0x00}, 415 {0x9be3, 0xff, 0x00}, 416 {0x9bfc, 0xff, 0x0f}, 417 {0x9bf6, 0xff, 0x01}, 418 {0x9bbe, 0x01, 0x01}, 419 {0xd015, 0xff, 0x33}, 420 {0xd016, 0x01, 0x00}, 421 {0xd044, 0xff, 0x40}, 422 {0xd045, 0x01, 0x00}, 423 {0xd008, 0xff, 0x0f}, 424 {0xd009, 0x03, 0x02}, 425 {0xd006, 0xff, 0x6c}, 426 {0xd007, 0x03, 0x00}, 427 {0xd00c, 0xff, 0x3d}, 428 {0xd00d, 0x03, 0x00}, 429 {0xd00a, 0xff, 0x45}, 430 {0xd00b, 0x03, 0x01}, 431 {0x9bc7, 0xff, 0x07}, 432 {0x9bc8, 0xff, 0x52}, 433 {0x9bc3, 0xff, 0x0f}, 434 {0x9bc4, 0xff, 0x02}, 435 {0x9bc5, 0xff, 0x3d}, 436 {0x9bc6, 0xff, 0x00}, 437 {0x9bba, 0xff, 0xa2}, 438 {0x9bc9, 0xff, 0xa0}, 439 {0xd011, 0xff, 0x56}, 440 {0xd012, 0x03, 0x00}, 441 {0xd013, 0xff, 0x50}, 442 {0xd014, 0x03, 0x00}, 443 {0xd040, 0xff, 0x56}, 444 {0xd041, 0x03, 0x00}, 445 {0xd042, 0xff, 0x50}, 446 {0xd043, 0x03, 0x00}, 447 {0xd045, 0x02, 0x00}, 448 {0x9bcf, 0xff, 0x01}, 449 {0xd045, 0x04, 0x04}, 450 {0xd04f, 0xff, 0x9a}, 451 {0xd050, 0x01, 0x01}, 452 {0xd051, 0xff, 0x5a}, 453 {0xd052, 0x01, 0x01}, 454 {0xd053, 0xff, 0x50}, 455 {0xd054, 0xff, 0x46}, 456 {0x9bd7, 0xff, 0x0a}, 457 {0x9bd8, 0xff, 0x14}, 458 {0x9bd9, 0xff, 0x08}, 459 }; 460 461 /* 462 * MaxLinear MXL5005S & MXL5007T tuner init 463 * AF9013_TUNER_MXL5005D 0x0d 464 * AF9013_TUNER_MXL5005R 0x1e 465 * AF9013_TUNER_MXL5007T 0xb1 466 */ 467 static const struct af9013_reg_mask_val tuner_init_tab_mxl5005[] = { 468 {0x9bd5, 0xff, 0x01}, 469 {0x9bd6, 0xff, 0x07}, 470 {0xd1a0, 0x02, 0x02}, 471 {0xd000, 0x01, 0x01}, 472 {0xd000, 0x02, 0x00}, 473 {0xd001, 0x02, 0x02}, 474 {0xd001, 0x01, 0x00}, 475 {0xd001, 0x20, 0x00}, 476 {0xd002, 0x1f, 0x19}, 477 {0xd003, 0x1f, 0x1a}, 478 {0xd004, 0x1f, 0x19}, 479 {0xd005, 0x1f, 0x1a}, 480 {0xd00e, 0x1f, 0x10}, 481 {0xd00f, 0x07, 0x04}, 482 {0xd00f, 0x38, 0x28}, 483 {0xd010, 0x07, 0x04}, 484 {0xd010, 0x38, 0x28}, 485 {0xd016, 0xf0, 0x30}, 486 {0xd01f, 0x3f, 0x0a}, 487 {0xd020, 0x3f, 0x0a}, 488 {0x9bda, 0xff, 0x01}, 489 {0x9be3, 0xff, 0x01}, 490 {0x9bbe, 0x01, 0x01}, 491 {0x9bcc, 0x01, 0x01}, 492 {0x9bb9, 0xff, 0x00}, 493 {0x9bcd, 0xff, 0x28}, 494 {0x9bff, 0xff, 0x24}, 495 {0xd015, 0xff, 0x40}, 496 {0xd016, 0x01, 0x00}, 497 {0xd044, 0xff, 0x40}, 498 {0xd045, 0x01, 0x00}, 499 {0xd008, 0xff, 0x0f}, 500 {0xd009, 0x03, 0x02}, 501 {0xd006, 0xff, 0x73}, 502 {0xd007, 0x03, 0x01}, 503 {0xd00c, 0xff, 0xfa}, 504 {0xd00d, 0x03, 0x01}, 505 {0xd00a, 0xff, 0xff}, 506 {0xd00b, 0x03, 0x01}, 507 {0x9bc7, 0xff, 0x23}, 508 {0x9bc8, 0xff, 0x55}, 509 {0x9bc3, 0xff, 0x01}, 510 {0x9bc4, 0xff, 0x02}, 511 {0x9bc5, 0xff, 0xfa}, 512 {0x9bc6, 0xff, 0x01}, 513 {0x9bba, 0xff, 0xff}, 514 {0x9bc9, 0xff, 0xff}, 515 {0x9bd3, 0xff, 0x95}, 516 {0xd011, 0xff, 0x70}, 517 {0xd012, 0x03, 0x01}, 518 {0xd013, 0xff, 0xfb}, 519 {0xd014, 0x03, 0x01}, 520 {0xd040, 0xff, 0x70}, 521 {0xd041, 0x03, 0x01}, 522 {0xd042, 0xff, 0xfb}, 523 {0xd043, 0x03, 0x01}, 524 {0xd045, 0x02, 0x00}, 525 {0x9bcf, 0x01, 0x01}, 526 {0xd045, 0x04, 0x04}, 527 {0xd04f, 0xff, 0x9a}, 528 {0xd050, 0x01, 0x01}, 529 {0xd051, 0xff, 0x5a}, 530 {0xd052, 0x01, 0x01}, 531 {0xd053, 0xff, 0x50}, 532 {0xd054, 0xff, 0x46}, 533 {0x9bd7, 0xff, 0x0a}, 534 {0x9bd8, 0xff, 0x14}, 535 {0x9bd9, 0xff, 0x08}, 536 {0x9bd0, 0xff, 0x93}, 537 {0x9be4, 0xff, 0xfe}, 538 {0x9bbd, 0xff, 0x63}, 539 {0x9be2, 0xff, 0xfe}, 540 {0x9bee, 0x01, 0x01}, 541 }; 542 543 /* 544 * Quantek QT1010 tuner init 545 * AF9013_TUNER_QT1010 0x86 546 * AF9013_TUNER_QT1010A 0xa2 547 */ 548 static const struct af9013_reg_mask_val tuner_init_tab_qt1010[] = { 549 {0x9bd5, 0xff, 0x01}, 550 {0x9bd6, 0xff, 0x09}, 551 {0xd1a0, 0x02, 0x02}, 552 {0xd000, 0x01, 0x01}, 553 {0xd000, 0x02, 0x00}, 554 {0xd001, 0x02, 0x02}, 555 {0xd001, 0x01, 0x00}, 556 {0xd001, 0x20, 0x00}, 557 {0xd002, 0x1f, 0x19}, 558 {0xd003, 0x1f, 0x1a}, 559 {0xd004, 0x1f, 0x19}, 560 {0xd005, 0x1f, 0x1a}, 561 {0xd00e, 0x1f, 0x10}, 562 {0xd00f, 0x07, 0x04}, 563 {0xd00f, 0x38, 0x28}, 564 {0xd010, 0x07, 0x04}, 565 {0xd010, 0x38, 0x28}, 566 {0xd016, 0xf0, 0x30}, 567 {0xd01f, 0x3f, 0x0a}, 568 {0xd020, 0x3f, 0x0a}, 569 {0x9bda, 0xff, 0x01}, 570 {0x9be3, 0xff, 0x01}, 571 {0xd015, 0xff, 0x46}, 572 {0xd016, 0x01, 0x00}, 573 {0xd044, 0xff, 0x46}, 574 {0xd045, 0x01, 0x00}, 575 {0x9bbe, 0x01, 0x01}, 576 {0x9bcc, 0x01, 0x01}, 577 {0x9bb9, 0xff, 0x00}, 578 {0x9bcd, 0xff, 0x28}, 579 {0x9bff, 0xff, 0x20}, 580 {0xd008, 0xff, 0x0f}, 581 {0xd009, 0x03, 0x02}, 582 {0xd006, 0xff, 0x99}, 583 {0xd007, 0x03, 0x01}, 584 {0xd00c, 0xff, 0x0f}, 585 {0xd00d, 0x03, 0x02}, 586 {0xd00a, 0xff, 0x50}, 587 {0xd00b, 0x03, 0x01}, 588 {0x9bc7, 0xff, 0x00}, 589 {0x9bc8, 0xff, 0x00}, 590 {0x9bc3, 0xff, 0x0f}, 591 {0x9bc4, 0xff, 0x02}, 592 {0x9bc5, 0xff, 0x0f}, 593 {0x9bc6, 0xff, 0x02}, 594 {0x9bba, 0xff, 0xc5}, 595 {0x9bc9, 0xff, 0xff}, 596 {0xd011, 0xff, 0x58}, 597 {0xd012, 0x03, 0x02}, 598 {0xd013, 0xff, 0x89}, 599 {0xd014, 0x03, 0x01}, 600 {0xd040, 0xff, 0x58}, 601 {0xd041, 0x03, 0x02}, 602 {0xd042, 0xff, 0x89}, 603 {0xd043, 0x03, 0x01}, 604 {0xd045, 0x02, 0x00}, 605 {0x9bcf, 0x01, 0x01}, 606 {0xd045, 0x04, 0x04}, 607 {0xd04f, 0xff, 0x9a}, 608 {0xd050, 0x01, 0x01}, 609 {0xd051, 0xff, 0x5a}, 610 {0xd052, 0x01, 0x01}, 611 {0xd053, 0xff, 0x50}, 612 {0xd054, 0xff, 0x46}, 613 {0x9bd7, 0xff, 0x0a}, 614 {0x9bd8, 0xff, 0x14}, 615 {0x9bd9, 0xff, 0x08}, 616 {0x9bd0, 0xff, 0xcd}, 617 {0x9be4, 0xff, 0xbb}, 618 {0x9bbd, 0xff, 0x93}, 619 {0x9be2, 0xff, 0x80}, 620 {0x9bee, 0x01, 0x01}, 621 }; 622 623 /* 624 * Freescale MC44S803 tuner init 625 * AF9013_TUNER_MC44S803 0x85 626 */ 627 static const struct af9013_reg_mask_val tuner_init_tab_mc44s803[] = { 628 {0x9bd5, 0xff, 0x01}, 629 {0x9bd6, 0xff, 0x06}, 630 {0xd1a0, 0x02, 0x02}, 631 {0xd000, 0x01, 0x01}, 632 {0xd000, 0x02, 0x00}, 633 {0xd001, 0x02, 0x02}, 634 {0xd001, 0x01, 0x00}, 635 {0xd001, 0x20, 0x00}, 636 {0xd002, 0x1f, 0x19}, 637 {0xd003, 0x1f, 0x1a}, 638 {0xd004, 0x1f, 0x19}, 639 {0xd005, 0x1f, 0x1a}, 640 {0xd00e, 0x1f, 0x10}, 641 {0xd00f, 0x07, 0x04}, 642 {0xd00f, 0x38, 0x28}, 643 {0xd010, 0x07, 0x04}, 644 {0xd010, 0x38, 0x28}, 645 {0xd016, 0xf0, 0x30}, 646 {0xd01f, 0x3f, 0x0a}, 647 {0xd020, 0x3f, 0x0a}, 648 {0x9bda, 0xff, 0x00}, 649 {0x9be3, 0xff, 0x00}, 650 {0x9bf6, 0xff, 0x01}, 651 {0x9bf8, 0xff, 0x02}, 652 {0x9bf9, 0xff, 0x02}, 653 {0x9bfc, 0xff, 0x1f}, 654 {0x9bbe, 0x01, 0x01}, 655 {0x9bcc, 0x01, 0x01}, 656 {0x9bb9, 0xff, 0x00}, 657 {0x9bcd, 0xff, 0x24}, 658 {0x9bff, 0xff, 0x24}, 659 {0xd015, 0xff, 0x46}, 660 {0xd016, 0x01, 0x00}, 661 {0xd044, 0xff, 0x46}, 662 {0xd045, 0x01, 0x00}, 663 {0xd008, 0xff, 0x01}, 664 {0xd009, 0x03, 0x02}, 665 {0xd006, 0xff, 0x7b}, 666 {0xd007, 0x03, 0x00}, 667 {0xd00c, 0xff, 0x7c}, 668 {0xd00d, 0x03, 0x02}, 669 {0xd00a, 0xff, 0xfe}, 670 {0xd00b, 0x03, 0x01}, 671 {0x9bc7, 0xff, 0x08}, 672 {0x9bc8, 0xff, 0x9a}, 673 {0x9bc3, 0xff, 0x01}, 674 {0x9bc4, 0xff, 0x02}, 675 {0x9bc5, 0xff, 0x7c}, 676 {0x9bc6, 0xff, 0x02}, 677 {0x9bba, 0xff, 0xfc}, 678 {0x9bc9, 0xff, 0xaa}, 679 {0xd011, 0xff, 0x6b}, 680 {0xd012, 0x03, 0x00}, 681 {0xd013, 0xff, 0x88}, 682 {0xd014, 0x03, 0x02}, 683 {0xd040, 0xff, 0x6b}, 684 {0xd041, 0x03, 0x00}, 685 {0xd042, 0xff, 0x7c}, 686 {0xd043, 0x03, 0x02}, 687 {0xd045, 0x02, 0x00}, 688 {0x9bcf, 0x01, 0x01}, 689 {0xd045, 0x04, 0x04}, 690 {0xd04f, 0xff, 0x9a}, 691 {0xd050, 0x01, 0x01}, 692 {0xd051, 0xff, 0x5a}, 693 {0xd052, 0x01, 0x01}, 694 {0xd053, 0xff, 0x50}, 695 {0xd054, 0xff, 0x46}, 696 {0x9bd7, 0xff, 0x0a}, 697 {0x9bd8, 0xff, 0x14}, 698 {0x9bd9, 0xff, 0x08}, 699 {0x9bd0, 0xff, 0x9e}, 700 {0x9be4, 0xff, 0xff}, 701 {0x9bbd, 0xff, 0x9e}, 702 {0x9be2, 0xff, 0x25}, 703 {0x9bee, 0x01, 0x01}, 704 {0xd73b, 0x08, 0x00}, 705 }; 706 707 /* 708 * Unknown, probably for tin can tuner, tuner init 709 * AF9013_TUNER_UNKNOWN 0x8c 710 */ 711 static const struct af9013_reg_mask_val tuner_init_tab_unknown[] = { 712 {0x9bd5, 0xff, 0x01}, 713 {0x9bd6, 0xff, 0x02}, 714 {0xd1a0, 0x02, 0x02}, 715 {0xd000, 0x01, 0x01}, 716 {0xd000, 0x02, 0x00}, 717 {0xd001, 0x02, 0x02}, 718 {0xd001, 0x01, 0x00}, 719 {0xd001, 0x20, 0x00}, 720 {0xd002, 0x1f, 0x19}, 721 {0xd003, 0x1f, 0x1a}, 722 {0xd004, 0x1f, 0x19}, 723 {0xd005, 0x1f, 0x1a}, 724 {0xd00e, 0x1f, 0x10}, 725 {0xd00f, 0x07, 0x04}, 726 {0xd00f, 0x38, 0x28}, 727 {0xd010, 0x07, 0x04}, 728 {0xd010, 0x38, 0x28}, 729 {0xd016, 0xf0, 0x30}, 730 {0xd01f, 0x3f, 0x0a}, 731 {0xd020, 0x3f, 0x0a}, 732 {0x9bda, 0xff, 0x01}, 733 {0x9be3, 0xff, 0x01}, 734 {0xd1a0, 0x02, 0x00}, 735 {0x9bbe, 0x01, 0x01}, 736 {0x9bcc, 0x01, 0x01}, 737 {0x9bb9, 0xff, 0x00}, 738 {0x9bcd, 0xff, 0x18}, 739 {0x9bff, 0xff, 0x2c}, 740 {0xd015, 0xff, 0x46}, 741 {0xd016, 0x01, 0x00}, 742 {0xd044, 0xff, 0x46}, 743 {0xd045, 0x01, 0x00}, 744 {0xd008, 0xff, 0xdf}, 745 {0xd009, 0x03, 0x02}, 746 {0xd006, 0xff, 0x44}, 747 {0xd007, 0x03, 0x01}, 748 {0xd00c, 0xff, 0x00}, 749 {0xd00d, 0x03, 0x02}, 750 {0xd00a, 0xff, 0xf6}, 751 {0xd00b, 0x03, 0x01}, 752 {0x9bba, 0xff, 0xf9}, 753 {0x9bc8, 0xff, 0xaa}, 754 {0x9bc3, 0xff, 0xdf}, 755 {0x9bc4, 0xff, 0x02}, 756 {0x9bc5, 0xff, 0x00}, 757 {0x9bc6, 0xff, 0x02}, 758 {0x9bc9, 0xff, 0xf0}, 759 {0xd011, 0xff, 0x3c}, 760 {0xd012, 0x03, 0x01}, 761 {0xd013, 0xff, 0xf7}, 762 {0xd014, 0x03, 0x02}, 763 {0xd040, 0xff, 0x0b}, 764 {0xd041, 0x03, 0x02}, 765 {0xd042, 0xff, 0x4d}, 766 {0xd043, 0x03, 0x00}, 767 {0xd045, 0x02, 0x00}, 768 {0x9bcf, 0x01, 0x01}, 769 {0xd045, 0x04, 0x04}, 770 {0xd04f, 0xff, 0x9a}, 771 {0xd050, 0x01, 0x01}, 772 {0xd051, 0xff, 0x5a}, 773 {0xd052, 0x01, 0x01}, 774 {0xd053, 0xff, 0x50}, 775 {0xd054, 0xff, 0x46}, 776 {0x9bd7, 0xff, 0x0a}, 777 {0x9bd8, 0xff, 0x14}, 778 {0x9bd9, 0xff, 0x08}, 779 }; 780 781 /* 782 * NXP TDA18271 & TDA18218 tuner init 783 * AF9013_TUNER_TDA18271 0x9c 784 * AF9013_TUNER_TDA18218 0xb3 785 */ 786 static const struct af9013_reg_mask_val tuner_init_tab_tda18271[] = { 787 {0x9bd5, 0xff, 0x01}, 788 {0x9bd6, 0xff, 0x04}, 789 {0xd1a0, 0x02, 0x02}, 790 {0xd000, 0x01, 0x01}, 791 {0xd000, 0x02, 0x00}, 792 {0xd001, 0x02, 0x02}, 793 {0xd001, 0x01, 0x00}, 794 {0xd001, 0x20, 0x00}, 795 {0xd002, 0x1f, 0x19}, 796 {0xd003, 0x1f, 0x1a}, 797 {0xd004, 0x1f, 0x19}, 798 {0xd005, 0x1f, 0x1a}, 799 {0xd00e, 0x1f, 0x10}, 800 {0xd00f, 0x07, 0x04}, 801 {0xd00f, 0x38, 0x28}, 802 {0xd010, 0x07, 0x04}, 803 {0xd010, 0x38, 0x28}, 804 {0xd016, 0xf0, 0x30}, 805 {0xd01f, 0x3f, 0x0a}, 806 {0xd020, 0x3f, 0x0a}, 807 {0x9bda, 0xff, 0x01}, 808 {0x9be3, 0xff, 0x01}, 809 {0xd1a0, 0x02, 0x00}, 810 {0x9bbe, 0x01, 0x01}, 811 {0x9bcc, 0x01, 0x01}, 812 {0x9bb9, 0xff, 0x00}, 813 {0x9bcd, 0xff, 0x18}, 814 {0x9bff, 0xff, 0x2c}, 815 {0xd015, 0xff, 0x46}, 816 {0xd016, 0x01, 0x00}, 817 {0xd044, 0xff, 0x46}, 818 {0xd045, 0x01, 0x00}, 819 {0xd008, 0xff, 0xdf}, 820 {0xd009, 0x03, 0x02}, 821 {0xd006, 0xff, 0x44}, 822 {0xd007, 0x03, 0x01}, 823 {0xd00c, 0xff, 0x00}, 824 {0xd00d, 0x03, 0x02}, 825 {0xd00a, 0xff, 0xf6}, 826 {0xd00b, 0x03, 0x01}, 827 {0x9bba, 0xff, 0xf9}, 828 {0x9bc8, 0xff, 0xaa}, 829 {0x9bc3, 0xff, 0xdf}, 830 {0x9bc4, 0xff, 0x02}, 831 {0x9bc5, 0xff, 0x00}, 832 {0x9bc6, 0xff, 0x02}, 833 {0x9bc9, 0xff, 0xf0}, 834 {0xd011, 0xff, 0x3c}, 835 {0xd012, 0x03, 0x01}, 836 {0xd013, 0xff, 0xf7}, 837 {0xd014, 0x03, 0x02}, 838 {0xd040, 0xff, 0x0b}, 839 {0xd041, 0x03, 0x02}, 840 {0xd042, 0xff, 0x4d}, 841 {0xd043, 0x03, 0x00}, 842 {0xd045, 0x02, 0x00}, 843 {0x9bcf, 0x01, 0x01}, 844 {0xd045, 0x04, 0x04}, 845 {0xd04f, 0xff, 0x9a}, 846 {0xd050, 0x01, 0x01}, 847 {0xd051, 0xff, 0x5a}, 848 {0xd052, 0x01, 0x01}, 849 {0xd053, 0xff, 0x50}, 850 {0xd054, 0xff, 0x46}, 851 {0x9bd7, 0xff, 0x0a}, 852 {0x9bd8, 0xff, 0x14}, 853 {0x9bd9, 0xff, 0x08}, 854 {0x9bd0, 0xff, 0xa8}, 855 {0x9be4, 0xff, 0x7f}, 856 {0x9bbd, 0xff, 0xa8}, 857 {0x9be2, 0xff, 0x20}, 858 {0x9bee, 0x01, 0x01}, 859 }; 860 861 #endif /* AF9013_PRIV_H */ 862