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