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