Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Afatech AF9013 demodulator driver
0004  *
0005  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
0006  * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
0007  *
0008  * Thanks to Afatech who kindly provided information.
0009  */
0010 
0011 #ifndef AF9013_PRIV_H
0012 #define AF9013_PRIV_H
0013 
0014 #include <media/dvb_frontend.h>
0015 #include <media/dvb_math.h>
0016 #include "af9013.h"
0017 #include <linux/firmware.h>
0018 #include <linux/i2c-mux.h>
0019 #include <linux/math64.h>
0020 #include <linux/regmap.h>
0021 
0022 #define AF9013_FIRMWARE "dvb-fe-af9013.fw"
0023 
0024 struct af9013_reg_mask_val {
0025     u16 reg;
0026     u8  mask;
0027     u8  val;
0028 };
0029 
0030 struct af9013_coeff {
0031     u32 clock;
0032     u32 bandwidth_hz;
0033     u8 val[24];
0034 };
0035 
0036 /* pre-calculated coeff lookup table */
0037 static const struct af9013_coeff coeff_lut[] = {
0038     /* 28.800 MHz */
0039     { 28800000, 8000000, { 0x02, 0x8a, 0x28, 0xa3, 0x05, 0x14,
0040         0x51, 0x11, 0x00, 0xa2, 0x8f, 0x3d, 0x00, 0xa2, 0x8a,
0041         0x29, 0x00, 0xa2, 0x85, 0x14, 0x01, 0x45, 0x14, 0x14 } },
0042     { 28800000, 7000000, { 0x02, 0x38, 0xe3, 0x8e, 0x04, 0x71,
0043         0xc7, 0x07, 0x00, 0x8e, 0x3d, 0x55, 0x00, 0x8e, 0x38,
0044         0xe4, 0x00, 0x8e, 0x34, 0x72, 0x01, 0x1c, 0x71, 0x32 } },
0045     { 28800000, 6000000, { 0x01, 0xe7, 0x9e, 0x7a, 0x03, 0xcf,
0046         0x3c, 0x3d, 0x00, 0x79, 0xeb, 0x6e, 0x00, 0x79, 0xe7,
0047         0x9e, 0x00, 0x79, 0xe3, 0xcf, 0x00, 0xf3, 0xcf, 0x0f } },
0048     /* 20.480 MHz */
0049     { 20480000, 8000000, { 0x03, 0x92, 0x49, 0x26, 0x07, 0x24,
0050         0x92, 0x13, 0x00, 0xe4, 0x99, 0x6e, 0x00, 0xe4, 0x92,
0051         0x49, 0x00, 0xe4, 0x8b, 0x25, 0x01, 0xc9, 0x24, 0x25 } },
0052     { 20480000, 7000000, { 0x03, 0x20, 0x00, 0x01, 0x06, 0x40,
0053         0x00, 0x00, 0x00, 0xc8, 0x06, 0x40, 0x00, 0xc8, 0x00,
0054         0x00, 0x00, 0xc7, 0xf9, 0xc0, 0x01, 0x90, 0x00, 0x00 } },
0055     { 20480000, 6000000, { 0x02, 0xad, 0xb6, 0xdc, 0x05, 0x5b,
0056         0x6d, 0x2e, 0x00, 0xab, 0x73, 0x13, 0x00, 0xab, 0x6d,
0057         0xb7, 0x00, 0xab, 0x68, 0x5c, 0x01, 0x56, 0xdb, 0x1c } },
0058     /* 28.000 MHz */
0059     { 28000000, 8000000, { 0x02, 0x9c, 0xbc, 0x15, 0x05, 0x39,
0060         0x78, 0x0a, 0x00, 0xa7, 0x34, 0x3f, 0x00, 0xa7, 0x2f,
0061         0x05, 0x00, 0xa7, 0x29, 0xcc, 0x01, 0x4e, 0x5e, 0x03 } },
0062     { 28000000, 7000000, { 0x02, 0x49, 0x24, 0x92, 0x04, 0x92,
0063         0x49, 0x09, 0x00, 0x92, 0x4d, 0xb7, 0x00, 0x92, 0x49,
0064         0x25, 0x00, 0x92, 0x44, 0x92, 0x01, 0x24, 0x92, 0x12 } },
0065     { 28000000, 6000000, { 0x01, 0xf5, 0x8d, 0x10, 0x03, 0xeb,
0066         0x1a, 0x08, 0x00, 0x7d, 0x67, 0x2f, 0x00, 0x7d, 0x63,
0067         0x44, 0x00, 0x7d, 0x5f, 0x59, 0x00, 0xfa, 0xc6, 0x22 } },
0068     /* 25.000 MHz */
0069     { 25000000, 8000000, { 0x02, 0xec, 0xfb, 0x9d, 0x05, 0xd9,
0070         0xf7, 0x0e, 0x00, 0xbb, 0x44, 0xc1, 0x00, 0xbb, 0x3e,
0071         0xe7, 0x00, 0xbb, 0x39, 0x0d, 0x01, 0x76, 0x7d, 0x34 } },
0072     { 25000000, 7000000, { 0x02, 0x8f, 0x5c, 0x29, 0x05, 0x1e,
0073         0xb8, 0x14, 0x00, 0xa3, 0xdc, 0x29, 0x00, 0xa3, 0xd7,
0074         0x0a, 0x00, 0xa3, 0xd1, 0xec, 0x01, 0x47, 0xae, 0x05 } },
0075     { 25000000, 6000000, { 0x02, 0x31, 0xbc, 0xb5, 0x04, 0x63,
0076         0x79, 0x1b, 0x00, 0x8c, 0x73, 0x91, 0x00, 0x8c, 0x6f,
0077         0x2d, 0x00, 0x8c, 0x6a, 0xca, 0x01, 0x18, 0xde, 0x17 } },
0078 };
0079 
0080 /*
0081  * Afatech AF9013 demod init
0082  */
0083 static const struct af9013_reg_mask_val demod_init_tab[] = {
0084     {0xd73a, 0xff, 0xa1},
0085     {0xd73b, 0xff, 0x1f},
0086     {0xd73c, 0xf0, 0xa0},
0087     {0xd732, 0x08, 0x00},
0088     {0xd731, 0x30, 0x30},
0089     {0xd73d, 0x80, 0x80},
0090     {0xd740, 0x01, 0x00},
0091     {0xd740, 0x02, 0x00},
0092     {0xd740, 0x04, 0x00},
0093     {0xd740, 0x08, 0x08},
0094     {0xd3c1, 0x10, 0x10},
0095     {0x9124, 0xff, 0x58},
0096     {0x9125, 0x03, 0x02},
0097     {0xd3a2, 0xff, 0x00},
0098     {0xd3a3, 0xff, 0x04},
0099     {0xd305, 0xff, 0x32},
0100     {0xd306, 0xff, 0x10},
0101     {0xd304, 0xff, 0x04},
0102     {0x9112, 0x01, 0x01},
0103     {0x911d, 0x01, 0x01},
0104     {0x911a, 0x01, 0x01},
0105     {0x911b, 0x01, 0x01},
0106     {0x9bce, 0x0f, 0x02},
0107     {0x9116, 0x01, 0x01},
0108     {0x9122, 0xff, 0xd0},
0109     {0xd2e0, 0xff, 0xd0},
0110     {0xd2e9, 0x0f, 0x0d},
0111     {0xd38c, 0xff, 0xfc},
0112     {0xd38d, 0xff, 0x00},
0113     {0xd38e, 0xff, 0x7e},
0114     {0xd38f, 0xff, 0x00},
0115     {0xd390, 0xff, 0x2f},
0116     {0xd145, 0x10, 0x10},
0117     {0xd1a9, 0x10, 0x10},
0118     {0xd158, 0xe0, 0x20},
0119     {0xd159, 0x3f, 0x06},
0120     {0xd167, 0xff, 0x00},
0121     {0xd168, 0x0f, 0x07},
0122     {0xd1c3, 0xe0, 0x00},
0123     {0xd1c4, 0x3f, 0x00},
0124     {0xd1c5, 0x7f, 0x10},
0125     {0xd1c6, 0x07, 0x02},
0126     {0xd080, 0x7c, 0x0c},
0127     {0xd081, 0xf0, 0x90},
0128     {0xd098, 0xf0, 0xf0},
0129     {0xd098, 0x0f, 0x03},
0130     {0xdbc0, 0x10, 0x10},
0131     {0xdbc7, 0xff, 0x08},
0132     {0xdbc8, 0xf0, 0x00},
0133     {0xdbc9, 0x1f, 0x01},
0134     {0xd280, 0xff, 0xe0},
0135     {0xd281, 0xff, 0xff},
0136     {0xd282, 0xff, 0xff},
0137     {0xd283, 0xff, 0xc3},
0138     {0xd284, 0xff, 0xff},
0139     {0xd285, 0x0f, 0x01},
0140     {0xd0f0, 0x7f, 0x1a},
0141     {0xd0f1, 0x10, 0x10},
0142     {0xd0f2, 0xff, 0x0c},
0143     {0xd101, 0xe0, 0xc0},
0144     {0xd103, 0x0f, 0x08},
0145     {0xd0f8, 0x7f, 0x20},
0146     {0xd111, 0x20, 0x00},
0147     {0xd111, 0x40, 0x00},
0148     {0x910b, 0xff, 0x0a},
0149     {0x9115, 0xff, 0x02},
0150     {0x910c, 0xff, 0x02},
0151     {0x910d, 0xff, 0x08},
0152     {0x910e, 0xff, 0x0a},
0153     {0x9bf6, 0xff, 0x06},
0154     {0x9bf8, 0xff, 0x02},
0155     {0x9bf7, 0xff, 0x05},
0156     {0x9bf9, 0xff, 0x0f},
0157     {0x9bfc, 0xff, 0x13},
0158     {0x9bd3, 0xff, 0xff},
0159     {0x9bbe, 0x01, 0x01},
0160     {0x9bcc, 0x01, 0x01},
0161 };
0162 
0163 /*
0164  * Panasonic ENV77H11D5 tuner init
0165  * AF9013_TUNER_ENV77H11D5    0x81
0166  */
0167 static const struct af9013_reg_mask_val tuner_init_tab_env77h11d5[] = {
0168     {0x9bd5, 0xff, 0x01},
0169     {0x9bd6, 0xff, 0x03},
0170     {0x9bbe, 0xff, 0x01},
0171     {0xd1a0, 0x02, 0x02},
0172     {0xd000, 0x01, 0x01},
0173     {0xd000, 0x02, 0x00},
0174     {0xd001, 0x02, 0x02},
0175     {0xd001, 0x01, 0x00},
0176     {0xd001, 0x20, 0x00},
0177     {0xd002, 0x1f, 0x19},
0178     {0xd003, 0x1f, 0x1a},
0179     {0xd004, 0x1f, 0x19},
0180     {0xd005, 0x1f, 0x1a},
0181     {0xd00e, 0x1f, 0x10},
0182     {0xd00f, 0x07, 0x04},
0183     {0xd00f, 0x38, 0x28},
0184     {0xd010, 0x07, 0x04},
0185     {0xd010, 0x38, 0x28},
0186     {0xd016, 0xf0, 0x30},
0187     {0xd01f, 0x3f, 0x0a},
0188     {0xd020, 0x3f, 0x0a},
0189     {0x9bda, 0xff, 0x00},
0190     {0x9be3, 0xff, 0x00},
0191     {0xd015, 0xff, 0x50},
0192     {0xd016, 0x01, 0x00},
0193     {0xd044, 0xff, 0x46},
0194     {0xd045, 0x01, 0x00},
0195     {0xd008, 0xff, 0xdf},
0196     {0xd009, 0x03, 0x02},
0197     {0xd006, 0xff, 0x44},
0198     {0xd007, 0x03, 0x01},
0199     {0xd00c, 0xff, 0xeb},
0200     {0xd00d, 0x03, 0x02},
0201     {0xd00a, 0xff, 0xf4},
0202     {0xd00b, 0x03, 0x01},
0203     {0x9bba, 0xff, 0xf9},
0204     {0x9bc3, 0xff, 0xdf},
0205     {0x9bc4, 0xff, 0x02},
0206     {0x9bc5, 0xff, 0xeb},
0207     {0x9bc6, 0xff, 0x02},
0208     {0x9bc9, 0xff, 0x52},
0209     {0xd011, 0xff, 0x3c},
0210     {0xd012, 0x03, 0x01},
0211     {0xd013, 0xff, 0xf7},
0212     {0xd014, 0x03, 0x02},
0213     {0xd040, 0xff, 0x0b},
0214     {0xd041, 0x03, 0x02},
0215     {0xd042, 0xff, 0x4d},
0216     {0xd043, 0x03, 0x00},
0217     {0xd045, 0x02, 0x00},
0218     {0x9bcf, 0x01, 0x01},
0219     {0xd045, 0x04, 0x04},
0220     {0xd04f, 0xff, 0x9a},
0221     {0xd050, 0x01, 0x01},
0222     {0xd051, 0xff, 0x5a},
0223     {0xd052, 0x01, 0x01},
0224     {0xd053, 0xff, 0x50},
0225     {0xd054, 0xff, 0x46},
0226     {0x9bd7, 0xff, 0x0a},
0227     {0x9bd8, 0xff, 0x14},
0228     {0x9bd9, 0xff, 0x08},
0229 };
0230 
0231 /*
0232  * Microtune MT2060 tuner init
0233  * AF9013_TUNER_MT2060        0x82
0234  */
0235 static const struct af9013_reg_mask_val tuner_init_tab_mt2060[] = {
0236     {0x9bd5, 0xff, 0x01},
0237     {0x9bd6, 0xff, 0x07},
0238     {0xd1a0, 0x02, 0x02},
0239     {0xd000, 0x01, 0x01},
0240     {0xd000, 0x02, 0x00},
0241     {0xd001, 0x02, 0x02},
0242     {0xd001, 0x01, 0x00},
0243     {0xd001, 0x20, 0x00},
0244     {0xd002, 0x1f, 0x19},
0245     {0xd003, 0x1f, 0x1a},
0246     {0xd004, 0x1f, 0x19},
0247     {0xd005, 0x1f, 0x1a},
0248     {0xd00e, 0x1f, 0x10},
0249     {0xd00f, 0x07, 0x04},
0250     {0xd00f, 0x38, 0x28},
0251     {0xd010, 0x07, 0x04},
0252     {0xd010, 0x38, 0x28},
0253     {0xd016, 0xf0, 0x30},
0254     {0xd01f, 0x3f, 0x0a},
0255     {0xd020, 0x3f, 0x0a},
0256     {0x9bda, 0xff, 0x00},
0257     {0x9be3, 0xff, 0x00},
0258     {0x9bbe, 0x01, 0x00},
0259     {0x9bcc, 0x01, 0x00},
0260     {0x9bb9, 0xff, 0x75},
0261     {0x9bcd, 0xff, 0x24},
0262     {0x9bff, 0xff, 0x30},
0263     {0xd015, 0xff, 0x46},
0264     {0xd016, 0x01, 0x00},
0265     {0xd044, 0xff, 0x46},
0266     {0xd045, 0x01, 0x00},
0267     {0xd008, 0xff, 0x0f},
0268     {0xd009, 0x03, 0x02},
0269     {0xd006, 0xff, 0x32},
0270     {0xd007, 0x03, 0x01},
0271     {0xd00c, 0xff, 0x36},
0272     {0xd00d, 0x03, 0x03},
0273     {0xd00a, 0xff, 0x35},
0274     {0xd00b, 0x03, 0x01},
0275     {0x9bc7, 0xff, 0x07},
0276     {0x9bc8, 0xff, 0x90},
0277     {0x9bc3, 0xff, 0x0f},
0278     {0x9bc4, 0xff, 0x02},
0279     {0x9bc5, 0xff, 0x36},
0280     {0x9bc6, 0xff, 0x03},
0281     {0x9bba, 0xff, 0xc9},
0282     {0x9bc9, 0xff, 0x79},
0283     {0xd011, 0xff, 0x10},
0284     {0xd012, 0x03, 0x01},
0285     {0xd013, 0xff, 0x45},
0286     {0xd014, 0x03, 0x03},
0287     {0xd040, 0xff, 0x98},
0288     {0xd041, 0x03, 0x00},
0289     {0xd042, 0xff, 0xcf},
0290     {0xd043, 0x03, 0x03},
0291     {0xd045, 0x02, 0x00},
0292     {0x9bcf, 0x01, 0x01},
0293     {0xd045, 0x04, 0x04},
0294     {0xd04f, 0xff, 0x9a},
0295     {0xd050, 0x01, 0x01},
0296     {0xd051, 0xff, 0x5a},
0297     {0xd052, 0x01, 0x01},
0298     {0xd053, 0xff, 0x50},
0299     {0xd054, 0xff, 0x46},
0300     {0x9bd7, 0xff, 0x0a},
0301     {0x9bd8, 0xff, 0x14},
0302     {0x9bd9, 0xff, 0x08},
0303     {0x9bd0, 0xff, 0xcc},
0304     {0x9be4, 0xff, 0xa0},
0305     {0x9bbd, 0xff, 0x8e},
0306     {0x9be2, 0xff, 0x4d},
0307     {0x9bee, 0x01, 0x01},
0308 };
0309 
0310 /*
0311  * Microtune MT2060 tuner init
0312  * AF9013_TUNER_MT2060_2      0x93
0313  */
0314 static const struct af9013_reg_mask_val tuner_init_tab_mt2060_2[] = {
0315     {0x9bd5, 0xff, 0x01},
0316     {0x9bd6, 0xff, 0x06},
0317     {0x9bbe, 0xff, 0x01},
0318     {0xd1a0, 0x02, 0x02},
0319     {0xd000, 0x01, 0x01},
0320     {0xd000, 0x02, 0x00},
0321     {0xd001, 0x02, 0x02},
0322     {0xd001, 0x01, 0x00},
0323     {0xd001, 0x20, 0x00},
0324     {0xd002, 0x1f, 0x19},
0325     {0xd003, 0x1f, 0x1a},
0326     {0xd004, 0x1f, 0x19},
0327     {0xd005, 0x1f, 0x1a},
0328     {0xd00e, 0x1f, 0x10},
0329     {0xd00f, 0x07, 0x04},
0330     {0xd00f, 0x38, 0x28},
0331     {0xd010, 0x07, 0x04},
0332     {0xd010, 0x38, 0x28},
0333     {0xd016, 0xf0, 0x30},
0334     {0xd01f, 0x3f, 0x0a},
0335     {0xd020, 0x3f, 0x0a},
0336     {0xd015, 0xff, 0x46},
0337     {0xd016, 0x01, 0x00},
0338     {0xd044, 0xff, 0x46},
0339     {0xd045, 0x01, 0x00},
0340     {0xd008, 0xff, 0x0f},
0341     {0xd009, 0x03, 0x02},
0342     {0xd006, 0xff, 0x32},
0343     {0xd007, 0x03, 0x01},
0344     {0xd00c, 0xff, 0x36},
0345     {0xd00d, 0x03, 0x03},
0346     {0xd00a, 0xff, 0x35},
0347     {0xd00b, 0x03, 0x01},
0348     {0x9bc7, 0xff, 0x07},
0349     {0x9bc8, 0xff, 0x90},
0350     {0x9bc3, 0xff, 0x0f},
0351     {0x9bc4, 0xff, 0x02},
0352     {0x9bc5, 0xff, 0x36},
0353     {0x9bc6, 0xff, 0x03},
0354     {0x9bba, 0xff, 0xc9},
0355     {0x9bc9, 0xff, 0x79},
0356     {0xd011, 0xff, 0x10},
0357     {0xd012, 0x03, 0x01},
0358     {0xd013, 0xff, 0x45},
0359     {0xd014, 0x03, 0x03},
0360     {0xd040, 0xff, 0x98},
0361     {0xd041, 0x03, 0x00},
0362     {0xd042, 0xff, 0xcf},
0363     {0xd043, 0x03, 0x03},
0364     {0xd045, 0x02, 0x00},
0365     {0x9bcf, 0xff, 0x01},
0366     {0xd045, 0x04, 0x04},
0367     {0xd04f, 0xff, 0x9a},
0368     {0xd050, 0x01, 0x01},
0369     {0xd051, 0xff, 0x5a},
0370     {0xd052, 0x01, 0x01},
0371     {0xd053, 0xff, 0x96},
0372     {0xd054, 0xff, 0x46},
0373     {0xd045, 0x80, 0x00},
0374     {0x9bd7, 0xff, 0x0a},
0375     {0x9bd8, 0xff, 0x14},
0376     {0x9bd9, 0xff, 0x08},
0377 };
0378 
0379 /*
0380  * MaxLinear MXL5003 tuner init
0381  * AF9013_TUNER_MXL5003D      0x03
0382  */
0383 static const struct af9013_reg_mask_val tuner_init_tab_mxl5003d[] = {
0384     {0x9bd5, 0xff, 0x01},
0385     {0x9bd6, 0xff, 0x09},
0386     {0xd1a0, 0x02, 0x02},
0387     {0xd000, 0x01, 0x01},
0388     {0xd000, 0x02, 0x00},
0389     {0xd001, 0x02, 0x02},
0390     {0xd001, 0x01, 0x00},
0391     {0xd001, 0x20, 0x00},
0392     {0xd002, 0x1f, 0x19},
0393     {0xd003, 0x1f, 0x1a},
0394     {0xd004, 0x1f, 0x19},
0395     {0xd005, 0x1f, 0x1a},
0396     {0xd00e, 0x1f, 0x10},
0397     {0xd00f, 0x07, 0x04},
0398     {0xd00f, 0x38, 0x28},
0399     {0xd010, 0x07, 0x04},
0400     {0xd010, 0x38, 0x28},
0401     {0xd016, 0xf0, 0x30},
0402     {0xd01f, 0x3f, 0x0a},
0403     {0xd020, 0x3f, 0x0a},
0404     {0x9bda, 0xff, 0x00},
0405     {0x9be3, 0xff, 0x00},
0406     {0x9bfc, 0xff, 0x0f},
0407     {0x9bf6, 0xff, 0x01},
0408     {0x9bbe, 0x01, 0x01},
0409     {0xd015, 0xff, 0x33},
0410     {0xd016, 0x01, 0x00},
0411     {0xd044, 0xff, 0x40},
0412     {0xd045, 0x01, 0x00},
0413     {0xd008, 0xff, 0x0f},
0414     {0xd009, 0x03, 0x02},
0415     {0xd006, 0xff, 0x6c},
0416     {0xd007, 0x03, 0x00},
0417     {0xd00c, 0xff, 0x3d},
0418     {0xd00d, 0x03, 0x00},
0419     {0xd00a, 0xff, 0x45},
0420     {0xd00b, 0x03, 0x01},
0421     {0x9bc7, 0xff, 0x07},
0422     {0x9bc8, 0xff, 0x52},
0423     {0x9bc3, 0xff, 0x0f},
0424     {0x9bc4, 0xff, 0x02},
0425     {0x9bc5, 0xff, 0x3d},
0426     {0x9bc6, 0xff, 0x00},
0427     {0x9bba, 0xff, 0xa2},
0428     {0x9bc9, 0xff, 0xa0},
0429     {0xd011, 0xff, 0x56},
0430     {0xd012, 0x03, 0x00},
0431     {0xd013, 0xff, 0x50},
0432     {0xd014, 0x03, 0x00},
0433     {0xd040, 0xff, 0x56},
0434     {0xd041, 0x03, 0x00},
0435     {0xd042, 0xff, 0x50},
0436     {0xd043, 0x03, 0x00},
0437     {0xd045, 0x02, 0x00},
0438     {0x9bcf, 0xff, 0x01},
0439     {0xd045, 0x04, 0x04},
0440     {0xd04f, 0xff, 0x9a},
0441     {0xd050, 0x01, 0x01},
0442     {0xd051, 0xff, 0x5a},
0443     {0xd052, 0x01, 0x01},
0444     {0xd053, 0xff, 0x50},
0445     {0xd054, 0xff, 0x46},
0446     {0x9bd7, 0xff, 0x0a},
0447     {0x9bd8, 0xff, 0x14},
0448     {0x9bd9, 0xff, 0x08},
0449 };
0450 
0451 /*
0452  * MaxLinear MXL5005S & MXL5007T tuner init
0453  * AF9013_TUNER_MXL5005D      0x0d
0454  * AF9013_TUNER_MXL5005R      0x1e
0455  * AF9013_TUNER_MXL5007T      0xb1
0456  */
0457 static const struct af9013_reg_mask_val tuner_init_tab_mxl5005[] = {
0458     {0x9bd5, 0xff, 0x01},
0459     {0x9bd6, 0xff, 0x07},
0460     {0xd1a0, 0x02, 0x02},
0461     {0xd000, 0x01, 0x01},
0462     {0xd000, 0x02, 0x00},
0463     {0xd001, 0x02, 0x02},
0464     {0xd001, 0x01, 0x00},
0465     {0xd001, 0x20, 0x00},
0466     {0xd002, 0x1f, 0x19},
0467     {0xd003, 0x1f, 0x1a},
0468     {0xd004, 0x1f, 0x19},
0469     {0xd005, 0x1f, 0x1a},
0470     {0xd00e, 0x1f, 0x10},
0471     {0xd00f, 0x07, 0x04},
0472     {0xd00f, 0x38, 0x28},
0473     {0xd010, 0x07, 0x04},
0474     {0xd010, 0x38, 0x28},
0475     {0xd016, 0xf0, 0x30},
0476     {0xd01f, 0x3f, 0x0a},
0477     {0xd020, 0x3f, 0x0a},
0478     {0x9bda, 0xff, 0x01},
0479     {0x9be3, 0xff, 0x01},
0480     {0x9bbe, 0x01, 0x01},
0481     {0x9bcc, 0x01, 0x01},
0482     {0x9bb9, 0xff, 0x00},
0483     {0x9bcd, 0xff, 0x28},
0484     {0x9bff, 0xff, 0x24},
0485     {0xd015, 0xff, 0x40},
0486     {0xd016, 0x01, 0x00},
0487     {0xd044, 0xff, 0x40},
0488     {0xd045, 0x01, 0x00},
0489     {0xd008, 0xff, 0x0f},
0490     {0xd009, 0x03, 0x02},
0491     {0xd006, 0xff, 0x73},
0492     {0xd007, 0x03, 0x01},
0493     {0xd00c, 0xff, 0xfa},
0494     {0xd00d, 0x03, 0x01},
0495     {0xd00a, 0xff, 0xff},
0496     {0xd00b, 0x03, 0x01},
0497     {0x9bc7, 0xff, 0x23},
0498     {0x9bc8, 0xff, 0x55},
0499     {0x9bc3, 0xff, 0x01},
0500     {0x9bc4, 0xff, 0x02},
0501     {0x9bc5, 0xff, 0xfa},
0502     {0x9bc6, 0xff, 0x01},
0503     {0x9bba, 0xff, 0xff},
0504     {0x9bc9, 0xff, 0xff},
0505     {0x9bd3, 0xff, 0x95},
0506     {0xd011, 0xff, 0x70},
0507     {0xd012, 0x03, 0x01},
0508     {0xd013, 0xff, 0xfb},
0509     {0xd014, 0x03, 0x01},
0510     {0xd040, 0xff, 0x70},
0511     {0xd041, 0x03, 0x01},
0512     {0xd042, 0xff, 0xfb},
0513     {0xd043, 0x03, 0x01},
0514     {0xd045, 0x02, 0x00},
0515     {0x9bcf, 0x01, 0x01},
0516     {0xd045, 0x04, 0x04},
0517     {0xd04f, 0xff, 0x9a},
0518     {0xd050, 0x01, 0x01},
0519     {0xd051, 0xff, 0x5a},
0520     {0xd052, 0x01, 0x01},
0521     {0xd053, 0xff, 0x50},
0522     {0xd054, 0xff, 0x46},
0523     {0x9bd7, 0xff, 0x0a},
0524     {0x9bd8, 0xff, 0x14},
0525     {0x9bd9, 0xff, 0x08},
0526     {0x9bd0, 0xff, 0x93},
0527     {0x9be4, 0xff, 0xfe},
0528     {0x9bbd, 0xff, 0x63},
0529     {0x9be2, 0xff, 0xfe},
0530     {0x9bee, 0x01, 0x01},
0531 };
0532 
0533 /*
0534  * Quantek QT1010 tuner init
0535  * AF9013_TUNER_QT1010        0x86
0536  * AF9013_TUNER_QT1010A       0xa2
0537  */
0538 static const struct af9013_reg_mask_val tuner_init_tab_qt1010[] = {
0539     {0x9bd5, 0xff, 0x01},
0540     {0x9bd6, 0xff, 0x09},
0541     {0xd1a0, 0x02, 0x02},
0542     {0xd000, 0x01, 0x01},
0543     {0xd000, 0x02, 0x00},
0544     {0xd001, 0x02, 0x02},
0545     {0xd001, 0x01, 0x00},
0546     {0xd001, 0x20, 0x00},
0547     {0xd002, 0x1f, 0x19},
0548     {0xd003, 0x1f, 0x1a},
0549     {0xd004, 0x1f, 0x19},
0550     {0xd005, 0x1f, 0x1a},
0551     {0xd00e, 0x1f, 0x10},
0552     {0xd00f, 0x07, 0x04},
0553     {0xd00f, 0x38, 0x28},
0554     {0xd010, 0x07, 0x04},
0555     {0xd010, 0x38, 0x28},
0556     {0xd016, 0xf0, 0x30},
0557     {0xd01f, 0x3f, 0x0a},
0558     {0xd020, 0x3f, 0x0a},
0559     {0x9bda, 0xff, 0x01},
0560     {0x9be3, 0xff, 0x01},
0561     {0xd015, 0xff, 0x46},
0562     {0xd016, 0x01, 0x00},
0563     {0xd044, 0xff, 0x46},
0564     {0xd045, 0x01, 0x00},
0565     {0x9bbe, 0x01, 0x01},
0566     {0x9bcc, 0x01, 0x01},
0567     {0x9bb9, 0xff, 0x00},
0568     {0x9bcd, 0xff, 0x28},
0569     {0x9bff, 0xff, 0x20},
0570     {0xd008, 0xff, 0x0f},
0571     {0xd009, 0x03, 0x02},
0572     {0xd006, 0xff, 0x99},
0573     {0xd007, 0x03, 0x01},
0574     {0xd00c, 0xff, 0x0f},
0575     {0xd00d, 0x03, 0x02},
0576     {0xd00a, 0xff, 0x50},
0577     {0xd00b, 0x03, 0x01},
0578     {0x9bc7, 0xff, 0x00},
0579     {0x9bc8, 0xff, 0x00},
0580     {0x9bc3, 0xff, 0x0f},
0581     {0x9bc4, 0xff, 0x02},
0582     {0x9bc5, 0xff, 0x0f},
0583     {0x9bc6, 0xff, 0x02},
0584     {0x9bba, 0xff, 0xc5},
0585     {0x9bc9, 0xff, 0xff},
0586     {0xd011, 0xff, 0x58},
0587     {0xd012, 0x03, 0x02},
0588     {0xd013, 0xff, 0x89},
0589     {0xd014, 0x03, 0x01},
0590     {0xd040, 0xff, 0x58},
0591     {0xd041, 0x03, 0x02},
0592     {0xd042, 0xff, 0x89},
0593     {0xd043, 0x03, 0x01},
0594     {0xd045, 0x02, 0x00},
0595     {0x9bcf, 0x01, 0x01},
0596     {0xd045, 0x04, 0x04},
0597     {0xd04f, 0xff, 0x9a},
0598     {0xd050, 0x01, 0x01},
0599     {0xd051, 0xff, 0x5a},
0600     {0xd052, 0x01, 0x01},
0601     {0xd053, 0xff, 0x50},
0602     {0xd054, 0xff, 0x46},
0603     {0x9bd7, 0xff, 0x0a},
0604     {0x9bd8, 0xff, 0x14},
0605     {0x9bd9, 0xff, 0x08},
0606     {0x9bd0, 0xff, 0xcd},
0607     {0x9be4, 0xff, 0xbb},
0608     {0x9bbd, 0xff, 0x93},
0609     {0x9be2, 0xff, 0x80},
0610     {0x9bee, 0x01, 0x01},
0611 };
0612 
0613 /*
0614  * Freescale MC44S803 tuner init
0615  * AF9013_TUNER_MC44S803      0x85
0616  */
0617 static const struct af9013_reg_mask_val tuner_init_tab_mc44s803[] = {
0618     {0x9bd5, 0xff, 0x01},
0619     {0x9bd6, 0xff, 0x06},
0620     {0xd1a0, 0x02, 0x02},
0621     {0xd000, 0x01, 0x01},
0622     {0xd000, 0x02, 0x00},
0623     {0xd001, 0x02, 0x02},
0624     {0xd001, 0x01, 0x00},
0625     {0xd001, 0x20, 0x00},
0626     {0xd002, 0x1f, 0x19},
0627     {0xd003, 0x1f, 0x1a},
0628     {0xd004, 0x1f, 0x19},
0629     {0xd005, 0x1f, 0x1a},
0630     {0xd00e, 0x1f, 0x10},
0631     {0xd00f, 0x07, 0x04},
0632     {0xd00f, 0x38, 0x28},
0633     {0xd010, 0x07, 0x04},
0634     {0xd010, 0x38, 0x28},
0635     {0xd016, 0xf0, 0x30},
0636     {0xd01f, 0x3f, 0x0a},
0637     {0xd020, 0x3f, 0x0a},
0638     {0x9bda, 0xff, 0x00},
0639     {0x9be3, 0xff, 0x00},
0640     {0x9bf6, 0xff, 0x01},
0641     {0x9bf8, 0xff, 0x02},
0642     {0x9bf9, 0xff, 0x02},
0643     {0x9bfc, 0xff, 0x1f},
0644     {0x9bbe, 0x01, 0x01},
0645     {0x9bcc, 0x01, 0x01},
0646     {0x9bb9, 0xff, 0x00},
0647     {0x9bcd, 0xff, 0x24},
0648     {0x9bff, 0xff, 0x24},
0649     {0xd015, 0xff, 0x46},
0650     {0xd016, 0x01, 0x00},
0651     {0xd044, 0xff, 0x46},
0652     {0xd045, 0x01, 0x00},
0653     {0xd008, 0xff, 0x01},
0654     {0xd009, 0x03, 0x02},
0655     {0xd006, 0xff, 0x7b},
0656     {0xd007, 0x03, 0x00},
0657     {0xd00c, 0xff, 0x7c},
0658     {0xd00d, 0x03, 0x02},
0659     {0xd00a, 0xff, 0xfe},
0660     {0xd00b, 0x03, 0x01},
0661     {0x9bc7, 0xff, 0x08},
0662     {0x9bc8, 0xff, 0x9a},
0663     {0x9bc3, 0xff, 0x01},
0664     {0x9bc4, 0xff, 0x02},
0665     {0x9bc5, 0xff, 0x7c},
0666     {0x9bc6, 0xff, 0x02},
0667     {0x9bba, 0xff, 0xfc},
0668     {0x9bc9, 0xff, 0xaa},
0669     {0xd011, 0xff, 0x6b},
0670     {0xd012, 0x03, 0x00},
0671     {0xd013, 0xff, 0x88},
0672     {0xd014, 0x03, 0x02},
0673     {0xd040, 0xff, 0x6b},
0674     {0xd041, 0x03, 0x00},
0675     {0xd042, 0xff, 0x7c},
0676     {0xd043, 0x03, 0x02},
0677     {0xd045, 0x02, 0x00},
0678     {0x9bcf, 0x01, 0x01},
0679     {0xd045, 0x04, 0x04},
0680     {0xd04f, 0xff, 0x9a},
0681     {0xd050, 0x01, 0x01},
0682     {0xd051, 0xff, 0x5a},
0683     {0xd052, 0x01, 0x01},
0684     {0xd053, 0xff, 0x50},
0685     {0xd054, 0xff, 0x46},
0686     {0x9bd7, 0xff, 0x0a},
0687     {0x9bd8, 0xff, 0x14},
0688     {0x9bd9, 0xff, 0x08},
0689     {0x9bd0, 0xff, 0x9e},
0690     {0x9be4, 0xff, 0xff},
0691     {0x9bbd, 0xff, 0x9e},
0692     {0x9be2, 0xff, 0x25},
0693     {0x9bee, 0x01, 0x01},
0694     {0xd73b, 0x08, 0x00},
0695 };
0696 
0697 /*
0698  * Unknown, probably for tin can tuner, tuner init
0699  * AF9013_TUNER_UNKNOWN       0x8c
0700  */
0701 static const struct af9013_reg_mask_val tuner_init_tab_unknown[] = {
0702     {0x9bd5, 0xff, 0x01},
0703     {0x9bd6, 0xff, 0x02},
0704     {0xd1a0, 0x02, 0x02},
0705     {0xd000, 0x01, 0x01},
0706     {0xd000, 0x02, 0x00},
0707     {0xd001, 0x02, 0x02},
0708     {0xd001, 0x01, 0x00},
0709     {0xd001, 0x20, 0x00},
0710     {0xd002, 0x1f, 0x19},
0711     {0xd003, 0x1f, 0x1a},
0712     {0xd004, 0x1f, 0x19},
0713     {0xd005, 0x1f, 0x1a},
0714     {0xd00e, 0x1f, 0x10},
0715     {0xd00f, 0x07, 0x04},
0716     {0xd00f, 0x38, 0x28},
0717     {0xd010, 0x07, 0x04},
0718     {0xd010, 0x38, 0x28},
0719     {0xd016, 0xf0, 0x30},
0720     {0xd01f, 0x3f, 0x0a},
0721     {0xd020, 0x3f, 0x0a},
0722     {0x9bda, 0xff, 0x01},
0723     {0x9be3, 0xff, 0x01},
0724     {0xd1a0, 0x02, 0x00},
0725     {0x9bbe, 0x01, 0x01},
0726     {0x9bcc, 0x01, 0x01},
0727     {0x9bb9, 0xff, 0x00},
0728     {0x9bcd, 0xff, 0x18},
0729     {0x9bff, 0xff, 0x2c},
0730     {0xd015, 0xff, 0x46},
0731     {0xd016, 0x01, 0x00},
0732     {0xd044, 0xff, 0x46},
0733     {0xd045, 0x01, 0x00},
0734     {0xd008, 0xff, 0xdf},
0735     {0xd009, 0x03, 0x02},
0736     {0xd006, 0xff, 0x44},
0737     {0xd007, 0x03, 0x01},
0738     {0xd00c, 0xff, 0x00},
0739     {0xd00d, 0x03, 0x02},
0740     {0xd00a, 0xff, 0xf6},
0741     {0xd00b, 0x03, 0x01},
0742     {0x9bba, 0xff, 0xf9},
0743     {0x9bc8, 0xff, 0xaa},
0744     {0x9bc3, 0xff, 0xdf},
0745     {0x9bc4, 0xff, 0x02},
0746     {0x9bc5, 0xff, 0x00},
0747     {0x9bc6, 0xff, 0x02},
0748     {0x9bc9, 0xff, 0xf0},
0749     {0xd011, 0xff, 0x3c},
0750     {0xd012, 0x03, 0x01},
0751     {0xd013, 0xff, 0xf7},
0752     {0xd014, 0x03, 0x02},
0753     {0xd040, 0xff, 0x0b},
0754     {0xd041, 0x03, 0x02},
0755     {0xd042, 0xff, 0x4d},
0756     {0xd043, 0x03, 0x00},
0757     {0xd045, 0x02, 0x00},
0758     {0x9bcf, 0x01, 0x01},
0759     {0xd045, 0x04, 0x04},
0760     {0xd04f, 0xff, 0x9a},
0761     {0xd050, 0x01, 0x01},
0762     {0xd051, 0xff, 0x5a},
0763     {0xd052, 0x01, 0x01},
0764     {0xd053, 0xff, 0x50},
0765     {0xd054, 0xff, 0x46},
0766     {0x9bd7, 0xff, 0x0a},
0767     {0x9bd8, 0xff, 0x14},
0768     {0x9bd9, 0xff, 0x08},
0769 };
0770 
0771 /*
0772  * NXP TDA18271 & TDA18218 tuner init
0773  * AF9013_TUNER_TDA18271      0x9c
0774  * AF9013_TUNER_TDA18218      0xb3
0775  */
0776 static const struct af9013_reg_mask_val tuner_init_tab_tda18271[] = {
0777     {0x9bd5, 0xff, 0x01},
0778     {0x9bd6, 0xff, 0x04},
0779     {0xd1a0, 0x02, 0x02},
0780     {0xd000, 0x01, 0x01},
0781     {0xd000, 0x02, 0x00},
0782     {0xd001, 0x02, 0x02},
0783     {0xd001, 0x01, 0x00},
0784     {0xd001, 0x20, 0x00},
0785     {0xd002, 0x1f, 0x19},
0786     {0xd003, 0x1f, 0x1a},
0787     {0xd004, 0x1f, 0x19},
0788     {0xd005, 0x1f, 0x1a},
0789     {0xd00e, 0x1f, 0x10},
0790     {0xd00f, 0x07, 0x04},
0791     {0xd00f, 0x38, 0x28},
0792     {0xd010, 0x07, 0x04},
0793     {0xd010, 0x38, 0x28},
0794     {0xd016, 0xf0, 0x30},
0795     {0xd01f, 0x3f, 0x0a},
0796     {0xd020, 0x3f, 0x0a},
0797     {0x9bda, 0xff, 0x01},
0798     {0x9be3, 0xff, 0x01},
0799     {0xd1a0, 0x02, 0x00},
0800     {0x9bbe, 0x01, 0x01},
0801     {0x9bcc, 0x01, 0x01},
0802     {0x9bb9, 0xff, 0x00},
0803     {0x9bcd, 0xff, 0x18},
0804     {0x9bff, 0xff, 0x2c},
0805     {0xd015, 0xff, 0x46},
0806     {0xd016, 0x01, 0x00},
0807     {0xd044, 0xff, 0x46},
0808     {0xd045, 0x01, 0x00},
0809     {0xd008, 0xff, 0xdf},
0810     {0xd009, 0x03, 0x02},
0811     {0xd006, 0xff, 0x44},
0812     {0xd007, 0x03, 0x01},
0813     {0xd00c, 0xff, 0x00},
0814     {0xd00d, 0x03, 0x02},
0815     {0xd00a, 0xff, 0xf6},
0816     {0xd00b, 0x03, 0x01},
0817     {0x9bba, 0xff, 0xf9},
0818     {0x9bc8, 0xff, 0xaa},
0819     {0x9bc3, 0xff, 0xdf},
0820     {0x9bc4, 0xff, 0x02},
0821     {0x9bc5, 0xff, 0x00},
0822     {0x9bc6, 0xff, 0x02},
0823     {0x9bc9, 0xff, 0xf0},
0824     {0xd011, 0xff, 0x3c},
0825     {0xd012, 0x03, 0x01},
0826     {0xd013, 0xff, 0xf7},
0827     {0xd014, 0x03, 0x02},
0828     {0xd040, 0xff, 0x0b},
0829     {0xd041, 0x03, 0x02},
0830     {0xd042, 0xff, 0x4d},
0831     {0xd043, 0x03, 0x00},
0832     {0xd045, 0x02, 0x00},
0833     {0x9bcf, 0x01, 0x01},
0834     {0xd045, 0x04, 0x04},
0835     {0xd04f, 0xff, 0x9a},
0836     {0xd050, 0x01, 0x01},
0837     {0xd051, 0xff, 0x5a},
0838     {0xd052, 0x01, 0x01},
0839     {0xd053, 0xff, 0x50},
0840     {0xd054, 0xff, 0x46},
0841     {0x9bd7, 0xff, 0x0a},
0842     {0x9bd8, 0xff, 0x14},
0843     {0x9bd9, 0xff, 0x08},
0844     {0x9bd0, 0xff, 0xa8},
0845     {0x9be4, 0xff, 0x7f},
0846     {0x9bbd, 0xff, 0xa8},
0847     {0x9be2, 0xff, 0x20},
0848     {0x9bee, 0x01, 0x01},
0849 };
0850 
0851 #endif /* AF9013_PRIV_H */