Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 1 | /* |
| 2 | tda18271-tables.c - driver for the Philips / NXP TDA18271 silicon tuner |
| 3 | |
| 4 | Copyright (C) 2007 Michael Krufky (mkrufky@linuxtv.org) |
| 5 | |
| 6 | This program is free software; you can redistribute it and/or modify |
| 7 | it under the terms of the GNU General Public License as published by |
| 8 | the Free Software Foundation; either version 2 of the License, or |
| 9 | (at your option) any later version. |
| 10 | |
| 11 | This program is distributed in the hope that it will be useful, |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 | GNU General Public License for more details. |
| 15 | |
| 16 | You should have received a copy of the GNU General Public License |
| 17 | along with this program; if not, write to the Free Software |
| 18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 19 | */ |
| 20 | |
| 21 | #include "tda18271-priv.h" |
| 22 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 23 | struct tda18271_pll_map { |
| 24 | u32 lomax; |
| 25 | u8 pd; /* post div */ |
| 26 | u8 d; /* div */ |
| 27 | }; |
| 28 | |
| 29 | struct tda18271_map { |
| 30 | u32 rfmax; |
| 31 | u8 val; |
| 32 | }; |
| 33 | |
| 34 | /*---------------------------------------------------------------------*/ |
| 35 | |
| 36 | static struct tda18271_pll_map tda18271_main_pll[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 37 | { .lomax = 32000, .pd = 0x5f, .d = 0xf0 }, |
| 38 | { .lomax = 35000, .pd = 0x5e, .d = 0xe0 }, |
| 39 | { .lomax = 37000, .pd = 0x5d, .d = 0xd0 }, |
| 40 | { .lomax = 41000, .pd = 0x5c, .d = 0xc0 }, |
| 41 | { .lomax = 44000, .pd = 0x5b, .d = 0xb0 }, |
| 42 | { .lomax = 49000, .pd = 0x5a, .d = 0xa0 }, |
| 43 | { .lomax = 54000, .pd = 0x59, .d = 0x90 }, |
| 44 | { .lomax = 61000, .pd = 0x58, .d = 0x80 }, |
| 45 | { .lomax = 65000, .pd = 0x4f, .d = 0x78 }, |
| 46 | { .lomax = 70000, .pd = 0x4e, .d = 0x70 }, |
| 47 | { .lomax = 75000, .pd = 0x4d, .d = 0x68 }, |
| 48 | { .lomax = 82000, .pd = 0x4c, .d = 0x60 }, |
| 49 | { .lomax = 89000, .pd = 0x4b, .d = 0x58 }, |
| 50 | { .lomax = 98000, .pd = 0x4a, .d = 0x50 }, |
| 51 | { .lomax = 109000, .pd = 0x49, .d = 0x48 }, |
| 52 | { .lomax = 123000, .pd = 0x48, .d = 0x40 }, |
| 53 | { .lomax = 131000, .pd = 0x3f, .d = 0x3c }, |
| 54 | { .lomax = 141000, .pd = 0x3e, .d = 0x38 }, |
| 55 | { .lomax = 151000, .pd = 0x3d, .d = 0x34 }, |
| 56 | { .lomax = 164000, .pd = 0x3c, .d = 0x30 }, |
| 57 | { .lomax = 179000, .pd = 0x3b, .d = 0x2c }, |
| 58 | { .lomax = 197000, .pd = 0x3a, .d = 0x28 }, |
| 59 | { .lomax = 219000, .pd = 0x39, .d = 0x24 }, |
| 60 | { .lomax = 246000, .pd = 0x38, .d = 0x20 }, |
| 61 | { .lomax = 263000, .pd = 0x2f, .d = 0x1e }, |
| 62 | { .lomax = 282000, .pd = 0x2e, .d = 0x1c }, |
| 63 | { .lomax = 303000, .pd = 0x2d, .d = 0x1a }, |
| 64 | { .lomax = 329000, .pd = 0x2c, .d = 0x18 }, |
| 65 | { .lomax = 359000, .pd = 0x2b, .d = 0x16 }, |
| 66 | { .lomax = 395000, .pd = 0x2a, .d = 0x14 }, |
| 67 | { .lomax = 438000, .pd = 0x29, .d = 0x12 }, |
| 68 | { .lomax = 493000, .pd = 0x28, .d = 0x10 }, |
| 69 | { .lomax = 526000, .pd = 0x1f, .d = 0x0f }, |
| 70 | { .lomax = 564000, .pd = 0x1e, .d = 0x0e }, |
| 71 | { .lomax = 607000, .pd = 0x1d, .d = 0x0d }, |
| 72 | { .lomax = 658000, .pd = 0x1c, .d = 0x0c }, |
| 73 | { .lomax = 718000, .pd = 0x1b, .d = 0x0b }, |
| 74 | { .lomax = 790000, .pd = 0x1a, .d = 0x0a }, |
| 75 | { .lomax = 877000, .pd = 0x19, .d = 0x09 }, |
| 76 | { .lomax = 987000, .pd = 0x18, .d = 0x08 }, |
| 77 | { .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */ |
| 78 | }; |
| 79 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 80 | static struct tda18271_pll_map tda18271_cal_pll[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 81 | { .lomax = 33000, .pd = 0xdd, .d = 0xd0 }, |
| 82 | { .lomax = 36000, .pd = 0xdc, .d = 0xc0 }, |
| 83 | { .lomax = 40000, .pd = 0xdb, .d = 0xb0 }, |
| 84 | { .lomax = 44000, .pd = 0xda, .d = 0xa0 }, |
| 85 | { .lomax = 49000, .pd = 0xd9, .d = 0x90 }, |
| 86 | { .lomax = 55000, .pd = 0xd8, .d = 0x80 }, |
| 87 | { .lomax = 63000, .pd = 0xd3, .d = 0x70 }, |
| 88 | { .lomax = 67000, .pd = 0xcd, .d = 0x68 }, |
| 89 | { .lomax = 73000, .pd = 0xcc, .d = 0x60 }, |
| 90 | { .lomax = 80000, .pd = 0xcb, .d = 0x58 }, |
| 91 | { .lomax = 88000, .pd = 0xca, .d = 0x50 }, |
| 92 | { .lomax = 98000, .pd = 0xc9, .d = 0x48 }, |
| 93 | { .lomax = 110000, .pd = 0xc8, .d = 0x40 }, |
| 94 | { .lomax = 126000, .pd = 0xc3, .d = 0x38 }, |
| 95 | { .lomax = 135000, .pd = 0xbd, .d = 0x34 }, |
| 96 | { .lomax = 147000, .pd = 0xbc, .d = 0x30 }, |
| 97 | { .lomax = 160000, .pd = 0xbb, .d = 0x2c }, |
| 98 | { .lomax = 176000, .pd = 0xba, .d = 0x28 }, |
| 99 | { .lomax = 196000, .pd = 0xb9, .d = 0x24 }, |
| 100 | { .lomax = 220000, .pd = 0xb8, .d = 0x20 }, |
| 101 | { .lomax = 252000, .pd = 0xb3, .d = 0x1c }, |
| 102 | { .lomax = 271000, .pd = 0xad, .d = 0x1a }, |
| 103 | { .lomax = 294000, .pd = 0xac, .d = 0x18 }, |
| 104 | { .lomax = 321000, .pd = 0xab, .d = 0x16 }, |
| 105 | { .lomax = 353000, .pd = 0xaa, .d = 0x14 }, |
| 106 | { .lomax = 392000, .pd = 0xa9, .d = 0x12 }, |
| 107 | { .lomax = 441000, .pd = 0xa8, .d = 0x10 }, |
| 108 | { .lomax = 505000, .pd = 0xa3, .d = 0x0e }, |
| 109 | { .lomax = 543000, .pd = 0x9d, .d = 0x0d }, |
| 110 | { .lomax = 589000, .pd = 0x9c, .d = 0x0c }, |
| 111 | { .lomax = 642000, .pd = 0x9b, .d = 0x0b }, |
| 112 | { .lomax = 707000, .pd = 0x9a, .d = 0x0a }, |
| 113 | { .lomax = 785000, .pd = 0x99, .d = 0x09 }, |
| 114 | { .lomax = 883000, .pd = 0x98, .d = 0x08 }, |
| 115 | { .lomax = 1010000, .pd = 0x93, .d = 0x07 }, |
| 116 | { .lomax = 0, .pd = 0x00, .d = 0x00 }, /* end */ |
| 117 | }; |
| 118 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 119 | static struct tda18271_map tda18271_bp_filter[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 120 | { .rfmax = 62000, .val = 0x00 }, |
| 121 | { .rfmax = 84000, .val = 0x01 }, |
| 122 | { .rfmax = 100000, .val = 0x02 }, |
| 123 | { .rfmax = 140000, .val = 0x03 }, |
| 124 | { .rfmax = 170000, .val = 0x04 }, |
| 125 | { .rfmax = 180000, .val = 0x05 }, |
| 126 | { .rfmax = 865000, .val = 0x06 }, |
| 127 | { .rfmax = 0, .val = 0x00 }, /* end */ |
| 128 | }; |
| 129 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 130 | static struct tda18271_map tda18271_km[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 131 | { .rfmax = 61100, .val = 0x74 }, |
| 132 | { .rfmax = 350000, .val = 0x40 }, |
| 133 | { .rfmax = 720000, .val = 0x30 }, |
| 134 | { .rfmax = 865000, .val = 0x40 }, |
| 135 | { .rfmax = 0, .val = 0x00 }, /* end */ |
| 136 | }; |
| 137 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 138 | static struct tda18271_map tda18271_rf_band[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 139 | { .rfmax = 47900, .val = 0x00 }, |
| 140 | { .rfmax = 61100, .val = 0x01 }, |
| 141 | /* { .rfmax = 152600, .val = 0x02 }, */ |
| 142 | { .rfmax = 121200, .val = 0x02 }, |
| 143 | { .rfmax = 164700, .val = 0x03 }, |
| 144 | { .rfmax = 203500, .val = 0x04 }, |
| 145 | { .rfmax = 457800, .val = 0x05 }, |
| 146 | { .rfmax = 865000, .val = 0x06 }, |
| 147 | { .rfmax = 0, .val = 0x00 }, /* end */ |
| 148 | }; |
| 149 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 150 | static struct tda18271_map tda18271_gain_taper[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 151 | { .rfmax = 45400, .val = 0x1f }, |
| 152 | { .rfmax = 45800, .val = 0x1e }, |
| 153 | { .rfmax = 46200, .val = 0x1d }, |
| 154 | { .rfmax = 46700, .val = 0x1c }, |
| 155 | { .rfmax = 47100, .val = 0x1b }, |
| 156 | { .rfmax = 47500, .val = 0x1a }, |
| 157 | { .rfmax = 47900, .val = 0x19 }, |
| 158 | { .rfmax = 49600, .val = 0x17 }, |
| 159 | { .rfmax = 51200, .val = 0x16 }, |
| 160 | { .rfmax = 52900, .val = 0x15 }, |
| 161 | { .rfmax = 54500, .val = 0x14 }, |
| 162 | { .rfmax = 56200, .val = 0x13 }, |
| 163 | { .rfmax = 57800, .val = 0x12 }, |
| 164 | { .rfmax = 59500, .val = 0x11 }, |
| 165 | { .rfmax = 61100, .val = 0x10 }, |
| 166 | { .rfmax = 67600, .val = 0x0d }, |
| 167 | { .rfmax = 74200, .val = 0x0c }, |
| 168 | { .rfmax = 80700, .val = 0x0b }, |
| 169 | { .rfmax = 87200, .val = 0x0a }, |
| 170 | { .rfmax = 93800, .val = 0x09 }, |
| 171 | { .rfmax = 100300, .val = 0x08 }, |
| 172 | { .rfmax = 106900, .val = 0x07 }, |
| 173 | { .rfmax = 113400, .val = 0x06 }, |
| 174 | { .rfmax = 119900, .val = 0x05 }, |
| 175 | { .rfmax = 126500, .val = 0x04 }, |
| 176 | { .rfmax = 133000, .val = 0x03 }, |
| 177 | { .rfmax = 139500, .val = 0x02 }, |
| 178 | { .rfmax = 146100, .val = 0x01 }, |
| 179 | { .rfmax = 152600, .val = 0x00 }, |
| 180 | { .rfmax = 154300, .val = 0x1f }, |
| 181 | { .rfmax = 156100, .val = 0x1e }, |
| 182 | { .rfmax = 157800, .val = 0x1d }, |
| 183 | { .rfmax = 159500, .val = 0x1c }, |
| 184 | { .rfmax = 161200, .val = 0x1b }, |
| 185 | { .rfmax = 163000, .val = 0x1a }, |
| 186 | { .rfmax = 164700, .val = 0x19 }, |
| 187 | { .rfmax = 170200, .val = 0x17 }, |
| 188 | { .rfmax = 175800, .val = 0x16 }, |
| 189 | { .rfmax = 181300, .val = 0x15 }, |
| 190 | { .rfmax = 186900, .val = 0x14 }, |
| 191 | { .rfmax = 192400, .val = 0x13 }, |
| 192 | { .rfmax = 198000, .val = 0x12 }, |
| 193 | { .rfmax = 203500, .val = 0x11 }, |
| 194 | { .rfmax = 216200, .val = 0x14 }, |
| 195 | { .rfmax = 228900, .val = 0x13 }, |
| 196 | { .rfmax = 241600, .val = 0x12 }, |
| 197 | { .rfmax = 254400, .val = 0x11 }, |
| 198 | { .rfmax = 267100, .val = 0x10 }, |
| 199 | { .rfmax = 279800, .val = 0x0f }, |
| 200 | { .rfmax = 292500, .val = 0x0e }, |
| 201 | { .rfmax = 305200, .val = 0x0d }, |
| 202 | { .rfmax = 317900, .val = 0x0c }, |
| 203 | { .rfmax = 330700, .val = 0x0b }, |
| 204 | { .rfmax = 343400, .val = 0x0a }, |
| 205 | { .rfmax = 356100, .val = 0x09 }, |
| 206 | { .rfmax = 368800, .val = 0x08 }, |
| 207 | { .rfmax = 381500, .val = 0x07 }, |
| 208 | { .rfmax = 394200, .val = 0x06 }, |
| 209 | { .rfmax = 406900, .val = 0x05 }, |
| 210 | { .rfmax = 419700, .val = 0x04 }, |
| 211 | { .rfmax = 432400, .val = 0x03 }, |
| 212 | { .rfmax = 445100, .val = 0x02 }, |
| 213 | { .rfmax = 457800, .val = 0x01 }, |
| 214 | { .rfmax = 476300, .val = 0x19 }, |
| 215 | { .rfmax = 494800, .val = 0x18 }, |
| 216 | { .rfmax = 513300, .val = 0x17 }, |
| 217 | { .rfmax = 531800, .val = 0x16 }, |
| 218 | { .rfmax = 550300, .val = 0x15 }, |
| 219 | { .rfmax = 568900, .val = 0x14 }, |
| 220 | { .rfmax = 587400, .val = 0x13 }, |
| 221 | { .rfmax = 605900, .val = 0x12 }, |
| 222 | { .rfmax = 624400, .val = 0x11 }, |
| 223 | { .rfmax = 642900, .val = 0x10 }, |
| 224 | { .rfmax = 661400, .val = 0x0f }, |
| 225 | { .rfmax = 679900, .val = 0x0e }, |
| 226 | { .rfmax = 698400, .val = 0x0d }, |
| 227 | { .rfmax = 716900, .val = 0x0c }, |
| 228 | { .rfmax = 735400, .val = 0x0b }, |
| 229 | { .rfmax = 753900, .val = 0x0a }, |
| 230 | { .rfmax = 772500, .val = 0x09 }, |
| 231 | { .rfmax = 791000, .val = 0x08 }, |
| 232 | { .rfmax = 809500, .val = 0x07 }, |
| 233 | { .rfmax = 828000, .val = 0x06 }, |
| 234 | { .rfmax = 846500, .val = 0x05 }, |
| 235 | { .rfmax = 865000, .val = 0x04 }, |
| 236 | { .rfmax = 0, .val = 0x00 }, /* end */ |
| 237 | }; |
| 238 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 239 | static struct tda18271_map tda18271_rf_cal[] = { |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 240 | { .rfmax = 41000, .val = 0x1e }, |
| 241 | { .rfmax = 43000, .val = 0x30 }, |
| 242 | { .rfmax = 45000, .val = 0x43 }, |
| 243 | { .rfmax = 46000, .val = 0x4d }, |
| 244 | { .rfmax = 47000, .val = 0x54 }, |
| 245 | { .rfmax = 47900, .val = 0x64 }, |
| 246 | { .rfmax = 49100, .val = 0x20 }, |
| 247 | { .rfmax = 50000, .val = 0x22 }, |
| 248 | { .rfmax = 51000, .val = 0x2a }, |
| 249 | { .rfmax = 53000, .val = 0x32 }, |
| 250 | { .rfmax = 55000, .val = 0x35 }, |
| 251 | { .rfmax = 56000, .val = 0x3c }, |
| 252 | { .rfmax = 57000, .val = 0x3f }, |
| 253 | { .rfmax = 58000, .val = 0x48 }, |
| 254 | { .rfmax = 59000, .val = 0x4d }, |
| 255 | { .rfmax = 60000, .val = 0x58 }, |
| 256 | { .rfmax = 61100, .val = 0x5f }, |
| 257 | { .rfmax = 0, .val = 0x00 }, /* end */ |
| 258 | }; |
| 259 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 260 | static struct tda18271_map tda18271_ir_measure[] = { |
Michael Krufky | 7686b57 | 2007-12-24 21:03:52 -0300 | [diff] [blame] | 261 | { .rfmax = 30000, .val = 4 }, |
| 262 | { .rfmax = 200000, .val = 5 }, |
| 263 | { .rfmax = 600000, .val = 6 }, |
| 264 | { .rfmax = 865000, .val = 7 }, |
| 265 | { .rfmax = 0, .val = 0 }, /* end */ |
Michael Krufky | aaeccba | 2007-12-02 11:03:57 -0300 | [diff] [blame] | 266 | }; |
| 267 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 268 | /*---------------------------------------------------------------------*/ |
| 269 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 270 | int tda18271_lookup_pll_map(enum tda18271_map_type map_type, |
| 271 | u32 *freq, u8 *post_div, u8 *div) |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 272 | { |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 273 | struct tda18271_pll_map *map = NULL; |
| 274 | unsigned int i = 0; |
| 275 | char *map_name; |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 276 | int ret = 0; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 277 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 278 | switch (map_type) { |
| 279 | case MAIN_PLL: |
| 280 | map = tda18271_main_pll; |
| 281 | map_name = "main_pll"; |
| 282 | break; |
| 283 | case CAL_PLL: |
| 284 | map = tda18271_cal_pll; |
| 285 | map_name = "cal_pll"; |
| 286 | break; |
| 287 | default: |
| 288 | /* we should never get here */ |
| 289 | map_name = "undefined"; |
| 290 | break; |
| 291 | } |
| 292 | |
| 293 | if (!map) { |
Michael Krufky | 182519f | 2007-12-25 15:10:11 -0300 | [diff] [blame] | 294 | tda_warn("%s map is not set!\n", map_name); |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 295 | ret = -EINVAL; |
| 296 | goto fail; |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 297 | } |
| 298 | |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 299 | while ((map[i].lomax * 1000) < *freq) { |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 300 | if (map[i].lomax == 0) { |
| 301 | tda_map("%s: frequency (%d) out of range\n", |
| 302 | map_name, *freq); |
| 303 | ret = -ERANGE; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 304 | break; |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 305 | } |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 306 | i++; |
| 307 | } |
| 308 | *post_div = map[i].pd; |
| 309 | *div = map[i].d; |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 310 | |
Michael Krufky | 182519f | 2007-12-25 15:10:11 -0300 | [diff] [blame] | 311 | tda_map("%s: post div = 0x%02x, div = 0x%02x\n", |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 312 | map_name, *post_div, *div); |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 313 | fail: |
| 314 | return ret; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 315 | } |
| 316 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 317 | int tda18271_lookup_map(enum tda18271_map_type map_type, u32 *freq, u8 *val) |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 318 | { |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 319 | struct tda18271_map *map = NULL; |
| 320 | unsigned int i = 0; |
| 321 | char *map_name; |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 322 | int ret = 0; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 323 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 324 | switch (map_type) { |
| 325 | case BP_FILTER: |
| 326 | map = tda18271_bp_filter; |
| 327 | map_name = "bp_filter"; |
| 328 | break; |
| 329 | case RF_CAL_KMCO: |
| 330 | map = tda18271_km; |
| 331 | map_name = "km"; |
| 332 | break; |
| 333 | case RF_BAND: |
| 334 | map = tda18271_rf_band; |
| 335 | map_name = "rf_band"; |
| 336 | break; |
| 337 | case GAIN_TAPER: |
| 338 | map = tda18271_gain_taper; |
| 339 | map_name = "gain_taper"; |
| 340 | break; |
| 341 | case RF_CAL: |
| 342 | map = tda18271_rf_cal; |
| 343 | map_name = "rf_cal"; |
| 344 | break; |
| 345 | case IR_MEASURE: |
| 346 | map = tda18271_ir_measure; |
| 347 | map_name = "ir_measure"; |
| 348 | break; |
| 349 | default: |
| 350 | /* we should never get here */ |
| 351 | map_name = "undefined"; |
| 352 | break; |
| 353 | } |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 354 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 355 | if (!map) { |
Michael Krufky | 182519f | 2007-12-25 15:10:11 -0300 | [diff] [blame] | 356 | tda_warn("%s map is not set!\n", map_name); |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 357 | ret = -EINVAL; |
| 358 | goto fail; |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 359 | } |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 360 | |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 361 | while ((map[i].rfmax * 1000) < *freq) { |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 362 | if (map[i].rfmax == 0) { |
| 363 | tda_map("%s: frequency (%d) out of range\n", |
| 364 | map_name, *freq); |
| 365 | ret = -ERANGE; |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 366 | break; |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 367 | } |
Michael Krufky | 2f27dfc | 2007-12-25 00:39:37 -0300 | [diff] [blame] | 368 | i++; |
| 369 | } |
| 370 | *val = map[i].val; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 371 | |
Michael Krufky | 182519f | 2007-12-25 15:10:11 -0300 | [diff] [blame] | 372 | tda_map("%s: 0x%02x\n", map_name, *val); |
Michael Krufky | 33f25b4 | 2007-12-29 21:46:01 -0300 | [diff] [blame] | 373 | fail: |
| 374 | return ret; |
Michael Krufky | b5f3e1e | 2007-12-02 16:36:05 -0300 | [diff] [blame] | 375 | } |
| 376 | |
Michael Krufky | 6ca04de | 2007-11-23 16:52:15 -0300 | [diff] [blame] | 377 | /* |
| 378 | * Overrides for Emacs so that we follow Linus's tabbing style. |
| 379 | * --------------------------------------------------------------------------- |
| 380 | * Local variables: |
| 381 | * c-basic-offset: 8 |
| 382 | * End: |
| 383 | */ |