Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003     tda18271-maps.c - driver for the Philips / NXP TDA18271 silicon tuner
0004 
0005     Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org>
0006 
0007 */
0008 
0009 #include "tda18271-priv.h"
0010 
0011 struct tda18271_pll_map {
0012     u32 lomax;
0013     u8 pd; /* post div */
0014     u8 d;  /*      div */
0015 };
0016 
0017 struct tda18271_map {
0018     u32 rfmax;
0019     u8  val;
0020 };
0021 
0022 /*---------------------------------------------------------------------*/
0023 
0024 static struct tda18271_pll_map tda18271c1_main_pll[] = {
0025     { .lomax =  32000, .pd = 0x5f, .d = 0xf0 },
0026     { .lomax =  35000, .pd = 0x5e, .d = 0xe0 },
0027     { .lomax =  37000, .pd = 0x5d, .d = 0xd0 },
0028     { .lomax =  41000, .pd = 0x5c, .d = 0xc0 },
0029     { .lomax =  44000, .pd = 0x5b, .d = 0xb0 },
0030     { .lomax =  49000, .pd = 0x5a, .d = 0xa0 },
0031     { .lomax =  54000, .pd = 0x59, .d = 0x90 },
0032     { .lomax =  61000, .pd = 0x58, .d = 0x80 },
0033     { .lomax =  65000, .pd = 0x4f, .d = 0x78 },
0034     { .lomax =  70000, .pd = 0x4e, .d = 0x70 },
0035     { .lomax =  75000, .pd = 0x4d, .d = 0x68 },
0036     { .lomax =  82000, .pd = 0x4c, .d = 0x60 },
0037     { .lomax =  89000, .pd = 0x4b, .d = 0x58 },
0038     { .lomax =  98000, .pd = 0x4a, .d = 0x50 },
0039     { .lomax = 109000, .pd = 0x49, .d = 0x48 },
0040     { .lomax = 123000, .pd = 0x48, .d = 0x40 },
0041     { .lomax = 131000, .pd = 0x3f, .d = 0x3c },
0042     { .lomax = 141000, .pd = 0x3e, .d = 0x38 },
0043     { .lomax = 151000, .pd = 0x3d, .d = 0x34 },
0044     { .lomax = 164000, .pd = 0x3c, .d = 0x30 },
0045     { .lomax = 179000, .pd = 0x3b, .d = 0x2c },
0046     { .lomax = 197000, .pd = 0x3a, .d = 0x28 },
0047     { .lomax = 219000, .pd = 0x39, .d = 0x24 },
0048     { .lomax = 246000, .pd = 0x38, .d = 0x20 },
0049     { .lomax = 263000, .pd = 0x2f, .d = 0x1e },
0050     { .lomax = 282000, .pd = 0x2e, .d = 0x1c },
0051     { .lomax = 303000, .pd = 0x2d, .d = 0x1a },
0052     { .lomax = 329000, .pd = 0x2c, .d = 0x18 },
0053     { .lomax = 359000, .pd = 0x2b, .d = 0x16 },
0054     { .lomax = 395000, .pd = 0x2a, .d = 0x14 },
0055     { .lomax = 438000, .pd = 0x29, .d = 0x12 },
0056     { .lomax = 493000, .pd = 0x28, .d = 0x10 },
0057     { .lomax = 526000, .pd = 0x1f, .d = 0x0f },
0058     { .lomax = 564000, .pd = 0x1e, .d = 0x0e },
0059     { .lomax = 607000, .pd = 0x1d, .d = 0x0d },
0060     { .lomax = 658000, .pd = 0x1c, .d = 0x0c },
0061     { .lomax = 718000, .pd = 0x1b, .d = 0x0b },
0062     { .lomax = 790000, .pd = 0x1a, .d = 0x0a },
0063     { .lomax = 877000, .pd = 0x19, .d = 0x09 },
0064     { .lomax = 987000, .pd = 0x18, .d = 0x08 },
0065     { .lomax =      0, .pd = 0x00, .d = 0x00 }, /* end */
0066 };
0067 
0068 static struct tda18271_pll_map tda18271c2_main_pll[] = {
0069     { .lomax =  33125, .pd = 0x57, .d = 0xf0 },
0070     { .lomax =  35500, .pd = 0x56, .d = 0xe0 },
0071     { .lomax =  38188, .pd = 0x55, .d = 0xd0 },
0072     { .lomax =  41375, .pd = 0x54, .d = 0xc0 },
0073     { .lomax =  45125, .pd = 0x53, .d = 0xb0 },
0074     { .lomax =  49688, .pd = 0x52, .d = 0xa0 },
0075     { .lomax =  55188, .pd = 0x51, .d = 0x90 },
0076     { .lomax =  62125, .pd = 0x50, .d = 0x80 },
0077     { .lomax =  66250, .pd = 0x47, .d = 0x78 },
0078     { .lomax =  71000, .pd = 0x46, .d = 0x70 },
0079     { .lomax =  76375, .pd = 0x45, .d = 0x68 },
0080     { .lomax =  82750, .pd = 0x44, .d = 0x60 },
0081     { .lomax =  90250, .pd = 0x43, .d = 0x58 },
0082     { .lomax =  99375, .pd = 0x42, .d = 0x50 },
0083     { .lomax = 110375, .pd = 0x41, .d = 0x48 },
0084     { .lomax = 124250, .pd = 0x40, .d = 0x40 },
0085     { .lomax = 132500, .pd = 0x37, .d = 0x3c },
0086     { .lomax = 142000, .pd = 0x36, .d = 0x38 },
0087     { .lomax = 152750, .pd = 0x35, .d = 0x34 },
0088     { .lomax = 165500, .pd = 0x34, .d = 0x30 },
0089     { .lomax = 180500, .pd = 0x33, .d = 0x2c },
0090     { .lomax = 198750, .pd = 0x32, .d = 0x28 },
0091     { .lomax = 220750, .pd = 0x31, .d = 0x24 },
0092     { .lomax = 248500, .pd = 0x30, .d = 0x20 },
0093     { .lomax = 265000, .pd = 0x27, .d = 0x1e },
0094     { .lomax = 284000, .pd = 0x26, .d = 0x1c },
0095     { .lomax = 305500, .pd = 0x25, .d = 0x1a },
0096     { .lomax = 331000, .pd = 0x24, .d = 0x18 },
0097     { .lomax = 361000, .pd = 0x23, .d = 0x16 },
0098     { .lomax = 397500, .pd = 0x22, .d = 0x14 },
0099     { .lomax = 441500, .pd = 0x21, .d = 0x12 },
0100     { .lomax = 497000, .pd = 0x20, .d = 0x10 },
0101     { .lomax = 530000, .pd = 0x17, .d = 0x0f },
0102     { .lomax = 568000, .pd = 0x16, .d = 0x0e },
0103     { .lomax = 611000, .pd = 0x15, .d = 0x0d },
0104     { .lomax = 662000, .pd = 0x14, .d = 0x0c },
0105     { .lomax = 722000, .pd = 0x13, .d = 0x0b },
0106     { .lomax = 795000, .pd = 0x12, .d = 0x0a },
0107     { .lomax = 883000, .pd = 0x11, .d = 0x09 },
0108     { .lomax = 994000, .pd = 0x10, .d = 0x08 },
0109     { .lomax =      0, .pd = 0x00, .d = 0x00 }, /* end */
0110 };
0111 
0112 static struct tda18271_pll_map tda18271c1_cal_pll[] = {
0113     { .lomax =   33000, .pd = 0xdd, .d = 0xd0 },
0114     { .lomax =   36000, .pd = 0xdc, .d = 0xc0 },
0115     { .lomax =   40000, .pd = 0xdb, .d = 0xb0 },
0116     { .lomax =   44000, .pd = 0xda, .d = 0xa0 },
0117     { .lomax =   49000, .pd = 0xd9, .d = 0x90 },
0118     { .lomax =   55000, .pd = 0xd8, .d = 0x80 },
0119     { .lomax =   63000, .pd = 0xd3, .d = 0x70 },
0120     { .lomax =   67000, .pd = 0xcd, .d = 0x68 },
0121     { .lomax =   73000, .pd = 0xcc, .d = 0x60 },
0122     { .lomax =   80000, .pd = 0xcb, .d = 0x58 },
0123     { .lomax =   88000, .pd = 0xca, .d = 0x50 },
0124     { .lomax =   98000, .pd = 0xc9, .d = 0x48 },
0125     { .lomax =  110000, .pd = 0xc8, .d = 0x40 },
0126     { .lomax =  126000, .pd = 0xc3, .d = 0x38 },
0127     { .lomax =  135000, .pd = 0xbd, .d = 0x34 },
0128     { .lomax =  147000, .pd = 0xbc, .d = 0x30 },
0129     { .lomax =  160000, .pd = 0xbb, .d = 0x2c },
0130     { .lomax =  176000, .pd = 0xba, .d = 0x28 },
0131     { .lomax =  196000, .pd = 0xb9, .d = 0x24 },
0132     { .lomax =  220000, .pd = 0xb8, .d = 0x20 },
0133     { .lomax =  252000, .pd = 0xb3, .d = 0x1c },
0134     { .lomax =  271000, .pd = 0xad, .d = 0x1a },
0135     { .lomax =  294000, .pd = 0xac, .d = 0x18 },
0136     { .lomax =  321000, .pd = 0xab, .d = 0x16 },
0137     { .lomax =  353000, .pd = 0xaa, .d = 0x14 },
0138     { .lomax =  392000, .pd = 0xa9, .d = 0x12 },
0139     { .lomax =  441000, .pd = 0xa8, .d = 0x10 },
0140     { .lomax =  505000, .pd = 0xa3, .d = 0x0e },
0141     { .lomax =  543000, .pd = 0x9d, .d = 0x0d },
0142     { .lomax =  589000, .pd = 0x9c, .d = 0x0c },
0143     { .lomax =  642000, .pd = 0x9b, .d = 0x0b },
0144     { .lomax =  707000, .pd = 0x9a, .d = 0x0a },
0145     { .lomax =  785000, .pd = 0x99, .d = 0x09 },
0146     { .lomax =  883000, .pd = 0x98, .d = 0x08 },
0147     { .lomax = 1010000, .pd = 0x93, .d = 0x07 },
0148     { .lomax =       0, .pd = 0x00, .d = 0x00 }, /* end */
0149 };
0150 
0151 static struct tda18271_pll_map tda18271c2_cal_pll[] = {
0152     { .lomax =   33813, .pd = 0xdd, .d = 0xd0 },
0153     { .lomax =   36625, .pd = 0xdc, .d = 0xc0 },
0154     { .lomax =   39938, .pd = 0xdb, .d = 0xb0 },
0155     { .lomax =   43938, .pd = 0xda, .d = 0xa0 },
0156     { .lomax =   48813, .pd = 0xd9, .d = 0x90 },
0157     { .lomax =   54938, .pd = 0xd8, .d = 0x80 },
0158     { .lomax =   62813, .pd = 0xd3, .d = 0x70 },
0159     { .lomax =   67625, .pd = 0xcd, .d = 0x68 },
0160     { .lomax =   73250, .pd = 0xcc, .d = 0x60 },
0161     { .lomax =   79875, .pd = 0xcb, .d = 0x58 },
0162     { .lomax =   87875, .pd = 0xca, .d = 0x50 },
0163     { .lomax =   97625, .pd = 0xc9, .d = 0x48 },
0164     { .lomax =  109875, .pd = 0xc8, .d = 0x40 },
0165     { .lomax =  125625, .pd = 0xc3, .d = 0x38 },
0166     { .lomax =  135250, .pd = 0xbd, .d = 0x34 },
0167     { .lomax =  146500, .pd = 0xbc, .d = 0x30 },
0168     { .lomax =  159750, .pd = 0xbb, .d = 0x2c },
0169     { .lomax =  175750, .pd = 0xba, .d = 0x28 },
0170     { .lomax =  195250, .pd = 0xb9, .d = 0x24 },
0171     { .lomax =  219750, .pd = 0xb8, .d = 0x20 },
0172     { .lomax =  251250, .pd = 0xb3, .d = 0x1c },
0173     { .lomax =  270500, .pd = 0xad, .d = 0x1a },
0174     { .lomax =  293000, .pd = 0xac, .d = 0x18 },
0175     { .lomax =  319500, .pd = 0xab, .d = 0x16 },
0176     { .lomax =  351500, .pd = 0xaa, .d = 0x14 },
0177     { .lomax =  390500, .pd = 0xa9, .d = 0x12 },
0178     { .lomax =  439500, .pd = 0xa8, .d = 0x10 },
0179     { .lomax =  502500, .pd = 0xa3, .d = 0x0e },
0180     { .lomax =  541000, .pd = 0x9d, .d = 0x0d },
0181     { .lomax =  586000, .pd = 0x9c, .d = 0x0c },
0182     { .lomax =  639000, .pd = 0x9b, .d = 0x0b },
0183     { .lomax =  703000, .pd = 0x9a, .d = 0x0a },
0184     { .lomax =  781000, .pd = 0x99, .d = 0x09 },
0185     { .lomax =  879000, .pd = 0x98, .d = 0x08 },
0186     { .lomax =       0, .pd = 0x00, .d = 0x00 }, /* end */
0187 };
0188 
0189 static struct tda18271_map tda18271_bp_filter[] = {
0190     { .rfmax =  62000, .val = 0x00 },
0191     { .rfmax =  84000, .val = 0x01 },
0192     { .rfmax = 100000, .val = 0x02 },
0193     { .rfmax = 140000, .val = 0x03 },
0194     { .rfmax = 170000, .val = 0x04 },
0195     { .rfmax = 180000, .val = 0x05 },
0196     { .rfmax = 865000, .val = 0x06 },
0197     { .rfmax =      0, .val = 0x00 }, /* end */
0198 };
0199 
0200 static struct tda18271_map tda18271c1_km[] = {
0201     { .rfmax =  61100, .val = 0x74 },
0202     { .rfmax = 350000, .val = 0x40 },
0203     { .rfmax = 720000, .val = 0x30 },
0204     { .rfmax = 865000, .val = 0x40 },
0205     { .rfmax =      0, .val = 0x00 }, /* end */
0206 };
0207 
0208 static struct tda18271_map tda18271c2_km[] = {
0209     { .rfmax =  47900, .val = 0x38 },
0210     { .rfmax =  61100, .val = 0x44 },
0211     { .rfmax = 350000, .val = 0x30 },
0212     { .rfmax = 720000, .val = 0x24 },
0213     { .rfmax = 865000, .val = 0x3c },
0214     { .rfmax =      0, .val = 0x00 }, /* end */
0215 };
0216 
0217 static struct tda18271_map tda18271_rf_band[] = {
0218     { .rfmax =  47900, .val = 0x00 },
0219     { .rfmax =  61100, .val = 0x01 },
0220     { .rfmax = 152600, .val = 0x02 },
0221     { .rfmax = 164700, .val = 0x03 },
0222     { .rfmax = 203500, .val = 0x04 },
0223     { .rfmax = 457800, .val = 0x05 },
0224     { .rfmax = 865000, .val = 0x06 },
0225     { .rfmax =      0, .val = 0x00 }, /* end */
0226 };
0227 
0228 static struct tda18271_map tda18271_gain_taper[] = {
0229     { .rfmax =  45400, .val = 0x1f },
0230     { .rfmax =  45800, .val = 0x1e },
0231     { .rfmax =  46200, .val = 0x1d },
0232     { .rfmax =  46700, .val = 0x1c },
0233     { .rfmax =  47100, .val = 0x1b },
0234     { .rfmax =  47500, .val = 0x1a },
0235     { .rfmax =  47900, .val = 0x19 },
0236     { .rfmax =  49600, .val = 0x17 },
0237     { .rfmax =  51200, .val = 0x16 },
0238     { .rfmax =  52900, .val = 0x15 },
0239     { .rfmax =  54500, .val = 0x14 },
0240     { .rfmax =  56200, .val = 0x13 },
0241     { .rfmax =  57800, .val = 0x12 },
0242     { .rfmax =  59500, .val = 0x11 },
0243     { .rfmax =  61100, .val = 0x10 },
0244     { .rfmax =  67600, .val = 0x0d },
0245     { .rfmax =  74200, .val = 0x0c },
0246     { .rfmax =  80700, .val = 0x0b },
0247     { .rfmax =  87200, .val = 0x0a },
0248     { .rfmax =  93800, .val = 0x09 },
0249     { .rfmax = 100300, .val = 0x08 },
0250     { .rfmax = 106900, .val = 0x07 },
0251     { .rfmax = 113400, .val = 0x06 },
0252     { .rfmax = 119900, .val = 0x05 },
0253     { .rfmax = 126500, .val = 0x04 },
0254     { .rfmax = 133000, .val = 0x03 },
0255     { .rfmax = 139500, .val = 0x02 },
0256     { .rfmax = 146100, .val = 0x01 },
0257     { .rfmax = 152600, .val = 0x00 },
0258     { .rfmax = 154300, .val = 0x1f },
0259     { .rfmax = 156100, .val = 0x1e },
0260     { .rfmax = 157800, .val = 0x1d },
0261     { .rfmax = 159500, .val = 0x1c },
0262     { .rfmax = 161200, .val = 0x1b },
0263     { .rfmax = 163000, .val = 0x1a },
0264     { .rfmax = 164700, .val = 0x19 },
0265     { .rfmax = 170200, .val = 0x17 },
0266     { .rfmax = 175800, .val = 0x16 },
0267     { .rfmax = 181300, .val = 0x15 },
0268     { .rfmax = 186900, .val = 0x14 },
0269     { .rfmax = 192400, .val = 0x13 },
0270     { .rfmax = 198000, .val = 0x12 },
0271     { .rfmax = 203500, .val = 0x11 },
0272     { .rfmax = 216200, .val = 0x14 },
0273     { .rfmax = 228900, .val = 0x13 },
0274     { .rfmax = 241600, .val = 0x12 },
0275     { .rfmax = 254400, .val = 0x11 },
0276     { .rfmax = 267100, .val = 0x10 },
0277     { .rfmax = 279800, .val = 0x0f },
0278     { .rfmax = 292500, .val = 0x0e },
0279     { .rfmax = 305200, .val = 0x0d },
0280     { .rfmax = 317900, .val = 0x0c },
0281     { .rfmax = 330700, .val = 0x0b },
0282     { .rfmax = 343400, .val = 0x0a },
0283     { .rfmax = 356100, .val = 0x09 },
0284     { .rfmax = 368800, .val = 0x08 },
0285     { .rfmax = 381500, .val = 0x07 },
0286     { .rfmax = 394200, .val = 0x06 },
0287     { .rfmax = 406900, .val = 0x05 },
0288     { .rfmax = 419700, .val = 0x04 },
0289     { .rfmax = 432400, .val = 0x03 },
0290     { .rfmax = 445100, .val = 0x02 },
0291     { .rfmax = 457800, .val = 0x01 },
0292     { .rfmax = 476300, .val = 0x19 },
0293     { .rfmax = 494800, .val = 0x18 },
0294     { .rfmax = 513300, .val = 0x17 },
0295     { .rfmax = 531800, .val = 0x16 },
0296     { .rfmax = 550300, .val = 0x15 },
0297     { .rfmax = 568900, .val = 0x14 },
0298     { .rfmax = 587400, .val = 0x13 },
0299     { .rfmax = 605900, .val = 0x12 },
0300     { .rfmax = 624400, .val = 0x11 },
0301     { .rfmax = 642900, .val = 0x10 },
0302     { .rfmax = 661400, .val = 0x0f },
0303     { .rfmax = 679900, .val = 0x0e },
0304     { .rfmax = 698400, .val = 0x0d },
0305     { .rfmax = 716900, .val = 0x0c },
0306     { .rfmax = 735400, .val = 0x0b },
0307     { .rfmax = 753900, .val = 0x0a },
0308     { .rfmax = 772500, .val = 0x09 },
0309     { .rfmax = 791000, .val = 0x08 },
0310     { .rfmax = 809500, .val = 0x07 },
0311     { .rfmax = 828000, .val = 0x06 },
0312     { .rfmax = 846500, .val = 0x05 },
0313     { .rfmax = 865000, .val = 0x04 },
0314     { .rfmax =      0, .val = 0x00 }, /* end */
0315 };
0316 
0317 static struct tda18271_map tda18271c1_rf_cal[] = {
0318     { .rfmax = 41000, .val = 0x1e },
0319     { .rfmax = 43000, .val = 0x30 },
0320     { .rfmax = 45000, .val = 0x43 },
0321     { .rfmax = 46000, .val = 0x4d },
0322     { .rfmax = 47000, .val = 0x54 },
0323     { .rfmax = 47900, .val = 0x64 },
0324     { .rfmax = 49100, .val = 0x20 },
0325     { .rfmax = 50000, .val = 0x22 },
0326     { .rfmax = 51000, .val = 0x2a },
0327     { .rfmax = 53000, .val = 0x32 },
0328     { .rfmax = 55000, .val = 0x35 },
0329     { .rfmax = 56000, .val = 0x3c },
0330     { .rfmax = 57000, .val = 0x3f },
0331     { .rfmax = 58000, .val = 0x48 },
0332     { .rfmax = 59000, .val = 0x4d },
0333     { .rfmax = 60000, .val = 0x58 },
0334     { .rfmax = 61100, .val = 0x5f },
0335     { .rfmax =     0, .val = 0x00 }, /* end */
0336 };
0337 
0338 static struct tda18271_map tda18271c2_rf_cal[] = {
0339     { .rfmax =  41000, .val = 0x0f },
0340     { .rfmax =  43000, .val = 0x1c },
0341     { .rfmax =  45000, .val = 0x2f },
0342     { .rfmax =  46000, .val = 0x39 },
0343     { .rfmax =  47000, .val = 0x40 },
0344     { .rfmax =  47900, .val = 0x50 },
0345     { .rfmax =  49100, .val = 0x16 },
0346     { .rfmax =  50000, .val = 0x18 },
0347     { .rfmax =  51000, .val = 0x20 },
0348     { .rfmax =  53000, .val = 0x28 },
0349     { .rfmax =  55000, .val = 0x2b },
0350     { .rfmax =  56000, .val = 0x32 },
0351     { .rfmax =  57000, .val = 0x35 },
0352     { .rfmax =  58000, .val = 0x3e },
0353     { .rfmax =  59000, .val = 0x43 },
0354     { .rfmax =  60000, .val = 0x4e },
0355     { .rfmax =  61100, .val = 0x55 },
0356     { .rfmax =  63000, .val = 0x0f },
0357     { .rfmax =  64000, .val = 0x11 },
0358     { .rfmax =  65000, .val = 0x12 },
0359     { .rfmax =  66000, .val = 0x15 },
0360     { .rfmax =  67000, .val = 0x16 },
0361     { .rfmax =  68000, .val = 0x17 },
0362     { .rfmax =  70000, .val = 0x19 },
0363     { .rfmax =  71000, .val = 0x1c },
0364     { .rfmax =  72000, .val = 0x1d },
0365     { .rfmax =  73000, .val = 0x1f },
0366     { .rfmax =  74000, .val = 0x20 },
0367     { .rfmax =  75000, .val = 0x21 },
0368     { .rfmax =  76000, .val = 0x24 },
0369     { .rfmax =  77000, .val = 0x25 },
0370     { .rfmax =  78000, .val = 0x27 },
0371     { .rfmax =  80000, .val = 0x28 },
0372     { .rfmax =  81000, .val = 0x29 },
0373     { .rfmax =  82000, .val = 0x2d },
0374     { .rfmax =  83000, .val = 0x2e },
0375     { .rfmax =  84000, .val = 0x2f },
0376     { .rfmax =  85000, .val = 0x31 },
0377     { .rfmax =  86000, .val = 0x33 },
0378     { .rfmax =  87000, .val = 0x34 },
0379     { .rfmax =  88000, .val = 0x35 },
0380     { .rfmax =  89000, .val = 0x37 },
0381     { .rfmax =  90000, .val = 0x38 },
0382     { .rfmax =  91000, .val = 0x39 },
0383     { .rfmax =  93000, .val = 0x3c },
0384     { .rfmax =  94000, .val = 0x3e },
0385     { .rfmax =  95000, .val = 0x3f },
0386     { .rfmax =  96000, .val = 0x40 },
0387     { .rfmax =  97000, .val = 0x42 },
0388     { .rfmax =  99000, .val = 0x45 },
0389     { .rfmax = 100000, .val = 0x46 },
0390     { .rfmax = 102000, .val = 0x48 },
0391     { .rfmax = 103000, .val = 0x4a },
0392     { .rfmax = 105000, .val = 0x4d },
0393     { .rfmax = 106000, .val = 0x4e },
0394     { .rfmax = 107000, .val = 0x50 },
0395     { .rfmax = 108000, .val = 0x51 },
0396     { .rfmax = 110000, .val = 0x54 },
0397     { .rfmax = 111000, .val = 0x56 },
0398     { .rfmax = 112000, .val = 0x57 },
0399     { .rfmax = 113000, .val = 0x58 },
0400     { .rfmax = 114000, .val = 0x59 },
0401     { .rfmax = 115000, .val = 0x5c },
0402     { .rfmax = 116000, .val = 0x5d },
0403     { .rfmax = 117000, .val = 0x5f },
0404     { .rfmax = 119000, .val = 0x60 },
0405     { .rfmax = 120000, .val = 0x64 },
0406     { .rfmax = 121000, .val = 0x65 },
0407     { .rfmax = 122000, .val = 0x66 },
0408     { .rfmax = 123000, .val = 0x68 },
0409     { .rfmax = 124000, .val = 0x69 },
0410     { .rfmax = 125000, .val = 0x6c },
0411     { .rfmax = 126000, .val = 0x6d },
0412     { .rfmax = 127000, .val = 0x6e },
0413     { .rfmax = 128000, .val = 0x70 },
0414     { .rfmax = 129000, .val = 0x71 },
0415     { .rfmax = 130000, .val = 0x75 },
0416     { .rfmax = 131000, .val = 0x77 },
0417     { .rfmax = 132000, .val = 0x78 },
0418     { .rfmax = 133000, .val = 0x7b },
0419     { .rfmax = 134000, .val = 0x7e },
0420     { .rfmax = 135000, .val = 0x81 },
0421     { .rfmax = 136000, .val = 0x82 },
0422     { .rfmax = 137000, .val = 0x87 },
0423     { .rfmax = 138000, .val = 0x88 },
0424     { .rfmax = 139000, .val = 0x8d },
0425     { .rfmax = 140000, .val = 0x8e },
0426     { .rfmax = 141000, .val = 0x91 },
0427     { .rfmax = 142000, .val = 0x95 },
0428     { .rfmax = 143000, .val = 0x9a },
0429     { .rfmax = 144000, .val = 0x9d },
0430     { .rfmax = 145000, .val = 0xa1 },
0431     { .rfmax = 146000, .val = 0xa2 },
0432     { .rfmax = 147000, .val = 0xa4 },
0433     { .rfmax = 148000, .val = 0xa9 },
0434     { .rfmax = 149000, .val = 0xae },
0435     { .rfmax = 150000, .val = 0xb0 },
0436     { .rfmax = 151000, .val = 0xb1 },
0437     { .rfmax = 152000, .val = 0xb7 },
0438     { .rfmax = 152600, .val = 0xbd },
0439     { .rfmax = 154000, .val = 0x20 },
0440     { .rfmax = 155000, .val = 0x22 },
0441     { .rfmax = 156000, .val = 0x24 },
0442     { .rfmax = 157000, .val = 0x25 },
0443     { .rfmax = 158000, .val = 0x27 },
0444     { .rfmax = 159000, .val = 0x29 },
0445     { .rfmax = 160000, .val = 0x2c },
0446     { .rfmax = 161000, .val = 0x2d },
0447     { .rfmax = 163000, .val = 0x2e },
0448     { .rfmax = 164000, .val = 0x2f },
0449     { .rfmax = 164700, .val = 0x30 },
0450     { .rfmax = 166000, .val = 0x11 },
0451     { .rfmax = 167000, .val = 0x12 },
0452     { .rfmax = 168000, .val = 0x13 },
0453     { .rfmax = 169000, .val = 0x14 },
0454     { .rfmax = 170000, .val = 0x15 },
0455     { .rfmax = 172000, .val = 0x16 },
0456     { .rfmax = 173000, .val = 0x17 },
0457     { .rfmax = 174000, .val = 0x18 },
0458     { .rfmax = 175000, .val = 0x1a },
0459     { .rfmax = 176000, .val = 0x1b },
0460     { .rfmax = 178000, .val = 0x1d },
0461     { .rfmax = 179000, .val = 0x1e },
0462     { .rfmax = 180000, .val = 0x1f },
0463     { .rfmax = 181000, .val = 0x20 },
0464     { .rfmax = 182000, .val = 0x21 },
0465     { .rfmax = 183000, .val = 0x22 },
0466     { .rfmax = 184000, .val = 0x24 },
0467     { .rfmax = 185000, .val = 0x25 },
0468     { .rfmax = 186000, .val = 0x26 },
0469     { .rfmax = 187000, .val = 0x27 },
0470     { .rfmax = 188000, .val = 0x29 },
0471     { .rfmax = 189000, .val = 0x2a },
0472     { .rfmax = 190000, .val = 0x2c },
0473     { .rfmax = 191000, .val = 0x2d },
0474     { .rfmax = 192000, .val = 0x2e },
0475     { .rfmax = 193000, .val = 0x2f },
0476     { .rfmax = 194000, .val = 0x30 },
0477     { .rfmax = 195000, .val = 0x33 },
0478     { .rfmax = 196000, .val = 0x35 },
0479     { .rfmax = 198000, .val = 0x36 },
0480     { .rfmax = 200000, .val = 0x38 },
0481     { .rfmax = 201000, .val = 0x3c },
0482     { .rfmax = 202000, .val = 0x3d },
0483     { .rfmax = 203500, .val = 0x3e },
0484     { .rfmax = 206000, .val = 0x0e },
0485     { .rfmax = 208000, .val = 0x0f },
0486     { .rfmax = 212000, .val = 0x10 },
0487     { .rfmax = 216000, .val = 0x11 },
0488     { .rfmax = 217000, .val = 0x12 },
0489     { .rfmax = 218000, .val = 0x13 },
0490     { .rfmax = 220000, .val = 0x14 },
0491     { .rfmax = 222000, .val = 0x15 },
0492     { .rfmax = 225000, .val = 0x16 },
0493     { .rfmax = 228000, .val = 0x17 },
0494     { .rfmax = 231000, .val = 0x18 },
0495     { .rfmax = 234000, .val = 0x19 },
0496     { .rfmax = 235000, .val = 0x1a },
0497     { .rfmax = 236000, .val = 0x1b },
0498     { .rfmax = 237000, .val = 0x1c },
0499     { .rfmax = 240000, .val = 0x1d },
0500     { .rfmax = 242000, .val = 0x1e },
0501     { .rfmax = 244000, .val = 0x1f },
0502     { .rfmax = 247000, .val = 0x20 },
0503     { .rfmax = 249000, .val = 0x21 },
0504     { .rfmax = 252000, .val = 0x22 },
0505     { .rfmax = 253000, .val = 0x23 },
0506     { .rfmax = 254000, .val = 0x24 },
0507     { .rfmax = 256000, .val = 0x25 },
0508     { .rfmax = 259000, .val = 0x26 },
0509     { .rfmax = 262000, .val = 0x27 },
0510     { .rfmax = 264000, .val = 0x28 },
0511     { .rfmax = 267000, .val = 0x29 },
0512     { .rfmax = 269000, .val = 0x2a },
0513     { .rfmax = 271000, .val = 0x2b },
0514     { .rfmax = 273000, .val = 0x2c },
0515     { .rfmax = 275000, .val = 0x2d },
0516     { .rfmax = 277000, .val = 0x2e },
0517     { .rfmax = 279000, .val = 0x2f },
0518     { .rfmax = 282000, .val = 0x30 },
0519     { .rfmax = 284000, .val = 0x31 },
0520     { .rfmax = 286000, .val = 0x32 },
0521     { .rfmax = 287000, .val = 0x33 },
0522     { .rfmax = 290000, .val = 0x34 },
0523     { .rfmax = 293000, .val = 0x35 },
0524     { .rfmax = 295000, .val = 0x36 },
0525     { .rfmax = 297000, .val = 0x37 },
0526     { .rfmax = 300000, .val = 0x38 },
0527     { .rfmax = 303000, .val = 0x39 },
0528     { .rfmax = 305000, .val = 0x3a },
0529     { .rfmax = 306000, .val = 0x3b },
0530     { .rfmax = 307000, .val = 0x3c },
0531     { .rfmax = 310000, .val = 0x3d },
0532     { .rfmax = 312000, .val = 0x3e },
0533     { .rfmax = 315000, .val = 0x3f },
0534     { .rfmax = 318000, .val = 0x40 },
0535     { .rfmax = 320000, .val = 0x41 },
0536     { .rfmax = 323000, .val = 0x42 },
0537     { .rfmax = 324000, .val = 0x43 },
0538     { .rfmax = 325000, .val = 0x44 },
0539     { .rfmax = 327000, .val = 0x45 },
0540     { .rfmax = 331000, .val = 0x46 },
0541     { .rfmax = 334000, .val = 0x47 },
0542     { .rfmax = 337000, .val = 0x48 },
0543     { .rfmax = 339000, .val = 0x49 },
0544     { .rfmax = 340000, .val = 0x4a },
0545     { .rfmax = 341000, .val = 0x4b },
0546     { .rfmax = 343000, .val = 0x4c },
0547     { .rfmax = 345000, .val = 0x4d },
0548     { .rfmax = 349000, .val = 0x4e },
0549     { .rfmax = 352000, .val = 0x4f },
0550     { .rfmax = 353000, .val = 0x50 },
0551     { .rfmax = 355000, .val = 0x51 },
0552     { .rfmax = 357000, .val = 0x52 },
0553     { .rfmax = 359000, .val = 0x53 },
0554     { .rfmax = 361000, .val = 0x54 },
0555     { .rfmax = 362000, .val = 0x55 },
0556     { .rfmax = 364000, .val = 0x56 },
0557     { .rfmax = 368000, .val = 0x57 },
0558     { .rfmax = 370000, .val = 0x58 },
0559     { .rfmax = 372000, .val = 0x59 },
0560     { .rfmax = 375000, .val = 0x5a },
0561     { .rfmax = 376000, .val = 0x5b },
0562     { .rfmax = 377000, .val = 0x5c },
0563     { .rfmax = 379000, .val = 0x5d },
0564     { .rfmax = 382000, .val = 0x5e },
0565     { .rfmax = 384000, .val = 0x5f },
0566     { .rfmax = 385000, .val = 0x60 },
0567     { .rfmax = 386000, .val = 0x61 },
0568     { .rfmax = 388000, .val = 0x62 },
0569     { .rfmax = 390000, .val = 0x63 },
0570     { .rfmax = 393000, .val = 0x64 },
0571     { .rfmax = 394000, .val = 0x65 },
0572     { .rfmax = 396000, .val = 0x66 },
0573     { .rfmax = 397000, .val = 0x67 },
0574     { .rfmax = 398000, .val = 0x68 },
0575     { .rfmax = 400000, .val = 0x69 },
0576     { .rfmax = 402000, .val = 0x6a },
0577     { .rfmax = 403000, .val = 0x6b },
0578     { .rfmax = 407000, .val = 0x6c },
0579     { .rfmax = 408000, .val = 0x6d },
0580     { .rfmax = 409000, .val = 0x6e },
0581     { .rfmax = 410000, .val = 0x6f },
0582     { .rfmax = 411000, .val = 0x70 },
0583     { .rfmax = 412000, .val = 0x71 },
0584     { .rfmax = 413000, .val = 0x72 },
0585     { .rfmax = 414000, .val = 0x73 },
0586     { .rfmax = 417000, .val = 0x74 },
0587     { .rfmax = 418000, .val = 0x75 },
0588     { .rfmax = 420000, .val = 0x76 },
0589     { .rfmax = 422000, .val = 0x77 },
0590     { .rfmax = 423000, .val = 0x78 },
0591     { .rfmax = 424000, .val = 0x79 },
0592     { .rfmax = 427000, .val = 0x7a },
0593     { .rfmax = 428000, .val = 0x7b },
0594     { .rfmax = 429000, .val = 0x7d },
0595     { .rfmax = 432000, .val = 0x7f },
0596     { .rfmax = 434000, .val = 0x80 },
0597     { .rfmax = 435000, .val = 0x81 },
0598     { .rfmax = 436000, .val = 0x83 },
0599     { .rfmax = 437000, .val = 0x84 },
0600     { .rfmax = 438000, .val = 0x85 },
0601     { .rfmax = 439000, .val = 0x86 },
0602     { .rfmax = 440000, .val = 0x87 },
0603     { .rfmax = 441000, .val = 0x88 },
0604     { .rfmax = 442000, .val = 0x89 },
0605     { .rfmax = 445000, .val = 0x8a },
0606     { .rfmax = 446000, .val = 0x8b },
0607     { .rfmax = 447000, .val = 0x8c },
0608     { .rfmax = 448000, .val = 0x8e },
0609     { .rfmax = 449000, .val = 0x8f },
0610     { .rfmax = 450000, .val = 0x90 },
0611     { .rfmax = 452000, .val = 0x91 },
0612     { .rfmax = 453000, .val = 0x93 },
0613     { .rfmax = 454000, .val = 0x94 },
0614     { .rfmax = 456000, .val = 0x96 },
0615     { .rfmax = 457800, .val = 0x98 },
0616     { .rfmax = 461000, .val = 0x11 },
0617     { .rfmax = 468000, .val = 0x12 },
0618     { .rfmax = 472000, .val = 0x13 },
0619     { .rfmax = 473000, .val = 0x14 },
0620     { .rfmax = 474000, .val = 0x15 },
0621     { .rfmax = 481000, .val = 0x16 },
0622     { .rfmax = 486000, .val = 0x17 },
0623     { .rfmax = 491000, .val = 0x18 },
0624     { .rfmax = 498000, .val = 0x19 },
0625     { .rfmax = 499000, .val = 0x1a },
0626     { .rfmax = 501000, .val = 0x1b },
0627     { .rfmax = 506000, .val = 0x1c },
0628     { .rfmax = 511000, .val = 0x1d },
0629     { .rfmax = 516000, .val = 0x1e },
0630     { .rfmax = 520000, .val = 0x1f },
0631     { .rfmax = 521000, .val = 0x20 },
0632     { .rfmax = 525000, .val = 0x21 },
0633     { .rfmax = 529000, .val = 0x22 },
0634     { .rfmax = 533000, .val = 0x23 },
0635     { .rfmax = 539000, .val = 0x24 },
0636     { .rfmax = 541000, .val = 0x25 },
0637     { .rfmax = 547000, .val = 0x26 },
0638     { .rfmax = 549000, .val = 0x27 },
0639     { .rfmax = 551000, .val = 0x28 },
0640     { .rfmax = 556000, .val = 0x29 },
0641     { .rfmax = 561000, .val = 0x2a },
0642     { .rfmax = 563000, .val = 0x2b },
0643     { .rfmax = 565000, .val = 0x2c },
0644     { .rfmax = 569000, .val = 0x2d },
0645     { .rfmax = 571000, .val = 0x2e },
0646     { .rfmax = 577000, .val = 0x2f },
0647     { .rfmax = 580000, .val = 0x30 },
0648     { .rfmax = 582000, .val = 0x31 },
0649     { .rfmax = 584000, .val = 0x32 },
0650     { .rfmax = 588000, .val = 0x33 },
0651     { .rfmax = 591000, .val = 0x34 },
0652     { .rfmax = 596000, .val = 0x35 },
0653     { .rfmax = 598000, .val = 0x36 },
0654     { .rfmax = 603000, .val = 0x37 },
0655     { .rfmax = 604000, .val = 0x38 },
0656     { .rfmax = 606000, .val = 0x39 },
0657     { .rfmax = 612000, .val = 0x3a },
0658     { .rfmax = 615000, .val = 0x3b },
0659     { .rfmax = 617000, .val = 0x3c },
0660     { .rfmax = 621000, .val = 0x3d },
0661     { .rfmax = 622000, .val = 0x3e },
0662     { .rfmax = 625000, .val = 0x3f },
0663     { .rfmax = 632000, .val = 0x40 },
0664     { .rfmax = 633000, .val = 0x41 },
0665     { .rfmax = 634000, .val = 0x42 },
0666     { .rfmax = 642000, .val = 0x43 },
0667     { .rfmax = 643000, .val = 0x44 },
0668     { .rfmax = 647000, .val = 0x45 },
0669     { .rfmax = 650000, .val = 0x46 },
0670     { .rfmax = 652000, .val = 0x47 },
0671     { .rfmax = 657000, .val = 0x48 },
0672     { .rfmax = 661000, .val = 0x49 },
0673     { .rfmax = 662000, .val = 0x4a },
0674     { .rfmax = 665000, .val = 0x4b },
0675     { .rfmax = 667000, .val = 0x4c },
0676     { .rfmax = 670000, .val = 0x4d },
0677     { .rfmax = 673000, .val = 0x4e },
0678     { .rfmax = 676000, .val = 0x4f },
0679     { .rfmax = 677000, .val = 0x50 },
0680     { .rfmax = 681000, .val = 0x51 },
0681     { .rfmax = 683000, .val = 0x52 },
0682     { .rfmax = 686000, .val = 0x53 },
0683     { .rfmax = 688000, .val = 0x54 },
0684     { .rfmax = 689000, .val = 0x55 },
0685     { .rfmax = 691000, .val = 0x56 },
0686     { .rfmax = 695000, .val = 0x57 },
0687     { .rfmax = 698000, .val = 0x58 },
0688     { .rfmax = 703000, .val = 0x59 },
0689     { .rfmax = 704000, .val = 0x5a },
0690     { .rfmax = 705000, .val = 0x5b },
0691     { .rfmax = 707000, .val = 0x5c },
0692     { .rfmax = 710000, .val = 0x5d },
0693     { .rfmax = 712000, .val = 0x5e },
0694     { .rfmax = 717000, .val = 0x5f },
0695     { .rfmax = 718000, .val = 0x60 },
0696     { .rfmax = 721000, .val = 0x61 },
0697     { .rfmax = 722000, .val = 0x62 },
0698     { .rfmax = 723000, .val = 0x63 },
0699     { .rfmax = 725000, .val = 0x64 },
0700     { .rfmax = 727000, .val = 0x65 },
0701     { .rfmax = 730000, .val = 0x66 },
0702     { .rfmax = 732000, .val = 0x67 },
0703     { .rfmax = 735000, .val = 0x68 },
0704     { .rfmax = 740000, .val = 0x69 },
0705     { .rfmax = 741000, .val = 0x6a },
0706     { .rfmax = 742000, .val = 0x6b },
0707     { .rfmax = 743000, .val = 0x6c },
0708     { .rfmax = 745000, .val = 0x6d },
0709     { .rfmax = 747000, .val = 0x6e },
0710     { .rfmax = 748000, .val = 0x6f },
0711     { .rfmax = 750000, .val = 0x70 },
0712     { .rfmax = 752000, .val = 0x71 },
0713     { .rfmax = 754000, .val = 0x72 },
0714     { .rfmax = 757000, .val = 0x73 },
0715     { .rfmax = 758000, .val = 0x74 },
0716     { .rfmax = 760000, .val = 0x75 },
0717     { .rfmax = 763000, .val = 0x76 },
0718     { .rfmax = 764000, .val = 0x77 },
0719     { .rfmax = 766000, .val = 0x78 },
0720     { .rfmax = 767000, .val = 0x79 },
0721     { .rfmax = 768000, .val = 0x7a },
0722     { .rfmax = 773000, .val = 0x7b },
0723     { .rfmax = 774000, .val = 0x7c },
0724     { .rfmax = 776000, .val = 0x7d },
0725     { .rfmax = 777000, .val = 0x7e },
0726     { .rfmax = 778000, .val = 0x7f },
0727     { .rfmax = 779000, .val = 0x80 },
0728     { .rfmax = 781000, .val = 0x81 },
0729     { .rfmax = 783000, .val = 0x82 },
0730     { .rfmax = 784000, .val = 0x83 },
0731     { .rfmax = 785000, .val = 0x84 },
0732     { .rfmax = 786000, .val = 0x85 },
0733     { .rfmax = 793000, .val = 0x86 },
0734     { .rfmax = 794000, .val = 0x87 },
0735     { .rfmax = 795000, .val = 0x88 },
0736     { .rfmax = 797000, .val = 0x89 },
0737     { .rfmax = 799000, .val = 0x8a },
0738     { .rfmax = 801000, .val = 0x8b },
0739     { .rfmax = 802000, .val = 0x8c },
0740     { .rfmax = 803000, .val = 0x8d },
0741     { .rfmax = 804000, .val = 0x8e },
0742     { .rfmax = 810000, .val = 0x90 },
0743     { .rfmax = 811000, .val = 0x91 },
0744     { .rfmax = 812000, .val = 0x92 },
0745     { .rfmax = 814000, .val = 0x93 },
0746     { .rfmax = 816000, .val = 0x94 },
0747     { .rfmax = 817000, .val = 0x96 },
0748     { .rfmax = 818000, .val = 0x97 },
0749     { .rfmax = 820000, .val = 0x98 },
0750     { .rfmax = 821000, .val = 0x99 },
0751     { .rfmax = 822000, .val = 0x9a },
0752     { .rfmax = 828000, .val = 0x9b },
0753     { .rfmax = 829000, .val = 0x9d },
0754     { .rfmax = 830000, .val = 0x9f },
0755     { .rfmax = 831000, .val = 0xa0 },
0756     { .rfmax = 833000, .val = 0xa1 },
0757     { .rfmax = 835000, .val = 0xa2 },
0758     { .rfmax = 836000, .val = 0xa3 },
0759     { .rfmax = 837000, .val = 0xa4 },
0760     { .rfmax = 838000, .val = 0xa6 },
0761     { .rfmax = 840000, .val = 0xa8 },
0762     { .rfmax = 842000, .val = 0xa9 },
0763     { .rfmax = 845000, .val = 0xaa },
0764     { .rfmax = 846000, .val = 0xab },
0765     { .rfmax = 847000, .val = 0xad },
0766     { .rfmax = 848000, .val = 0xae },
0767     { .rfmax = 852000, .val = 0xaf },
0768     { .rfmax = 853000, .val = 0xb0 },
0769     { .rfmax = 858000, .val = 0xb1 },
0770     { .rfmax = 860000, .val = 0xb2 },
0771     { .rfmax = 861000, .val = 0xb3 },
0772     { .rfmax = 862000, .val = 0xb4 },
0773     { .rfmax = 863000, .val = 0xb6 },
0774     { .rfmax = 864000, .val = 0xb8 },
0775     { .rfmax = 865000, .val = 0xb9 },
0776     { .rfmax =      0, .val = 0x00 }, /* end */
0777 };
0778 
0779 static struct tda18271_map tda18271_ir_measure[] = {
0780     { .rfmax =  30000, .val = 4 },
0781     { .rfmax = 200000, .val = 5 },
0782     { .rfmax = 600000, .val = 6 },
0783     { .rfmax = 865000, .val = 7 },
0784     { .rfmax =      0, .val = 0 }, /* end */
0785 };
0786 
0787 static struct tda18271_map tda18271_rf_cal_dc_over_dt[] = {
0788     { .rfmax =  47900, .val = 0x00 },
0789     { .rfmax =  55000, .val = 0x00 },
0790     { .rfmax =  61100, .val = 0x0a },
0791     { .rfmax =  64000, .val = 0x0a },
0792     { .rfmax =  82000, .val = 0x14 },
0793     { .rfmax =  84000, .val = 0x19 },
0794     { .rfmax = 119000, .val = 0x1c },
0795     { .rfmax = 124000, .val = 0x20 },
0796     { .rfmax = 129000, .val = 0x2a },
0797     { .rfmax = 134000, .val = 0x32 },
0798     { .rfmax = 139000, .val = 0x39 },
0799     { .rfmax = 144000, .val = 0x3e },
0800     { .rfmax = 149000, .val = 0x3f },
0801     { .rfmax = 152600, .val = 0x40 },
0802     { .rfmax = 154000, .val = 0x40 },
0803     { .rfmax = 164700, .val = 0x41 },
0804     { .rfmax = 203500, .val = 0x32 },
0805     { .rfmax = 353000, .val = 0x19 },
0806     { .rfmax = 356000, .val = 0x1a },
0807     { .rfmax = 359000, .val = 0x1b },
0808     { .rfmax = 363000, .val = 0x1c },
0809     { .rfmax = 366000, .val = 0x1d },
0810     { .rfmax = 369000, .val = 0x1e },
0811     { .rfmax = 373000, .val = 0x1f },
0812     { .rfmax = 376000, .val = 0x20 },
0813     { .rfmax = 379000, .val = 0x21 },
0814     { .rfmax = 383000, .val = 0x22 },
0815     { .rfmax = 386000, .val = 0x23 },
0816     { .rfmax = 389000, .val = 0x24 },
0817     { .rfmax = 393000, .val = 0x25 },
0818     { .rfmax = 396000, .val = 0x26 },
0819     { .rfmax = 399000, .val = 0x27 },
0820     { .rfmax = 402000, .val = 0x28 },
0821     { .rfmax = 404000, .val = 0x29 },
0822     { .rfmax = 407000, .val = 0x2a },
0823     { .rfmax = 409000, .val = 0x2b },
0824     { .rfmax = 412000, .val = 0x2c },
0825     { .rfmax = 414000, .val = 0x2d },
0826     { .rfmax = 417000, .val = 0x2e },
0827     { .rfmax = 419000, .val = 0x2f },
0828     { .rfmax = 422000, .val = 0x30 },
0829     { .rfmax = 424000, .val = 0x31 },
0830     { .rfmax = 427000, .val = 0x32 },
0831     { .rfmax = 429000, .val = 0x33 },
0832     { .rfmax = 432000, .val = 0x34 },
0833     { .rfmax = 434000, .val = 0x35 },
0834     { .rfmax = 437000, .val = 0x36 },
0835     { .rfmax = 439000, .val = 0x37 },
0836     { .rfmax = 442000, .val = 0x38 },
0837     { .rfmax = 444000, .val = 0x39 },
0838     { .rfmax = 447000, .val = 0x3a },
0839     { .rfmax = 449000, .val = 0x3b },
0840     { .rfmax = 457800, .val = 0x3c },
0841     { .rfmax = 465000, .val = 0x0f },
0842     { .rfmax = 477000, .val = 0x12 },
0843     { .rfmax = 483000, .val = 0x14 },
0844     { .rfmax = 502000, .val = 0x19 },
0845     { .rfmax = 508000, .val = 0x1b },
0846     { .rfmax = 519000, .val = 0x1c },
0847     { .rfmax = 522000, .val = 0x1d },
0848     { .rfmax = 524000, .val = 0x1e },
0849     { .rfmax = 534000, .val = 0x1f },
0850     { .rfmax = 549000, .val = 0x20 },
0851     { .rfmax = 554000, .val = 0x22 },
0852     { .rfmax = 584000, .val = 0x24 },
0853     { .rfmax = 589000, .val = 0x26 },
0854     { .rfmax = 658000, .val = 0x27 },
0855     { .rfmax = 664000, .val = 0x2c },
0856     { .rfmax = 669000, .val = 0x2d },
0857     { .rfmax = 699000, .val = 0x2e },
0858     { .rfmax = 704000, .val = 0x30 },
0859     { .rfmax = 709000, .val = 0x31 },
0860     { .rfmax = 714000, .val = 0x32 },
0861     { .rfmax = 724000, .val = 0x33 },
0862     { .rfmax = 729000, .val = 0x36 },
0863     { .rfmax = 739000, .val = 0x38 },
0864     { .rfmax = 744000, .val = 0x39 },
0865     { .rfmax = 749000, .val = 0x3b },
0866     { .rfmax = 754000, .val = 0x3c },
0867     { .rfmax = 759000, .val = 0x3d },
0868     { .rfmax = 764000, .val = 0x3e },
0869     { .rfmax = 769000, .val = 0x3f },
0870     { .rfmax = 774000, .val = 0x40 },
0871     { .rfmax = 779000, .val = 0x41 },
0872     { .rfmax = 784000, .val = 0x43 },
0873     { .rfmax = 789000, .val = 0x46 },
0874     { .rfmax = 794000, .val = 0x48 },
0875     { .rfmax = 799000, .val = 0x4b },
0876     { .rfmax = 804000, .val = 0x4f },
0877     { .rfmax = 809000, .val = 0x54 },
0878     { .rfmax = 814000, .val = 0x59 },
0879     { .rfmax = 819000, .val = 0x5d },
0880     { .rfmax = 824000, .val = 0x61 },
0881     { .rfmax = 829000, .val = 0x68 },
0882     { .rfmax = 834000, .val = 0x6e },
0883     { .rfmax = 839000, .val = 0x75 },
0884     { .rfmax = 844000, .val = 0x7e },
0885     { .rfmax = 849000, .val = 0x82 },
0886     { .rfmax = 854000, .val = 0x84 },
0887     { .rfmax = 859000, .val = 0x8f },
0888     { .rfmax = 865000, .val = 0x9a },
0889     { .rfmax =      0, .val = 0x00 }, /* end */
0890 };
0891 
0892 /*---------------------------------------------------------------------*/
0893 
0894 struct tda18271_thermo_map {
0895     u8 d;
0896     u8 r0;
0897     u8 r1;
0898 };
0899 
0900 static struct tda18271_thermo_map tda18271_thermometer[] = {
0901     { .d = 0x00, .r0 = 60, .r1 =  92 },
0902     { .d = 0x01, .r0 = 62, .r1 =  94 },
0903     { .d = 0x02, .r0 = 66, .r1 =  98 },
0904     { .d = 0x03, .r0 = 64, .r1 =  96 },
0905     { .d = 0x04, .r0 = 74, .r1 = 106 },
0906     { .d = 0x05, .r0 = 72, .r1 = 104 },
0907     { .d = 0x06, .r0 = 68, .r1 = 100 },
0908     { .d = 0x07, .r0 = 70, .r1 = 102 },
0909     { .d = 0x08, .r0 = 90, .r1 = 122 },
0910     { .d = 0x09, .r0 = 88, .r1 = 120 },
0911     { .d = 0x0a, .r0 = 84, .r1 = 116 },
0912     { .d = 0x0b, .r0 = 86, .r1 = 118 },
0913     { .d = 0x0c, .r0 = 76, .r1 = 108 },
0914     { .d = 0x0d, .r0 = 78, .r1 = 110 },
0915     { .d = 0x0e, .r0 = 82, .r1 = 114 },
0916     { .d = 0x0f, .r0 = 80, .r1 = 112 },
0917     { .d = 0x00, .r0 =  0, .r1 =   0 }, /* end */
0918 };
0919 
0920 int tda18271_lookup_thermometer(struct dvb_frontend *fe)
0921 {
0922     struct tda18271_priv *priv = fe->tuner_priv;
0923     unsigned char *regs = priv->tda18271_regs;
0924     int val, i = 0;
0925 
0926     while (tda18271_thermometer[i].d < (regs[R_TM] & 0x0f)) {
0927         if (tda18271_thermometer[i + 1].d == 0)
0928             break;
0929         i++;
0930     }
0931 
0932     if ((regs[R_TM] & 0x20) == 0x20)
0933         val = tda18271_thermometer[i].r1;
0934     else
0935         val = tda18271_thermometer[i].r0;
0936 
0937     tda_map("(%d) tm = %d\n", i, val);
0938 
0939     return val;
0940 }
0941 
0942 /*---------------------------------------------------------------------*/
0943 
0944 struct tda18271_cid_target_map {
0945     u32 rfmax;
0946     u8  target;
0947     u16 limit;
0948 };
0949 
0950 static struct tda18271_cid_target_map tda18271_cid_target[] = {
0951     { .rfmax =  46000, .target = 0x04, .limit =  1800 },
0952     { .rfmax =  52200, .target = 0x0a, .limit =  1500 },
0953     { .rfmax =  70100, .target = 0x01, .limit =  4000 },
0954     { .rfmax = 136800, .target = 0x18, .limit =  4000 },
0955     { .rfmax = 156700, .target = 0x18, .limit =  4000 },
0956     { .rfmax = 186250, .target = 0x0a, .limit =  4000 },
0957     { .rfmax = 230000, .target = 0x0a, .limit =  4000 },
0958     { .rfmax = 345000, .target = 0x18, .limit =  4000 },
0959     { .rfmax = 426000, .target = 0x0e, .limit =  4000 },
0960     { .rfmax = 489500, .target = 0x1e, .limit =  4000 },
0961     { .rfmax = 697500, .target = 0x32, .limit =  4000 },
0962     { .rfmax = 842000, .target = 0x3a, .limit =  4000 },
0963     { .rfmax =      0, .target = 0x00, .limit =     0 }, /* end */
0964 };
0965 
0966 int tda18271_lookup_cid_target(struct dvb_frontend *fe,
0967                    u32 *freq, u8 *cid_target, u16 *count_limit)
0968 {
0969     struct tda18271_priv *priv = fe->tuner_priv;
0970     int i = 0;
0971 
0972     while ((tda18271_cid_target[i].rfmax * 1000) < *freq) {
0973         if (tda18271_cid_target[i + 1].rfmax == 0)
0974             break;
0975         i++;
0976     }
0977     *cid_target  = tda18271_cid_target[i].target;
0978     *count_limit = tda18271_cid_target[i].limit;
0979 
0980     tda_map("(%d) cid_target = %02x, count_limit = %d\n", i,
0981         tda18271_cid_target[i].target, tda18271_cid_target[i].limit);
0982 
0983     return 0;
0984 }
0985 
0986 /*---------------------------------------------------------------------*/
0987 
0988 static struct tda18271_rf_tracking_filter_cal tda18271_rf_band_template[] = {
0989     { .rfmax =  47900, .rfband = 0x00,
0990       .rf1_def =  46000, .rf2_def =      0, .rf3_def =      0 },
0991     { .rfmax =  61100, .rfband = 0x01,
0992       .rf1_def =  52200, .rf2_def =      0, .rf3_def =      0 },
0993     { .rfmax = 152600, .rfband = 0x02,
0994       .rf1_def =  70100, .rf2_def = 136800, .rf3_def =      0 },
0995     { .rfmax = 164700, .rfband = 0x03,
0996       .rf1_def = 156700, .rf2_def =      0, .rf3_def =      0 },
0997     { .rfmax = 203500, .rfband = 0x04,
0998       .rf1_def = 186250, .rf2_def =      0, .rf3_def =      0 },
0999     { .rfmax = 457800, .rfband = 0x05,
1000       .rf1_def = 230000, .rf2_def = 345000, .rf3_def = 426000 },
1001     { .rfmax = 865000, .rfband = 0x06,
1002       .rf1_def = 489500, .rf2_def = 697500, .rf3_def = 842000 },
1003     { .rfmax =      0, .rfband = 0x00,
1004       .rf1_def =      0, .rf2_def =      0, .rf3_def =      0 }, /* end */
1005 };
1006 
1007 int tda18271_lookup_rf_band(struct dvb_frontend *fe, u32 *freq, u8 *rf_band)
1008 {
1009     struct tda18271_priv *priv = fe->tuner_priv;
1010     struct tda18271_rf_tracking_filter_cal *map = priv->rf_cal_state;
1011     int i = 0;
1012 
1013     while ((map[i].rfmax * 1000) < *freq) {
1014         if (tda18271_debug & DBG_ADV)
1015             tda_map("(%d) rfmax = %d < freq = %d, rf1_def = %d, rf2_def = %d, rf3_def = %d, rf1 = %d, rf2 = %d, rf3 = %d, rf_a1 = %d, rf_a2 = %d, rf_b1 = %d, rf_b2 = %d\n",
1016                 i, map[i].rfmax * 1000, *freq,
1017                 map[i].rf1_def, map[i].rf2_def, map[i].rf3_def,
1018                 map[i].rf1, map[i].rf2, map[i].rf3,
1019                 map[i].rf_a1, map[i].rf_a2,
1020                 map[i].rf_b1, map[i].rf_b2);
1021         if (map[i].rfmax == 0)
1022             return -EINVAL;
1023         i++;
1024     }
1025     if (rf_band)
1026         *rf_band = map[i].rfband;
1027 
1028     tda_map("(%d) rf_band = %02x\n", i, map[i].rfband);
1029 
1030     return i;
1031 }
1032 
1033 /*---------------------------------------------------------------------*/
1034 
1035 struct tda18271_map_layout {
1036     struct tda18271_pll_map *main_pll;
1037     struct tda18271_pll_map *cal_pll;
1038 
1039     struct tda18271_map *rf_cal;
1040     struct tda18271_map *rf_cal_kmco;
1041     struct tda18271_map *rf_cal_dc_over_dt;
1042 
1043     struct tda18271_map *bp_filter;
1044     struct tda18271_map *rf_band;
1045     struct tda18271_map *gain_taper;
1046     struct tda18271_map *ir_measure;
1047 };
1048 
1049 /*---------------------------------------------------------------------*/
1050 
1051 int tda18271_lookup_pll_map(struct dvb_frontend *fe,
1052                 enum tda18271_map_type map_type,
1053                 u32 *freq, u8 *post_div, u8 *div)
1054 {
1055     struct tda18271_priv *priv = fe->tuner_priv;
1056     struct tda18271_pll_map *map = NULL;
1057     unsigned int i = 0;
1058     char *map_name;
1059     int ret = 0;
1060 
1061     BUG_ON(!priv->maps);
1062 
1063     switch (map_type) {
1064     case MAIN_PLL:
1065         map = priv->maps->main_pll;
1066         map_name = "main_pll";
1067         break;
1068     case CAL_PLL:
1069         map = priv->maps->cal_pll;
1070         map_name = "cal_pll";
1071         break;
1072     default:
1073         /* we should never get here */
1074         map_name = "undefined";
1075         break;
1076     }
1077 
1078     if (!map) {
1079         tda_warn("%s map is not set!\n", map_name);
1080         ret = -EINVAL;
1081         goto fail;
1082     }
1083 
1084     while ((map[i].lomax * 1000) < *freq) {
1085         if (map[i + 1].lomax == 0) {
1086             tda_map("%s: frequency (%d) out of range\n",
1087                 map_name, *freq);
1088             ret = -ERANGE;
1089             break;
1090         }
1091         i++;
1092     }
1093     *post_div = map[i].pd;
1094     *div      = map[i].d;
1095 
1096     tda_map("(%d) %s: post div = 0x%02x, div = 0x%02x\n",
1097         i, map_name, *post_div, *div);
1098 fail:
1099     return ret;
1100 }
1101 
1102 int tda18271_lookup_map(struct dvb_frontend *fe,
1103             enum tda18271_map_type map_type,
1104             u32 *freq, u8 *val)
1105 {
1106     struct tda18271_priv *priv = fe->tuner_priv;
1107     struct tda18271_map *map = NULL;
1108     unsigned int i = 0;
1109     char *map_name;
1110     int ret = 0;
1111 
1112     BUG_ON(!priv->maps);
1113 
1114     switch (map_type) {
1115     case BP_FILTER:
1116         map = priv->maps->bp_filter;
1117         map_name = "bp_filter";
1118         break;
1119     case RF_CAL_KMCO:
1120         map = priv->maps->rf_cal_kmco;
1121         map_name = "km";
1122         break;
1123     case RF_BAND:
1124         map = priv->maps->rf_band;
1125         map_name = "rf_band";
1126         break;
1127     case GAIN_TAPER:
1128         map = priv->maps->gain_taper;
1129         map_name = "gain_taper";
1130         break;
1131     case RF_CAL:
1132         map = priv->maps->rf_cal;
1133         map_name = "rf_cal";
1134         break;
1135     case IR_MEASURE:
1136         map = priv->maps->ir_measure;
1137         map_name = "ir_measure";
1138         break;
1139     case RF_CAL_DC_OVER_DT:
1140         map = priv->maps->rf_cal_dc_over_dt;
1141         map_name = "rf_cal_dc_over_dt";
1142         break;
1143     default:
1144         /* we should never get here */
1145         map_name = "undefined";
1146         break;
1147     }
1148 
1149     if (!map) {
1150         tda_warn("%s map is not set!\n", map_name);
1151         ret = -EINVAL;
1152         goto fail;
1153     }
1154 
1155     while ((map[i].rfmax * 1000) < *freq) {
1156         if (map[i + 1].rfmax == 0) {
1157             tda_map("%s: frequency (%d) out of range\n",
1158                 map_name, *freq);
1159             ret = -ERANGE;
1160             break;
1161         }
1162         i++;
1163     }
1164     *val = map[i].val;
1165 
1166     tda_map("(%d) %s: 0x%02x\n", i, map_name, *val);
1167 fail:
1168     return ret;
1169 }
1170 
1171 /*---------------------------------------------------------------------*/
1172 
1173 static const struct tda18271_std_map tda18271c1_std_map = {
1174     .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0,
1175               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x18 */
1176     .atv_b    = { .if_freq = 6750, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1177               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1178     .atv_dk   = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,
1179               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */
1180     .atv_gh   = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,
1181               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */
1182     .atv_i    = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,
1183               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */
1184     .atv_l    = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,
1185               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */
1186     .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 7,
1187               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */
1188     .atv_mn   = { .if_freq = 5750, .fm_rfn = 0, .agc_mode = 1, .std = 5,
1189               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0d */
1190     .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4,
1191               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */
1192     .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4,
1193               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */
1194     .dvbt_7   = { .if_freq = 3800, .fm_rfn = 0, .agc_mode = 3, .std = 5,
1195               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */
1196     .dvbt_8   = { .if_freq = 4300, .fm_rfn = 0, .agc_mode = 3, .std = 6,
1197               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1e */
1198     .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,
1199               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */
1200     .qam_7    = { .if_freq = 4500, .fm_rfn = 0, .agc_mode = 3, .std = 6,
1201               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1e */
1202     .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7,
1203               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1f */
1204 };
1205 
1206 static const struct tda18271_std_map tda18271c2_std_map = {
1207     .fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0,
1208               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x18 */
1209     .atv_b    = { .if_freq = 6000, .fm_rfn = 0, .agc_mode = 1, .std = 5,
1210               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0d */
1211     .atv_dk   = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1212               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1213     .atv_gh   = { .if_freq = 7100, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1214               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1215     .atv_i    = { .if_freq = 7250, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1216               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1217     .atv_l    = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1218               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1219     .atv_lc   = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 6,
1220               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */
1221     .atv_mn   = { .if_freq = 5400, .fm_rfn = 0, .agc_mode = 1, .std = 4,
1222               .if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0c */
1223     .atsc_6   = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4,
1224               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */
1225     .dvbt_6   = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4,
1226               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */
1227     .dvbt_7   = { .if_freq = 3500, .fm_rfn = 0, .agc_mode = 3, .std = 4,
1228               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */
1229     .dvbt_8   = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,
1230               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */
1231     .qam_6    = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,
1232               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */
1233     .qam_7    = { .if_freq = 4500, .fm_rfn = 0, .agc_mode = 3, .std = 6,
1234               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1e */
1235     .qam_8    = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7,
1236               .if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1f */
1237 };
1238 
1239 /*---------------------------------------------------------------------*/
1240 
1241 static struct tda18271_map_layout tda18271c1_map_layout = {
1242     .main_pll          = tda18271c1_main_pll,
1243     .cal_pll           = tda18271c1_cal_pll,
1244 
1245     .rf_cal            = tda18271c1_rf_cal,
1246     .rf_cal_kmco       = tda18271c1_km,
1247 
1248     .bp_filter         = tda18271_bp_filter,
1249     .rf_band           = tda18271_rf_band,
1250     .gain_taper        = tda18271_gain_taper,
1251     .ir_measure        = tda18271_ir_measure,
1252 };
1253 
1254 static struct tda18271_map_layout tda18271c2_map_layout = {
1255     .main_pll          = tda18271c2_main_pll,
1256     .cal_pll           = tda18271c2_cal_pll,
1257 
1258     .rf_cal            = tda18271c2_rf_cal,
1259     .rf_cal_kmco       = tda18271c2_km,
1260 
1261     .rf_cal_dc_over_dt = tda18271_rf_cal_dc_over_dt,
1262 
1263     .bp_filter         = tda18271_bp_filter,
1264     .rf_band           = tda18271_rf_band,
1265     .gain_taper        = tda18271_gain_taper,
1266     .ir_measure        = tda18271_ir_measure,
1267 };
1268 
1269 int tda18271_assign_map_layout(struct dvb_frontend *fe)
1270 {
1271     struct tda18271_priv *priv = fe->tuner_priv;
1272     int ret = 0;
1273 
1274     switch (priv->id) {
1275     case TDA18271HDC1:
1276         priv->maps = &tda18271c1_map_layout;
1277         priv->std = tda18271c1_std_map;
1278         break;
1279     case TDA18271HDC2:
1280         priv->maps = &tda18271c2_map_layout;
1281         priv->std = tda18271c2_std_map;
1282         break;
1283     default:
1284         ret = -EINVAL;
1285         break;
1286     }
1287     memcpy(priv->rf_cal_state, &tda18271_rf_band_template,
1288            sizeof(tda18271_rf_band_template));
1289 
1290     return ret;
1291 }