852 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Afatech AF9013 demodulator driver4 *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_H12#define AF9013_PRIV_H13 14#include <media/dvb_frontend.h>15#include <linux/int_log.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 24struct af9013_reg_mask_val {25 u16 reg;26 u8 mask;27 u8 val;28};29 30struct af9013_coeff {31 u32 clock;32 u32 bandwidth_hz;33 u8 val[24];34};35 36/* pre-calculated coeff lookup table */37static 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 init82 */83static 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 init165 * AF9013_TUNER_ENV77H11D5 0x81166 */167static 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 init233 * AF9013_TUNER_MT2060 0x82234 */235static 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 init312 * AF9013_TUNER_MT2060_2 0x93313 */314static 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 init381 * AF9013_TUNER_MXL5003D 0x03382 */383static 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 init453 * AF9013_TUNER_MXL5005D 0x0d454 * AF9013_TUNER_MXL5005R 0x1e455 * AF9013_TUNER_MXL5007T 0xb1456 */457static 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 init535 * AF9013_TUNER_QT1010 0x86536 * AF9013_TUNER_QT1010A 0xa2537 */538static 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 init615 * AF9013_TUNER_MC44S803 0x85616 */617static 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 init699 * AF9013_TUNER_UNKNOWN 0x8c700 */701static 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 init773 * AF9013_TUNER_TDA18271 0x9c774 * AF9013_TUNER_TDA18218 0xb3775 */776static 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