1395d00d1SAntti Palosaari /* 27978b8a1SAntti Palosaari * Montage Technology M88DS3103/M88RS6000 demodulator driver 3395d00d1SAntti Palosaari * 4395d00d1SAntti Palosaari * Copyright (C) 2013 Antti Palosaari <crope@iki.fi> 5395d00d1SAntti Palosaari * 6395d00d1SAntti Palosaari * This program is free software; you can redistribute it and/or modify 7395d00d1SAntti Palosaari * it under the terms of the GNU General Public License as published by 8395d00d1SAntti Palosaari * the Free Software Foundation; either version 2 of the License, or 9395d00d1SAntti Palosaari * (at your option) any later version. 10395d00d1SAntti Palosaari * 11395d00d1SAntti Palosaari * This program is distributed in the hope that it will be useful, 12395d00d1SAntti Palosaari * but WITHOUT ANY WARRANTY; without even the implied warranty of 13395d00d1SAntti Palosaari * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14395d00d1SAntti Palosaari * GNU General Public License for more details. 15395d00d1SAntti Palosaari */ 16395d00d1SAntti Palosaari 17395d00d1SAntti Palosaari #ifndef M88DS3103_PRIV_H 18395d00d1SAntti Palosaari #define M88DS3103_PRIV_H 19395d00d1SAntti Palosaari 20395d00d1SAntti Palosaari #include "dvb_frontend.h" 21395d00d1SAntti Palosaari #include "m88ds3103.h" 22395d00d1SAntti Palosaari #include "dvb_math.h" 23395d00d1SAntti Palosaari #include <linux/firmware.h> 2444b9055bSAntti Palosaari #include <linux/i2c-mux.h> 253ae266f8SAntti Palosaari #include <linux/math64.h> 26395d00d1SAntti Palosaari 27395d00d1SAntti Palosaari #define M88DS3103_FIRMWARE "dvb-demod-m88ds3103.fw" 28f4df95bcSnibble.max #define M88RS6000_FIRMWARE "dvb-demod-m88rs6000.fw" 29395d00d1SAntti Palosaari #define M88DS3103_MCLK_KHZ 96000 30f4df95bcSnibble.max #define M88RS6000_CHIP_ID 0x74 31f4df95bcSnibble.max #define M88DS3103_CHIP_ID 0x70 32395d00d1SAntti Palosaari 337978b8a1SAntti Palosaari struct m88ds3103_dev { 34f01919e8SAntti Palosaari struct i2c_client *client; 35395d00d1SAntti Palosaari /* mutex needed due to own tuner I2C adapter */ 36395d00d1SAntti Palosaari struct mutex i2c_mutex; 37f01919e8SAntti Palosaari struct m88ds3103_config config; 38395d00d1SAntti Palosaari const struct m88ds3103_config *cfg; 39395d00d1SAntti Palosaari struct dvb_frontend fe; 400df289a2SMauro Carvalho Chehab enum fe_delivery_system delivery_system; 410df289a2SMauro Carvalho Chehab enum fe_status fe_status; 42ce80d713SAntti Palosaari u32 dvbv3_ber; /* for old DVBv3 API read_ber */ 43395d00d1SAntti Palosaari bool warm; /* FW running */ 4444b9055bSAntti Palosaari struct i2c_adapter *i2c_adapter; 45f4df95bcSnibble.max /* auto detect chip id to do different config */ 46f4df95bcSnibble.max u8 chip_id; 47f4df95bcSnibble.max /* main mclk is calculated for M88RS6000 dynamically */ 48f4df95bcSnibble.max u32 mclk_khz; 49ce80d713SAntti Palosaari u64 post_bit_error; 50ce80d713SAntti Palosaari u64 post_bit_count; 51395d00d1SAntti Palosaari }; 52395d00d1SAntti Palosaari 53395d00d1SAntti Palosaari struct m88ds3103_reg_val { 54395d00d1SAntti Palosaari u8 reg; 55395d00d1SAntti Palosaari u8 val; 56395d00d1SAntti Palosaari }; 57395d00d1SAntti Palosaari 58395d00d1SAntti Palosaari static const struct m88ds3103_reg_val m88ds3103_dvbs_init_reg_vals[] = { 59395d00d1SAntti Palosaari {0x23, 0x07}, 60395d00d1SAntti Palosaari {0x08, 0x03}, 61395d00d1SAntti Palosaari {0x0c, 0x02}, 62395d00d1SAntti Palosaari {0x21, 0x54}, 63395d00d1SAntti Palosaari {0x25, 0x8a}, 64395d00d1SAntti Palosaari {0x27, 0x31}, 65395d00d1SAntti Palosaari {0x30, 0x08}, 66395d00d1SAntti Palosaari {0x31, 0x40}, 67395d00d1SAntti Palosaari {0x32, 0x32}, 68395d00d1SAntti Palosaari {0x35, 0xff}, 69395d00d1SAntti Palosaari {0x3a, 0x00}, 70395d00d1SAntti Palosaari {0x37, 0x10}, 71395d00d1SAntti Palosaari {0x38, 0x10}, 72395d00d1SAntti Palosaari {0x39, 0x02}, 73395d00d1SAntti Palosaari {0x42, 0x60}, 74395d00d1SAntti Palosaari {0x4a, 0x80}, 75395d00d1SAntti Palosaari {0x4b, 0x04}, 76395d00d1SAntti Palosaari {0x4d, 0x91}, 77395d00d1SAntti Palosaari {0x5d, 0xc8}, 78395d00d1SAntti Palosaari {0x50, 0x36}, 79395d00d1SAntti Palosaari {0x51, 0x36}, 80395d00d1SAntti Palosaari {0x52, 0x36}, 81395d00d1SAntti Palosaari {0x53, 0x36}, 82dcaf0fbfSAntti Palosaari {0x56, 0x01}, 83395d00d1SAntti Palosaari {0x63, 0x0f}, 84395d00d1SAntti Palosaari {0x64, 0x30}, 85395d00d1SAntti Palosaari {0x65, 0x40}, 86395d00d1SAntti Palosaari {0x68, 0x26}, 87395d00d1SAntti Palosaari {0x69, 0x4c}, 88395d00d1SAntti Palosaari {0x70, 0x20}, 89395d00d1SAntti Palosaari {0x71, 0x70}, 90395d00d1SAntti Palosaari {0x72, 0x04}, 91395d00d1SAntti Palosaari {0x73, 0x00}, 92395d00d1SAntti Palosaari {0x70, 0x40}, 93395d00d1SAntti Palosaari {0x71, 0x70}, 94395d00d1SAntti Palosaari {0x72, 0x04}, 95395d00d1SAntti Palosaari {0x73, 0x00}, 96395d00d1SAntti Palosaari {0x70, 0x60}, 97395d00d1SAntti Palosaari {0x71, 0x70}, 98395d00d1SAntti Palosaari {0x72, 0x04}, 99395d00d1SAntti Palosaari {0x73, 0x00}, 100395d00d1SAntti Palosaari {0x70, 0x80}, 101395d00d1SAntti Palosaari {0x71, 0x70}, 102395d00d1SAntti Palosaari {0x72, 0x04}, 103395d00d1SAntti Palosaari {0x73, 0x00}, 104395d00d1SAntti Palosaari {0x70, 0xa0}, 105395d00d1SAntti Palosaari {0x71, 0x70}, 106395d00d1SAntti Palosaari {0x72, 0x04}, 107395d00d1SAntti Palosaari {0x73, 0x00}, 108395d00d1SAntti Palosaari {0x70, 0x1f}, 109395d00d1SAntti Palosaari {0x76, 0x38}, 110395d00d1SAntti Palosaari {0x77, 0xa6}, 111395d00d1SAntti Palosaari {0x78, 0x0c}, 112395d00d1SAntti Palosaari {0x79, 0x80}, 113395d00d1SAntti Palosaari {0x7f, 0x14}, 114395d00d1SAntti Palosaari {0x7c, 0x00}, 115395d00d1SAntti Palosaari {0xae, 0x82}, 116395d00d1SAntti Palosaari {0x80, 0x64}, 117395d00d1SAntti Palosaari {0x81, 0x66}, 118395d00d1SAntti Palosaari {0x82, 0x44}, 119395d00d1SAntti Palosaari {0x85, 0x04}, 120395d00d1SAntti Palosaari {0xcd, 0xf4}, 121395d00d1SAntti Palosaari {0x90, 0x33}, 122395d00d1SAntti Palosaari {0xa0, 0x44}, 123395d00d1SAntti Palosaari {0xc0, 0x08}, 124395d00d1SAntti Palosaari {0xc3, 0x10}, 125395d00d1SAntti Palosaari {0xc4, 0x08}, 126395d00d1SAntti Palosaari {0xc5, 0xf0}, 127395d00d1SAntti Palosaari {0xc6, 0xff}, 128395d00d1SAntti Palosaari {0xc7, 0x00}, 129395d00d1SAntti Palosaari {0xc8, 0x1a}, 130395d00d1SAntti Palosaari {0xc9, 0x80}, 131395d00d1SAntti Palosaari {0xe0, 0xf8}, 132395d00d1SAntti Palosaari {0xe6, 0x8b}, 133395d00d1SAntti Palosaari {0xd0, 0x40}, 134395d00d1SAntti Palosaari {0xf8, 0x20}, 135395d00d1SAntti Palosaari {0xfa, 0x0f}, 136395d00d1SAntti Palosaari {0x00, 0x00}, 137395d00d1SAntti Palosaari {0xbd, 0x01}, 138395d00d1SAntti Palosaari {0xb8, 0x00}, 139395d00d1SAntti Palosaari }; 140395d00d1SAntti Palosaari 141395d00d1SAntti Palosaari static const struct m88ds3103_reg_val m88ds3103_dvbs2_init_reg_vals[] = { 142395d00d1SAntti Palosaari {0x23, 0x07}, 143395d00d1SAntti Palosaari {0x08, 0x07}, 144395d00d1SAntti Palosaari {0x0c, 0x02}, 145395d00d1SAntti Palosaari {0x21, 0x54}, 146395d00d1SAntti Palosaari {0x25, 0x8a}, 147395d00d1SAntti Palosaari {0x27, 0x31}, 148395d00d1SAntti Palosaari {0x30, 0x08}, 149395d00d1SAntti Palosaari {0x32, 0x32}, 150395d00d1SAntti Palosaari {0x35, 0xff}, 151395d00d1SAntti Palosaari {0x3a, 0x00}, 152395d00d1SAntti Palosaari {0x37, 0x10}, 153395d00d1SAntti Palosaari {0x38, 0x10}, 154395d00d1SAntti Palosaari {0x39, 0x02}, 155395d00d1SAntti Palosaari {0x42, 0x60}, 156395d00d1SAntti Palosaari {0x4a, 0x80}, 157395d00d1SAntti Palosaari {0x4b, 0x04}, 158395d00d1SAntti Palosaari {0x4d, 0x91}, 159395d00d1SAntti Palosaari {0x5d, 0xc8}, 160395d00d1SAntti Palosaari {0x50, 0x36}, 161395d00d1SAntti Palosaari {0x51, 0x36}, 162395d00d1SAntti Palosaari {0x52, 0x36}, 163395d00d1SAntti Palosaari {0x53, 0x36}, 164dcaf0fbfSAntti Palosaari {0x56, 0x01}, 165395d00d1SAntti Palosaari {0x63, 0x0f}, 166395d00d1SAntti Palosaari {0x64, 0x10}, 167395d00d1SAntti Palosaari {0x65, 0x20}, 168395d00d1SAntti Palosaari {0x68, 0x46}, 169395d00d1SAntti Palosaari {0x69, 0xcd}, 170395d00d1SAntti Palosaari {0x70, 0x20}, 171395d00d1SAntti Palosaari {0x71, 0x70}, 172395d00d1SAntti Palosaari {0x72, 0x04}, 173395d00d1SAntti Palosaari {0x73, 0x00}, 174395d00d1SAntti Palosaari {0x70, 0x40}, 175395d00d1SAntti Palosaari {0x71, 0x70}, 176395d00d1SAntti Palosaari {0x72, 0x04}, 177395d00d1SAntti Palosaari {0x73, 0x00}, 178395d00d1SAntti Palosaari {0x70, 0x60}, 179395d00d1SAntti Palosaari {0x71, 0x70}, 180395d00d1SAntti Palosaari {0x72, 0x04}, 181395d00d1SAntti Palosaari {0x73, 0x00}, 182395d00d1SAntti Palosaari {0x70, 0x80}, 183395d00d1SAntti Palosaari {0x71, 0x70}, 184395d00d1SAntti Palosaari {0x72, 0x04}, 185395d00d1SAntti Palosaari {0x73, 0x00}, 186395d00d1SAntti Palosaari {0x70, 0xa0}, 187395d00d1SAntti Palosaari {0x71, 0x70}, 188395d00d1SAntti Palosaari {0x72, 0x04}, 189395d00d1SAntti Palosaari {0x73, 0x00}, 190395d00d1SAntti Palosaari {0x70, 0x1f}, 191395d00d1SAntti Palosaari {0x76, 0x38}, 192395d00d1SAntti Palosaari {0x77, 0xa6}, 193395d00d1SAntti Palosaari {0x78, 0x0c}, 194395d00d1SAntti Palosaari {0x79, 0x80}, 195395d00d1SAntti Palosaari {0x7f, 0x14}, 196395d00d1SAntti Palosaari {0x85, 0x08}, 197395d00d1SAntti Palosaari {0xcd, 0xf4}, 198395d00d1SAntti Palosaari {0x90, 0x33}, 199395d00d1SAntti Palosaari {0x86, 0x00}, 200395d00d1SAntti Palosaari {0x87, 0x0f}, 201395d00d1SAntti Palosaari {0x89, 0x00}, 202395d00d1SAntti Palosaari {0x8b, 0x44}, 203395d00d1SAntti Palosaari {0x8c, 0x66}, 204395d00d1SAntti Palosaari {0x9d, 0xc1}, 205395d00d1SAntti Palosaari {0x8a, 0x10}, 206395d00d1SAntti Palosaari {0xad, 0x40}, 207395d00d1SAntti Palosaari {0xa0, 0x44}, 208395d00d1SAntti Palosaari {0xc0, 0x08}, 209395d00d1SAntti Palosaari {0xc1, 0x10}, 210395d00d1SAntti Palosaari {0xc2, 0x08}, 211395d00d1SAntti Palosaari {0xc3, 0x10}, 212395d00d1SAntti Palosaari {0xc4, 0x08}, 213395d00d1SAntti Palosaari {0xc5, 0xf0}, 214395d00d1SAntti Palosaari {0xc6, 0xff}, 215395d00d1SAntti Palosaari {0xc7, 0x00}, 216395d00d1SAntti Palosaari {0xc8, 0x1a}, 217395d00d1SAntti Palosaari {0xc9, 0x80}, 218395d00d1SAntti Palosaari {0xca, 0x23}, 219395d00d1SAntti Palosaari {0xcb, 0x24}, 220395d00d1SAntti Palosaari {0xcc, 0xf4}, 221395d00d1SAntti Palosaari {0xce, 0x74}, 222395d00d1SAntti Palosaari {0x00, 0x00}, 223395d00d1SAntti Palosaari {0xbd, 0x01}, 224395d00d1SAntti Palosaari {0xb8, 0x00}, 225395d00d1SAntti Palosaari }; 226395d00d1SAntti Palosaari 227f4df95bcSnibble.max static const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = { 228f4df95bcSnibble.max {0x23, 0x07}, 229f4df95bcSnibble.max {0x08, 0x03}, 230f4df95bcSnibble.max {0x0c, 0x02}, 231f4df95bcSnibble.max {0x20, 0x00}, 232f4df95bcSnibble.max {0x21, 0x54}, 233f4df95bcSnibble.max {0x25, 0x82}, 234f4df95bcSnibble.max {0x27, 0x31}, 235f4df95bcSnibble.max {0x30, 0x08}, 236f4df95bcSnibble.max {0x31, 0x40}, 237f4df95bcSnibble.max {0x32, 0x32}, 238f4df95bcSnibble.max {0x33, 0x35}, 239f4df95bcSnibble.max {0x35, 0xff}, 240f4df95bcSnibble.max {0x3a, 0x00}, 241f4df95bcSnibble.max {0x37, 0x10}, 242f4df95bcSnibble.max {0x38, 0x10}, 243f4df95bcSnibble.max {0x39, 0x02}, 244f4df95bcSnibble.max {0x42, 0x60}, 245f4df95bcSnibble.max {0x4a, 0x80}, 246f4df95bcSnibble.max {0x4b, 0x04}, 247f4df95bcSnibble.max {0x4d, 0x91}, 248f4df95bcSnibble.max {0x5d, 0xc8}, 249f4df95bcSnibble.max {0x50, 0x36}, 250f4df95bcSnibble.max {0x51, 0x36}, 251f4df95bcSnibble.max {0x52, 0x36}, 252f4df95bcSnibble.max {0x53, 0x36}, 253f4df95bcSnibble.max {0x63, 0x0f}, 254f4df95bcSnibble.max {0x64, 0x30}, 255f4df95bcSnibble.max {0x65, 0x40}, 256f4df95bcSnibble.max {0x68, 0x26}, 257f4df95bcSnibble.max {0x69, 0x4c}, 258f4df95bcSnibble.max {0x70, 0x20}, 259f4df95bcSnibble.max {0x71, 0x70}, 260f4df95bcSnibble.max {0x72, 0x04}, 261f4df95bcSnibble.max {0x73, 0x00}, 262f4df95bcSnibble.max {0x70, 0x40}, 263f4df95bcSnibble.max {0x71, 0x70}, 264f4df95bcSnibble.max {0x72, 0x04}, 265f4df95bcSnibble.max {0x73, 0x00}, 266f4df95bcSnibble.max {0x70, 0x60}, 267f4df95bcSnibble.max {0x71, 0x70}, 268f4df95bcSnibble.max {0x72, 0x04}, 269f4df95bcSnibble.max {0x73, 0x00}, 270f4df95bcSnibble.max {0x70, 0x80}, 271f4df95bcSnibble.max {0x71, 0x70}, 272f4df95bcSnibble.max {0x72, 0x04}, 273f4df95bcSnibble.max {0x73, 0x00}, 274f4df95bcSnibble.max {0x70, 0xa0}, 275f4df95bcSnibble.max {0x71, 0x70}, 276f4df95bcSnibble.max {0x72, 0x04}, 277f4df95bcSnibble.max {0x73, 0x00}, 278f4df95bcSnibble.max {0x70, 0x1f}, 279f4df95bcSnibble.max {0x76, 0x38}, 280f4df95bcSnibble.max {0x77, 0xa6}, 281f4df95bcSnibble.max {0x78, 0x0c}, 282f4df95bcSnibble.max {0x79, 0x80}, 283f4df95bcSnibble.max {0x7f, 0x14}, 284f4df95bcSnibble.max {0x7c, 0x00}, 285f4df95bcSnibble.max {0xae, 0x82}, 286f4df95bcSnibble.max {0x80, 0x64}, 287f4df95bcSnibble.max {0x81, 0x66}, 288f4df95bcSnibble.max {0x82, 0x44}, 289f4df95bcSnibble.max {0x85, 0x04}, 290f4df95bcSnibble.max {0xcd, 0xf4}, 291f4df95bcSnibble.max {0x90, 0x33}, 292f4df95bcSnibble.max {0xa0, 0x44}, 293f4df95bcSnibble.max {0xbe, 0x00}, 294f4df95bcSnibble.max {0xc0, 0x08}, 295f4df95bcSnibble.max {0xc3, 0x10}, 296f4df95bcSnibble.max {0xc4, 0x08}, 297f4df95bcSnibble.max {0xc5, 0xf0}, 298f4df95bcSnibble.max {0xc6, 0xff}, 299f4df95bcSnibble.max {0xc7, 0x00}, 300f4df95bcSnibble.max {0xc8, 0x1a}, 301f4df95bcSnibble.max {0xc9, 0x80}, 302f4df95bcSnibble.max {0xe0, 0xf8}, 303f4df95bcSnibble.max {0xe6, 0x8b}, 304f4df95bcSnibble.max {0xd0, 0x40}, 305f4df95bcSnibble.max {0xf8, 0x20}, 306f4df95bcSnibble.max {0xfa, 0x0f}, 307f4df95bcSnibble.max {0x00, 0x00}, 308f4df95bcSnibble.max {0xbd, 0x01}, 309f4df95bcSnibble.max {0xb8, 0x00}, 310f4df95bcSnibble.max {0x29, 0x11}, 311f4df95bcSnibble.max }; 312f4df95bcSnibble.max 313f4df95bcSnibble.max static const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = { 314f4df95bcSnibble.max {0x23, 0x07}, 315f4df95bcSnibble.max {0x08, 0x07}, 316f4df95bcSnibble.max {0x0c, 0x02}, 317f4df95bcSnibble.max {0x20, 0x00}, 318f4df95bcSnibble.max {0x21, 0x54}, 319f4df95bcSnibble.max {0x25, 0x82}, 320f4df95bcSnibble.max {0x27, 0x31}, 321f4df95bcSnibble.max {0x30, 0x08}, 322f4df95bcSnibble.max {0x32, 0x32}, 323f4df95bcSnibble.max {0x33, 0x35}, 324f4df95bcSnibble.max {0x35, 0xff}, 325f4df95bcSnibble.max {0x3a, 0x00}, 326f4df95bcSnibble.max {0x37, 0x10}, 327f4df95bcSnibble.max {0x38, 0x10}, 328f4df95bcSnibble.max {0x39, 0x02}, 329f4df95bcSnibble.max {0x42, 0x60}, 330f4df95bcSnibble.max {0x4a, 0x80}, 331f4df95bcSnibble.max {0x4b, 0x04}, 332f4df95bcSnibble.max {0x4d, 0x91}, 333f4df95bcSnibble.max {0x5d, 0xc8}, 334f4df95bcSnibble.max {0x50, 0x36}, 335f4df95bcSnibble.max {0x51, 0x36}, 336f4df95bcSnibble.max {0x52, 0x36}, 337f4df95bcSnibble.max {0x53, 0x36}, 338f4df95bcSnibble.max {0x63, 0x0f}, 339f4df95bcSnibble.max {0x64, 0x10}, 340f4df95bcSnibble.max {0x65, 0x20}, 341f4df95bcSnibble.max {0x68, 0x46}, 342f4df95bcSnibble.max {0x69, 0xcd}, 343f4df95bcSnibble.max {0x70, 0x20}, 344f4df95bcSnibble.max {0x71, 0x70}, 345f4df95bcSnibble.max {0x72, 0x04}, 346f4df95bcSnibble.max {0x73, 0x00}, 347f4df95bcSnibble.max {0x70, 0x40}, 348f4df95bcSnibble.max {0x71, 0x70}, 349f4df95bcSnibble.max {0x72, 0x04}, 350f4df95bcSnibble.max {0x73, 0x00}, 351f4df95bcSnibble.max {0x70, 0x60}, 352f4df95bcSnibble.max {0x71, 0x70}, 353f4df95bcSnibble.max {0x72, 0x04}, 354f4df95bcSnibble.max {0x73, 0x00}, 355f4df95bcSnibble.max {0x70, 0x80}, 356f4df95bcSnibble.max {0x71, 0x70}, 357f4df95bcSnibble.max {0x72, 0x04}, 358f4df95bcSnibble.max {0x73, 0x00}, 359f4df95bcSnibble.max {0x70, 0xa0}, 360f4df95bcSnibble.max {0x71, 0x70}, 361f4df95bcSnibble.max {0x72, 0x04}, 362f4df95bcSnibble.max {0x73, 0x00}, 363f4df95bcSnibble.max {0x70, 0x1f}, 364f4df95bcSnibble.max {0x76, 0x38}, 365f4df95bcSnibble.max {0x77, 0xa6}, 366f4df95bcSnibble.max {0x78, 0x0c}, 367f4df95bcSnibble.max {0x79, 0x80}, 368f4df95bcSnibble.max {0x7f, 0x14}, 369f4df95bcSnibble.max {0x85, 0x08}, 370f4df95bcSnibble.max {0xcd, 0xf4}, 371f4df95bcSnibble.max {0x90, 0x33}, 372f4df95bcSnibble.max {0x86, 0x00}, 373f4df95bcSnibble.max {0x87, 0x0f}, 374f4df95bcSnibble.max {0x89, 0x00}, 375f4df95bcSnibble.max {0x8b, 0x44}, 376f4df95bcSnibble.max {0x8c, 0x66}, 377f4df95bcSnibble.max {0x9d, 0xc1}, 378f4df95bcSnibble.max {0x8a, 0x10}, 379f4df95bcSnibble.max {0xad, 0x40}, 380f4df95bcSnibble.max {0xa0, 0x44}, 381f4df95bcSnibble.max {0xbe, 0x00}, 382f4df95bcSnibble.max {0xc0, 0x08}, 383f4df95bcSnibble.max {0xc1, 0x10}, 384f4df95bcSnibble.max {0xc2, 0x08}, 385f4df95bcSnibble.max {0xc3, 0x10}, 386f4df95bcSnibble.max {0xc4, 0x08}, 387f4df95bcSnibble.max {0xc5, 0xf0}, 388f4df95bcSnibble.max {0xc6, 0xff}, 389f4df95bcSnibble.max {0xc7, 0x00}, 390f4df95bcSnibble.max {0xc8, 0x1a}, 391f4df95bcSnibble.max {0xc9, 0x80}, 392f4df95bcSnibble.max {0xca, 0x23}, 393f4df95bcSnibble.max {0xcb, 0x24}, 394f4df95bcSnibble.max {0xcc, 0xf4}, 395f4df95bcSnibble.max {0xce, 0x74}, 396f4df95bcSnibble.max {0x00, 0x00}, 397f4df95bcSnibble.max {0xbd, 0x01}, 398f4df95bcSnibble.max {0xb8, 0x00}, 399f4df95bcSnibble.max {0x29, 0x01}, 400f4df95bcSnibble.max }; 401395d00d1SAntti Palosaari #endif 402