Path: blob/master/drivers/media/common/tuners/tda18271-maps.c
15112 views
/*1tda18271-maps.c - driver for the Philips / NXP TDA18271 silicon tuner23Copyright (C) 2007, 2008 Michael Krufky <[email protected]>45This program is free software; you can redistribute it and/or modify6it under the terms of the GNU General Public License as published by7the Free Software Foundation; either version 2 of the License, or8(at your option) any later version.910This program is distributed in the hope that it will be useful,11but WITHOUT ANY WARRANTY; without even the implied warranty of12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13GNU General Public License for more details.1415You should have received a copy of the GNU General Public License16along with this program; if not, write to the Free Software17Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.18*/1920#include "tda18271-priv.h"2122struct tda18271_pll_map {23u32 lomax;24u8 pd; /* post div */25u8 d; /* div */26};2728struct tda18271_map {29u32 rfmax;30u8 val;31};3233/*---------------------------------------------------------------------*/3435static struct tda18271_pll_map tda18271c1_main_pll[] = {36{ .lomax = 32000, .pd = 0x5f, .d = 0xf0 },37{ .lomax = 35000, .pd = 0x5e, .d = 0xe0 },38{ .lomax = 37000, .pd = 0x5d, .d = 0xd0 },39{ .lomax = 41000, .pd = 0x5c, .d = 0xc0 },40{ .lomax = 44000, .pd = 0x5b, .d = 0xb0 },41{ .lomax = 49000, .pd = 0x5a, .d = 0xa0 },42{ .lomax = 54000, .pd = 0x59, .d = 0x90 },43{ .lomax = 61000, .pd = 0x58, .d = 0x80 },44{ .lomax = 65000, .pd = 0x4f, .d = 0x78 },45{ .lomax = 70000, .pd = 0x4e, .d = 0x70 },46{ .lomax = 75000, .pd = 0x4d, .d = 0x68 },47{ .lomax = 82000, .pd = 0x4c, .d = 0x60 },48{ .lomax = 89000, .pd = 0x4b, .d = 0x58 },49{ .lomax = 98000, .pd = 0x4a, .d = 0x50 },50{ .lomax = 109000, .pd = 0x49, .d = 0x48 },51{ .lomax = 123000, .pd = 0x48, .d = 0x40 },52{ .lomax = 131000, .pd = 0x3f, .d = 0x3c },53{ .lomax = 141000, .pd = 0x3e, .d = 0x38 },54{ .lomax = 151000, .pd = 0x3d, .d = 0x34 },55{ .lomax = 164000, .pd = 0x3c, .d = 0x30 },56{ .lomax = 179000, .pd = 0x3b, .d = 0x2c },57{ .lomax = 197000, .pd = 0x3a, .d = 0x28 },58{ .lomax = 219000, .pd = 0x39, .d = 0x24 },59{ .lomax = 246000, .pd = 0x38, .d = 0x20 },60{ .lomax = 263000, .pd = 0x2f, .d = 0x1e },61{ .lomax = 282000, .pd = 0x2e, .d = 0x1c },62{ .lomax = 303000, .pd = 0x2d, .d = 0x1a },63{ .lomax = 329000, .pd = 0x2c, .d = 0x18 },64{ .lomax = 359000, .pd = 0x2b, .d = 0x16 },65{ .lomax = 395000, .pd = 0x2a, .d = 0x14 },66{ .lomax = 438000, .pd = 0x29, .d = 0x12 },67{ .lomax = 493000, .pd = 0x28, .d = 0x10 },68{ .lomax = 526000, .pd = 0x1f, .d = 0x0f },69{ .lomax = 564000, .pd = 0x1e, .d = 0x0e },70{ .lomax = 607000, .pd = 0x1d, .d = 0x0d },71{ .lomax = 658000, .pd = 0x1c, .d = 0x0c },72{ .lomax = 718000, .pd = 0x1b, .d = 0x0b },73{ .lomax = 790000, .pd = 0x1a, .d = 0x0a },74{ .lomax = 877000, .pd = 0x19, .d = 0x09 },75{ .lomax = 987000, .pd = 0x18, .d = 0x08 },76{ .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */77};7879static struct tda18271_pll_map tda18271c2_main_pll[] = {80{ .lomax = 33125, .pd = 0x57, .d = 0xf0 },81{ .lomax = 35500, .pd = 0x56, .d = 0xe0 },82{ .lomax = 38188, .pd = 0x55, .d = 0xd0 },83{ .lomax = 41375, .pd = 0x54, .d = 0xc0 },84{ .lomax = 45125, .pd = 0x53, .d = 0xb0 },85{ .lomax = 49688, .pd = 0x52, .d = 0xa0 },86{ .lomax = 55188, .pd = 0x51, .d = 0x90 },87{ .lomax = 62125, .pd = 0x50, .d = 0x80 },88{ .lomax = 66250, .pd = 0x47, .d = 0x78 },89{ .lomax = 71000, .pd = 0x46, .d = 0x70 },90{ .lomax = 76375, .pd = 0x45, .d = 0x68 },91{ .lomax = 82750, .pd = 0x44, .d = 0x60 },92{ .lomax = 90250, .pd = 0x43, .d = 0x58 },93{ .lomax = 99375, .pd = 0x42, .d = 0x50 },94{ .lomax = 110375, .pd = 0x41, .d = 0x48 },95{ .lomax = 124250, .pd = 0x40, .d = 0x40 },96{ .lomax = 132500, .pd = 0x37, .d = 0x3c },97{ .lomax = 142000, .pd = 0x36, .d = 0x38 },98{ .lomax = 152750, .pd = 0x35, .d = 0x34 },99{ .lomax = 165500, .pd = 0x34, .d = 0x30 },100{ .lomax = 180500, .pd = 0x33, .d = 0x2c },101{ .lomax = 198750, .pd = 0x32, .d = 0x28 },102{ .lomax = 220750, .pd = 0x31, .d = 0x24 },103{ .lomax = 248500, .pd = 0x30, .d = 0x20 },104{ .lomax = 265000, .pd = 0x27, .d = 0x1e },105{ .lomax = 284000, .pd = 0x26, .d = 0x1c },106{ .lomax = 305500, .pd = 0x25, .d = 0x1a },107{ .lomax = 331000, .pd = 0x24, .d = 0x18 },108{ .lomax = 361000, .pd = 0x23, .d = 0x16 },109{ .lomax = 397500, .pd = 0x22, .d = 0x14 },110{ .lomax = 441500, .pd = 0x21, .d = 0x12 },111{ .lomax = 497000, .pd = 0x20, .d = 0x10 },112{ .lomax = 530000, .pd = 0x17, .d = 0x0f },113{ .lomax = 568000, .pd = 0x16, .d = 0x0e },114{ .lomax = 611000, .pd = 0x15, .d = 0x0d },115{ .lomax = 662000, .pd = 0x14, .d = 0x0c },116{ .lomax = 722000, .pd = 0x13, .d = 0x0b },117{ .lomax = 795000, .pd = 0x12, .d = 0x0a },118{ .lomax = 883000, .pd = 0x11, .d = 0x09 },119{ .lomax = 994000, .pd = 0x10, .d = 0x08 },120{ .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */121};122123static struct tda18271_pll_map tda18271c1_cal_pll[] = {124{ .lomax = 33000, .pd = 0xdd, .d = 0xd0 },125{ .lomax = 36000, .pd = 0xdc, .d = 0xc0 },126{ .lomax = 40000, .pd = 0xdb, .d = 0xb0 },127{ .lomax = 44000, .pd = 0xda, .d = 0xa0 },128{ .lomax = 49000, .pd = 0xd9, .d = 0x90 },129{ .lomax = 55000, .pd = 0xd8, .d = 0x80 },130{ .lomax = 63000, .pd = 0xd3, .d = 0x70 },131{ .lomax = 67000, .pd = 0xcd, .d = 0x68 },132{ .lomax = 73000, .pd = 0xcc, .d = 0x60 },133{ .lomax = 80000, .pd = 0xcb, .d = 0x58 },134{ .lomax = 88000, .pd = 0xca, .d = 0x50 },135{ .lomax = 98000, .pd = 0xc9, .d = 0x48 },136{ .lomax = 110000, .pd = 0xc8, .d = 0x40 },137{ .lomax = 126000, .pd = 0xc3, .d = 0x38 },138{ .lomax = 135000, .pd = 0xbd, .d = 0x34 },139{ .lomax = 147000, .pd = 0xbc, .d = 0x30 },140{ .lomax = 160000, .pd = 0xbb, .d = 0x2c },141{ .lomax = 176000, .pd = 0xba, .d = 0x28 },142{ .lomax = 196000, .pd = 0xb9, .d = 0x24 },143{ .lomax = 220000, .pd = 0xb8, .d = 0x20 },144{ .lomax = 252000, .pd = 0xb3, .d = 0x1c },145{ .lomax = 271000, .pd = 0xad, .d = 0x1a },146{ .lomax = 294000, .pd = 0xac, .d = 0x18 },147{ .lomax = 321000, .pd = 0xab, .d = 0x16 },148{ .lomax = 353000, .pd = 0xaa, .d = 0x14 },149{ .lomax = 392000, .pd = 0xa9, .d = 0x12 },150{ .lomax = 441000, .pd = 0xa8, .d = 0x10 },151{ .lomax = 505000, .pd = 0xa3, .d = 0x0e },152{ .lomax = 543000, .pd = 0x9d, .d = 0x0d },153{ .lomax = 589000, .pd = 0x9c, .d = 0x0c },154{ .lomax = 642000, .pd = 0x9b, .d = 0x0b },155{ .lomax = 707000, .pd = 0x9a, .d = 0x0a },156{ .lomax = 785000, .pd = 0x99, .d = 0x09 },157{ .lomax = 883000, .pd = 0x98, .d = 0x08 },158{ .lomax = 1010000, .pd = 0x93, .d = 0x07 },159{ .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */160};161162static struct tda18271_pll_map tda18271c2_cal_pll[] = {163{ .lomax = 33813, .pd = 0xdd, .d = 0xd0 },164{ .lomax = 36625, .pd = 0xdc, .d = 0xc0 },165{ .lomax = 39938, .pd = 0xdb, .d = 0xb0 },166{ .lomax = 43938, .pd = 0xda, .d = 0xa0 },167{ .lomax = 48813, .pd = 0xd9, .d = 0x90 },168{ .lomax = 54938, .pd = 0xd8, .d = 0x80 },169{ .lomax = 62813, .pd = 0xd3, .d = 0x70 },170{ .lomax = 67625, .pd = 0xcd, .d = 0x68 },171{ .lomax = 73250, .pd = 0xcc, .d = 0x60 },172{ .lomax = 79875, .pd = 0xcb, .d = 0x58 },173{ .lomax = 87875, .pd = 0xca, .d = 0x50 },174{ .lomax = 97625, .pd = 0xc9, .d = 0x48 },175{ .lomax = 109875, .pd = 0xc8, .d = 0x40 },176{ .lomax = 125625, .pd = 0xc3, .d = 0x38 },177{ .lomax = 135250, .pd = 0xbd, .d = 0x34 },178{ .lomax = 146500, .pd = 0xbc, .d = 0x30 },179{ .lomax = 159750, .pd = 0xbb, .d = 0x2c },180{ .lomax = 175750, .pd = 0xba, .d = 0x28 },181{ .lomax = 195250, .pd = 0xb9, .d = 0x24 },182{ .lomax = 219750, .pd = 0xb8, .d = 0x20 },183{ .lomax = 251250, .pd = 0xb3, .d = 0x1c },184{ .lomax = 270500, .pd = 0xad, .d = 0x1a },185{ .lomax = 293000, .pd = 0xac, .d = 0x18 },186{ .lomax = 319500, .pd = 0xab, .d = 0x16 },187{ .lomax = 351500, .pd = 0xaa, .d = 0x14 },188{ .lomax = 390500, .pd = 0xa9, .d = 0x12 },189{ .lomax = 439500, .pd = 0xa8, .d = 0x10 },190{ .lomax = 502500, .pd = 0xa3, .d = 0x0e },191{ .lomax = 541000, .pd = 0x9d, .d = 0x0d },192{ .lomax = 586000, .pd = 0x9c, .d = 0x0c },193{ .lomax = 639000, .pd = 0x9b, .d = 0x0b },194{ .lomax = 703000, .pd = 0x9a, .d = 0x0a },195{ .lomax = 781000, .pd = 0x99, .d = 0x09 },196{ .lomax = 879000, .pd = 0x98, .d = 0x08 },197{ .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */198};199200static struct tda18271_map tda18271_bp_filter[] = {201{ .rfmax = 62000, .val = 0x00 },202{ .rfmax = 84000, .val = 0x01 },203{ .rfmax = 100000, .val = 0x02 },204{ .rfmax = 140000, .val = 0x03 },205{ .rfmax = 170000, .val = 0x04 },206{ .rfmax = 180000, .val = 0x05 },207{ .rfmax = 865000, .val = 0x06 },208{ .rfmax = 0, .val = 0x00 }, /* end */209};210211static struct tda18271_map tda18271c1_km[] = {212{ .rfmax = 61100, .val = 0x74 },213{ .rfmax = 350000, .val = 0x40 },214{ .rfmax = 720000, .val = 0x30 },215{ .rfmax = 865000, .val = 0x40 },216{ .rfmax = 0, .val = 0x00 }, /* end */217};218219static struct tda18271_map tda18271c2_km[] = {220{ .rfmax = 47900, .val = 0x38 },221{ .rfmax = 61100, .val = 0x44 },222{ .rfmax = 350000, .val = 0x30 },223{ .rfmax = 720000, .val = 0x24 },224{ .rfmax = 865000, .val = 0x3c },225{ .rfmax = 0, .val = 0x00 }, /* end */226};227228static struct tda18271_map tda18271_rf_band[] = {229{ .rfmax = 47900, .val = 0x00 },230{ .rfmax = 61100, .val = 0x01 },231{ .rfmax = 152600, .val = 0x02 },232{ .rfmax = 164700, .val = 0x03 },233{ .rfmax = 203500, .val = 0x04 },234{ .rfmax = 457800, .val = 0x05 },235{ .rfmax = 865000, .val = 0x06 },236{ .rfmax = 0, .val = 0x00 }, /* end */237};238239static struct tda18271_map tda18271_gain_taper[] = {240{ .rfmax = 45400, .val = 0x1f },241{ .rfmax = 45800, .val = 0x1e },242{ .rfmax = 46200, .val = 0x1d },243{ .rfmax = 46700, .val = 0x1c },244{ .rfmax = 47100, .val = 0x1b },245{ .rfmax = 47500, .val = 0x1a },246{ .rfmax = 47900, .val = 0x19 },247{ .rfmax = 49600, .val = 0x17 },248{ .rfmax = 51200, .val = 0x16 },249{ .rfmax = 52900, .val = 0x15 },250{ .rfmax = 54500, .val = 0x14 },251{ .rfmax = 56200, .val = 0x13 },252{ .rfmax = 57800, .val = 0x12 },253{ .rfmax = 59500, .val = 0x11 },254{ .rfmax = 61100, .val = 0x10 },255{ .rfmax = 67600, .val = 0x0d },256{ .rfmax = 74200, .val = 0x0c },257{ .rfmax = 80700, .val = 0x0b },258{ .rfmax = 87200, .val = 0x0a },259{ .rfmax = 93800, .val = 0x09 },260{ .rfmax = 100300, .val = 0x08 },261{ .rfmax = 106900, .val = 0x07 },262{ .rfmax = 113400, .val = 0x06 },263{ .rfmax = 119900, .val = 0x05 },264{ .rfmax = 126500, .val = 0x04 },265{ .rfmax = 133000, .val = 0x03 },266{ .rfmax = 139500, .val = 0x02 },267{ .rfmax = 146100, .val = 0x01 },268{ .rfmax = 152600, .val = 0x00 },269{ .rfmax = 154300, .val = 0x1f },270{ .rfmax = 156100, .val = 0x1e },271{ .rfmax = 157800, .val = 0x1d },272{ .rfmax = 159500, .val = 0x1c },273{ .rfmax = 161200, .val = 0x1b },274{ .rfmax = 163000, .val = 0x1a },275{ .rfmax = 164700, .val = 0x19 },276{ .rfmax = 170200, .val = 0x17 },277{ .rfmax = 175800, .val = 0x16 },278{ .rfmax = 181300, .val = 0x15 },279{ .rfmax = 186900, .val = 0x14 },280{ .rfmax = 192400, .val = 0x13 },281{ .rfmax = 198000, .val = 0x12 },282{ .rfmax = 203500, .val = 0x11 },283{ .rfmax = 216200, .val = 0x14 },284{ .rfmax = 228900, .val = 0x13 },285{ .rfmax = 241600, .val = 0x12 },286{ .rfmax = 254400, .val = 0x11 },287{ .rfmax = 267100, .val = 0x10 },288{ .rfmax = 279800, .val = 0x0f },289{ .rfmax = 292500, .val = 0x0e },290{ .rfmax = 305200, .val = 0x0d },291{ .rfmax = 317900, .val = 0x0c },292{ .rfmax = 330700, .val = 0x0b },293{ .rfmax = 343400, .val = 0x0a },294{ .rfmax = 356100, .val = 0x09 },295{ .rfmax = 368800, .val = 0x08 },296{ .rfmax = 381500, .val = 0x07 },297{ .rfmax = 394200, .val = 0x06 },298{ .rfmax = 406900, .val = 0x05 },299{ .rfmax = 419700, .val = 0x04 },300{ .rfmax = 432400, .val = 0x03 },301{ .rfmax = 445100, .val = 0x02 },302{ .rfmax = 457800, .val = 0x01 },303{ .rfmax = 476300, .val = 0x19 },304{ .rfmax = 494800, .val = 0x18 },305{ .rfmax = 513300, .val = 0x17 },306{ .rfmax = 531800, .val = 0x16 },307{ .rfmax = 550300, .val = 0x15 },308{ .rfmax = 568900, .val = 0x14 },309{ .rfmax = 587400, .val = 0x13 },310{ .rfmax = 605900, .val = 0x12 },311{ .rfmax = 624400, .val = 0x11 },312{ .rfmax = 642900, .val = 0x10 },313{ .rfmax = 661400, .val = 0x0f },314{ .rfmax = 679900, .val = 0x0e },315{ .rfmax = 698400, .val = 0x0d },316{ .rfmax = 716900, .val = 0x0c },317{ .rfmax = 735400, .val = 0x0b },318{ .rfmax = 753900, .val = 0x0a },319{ .rfmax = 772500, .val = 0x09 },320{ .rfmax = 791000, .val = 0x08 },321{ .rfmax = 809500, .val = 0x07 },322{ .rfmax = 828000, .val = 0x06 },323{ .rfmax = 846500, .val = 0x05 },324{ .rfmax = 865000, .val = 0x04 },325{ .rfmax = 0, .val = 0x00 }, /* end */326};327328static struct tda18271_map tda18271c1_rf_cal[] = {329{ .rfmax = 41000, .val = 0x1e },330{ .rfmax = 43000, .val = 0x30 },331{ .rfmax = 45000, .val = 0x43 },332{ .rfmax = 46000, .val = 0x4d },333{ .rfmax = 47000, .val = 0x54 },334{ .rfmax = 47900, .val = 0x64 },335{ .rfmax = 49100, .val = 0x20 },336{ .rfmax = 50000, .val = 0x22 },337{ .rfmax = 51000, .val = 0x2a },338{ .rfmax = 53000, .val = 0x32 },339{ .rfmax = 55000, .val = 0x35 },340{ .rfmax = 56000, .val = 0x3c },341{ .rfmax = 57000, .val = 0x3f },342{ .rfmax = 58000, .val = 0x48 },343{ .rfmax = 59000, .val = 0x4d },344{ .rfmax = 60000, .val = 0x58 },345{ .rfmax = 61100, .val = 0x5f },346{ .rfmax = 0, .val = 0x00 }, /* end */347};348349static struct tda18271_map tda18271c2_rf_cal[] = {350{ .rfmax = 41000, .val = 0x0f },351{ .rfmax = 43000, .val = 0x1c },352{ .rfmax = 45000, .val = 0x2f },353{ .rfmax = 46000, .val = 0x39 },354{ .rfmax = 47000, .val = 0x40 },355{ .rfmax = 47900, .val = 0x50 },356{ .rfmax = 49100, .val = 0x16 },357{ .rfmax = 50000, .val = 0x18 },358{ .rfmax = 51000, .val = 0x20 },359{ .rfmax = 53000, .val = 0x28 },360{ .rfmax = 55000, .val = 0x2b },361{ .rfmax = 56000, .val = 0x32 },362{ .rfmax = 57000, .val = 0x35 },363{ .rfmax = 58000, .val = 0x3e },364{ .rfmax = 59000, .val = 0x43 },365{ .rfmax = 60000, .val = 0x4e },366{ .rfmax = 61100, .val = 0x55 },367{ .rfmax = 63000, .val = 0x0f },368{ .rfmax = 64000, .val = 0x11 },369{ .rfmax = 65000, .val = 0x12 },370{ .rfmax = 66000, .val = 0x15 },371{ .rfmax = 67000, .val = 0x16 },372{ .rfmax = 68000, .val = 0x17 },373{ .rfmax = 70000, .val = 0x19 },374{ .rfmax = 71000, .val = 0x1c },375{ .rfmax = 72000, .val = 0x1d },376{ .rfmax = 73000, .val = 0x1f },377{ .rfmax = 74000, .val = 0x20 },378{ .rfmax = 75000, .val = 0x21 },379{ .rfmax = 76000, .val = 0x24 },380{ .rfmax = 77000, .val = 0x25 },381{ .rfmax = 78000, .val = 0x27 },382{ .rfmax = 80000, .val = 0x28 },383{ .rfmax = 81000, .val = 0x29 },384{ .rfmax = 82000, .val = 0x2d },385{ .rfmax = 83000, .val = 0x2e },386{ .rfmax = 84000, .val = 0x2f },387{ .rfmax = 85000, .val = 0x31 },388{ .rfmax = 86000, .val = 0x33 },389{ .rfmax = 87000, .val = 0x34 },390{ .rfmax = 88000, .val = 0x35 },391{ .rfmax = 89000, .val = 0x37 },392{ .rfmax = 90000, .val = 0x38 },393{ .rfmax = 91000, .val = 0x39 },394{ .rfmax = 93000, .val = 0x3c },395{ .rfmax = 94000, .val = 0x3e },396{ .rfmax = 95000, .val = 0x3f },397{ .rfmax = 96000, .val = 0x40 },398{ .rfmax = 97000, .val = 0x42 },399{ .rfmax = 99000, .val = 0x45 },400{ .rfmax = 100000, .val = 0x46 },401{ .rfmax = 102000, .val = 0x48 },402{ .rfmax = 103000, .val = 0x4a },403{ .rfmax = 105000, .val = 0x4d },404{ .rfmax = 106000, .val = 0x4e },405{ .rfmax = 107000, .val = 0x50 },406{ .rfmax = 108000, .val = 0x51 },407{ .rfmax = 110000, .val = 0x54 },408{ .rfmax = 111000, .val = 0x56 },409{ .rfmax = 112000, .val = 0x57 },410{ .rfmax = 113000, .val = 0x58 },411{ .rfmax = 114000, .val = 0x59 },412{ .rfmax = 115000, .val = 0x5c },413{ .rfmax = 116000, .val = 0x5d },414{ .rfmax = 117000, .val = 0x5f },415{ .rfmax = 119000, .val = 0x60 },416{ .rfmax = 120000, .val = 0x64 },417{ .rfmax = 121000, .val = 0x65 },418{ .rfmax = 122000, .val = 0x66 },419{ .rfmax = 123000, .val = 0x68 },420{ .rfmax = 124000, .val = 0x69 },421{ .rfmax = 125000, .val = 0x6c },422{ .rfmax = 126000, .val = 0x6d },423{ .rfmax = 127000, .val = 0x6e },424{ .rfmax = 128000, .val = 0x70 },425{ .rfmax = 129000, .val = 0x71 },426{ .rfmax = 130000, .val = 0x75 },427{ .rfmax = 131000, .val = 0x77 },428{ .rfmax = 132000, .val = 0x78 },429{ .rfmax = 133000, .val = 0x7b },430{ .rfmax = 134000, .val = 0x7e },431{ .rfmax = 135000, .val = 0x81 },432{ .rfmax = 136000, .val = 0x82 },433{ .rfmax = 137000, .val = 0x87 },434{ .rfmax = 138000, .val = 0x88 },435{ .rfmax = 139000, .val = 0x8d },436{ .rfmax = 140000, .val = 0x8e },437{ .rfmax = 141000, .val = 0x91 },438{ .rfmax = 142000, .val = 0x95 },439{ .rfmax = 143000, .val = 0x9a },440{ .rfmax = 144000, .val = 0x9d },441{ .rfmax = 145000, .val = 0xa1 },442{ .rfmax = 146000, .val = 0xa2 },443{ .rfmax = 147000, .val = 0xa4 },444{ .rfmax = 148000, .val = 0xa9 },445{ .rfmax = 149000, .val = 0xae },446{ .rfmax = 150000, .val = 0xb0 },447{ .rfmax = 151000, .val = 0xb1 },448{ .rfmax = 152000, .val = 0xb7 },449{ .rfmax = 152600, .val = 0xbd },450{ .rfmax = 154000, .val = 0x20 },451{ .rfmax = 155000, .val = 0x22 },452{ .rfmax = 156000, .val = 0x24 },453{ .rfmax = 157000, .val = 0x25 },454{ .rfmax = 158000, .val = 0x27 },455{ .rfmax = 159000, .val = 0x29 },456{ .rfmax = 160000, .val = 0x2c },457{ .rfmax = 161000, .val = 0x2d },458{ .rfmax = 163000, .val = 0x2e },459{ .rfmax = 164000, .val = 0x2f },460{ .rfmax = 164700, .val = 0x30 },461{ .rfmax = 166000, .val = 0x11 },462{ .rfmax = 167000, .val = 0x12 },463{ .rfmax = 168000, .val = 0x13 },464{ .rfmax = 169000, .val = 0x14 },465{ .rfmax = 170000, .val = 0x15 },466{ .rfmax = 172000, .val = 0x16 },467{ .rfmax = 173000, .val = 0x17 },468{ .rfmax = 174000, .val = 0x18 },469{ .rfmax = 175000, .val = 0x1a },470{ .rfmax = 176000, .val = 0x1b },471{ .rfmax = 178000, .val = 0x1d },472{ .rfmax = 179000, .val = 0x1e },473{ .rfmax = 180000, .val = 0x1f },474{ .rfmax = 181000, .val = 0x20 },475{ .rfmax = 182000, .val = 0x21 },476{ .rfmax = 183000, .val = 0x22 },477{ .rfmax = 184000, .val = 0x24 },478{ .rfmax = 185000, .val = 0x25 },479{ .rfmax = 186000, .val = 0x26 },480{ .rfmax = 187000, .val = 0x27 },481{ .rfmax = 188000, .val = 0x29 },482{ .rfmax = 189000, .val = 0x2a },483{ .rfmax = 190000, .val = 0x2c },484{ .rfmax = 191000, .val = 0x2d },485{ .rfmax = 192000, .val = 0x2e },486{ .rfmax = 193000, .val = 0x2f },487{ .rfmax = 194000, .val = 0x30 },488{ .rfmax = 195000, .val = 0x33 },489{ .rfmax = 196000, .val = 0x35 },490{ .rfmax = 198000, .val = 0x36 },491{ .rfmax = 200000, .val = 0x38 },492{ .rfmax = 201000, .val = 0x3c },493{ .rfmax = 202000, .val = 0x3d },494{ .rfmax = 203500, .val = 0x3e },495{ .rfmax = 206000, .val = 0x0e },496{ .rfmax = 208000, .val = 0x0f },497{ .rfmax = 212000, .val = 0x10 },498{ .rfmax = 216000, .val = 0x11 },499{ .rfmax = 217000, .val = 0x12 },500{ .rfmax = 218000, .val = 0x13 },501{ .rfmax = 220000, .val = 0x14 },502{ .rfmax = 222000, .val = 0x15 },503{ .rfmax = 225000, .val = 0x16 },504{ .rfmax = 228000, .val = 0x17 },505{ .rfmax = 231000, .val = 0x18 },506{ .rfmax = 234000, .val = 0x19 },507{ .rfmax = 235000, .val = 0x1a },508{ .rfmax = 236000, .val = 0x1b },509{ .rfmax = 237000, .val = 0x1c },510{ .rfmax = 240000, .val = 0x1d },511{ .rfmax = 242000, .val = 0x1e },512{ .rfmax = 244000, .val = 0x1f },513{ .rfmax = 247000, .val = 0x20 },514{ .rfmax = 249000, .val = 0x21 },515{ .rfmax = 252000, .val = 0x22 },516{ .rfmax = 253000, .val = 0x23 },517{ .rfmax = 254000, .val = 0x24 },518{ .rfmax = 256000, .val = 0x25 },519{ .rfmax = 259000, .val = 0x26 },520{ .rfmax = 262000, .val = 0x27 },521{ .rfmax = 264000, .val = 0x28 },522{ .rfmax = 267000, .val = 0x29 },523{ .rfmax = 269000, .val = 0x2a },524{ .rfmax = 271000, .val = 0x2b },525{ .rfmax = 273000, .val = 0x2c },526{ .rfmax = 275000, .val = 0x2d },527{ .rfmax = 277000, .val = 0x2e },528{ .rfmax = 279000, .val = 0x2f },529{ .rfmax = 282000, .val = 0x30 },530{ .rfmax = 284000, .val = 0x31 },531{ .rfmax = 286000, .val = 0x32 },532{ .rfmax = 287000, .val = 0x33 },533{ .rfmax = 290000, .val = 0x34 },534{ .rfmax = 293000, .val = 0x35 },535{ .rfmax = 295000, .val = 0x36 },536{ .rfmax = 297000, .val = 0x37 },537{ .rfmax = 300000, .val = 0x38 },538{ .rfmax = 303000, .val = 0x39 },539{ .rfmax = 305000, .val = 0x3a },540{ .rfmax = 306000, .val = 0x3b },541{ .rfmax = 307000, .val = 0x3c },542{ .rfmax = 310000, .val = 0x3d },543{ .rfmax = 312000, .val = 0x3e },544{ .rfmax = 315000, .val = 0x3f },545{ .rfmax = 318000, .val = 0x40 },546{ .rfmax = 320000, .val = 0x41 },547{ .rfmax = 323000, .val = 0x42 },548{ .rfmax = 324000, .val = 0x43 },549{ .rfmax = 325000, .val = 0x44 },550{ .rfmax = 327000, .val = 0x45 },551{ .rfmax = 331000, .val = 0x46 },552{ .rfmax = 334000, .val = 0x47 },553{ .rfmax = 337000, .val = 0x48 },554{ .rfmax = 339000, .val = 0x49 },555{ .rfmax = 340000, .val = 0x4a },556{ .rfmax = 341000, .val = 0x4b },557{ .rfmax = 343000, .val = 0x4c },558{ .rfmax = 345000, .val = 0x4d },559{ .rfmax = 349000, .val = 0x4e },560{ .rfmax = 352000, .val = 0x4f },561{ .rfmax = 353000, .val = 0x50 },562{ .rfmax = 355000, .val = 0x51 },563{ .rfmax = 357000, .val = 0x52 },564{ .rfmax = 359000, .val = 0x53 },565{ .rfmax = 361000, .val = 0x54 },566{ .rfmax = 362000, .val = 0x55 },567{ .rfmax = 364000, .val = 0x56 },568{ .rfmax = 368000, .val = 0x57 },569{ .rfmax = 370000, .val = 0x58 },570{ .rfmax = 372000, .val = 0x59 },571{ .rfmax = 375000, .val = 0x5a },572{ .rfmax = 376000, .val = 0x5b },573{ .rfmax = 377000, .val = 0x5c },574{ .rfmax = 379000, .val = 0x5d },575{ .rfmax = 382000, .val = 0x5e },576{ .rfmax = 384000, .val = 0x5f },577{ .rfmax = 385000, .val = 0x60 },578{ .rfmax = 386000, .val = 0x61 },579{ .rfmax = 388000, .val = 0x62 },580{ .rfmax = 390000, .val = 0x63 },581{ .rfmax = 393000, .val = 0x64 },582{ .rfmax = 394000, .val = 0x65 },583{ .rfmax = 396000, .val = 0x66 },584{ .rfmax = 397000, .val = 0x67 },585{ .rfmax = 398000, .val = 0x68 },586{ .rfmax = 400000, .val = 0x69 },587{ .rfmax = 402000, .val = 0x6a },588{ .rfmax = 403000, .val = 0x6b },589{ .rfmax = 407000, .val = 0x6c },590{ .rfmax = 408000, .val = 0x6d },591{ .rfmax = 409000, .val = 0x6e },592{ .rfmax = 410000, .val = 0x6f },593{ .rfmax = 411000, .val = 0x70 },594{ .rfmax = 412000, .val = 0x71 },595{ .rfmax = 413000, .val = 0x72 },596{ .rfmax = 414000, .val = 0x73 },597{ .rfmax = 417000, .val = 0x74 },598{ .rfmax = 418000, .val = 0x75 },599{ .rfmax = 420000, .val = 0x76 },600{ .rfmax = 422000, .val = 0x77 },601{ .rfmax = 423000, .val = 0x78 },602{ .rfmax = 424000, .val = 0x79 },603{ .rfmax = 427000, .val = 0x7a },604{ .rfmax = 428000, .val = 0x7b },605{ .rfmax = 429000, .val = 0x7d },606{ .rfmax = 432000, .val = 0x7f },607{ .rfmax = 434000, .val = 0x80 },608{ .rfmax = 435000, .val = 0x81 },609{ .rfmax = 436000, .val = 0x83 },610{ .rfmax = 437000, .val = 0x84 },611{ .rfmax = 438000, .val = 0x85 },612{ .rfmax = 439000, .val = 0x86 },613{ .rfmax = 440000, .val = 0x87 },614{ .rfmax = 441000, .val = 0x88 },615{ .rfmax = 442000, .val = 0x89 },616{ .rfmax = 445000, .val = 0x8a },617{ .rfmax = 446000, .val = 0x8b },618{ .rfmax = 447000, .val = 0x8c },619{ .rfmax = 448000, .val = 0x8e },620{ .rfmax = 449000, .val = 0x8f },621{ .rfmax = 450000, .val = 0x90 },622{ .rfmax = 452000, .val = 0x91 },623{ .rfmax = 453000, .val = 0x93 },624{ .rfmax = 454000, .val = 0x94 },625{ .rfmax = 456000, .val = 0x96 },626{ .rfmax = 457800, .val = 0x98 },627{ .rfmax = 461000, .val = 0x11 },628{ .rfmax = 468000, .val = 0x12 },629{ .rfmax = 472000, .val = 0x13 },630{ .rfmax = 473000, .val = 0x14 },631{ .rfmax = 474000, .val = 0x15 },632{ .rfmax = 481000, .val = 0x16 },633{ .rfmax = 486000, .val = 0x17 },634{ .rfmax = 491000, .val = 0x18 },635{ .rfmax = 498000, .val = 0x19 },636{ .rfmax = 499000, .val = 0x1a },637{ .rfmax = 501000, .val = 0x1b },638{ .rfmax = 506000, .val = 0x1c },639{ .rfmax = 511000, .val = 0x1d },640{ .rfmax = 516000, .val = 0x1e },641{ .rfmax = 520000, .val = 0x1f },642{ .rfmax = 521000, .val = 0x20 },643{ .rfmax = 525000, .val = 0x21 },644{ .rfmax = 529000, .val = 0x22 },645{ .rfmax = 533000, .val = 0x23 },646{ .rfmax = 539000, .val = 0x24 },647{ .rfmax = 541000, .val = 0x25 },648{ .rfmax = 547000, .val = 0x26 },649{ .rfmax = 549000, .val = 0x27 },650{ .rfmax = 551000, .val = 0x28 },651{ .rfmax = 556000, .val = 0x29 },652{ .rfmax = 561000, .val = 0x2a },653{ .rfmax = 563000, .val = 0x2b },654{ .rfmax = 565000, .val = 0x2c },655{ .rfmax = 569000, .val = 0x2d },656{ .rfmax = 571000, .val = 0x2e },657{ .rfmax = 577000, .val = 0x2f },658{ .rfmax = 580000, .val = 0x30 },659{ .rfmax = 582000, .val = 0x31 },660{ .rfmax = 584000, .val = 0x32 },661{ .rfmax = 588000, .val = 0x33 },662{ .rfmax = 591000, .val = 0x34 },663{ .rfmax = 596000, .val = 0x35 },664{ .rfmax = 598000, .val = 0x36 },665{ .rfmax = 603000, .val = 0x37 },666{ .rfmax = 604000, .val = 0x38 },667{ .rfmax = 606000, .val = 0x39 },668{ .rfmax = 612000, .val = 0x3a },669{ .rfmax = 615000, .val = 0x3b },670{ .rfmax = 617000, .val = 0x3c },671{ .rfmax = 621000, .val = 0x3d },672{ .rfmax = 622000, .val = 0x3e },673{ .rfmax = 625000, .val = 0x3f },674{ .rfmax = 632000, .val = 0x40 },675{ .rfmax = 633000, .val = 0x41 },676{ .rfmax = 634000, .val = 0x42 },677{ .rfmax = 642000, .val = 0x43 },678{ .rfmax = 643000, .val = 0x44 },679{ .rfmax = 647000, .val = 0x45 },680{ .rfmax = 650000, .val = 0x46 },681{ .rfmax = 652000, .val = 0x47 },682{ .rfmax = 657000, .val = 0x48 },683{ .rfmax = 661000, .val = 0x49 },684{ .rfmax = 662000, .val = 0x4a },685{ .rfmax = 665000, .val = 0x4b },686{ .rfmax = 667000, .val = 0x4c },687{ .rfmax = 670000, .val = 0x4d },688{ .rfmax = 673000, .val = 0x4e },689{ .rfmax = 676000, .val = 0x4f },690{ .rfmax = 677000, .val = 0x50 },691{ .rfmax = 681000, .val = 0x51 },692{ .rfmax = 683000, .val = 0x52 },693{ .rfmax = 686000, .val = 0x53 },694{ .rfmax = 688000, .val = 0x54 },695{ .rfmax = 689000, .val = 0x55 },696{ .rfmax = 691000, .val = 0x56 },697{ .rfmax = 695000, .val = 0x57 },698{ .rfmax = 698000, .val = 0x58 },699{ .rfmax = 703000, .val = 0x59 },700{ .rfmax = 704000, .val = 0x5a },701{ .rfmax = 705000, .val = 0x5b },702{ .rfmax = 707000, .val = 0x5c },703{ .rfmax = 710000, .val = 0x5d },704{ .rfmax = 712000, .val = 0x5e },705{ .rfmax = 717000, .val = 0x5f },706{ .rfmax = 718000, .val = 0x60 },707{ .rfmax = 721000, .val = 0x61 },708{ .rfmax = 722000, .val = 0x62 },709{ .rfmax = 723000, .val = 0x63 },710{ .rfmax = 725000, .val = 0x64 },711{ .rfmax = 727000, .val = 0x65 },712{ .rfmax = 730000, .val = 0x66 },713{ .rfmax = 732000, .val = 0x67 },714{ .rfmax = 735000, .val = 0x68 },715{ .rfmax = 740000, .val = 0x69 },716{ .rfmax = 741000, .val = 0x6a },717{ .rfmax = 742000, .val = 0x6b },718{ .rfmax = 743000, .val = 0x6c },719{ .rfmax = 745000, .val = 0x6d },720{ .rfmax = 747000, .val = 0x6e },721{ .rfmax = 748000, .val = 0x6f },722{ .rfmax = 750000, .val = 0x70 },723{ .rfmax = 752000, .val = 0x71 },724{ .rfmax = 754000, .val = 0x72 },725{ .rfmax = 757000, .val = 0x73 },726{ .rfmax = 758000, .val = 0x74 },727{ .rfmax = 760000, .val = 0x75 },728{ .rfmax = 763000, .val = 0x76 },729{ .rfmax = 764000, .val = 0x77 },730{ .rfmax = 766000, .val = 0x78 },731{ .rfmax = 767000, .val = 0x79 },732{ .rfmax = 768000, .val = 0x7a },733{ .rfmax = 773000, .val = 0x7b },734{ .rfmax = 774000, .val = 0x7c },735{ .rfmax = 776000, .val = 0x7d },736{ .rfmax = 777000, .val = 0x7e },737{ .rfmax = 778000, .val = 0x7f },738{ .rfmax = 779000, .val = 0x80 },739{ .rfmax = 781000, .val = 0x81 },740{ .rfmax = 783000, .val = 0x82 },741{ .rfmax = 784000, .val = 0x83 },742{ .rfmax = 785000, .val = 0x84 },743{ .rfmax = 786000, .val = 0x85 },744{ .rfmax = 793000, .val = 0x86 },745{ .rfmax = 794000, .val = 0x87 },746{ .rfmax = 795000, .val = 0x88 },747{ .rfmax = 797000, .val = 0x89 },748{ .rfmax = 799000, .val = 0x8a },749{ .rfmax = 801000, .val = 0x8b },750{ .rfmax = 802000, .val = 0x8c },751{ .rfmax = 803000, .val = 0x8d },752{ .rfmax = 804000, .val = 0x8e },753{ .rfmax = 810000, .val = 0x90 },754{ .rfmax = 811000, .val = 0x91 },755{ .rfmax = 812000, .val = 0x92 },756{ .rfmax = 814000, .val = 0x93 },757{ .rfmax = 816000, .val = 0x94 },758{ .rfmax = 817000, .val = 0x96 },759{ .rfmax = 818000, .val = 0x97 },760{ .rfmax = 820000, .val = 0x98 },761{ .rfmax = 821000, .val = 0x99 },762{ .rfmax = 822000, .val = 0x9a },763{ .rfmax = 828000, .val = 0x9b },764{ .rfmax = 829000, .val = 0x9d },765{ .rfmax = 830000, .val = 0x9f },766{ .rfmax = 831000, .val = 0xa0 },767{ .rfmax = 833000, .val = 0xa1 },768{ .rfmax = 835000, .val = 0xa2 },769{ .rfmax = 836000, .val = 0xa3 },770{ .rfmax = 837000, .val = 0xa4 },771{ .rfmax = 838000, .val = 0xa6 },772{ .rfmax = 840000, .val = 0xa8 },773{ .rfmax = 842000, .val = 0xa9 },774{ .rfmax = 845000, .val = 0xaa },775{ .rfmax = 846000, .val = 0xab },776{ .rfmax = 847000, .val = 0xad },777{ .rfmax = 848000, .val = 0xae },778{ .rfmax = 852000, .val = 0xaf },779{ .rfmax = 853000, .val = 0xb0 },780{ .rfmax = 858000, .val = 0xb1 },781{ .rfmax = 860000, .val = 0xb2 },782{ .rfmax = 861000, .val = 0xb3 },783{ .rfmax = 862000, .val = 0xb4 },784{ .rfmax = 863000, .val = 0xb6 },785{ .rfmax = 864000, .val = 0xb8 },786{ .rfmax = 865000, .val = 0xb9 },787{ .rfmax = 0, .val = 0x00 }, /* end */788};789790static struct tda18271_map tda18271_ir_measure[] = {791{ .rfmax = 30000, .val = 4 },792{ .rfmax = 200000, .val = 5 },793{ .rfmax = 600000, .val = 6 },794{ .rfmax = 865000, .val = 7 },795{ .rfmax = 0, .val = 0 }, /* end */796};797798static struct tda18271_map tda18271_rf_cal_dc_over_dt[] = {799{ .rfmax = 47900, .val = 0x00 },800{ .rfmax = 55000, .val = 0x00 },801{ .rfmax = 61100, .val = 0x0a },802{ .rfmax = 64000, .val = 0x0a },803{ .rfmax = 82000, .val = 0x14 },804{ .rfmax = 84000, .val = 0x19 },805{ .rfmax = 119000, .val = 0x1c },806{ .rfmax = 124000, .val = 0x20 },807{ .rfmax = 129000, .val = 0x2a },808{ .rfmax = 134000, .val = 0x32 },809{ .rfmax = 139000, .val = 0x39 },810{ .rfmax = 144000, .val = 0x3e },811{ .rfmax = 149000, .val = 0x3f },812{ .rfmax = 152600, .val = 0x40 },813{ .rfmax = 154000, .val = 0x40 },814{ .rfmax = 164700, .val = 0x41 },815{ .rfmax = 203500, .val = 0x32 },816{ .rfmax = 353000, .val = 0x19 },817{ .rfmax = 356000, .val = 0x1a },818{ .rfmax = 359000, .val = 0x1b },819{ .rfmax = 363000, .val = 0x1c },820{ .rfmax = 366000, .val = 0x1d },821{ .rfmax = 369000, .val = 0x1e },822{ .rfmax = 373000, .val = 0x1f },823{ .rfmax = 376000, .val = 0x20 },824{ .rfmax = 379000, .val = 0x21 },825{ .rfmax = 383000, .val = 0x22 },826{ .rfmax = 386000, .val = 0x23 },827{ .rfmax = 389000, .val = 0x24 },828{ .rfmax = 393000, .val = 0x25 },829{ .rfmax = 396000, .val = 0x26 },830{ .rfmax = 399000, .val = 0x27 },831{ .rfmax = 402000, .val = 0x28 },832{ .rfmax = 404000, .val = 0x29 },833{ .rfmax = 407000, .val = 0x2a },834{ .rfmax = 409000, .val = 0x2b },835{ .rfmax = 412000, .val = 0x2c },836{ .rfmax = 414000, .val = 0x2d },837{ .rfmax = 417000, .val = 0x2e },838{ .rfmax = 419000, .val = 0x2f },839{ .rfmax = 422000, .val = 0x30 },840{ .rfmax = 424000, .val = 0x31 },841{ .rfmax = 427000, .val = 0x32 },842{ .rfmax = 429000, .val = 0x33 },843{ .rfmax = 432000, .val = 0x34 },844{ .rfmax = 434000, .val = 0x35 },845{ .rfmax = 437000, .val = 0x36 },846{ .rfmax = 439000, .val = 0x37 },847{ .rfmax = 442000, .val = 0x38 },848{ .rfmax = 444000, .val = 0x39 },849{ .rfmax = 447000, .val = 0x3a },850{ .rfmax = 449000, .val = 0x3b },851{ .rfmax = 457800, .val = 0x3c },852{ .rfmax = 465000, .val = 0x0f },853{ .rfmax = 477000, .val = 0x12 },854{ .rfmax = 483000, .val = 0x14 },855{ .rfmax = 502000, .val = 0x19 },856{ .rfmax = 508000, .val = 0x1b },857{ .rfmax = 519000, .val = 0x1c },858{ .rfmax = 522000, .val = 0x1d },859{ .rfmax = 524000, .val = 0x1e },860{ .rfmax = 534000, .val = 0x1f },861{ .rfmax = 549000, .val = 0x20 },862{ .rfmax = 554000, .val = 0x22 },863{ .rfmax = 584000, .val = 0x24 },864{ .rfmax = 589000, .val = 0x26 },865{ .rfmax = 658000, .val = 0x27 },866{ .rfmax = 664000, .val = 0x2c },867{ .rfmax = 669000, .val = 0x2d },868{ .rfmax = 699000, .val = 0x2e },869{ .rfmax = 704000, .val = 0x30 },870{ .rfmax = 709000, .val = 0x31 },871{ .rfmax = 714000, .val = 0x32 },872{ .rfmax = 724000, .val = 0x33 },873{ .rfmax = 729000, .val = 0x36 },874{ .rfmax = 739000, .val = 0x38 },875{ .rfmax = 744000, .val = 0x39 },876{ .rfmax = 749000, .val = 0x3b },877{ .rfmax = 754000, .val = 0x3c },878{ .rfmax = 759000, .val = 0x3d },879{ .rfmax = 764000, .val = 0x3e },880{ .rfmax = 769000, .val = 0x3f },881{ .rfmax = 774000, .val = 0x40 },882{ .rfmax = 779000, .val = 0x41 },883{ .rfmax = 784000, .val = 0x43 },884{ .rfmax = 789000, .val = 0x46 },885{ .rfmax = 794000, .val = 0x48 },886{ .rfmax = 799000, .val = 0x4b },887{ .rfmax = 804000, .val = 0x4f },888{ .rfmax = 809000, .val = 0x54 },889{ .rfmax = 814000, .val = 0x59 },890{ .rfmax = 819000, .val = 0x5d },891{ .rfmax = 824000, .val = 0x61 },892{ .rfmax = 829000, .val = 0x68 },893{ .rfmax = 834000, .val = 0x6e },894{ .rfmax = 839000, .val = 0x75 },895{ .rfmax = 844000, .val = 0x7e },896{ .rfmax = 849000, .val = 0x82 },897{ .rfmax = 854000, .val = 0x84 },898{ .rfmax = 859000, .val = 0x8f },899{ .rfmax = 865000, .val = 0x9a },900{ .rfmax = 0, .val = 0x00 }, /* end */901};902903/*---------------------------------------------------------------------*/904905struct tda18271_thermo_map {906u8 d;907u8 r0;908u8 r1;909};910911static struct tda18271_thermo_map tda18271_thermometer[] = {912{ .d = 0x00, .r0 = 60, .r1 = 92 },913{ .d = 0x01, .r0 = 62, .r1 = 94 },914{ .d = 0x02, .r0 = 66, .r1 = 98 },915{ .d = 0x03, .r0 = 64, .r1 = 96 },916{ .d = 0x04, .r0 = 74, .r1 = 106 },917{ .d = 0x05, .r0 = 72, .r1 = 104 },918{ .d = 0x06, .r0 = 68, .r1 = 100 },919{ .d = 0x07, .r0 = 70, .r1 = 102 },920{ .d = 0x08, .r0 = 90, .r1 = 122 },921{ .d = 0x09, .r0 = 88, .r1 = 120 },922{ .d = 0x0a, .r0 = 84, .r1 = 116 },923{ .d = 0x0b, .r0 = 86, .r1 = 118 },924{ .d = 0x0c, .r0 = 76, .r1 = 108 },925{ .d = 0x0d, .r0 = 78, .r1 = 110 },926{ .d = 0x0e, .r0 = 82, .r1 = 114 },927{ .d = 0x0f, .r0 = 80, .r1 = 112 },928{ .d = 0x00, .r0 = 0, .r1 = 0 }, /* end */929};930931int tda18271_lookup_thermometer(struct dvb_frontend *fe)932{933struct tda18271_priv *priv = fe->tuner_priv;934unsigned char *regs = priv->tda18271_regs;935int val, i = 0;936937while (tda18271_thermometer[i].d < (regs[R_TM] & 0x0f)) {938if (tda18271_thermometer[i + 1].d == 0)939break;940i++;941}942943if ((regs[R_TM] & 0x20) == 0x20)944val = tda18271_thermometer[i].r1;945else946val = tda18271_thermometer[i].r0;947948tda_map("(%d) tm = %d\n", i, val);949950return val;951}952953/*---------------------------------------------------------------------*/954955struct tda18271_cid_target_map {956u32 rfmax;957u8 target;958u16 limit;959};960961static struct tda18271_cid_target_map tda18271_cid_target[] = {962{ .rfmax = 46000, .target = 0x04, .limit = 1800 },963{ .rfmax = 52200, .target = 0x0a, .limit = 1500 },964{ .rfmax = 70100, .target = 0x01, .limit = 4000 },965{ .rfmax = 136800, .target = 0x18, .limit = 4000 },966{ .rfmax = 156700, .target = 0x18, .limit = 4000 },967{ .rfmax = 186250, .target = 0x0a, .limit = 4000 },968{ .rfmax = 230000, .target = 0x0a, .limit = 4000 },969{ .rfmax = 345000, .target = 0x18, .limit = 4000 },970{ .rfmax = 426000, .target = 0x0e, .limit = 4000 },971{ .rfmax = 489500, .target = 0x1e, .limit = 4000 },972{ .rfmax = 697500, .target = 0x32, .limit = 4000 },973{ .rfmax = 842000, .target = 0x3a, .limit = 4000 },974{ .rfmax = 0, .target = 0x00, .limit = 0 }, /* end */975};976977int tda18271_lookup_cid_target(struct dvb_frontend *fe,978u32 *freq, u8 *cid_target, u16 *count_limit)979{980struct tda18271_priv *priv = fe->tuner_priv;981int i = 0;982983while ((tda18271_cid_target[i].rfmax * 1000) < *freq) {984if (tda18271_cid_target[i + 1].rfmax == 0)985break;986i++;987}988*cid_target = tda18271_cid_target[i].target;989*count_limit = tda18271_cid_target[i].limit;990991tda_map("(%d) cid_target = %02x, count_limit = %d\n", i,992tda18271_cid_target[i].target, tda18271_cid_target[i].limit);993994return 0;995}996997/*---------------------------------------------------------------------*/998999static struct tda18271_rf_tracking_filter_cal tda18271_rf_band_template[] = {1000{ .rfmax = 47900, .rfband = 0x00,1001.rf1_def = 46000, .rf2_def = 0, .rf3_def = 0 },1002{ .rfmax = 61100, .rfband = 0x01,1003.rf1_def = 52200, .rf2_def = 0, .rf3_def = 0 },1004{ .rfmax = 152600, .rfband = 0x02,1005.rf1_def = 70100, .rf2_def = 136800, .rf3_def = 0 },1006{ .rfmax = 164700, .rfband = 0x03,1007.rf1_def = 156700, .rf2_def = 0, .rf3_def = 0 },1008{ .rfmax = 203500, .rfband = 0x04,1009.rf1_def = 186250, .rf2_def = 0, .rf3_def = 0 },1010{ .rfmax = 457800, .rfband = 0x05,1011.rf1_def = 230000, .rf2_def = 345000, .rf3_def = 426000 },1012{ .rfmax = 865000, .rfband = 0x06,1013.rf1_def = 489500, .rf2_def = 697500, .rf3_def = 842000 },1014{ .rfmax = 0, .rfband = 0x00,1015.rf1_def = 0, .rf2_def = 0, .rf3_def = 0 }, /* end */1016};10171018int tda18271_lookup_rf_band(struct dvb_frontend *fe, u32 *freq, u8 *rf_band)1019{1020struct tda18271_priv *priv = fe->tuner_priv;1021struct tda18271_rf_tracking_filter_cal *map = priv->rf_cal_state;1022int i = 0;10231024while ((map[i].rfmax * 1000) < *freq) {1025if (tda18271_debug & DBG_ADV)1026tda_map("(%d) rfmax = %d < freq = %d, "1027"rf1_def = %d, rf2_def = %d, rf3_def = %d, "1028"rf1 = %d, rf2 = %d, rf3 = %d, "1029"rf_a1 = %d, rf_a2 = %d, "1030"rf_b1 = %d, rf_b2 = %d\n",1031i, map[i].rfmax * 1000, *freq,1032map[i].rf1_def, map[i].rf2_def, map[i].rf3_def,1033map[i].rf1, map[i].rf2, map[i].rf3,1034map[i].rf_a1, map[i].rf_a2,1035map[i].rf_b1, map[i].rf_b2);1036if (map[i].rfmax == 0)1037return -EINVAL;1038i++;1039}1040if (rf_band)1041*rf_band = map[i].rfband;10421043tda_map("(%d) rf_band = %02x\n", i, map[i].rfband);10441045return i;1046}10471048/*---------------------------------------------------------------------*/10491050struct tda18271_map_layout {1051struct tda18271_pll_map *main_pll;1052struct tda18271_pll_map *cal_pll;10531054struct tda18271_map *rf_cal;1055struct tda18271_map *rf_cal_kmco;1056struct tda18271_map *rf_cal_dc_over_dt;10571058struct tda18271_map *bp_filter;1059struct tda18271_map *rf_band;1060struct tda18271_map *gain_taper;1061struct tda18271_map *ir_measure;1062};10631064/*---------------------------------------------------------------------*/10651066int tda18271_lookup_pll_map(struct dvb_frontend *fe,1067enum tda18271_map_type map_type,1068u32 *freq, u8 *post_div, u8 *div)1069{1070struct tda18271_priv *priv = fe->tuner_priv;1071struct tda18271_pll_map *map = NULL;1072unsigned int i = 0;1073char *map_name;1074int ret = 0;10751076BUG_ON(!priv->maps);10771078switch (map_type) {1079case MAIN_PLL:1080map = priv->maps->main_pll;1081map_name = "main_pll";1082break;1083case CAL_PLL:1084map = priv->maps->cal_pll;1085map_name = "cal_pll";1086break;1087default:1088/* we should never get here */1089map_name = "undefined";1090break;1091}10921093if (!map) {1094tda_warn("%s map is not set!\n", map_name);1095ret = -EINVAL;1096goto fail;1097}10981099while ((map[i].lomax * 1000) < *freq) {1100if (map[i + 1].lomax == 0) {1101tda_map("%s: frequency (%d) out of range\n",1102map_name, *freq);1103ret = -ERANGE;1104break;1105}1106i++;1107}1108*post_div = map[i].pd;1109*div = map[i].d;11101111tda_map("(%d) %s: post div = 0x%02x, div = 0x%02x\n",1112i, map_name, *post_div, *div);1113fail:1114return ret;1115}11161117int tda18271_lookup_map(struct dvb_frontend *fe,1118enum tda18271_map_type map_type,1119u32 *freq, u8 *val)1120{1121struct tda18271_priv *priv = fe->tuner_priv;1122struct tda18271_map *map = NULL;1123unsigned int i = 0;1124char *map_name;1125int ret = 0;11261127BUG_ON(!priv->maps);11281129switch (map_type) {1130case BP_FILTER:1131map = priv->maps->bp_filter;1132map_name = "bp_filter";1133break;1134case RF_CAL_KMCO:1135map = priv->maps->rf_cal_kmco;1136map_name = "km";1137break;1138case RF_BAND:1139map = priv->maps->rf_band;1140map_name = "rf_band";1141break;1142case GAIN_TAPER:1143map = priv->maps->gain_taper;1144map_name = "gain_taper";1145break;1146case RF_CAL:1147map = priv->maps->rf_cal;1148map_name = "rf_cal";1149break;1150case IR_MEASURE:1151map = priv->maps->ir_measure;1152map_name = "ir_measure";1153break;1154case RF_CAL_DC_OVER_DT:1155map = priv->maps->rf_cal_dc_over_dt;1156map_name = "rf_cal_dc_over_dt";1157break;1158default:1159/* we should never get here */1160map_name = "undefined";1161break;1162}11631164if (!map) {1165tda_warn("%s map is not set!\n", map_name);1166ret = -EINVAL;1167goto fail;1168}11691170while ((map[i].rfmax * 1000) < *freq) {1171if (map[i + 1].rfmax == 0) {1172tda_map("%s: frequency (%d) out of range\n",1173map_name, *freq);1174ret = -ERANGE;1175break;1176}1177i++;1178}1179*val = map[i].val;11801181tda_map("(%d) %s: 0x%02x\n", i, map_name, *val);1182fail:1183return ret;1184}11851186/*---------------------------------------------------------------------*/11871188static struct tda18271_std_map tda18271c1_std_map = {1189.fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0,1190.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x18 */1191.atv_b = { .if_freq = 6750, .fm_rfn = 0, .agc_mode = 1, .std = 6,1192.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1193.atv_dk = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,1194.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */1195.atv_gh = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,1196.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */1197.atv_i = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,1198.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */1199.atv_l = { .if_freq = 7750, .fm_rfn = 0, .agc_mode = 1, .std = 7,1200.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */1201.atv_lc = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 7,1202.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0f */1203.atv_mn = { .if_freq = 5750, .fm_rfn = 0, .agc_mode = 1, .std = 5,1204.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0d */1205.atsc_6 = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4,1206.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */1207.dvbt_6 = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4,1208.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */1209.dvbt_7 = { .if_freq = 3800, .fm_rfn = 0, .agc_mode = 3, .std = 5,1210.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */1211.dvbt_8 = { .if_freq = 4300, .fm_rfn = 0, .agc_mode = 3, .std = 6,1212.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1e */1213.qam_6 = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,1214.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */1215.qam_8 = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7,1216.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1f */1217};12181219static struct tda18271_std_map tda18271c2_std_map = {1220.fm_radio = { .if_freq = 1250, .fm_rfn = 1, .agc_mode = 3, .std = 0,1221.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x18 */1222.atv_b = { .if_freq = 6000, .fm_rfn = 0, .agc_mode = 1, .std = 5,1223.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0d */1224.atv_dk = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6,1225.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1226.atv_gh = { .if_freq = 7100, .fm_rfn = 0, .agc_mode = 1, .std = 6,1227.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1228.atv_i = { .if_freq = 7250, .fm_rfn = 0, .agc_mode = 1, .std = 6,1229.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1230.atv_l = { .if_freq = 6900, .fm_rfn = 0, .agc_mode = 1, .std = 6,1231.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1232.atv_lc = { .if_freq = 1250, .fm_rfn = 0, .agc_mode = 1, .std = 6,1233.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0e */1234.atv_mn = { .if_freq = 5400, .fm_rfn = 0, .agc_mode = 1, .std = 4,1235.if_lvl = 0, .rfagc_top = 0x2c, }, /* EP3[4:0] 0x0c */1236.atsc_6 = { .if_freq = 3250, .fm_rfn = 0, .agc_mode = 3, .std = 4,1237.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */1238.dvbt_6 = { .if_freq = 3300, .fm_rfn = 0, .agc_mode = 3, .std = 4,1239.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */1240.dvbt_7 = { .if_freq = 3500, .fm_rfn = 0, .agc_mode = 3, .std = 4,1241.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1c */1242.dvbt_8 = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,1243.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */1244.qam_6 = { .if_freq = 4000, .fm_rfn = 0, .agc_mode = 3, .std = 5,1245.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1d */1246.qam_8 = { .if_freq = 5000, .fm_rfn = 0, .agc_mode = 3, .std = 7,1247.if_lvl = 1, .rfagc_top = 0x37, }, /* EP3[4:0] 0x1f */1248};12491250/*---------------------------------------------------------------------*/12511252static struct tda18271_map_layout tda18271c1_map_layout = {1253.main_pll = tda18271c1_main_pll,1254.cal_pll = tda18271c1_cal_pll,12551256.rf_cal = tda18271c1_rf_cal,1257.rf_cal_kmco = tda18271c1_km,12581259.bp_filter = tda18271_bp_filter,1260.rf_band = tda18271_rf_band,1261.gain_taper = tda18271_gain_taper,1262.ir_measure = tda18271_ir_measure,1263};12641265static struct tda18271_map_layout tda18271c2_map_layout = {1266.main_pll = tda18271c2_main_pll,1267.cal_pll = tda18271c2_cal_pll,12681269.rf_cal = tda18271c2_rf_cal,1270.rf_cal_kmco = tda18271c2_km,12711272.rf_cal_dc_over_dt = tda18271_rf_cal_dc_over_dt,12731274.bp_filter = tda18271_bp_filter,1275.rf_band = tda18271_rf_band,1276.gain_taper = tda18271_gain_taper,1277.ir_measure = tda18271_ir_measure,1278};12791280int tda18271_assign_map_layout(struct dvb_frontend *fe)1281{1282struct tda18271_priv *priv = fe->tuner_priv;1283int ret = 0;12841285switch (priv->id) {1286case TDA18271HDC1:1287priv->maps = &tda18271c1_map_layout;1288memcpy(&priv->std, &tda18271c1_std_map,1289sizeof(struct tda18271_std_map));1290break;1291case TDA18271HDC2:1292priv->maps = &tda18271c2_map_layout;1293memcpy(&priv->std, &tda18271c2_std_map,1294sizeof(struct tda18271_std_map));1295break;1296default:1297ret = -EINVAL;1298break;1299}1300memcpy(priv->rf_cal_state, &tda18271_rf_band_template,1301sizeof(tda18271_rf_band_template));13021303return ret;1304}13051306/*1307* Overrides for Emacs so that we follow Linus's tabbing style.1308* ---------------------------------------------------------------------------1309* Local variables:1310* c-basic-offset: 81311* End:1312*/131313141315