1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2395d00d1SAntti Palosaari /* 37978b8a1SAntti Palosaari * Montage Technology M88DS3103/M88RS6000 demodulator driver 4395d00d1SAntti Palosaari * 5395d00d1SAntti Palosaari * Copyright (C) 2013 Antti Palosaari <crope@iki.fi> 6395d00d1SAntti Palosaari */ 7395d00d1SAntti Palosaari 8395d00d1SAntti Palosaari #ifndef M88DS3103_PRIV_H 9395d00d1SAntti Palosaari #define M88DS3103_PRIV_H 10395d00d1SAntti Palosaari 11fada1935SMauro Carvalho Chehab #include <media/dvb_frontend.h> 12395d00d1SAntti Palosaari #include "m88ds3103.h" 13fada1935SMauro Carvalho Chehab #include <media/dvb_math.h> 14395d00d1SAntti Palosaari #include <linux/firmware.h> 1544b9055bSAntti Palosaari #include <linux/i2c-mux.h> 16478932b1SAntti Palosaari #include <linux/regmap.h> 173ae266f8SAntti Palosaari #include <linux/math64.h> 18395d00d1SAntti Palosaari 19e6089fecSBrad Love #define M88DS3103B_FIRMWARE "dvb-demod-m88ds3103b.fw" 20395d00d1SAntti Palosaari #define M88DS3103_FIRMWARE "dvb-demod-m88ds3103.fw" 21f4df95bcSnibble.max #define M88RS6000_FIRMWARE "dvb-demod-m88rs6000.fw" 22e6089fecSBrad Love 23f4df95bcSnibble.max #define M88RS6000_CHIP_ID 0x74 24f4df95bcSnibble.max #define M88DS3103_CHIP_ID 0x70 25395d00d1SAntti Palosaari 26e6089fecSBrad Love #define M88DS3103_CHIPTYPE_3103 0 27e6089fecSBrad Love #define M88DS3103_CHIPTYPE_RS6000 1 28e6089fecSBrad Love #define M88DS3103_CHIPTYPE_3103B 2 29e6089fecSBrad Love 307978b8a1SAntti Palosaari struct m88ds3103_dev { 31f01919e8SAntti Palosaari struct i2c_client *client; 32e6089fecSBrad Love struct i2c_client *dt_client; 33478932b1SAntti Palosaari struct regmap_config regmap_config; 34478932b1SAntti Palosaari struct regmap *regmap; 35f01919e8SAntti Palosaari struct m88ds3103_config config; 36395d00d1SAntti Palosaari const struct m88ds3103_config *cfg; 37395d00d1SAntti Palosaari struct dvb_frontend fe; 380df289a2SMauro Carvalho Chehab enum fe_delivery_system delivery_system; 390df289a2SMauro Carvalho Chehab enum fe_status fe_status; 40ce80d713SAntti Palosaari u32 dvbv3_ber; /* for old DVBv3 API read_ber */ 41395d00d1SAntti Palosaari bool warm; /* FW running */ 42e00fed40SPeter Rosin struct i2c_mux_core *muxc; 43f4df95bcSnibble.max /* auto detect chip id to do different config */ 44f4df95bcSnibble.max u8 chip_id; 45e6089fecSBrad Love /* chip type to differentiate m88rs6000 from m88ds3103b */ 46e6089fecSBrad Love u8 chiptype; 47f4df95bcSnibble.max /* main mclk is calculated for M88RS6000 dynamically */ 48f5d9b88dSAntti Palosaari s32 mclk; 49ce80d713SAntti Palosaari u64 post_bit_error; 50ce80d713SAntti Palosaari u64 post_bit_count; 51e6089fecSBrad Love u8 dt_addr; 52395d00d1SAntti Palosaari }; 53395d00d1SAntti Palosaari 54395d00d1SAntti Palosaari struct m88ds3103_reg_val { 55395d00d1SAntti Palosaari u8 reg; 56395d00d1SAntti Palosaari u8 val; 57395d00d1SAntti Palosaari }; 58395d00d1SAntti Palosaari 59395d00d1SAntti Palosaari static const struct m88ds3103_reg_val m88ds3103_dvbs_init_reg_vals[] = { 60395d00d1SAntti Palosaari {0x23, 0x07}, 61395d00d1SAntti Palosaari {0x08, 0x03}, 62395d00d1SAntti Palosaari {0x0c, 0x02}, 63395d00d1SAntti Palosaari {0x21, 0x54}, 64395d00d1SAntti Palosaari {0x25, 0x8a}, 65395d00d1SAntti Palosaari {0x27, 0x31}, 66395d00d1SAntti Palosaari {0x30, 0x08}, 67395d00d1SAntti Palosaari {0x31, 0x40}, 68395d00d1SAntti Palosaari {0x32, 0x32}, 69395d00d1SAntti Palosaari {0x35, 0xff}, 70395d00d1SAntti Palosaari {0x3a, 0x00}, 71395d00d1SAntti Palosaari {0x37, 0x10}, 72395d00d1SAntti Palosaari {0x38, 0x10}, 73395d00d1SAntti Palosaari {0x39, 0x02}, 74395d00d1SAntti Palosaari {0x42, 0x60}, 75395d00d1SAntti Palosaari {0x4a, 0x80}, 76395d00d1SAntti Palosaari {0x4b, 0x04}, 77395d00d1SAntti Palosaari {0x4d, 0x91}, 78395d00d1SAntti Palosaari {0x5d, 0xc8}, 79395d00d1SAntti Palosaari {0x50, 0x36}, 80395d00d1SAntti Palosaari {0x51, 0x36}, 81395d00d1SAntti Palosaari {0x52, 0x36}, 82395d00d1SAntti Palosaari {0x53, 0x36}, 83dcaf0fbfSAntti Palosaari {0x56, 0x01}, 84395d00d1SAntti Palosaari {0x63, 0x0f}, 85395d00d1SAntti Palosaari {0x64, 0x30}, 86395d00d1SAntti Palosaari {0x65, 0x40}, 87395d00d1SAntti Palosaari {0x68, 0x26}, 88395d00d1SAntti Palosaari {0x69, 0x4c}, 89395d00d1SAntti Palosaari {0x70, 0x20}, 90395d00d1SAntti Palosaari {0x71, 0x70}, 91395d00d1SAntti Palosaari {0x72, 0x04}, 92395d00d1SAntti Palosaari {0x73, 0x00}, 93395d00d1SAntti Palosaari {0x70, 0x40}, 94395d00d1SAntti Palosaari {0x71, 0x70}, 95395d00d1SAntti Palosaari {0x72, 0x04}, 96395d00d1SAntti Palosaari {0x73, 0x00}, 97395d00d1SAntti Palosaari {0x70, 0x60}, 98395d00d1SAntti Palosaari {0x71, 0x70}, 99395d00d1SAntti Palosaari {0x72, 0x04}, 100395d00d1SAntti Palosaari {0x73, 0x00}, 101395d00d1SAntti Palosaari {0x70, 0x80}, 102395d00d1SAntti Palosaari {0x71, 0x70}, 103395d00d1SAntti Palosaari {0x72, 0x04}, 104395d00d1SAntti Palosaari {0x73, 0x00}, 105395d00d1SAntti Palosaari {0x70, 0xa0}, 106395d00d1SAntti Palosaari {0x71, 0x70}, 107395d00d1SAntti Palosaari {0x72, 0x04}, 108395d00d1SAntti Palosaari {0x73, 0x00}, 109395d00d1SAntti Palosaari {0x70, 0x1f}, 110395d00d1SAntti Palosaari {0x76, 0x38}, 111395d00d1SAntti Palosaari {0x77, 0xa6}, 112395d00d1SAntti Palosaari {0x78, 0x0c}, 113395d00d1SAntti Palosaari {0x79, 0x80}, 114395d00d1SAntti Palosaari {0x7f, 0x14}, 115395d00d1SAntti Palosaari {0x7c, 0x00}, 116395d00d1SAntti Palosaari {0xae, 0x82}, 117395d00d1SAntti Palosaari {0x80, 0x64}, 118395d00d1SAntti Palosaari {0x81, 0x66}, 119395d00d1SAntti Palosaari {0x82, 0x44}, 120395d00d1SAntti Palosaari {0x85, 0x04}, 121395d00d1SAntti Palosaari {0xcd, 0xf4}, 122395d00d1SAntti Palosaari {0x90, 0x33}, 123395d00d1SAntti Palosaari {0xa0, 0x44}, 124395d00d1SAntti Palosaari {0xc0, 0x08}, 125395d00d1SAntti Palosaari {0xc3, 0x10}, 126395d00d1SAntti Palosaari {0xc4, 0x08}, 127395d00d1SAntti Palosaari {0xc5, 0xf0}, 128395d00d1SAntti Palosaari {0xc6, 0xff}, 129395d00d1SAntti Palosaari {0xc7, 0x00}, 130395d00d1SAntti Palosaari {0xc8, 0x1a}, 131395d00d1SAntti Palosaari {0xc9, 0x80}, 132395d00d1SAntti Palosaari {0xe0, 0xf8}, 133395d00d1SAntti Palosaari {0xe6, 0x8b}, 134395d00d1SAntti Palosaari {0xd0, 0x40}, 135395d00d1SAntti Palosaari {0xf8, 0x20}, 136395d00d1SAntti Palosaari {0xfa, 0x0f}, 137395d00d1SAntti Palosaari {0x00, 0x00}, 138395d00d1SAntti Palosaari {0xbd, 0x01}, 139395d00d1SAntti Palosaari {0xb8, 0x00}, 140395d00d1SAntti Palosaari }; 141395d00d1SAntti Palosaari 142395d00d1SAntti Palosaari static const struct m88ds3103_reg_val m88ds3103_dvbs2_init_reg_vals[] = { 143395d00d1SAntti Palosaari {0x23, 0x07}, 144395d00d1SAntti Palosaari {0x08, 0x07}, 145395d00d1SAntti Palosaari {0x0c, 0x02}, 146395d00d1SAntti Palosaari {0x21, 0x54}, 147395d00d1SAntti Palosaari {0x25, 0x8a}, 148395d00d1SAntti Palosaari {0x27, 0x31}, 149395d00d1SAntti Palosaari {0x30, 0x08}, 150395d00d1SAntti Palosaari {0x32, 0x32}, 151395d00d1SAntti Palosaari {0x35, 0xff}, 152395d00d1SAntti Palosaari {0x3a, 0x00}, 153395d00d1SAntti Palosaari {0x37, 0x10}, 154395d00d1SAntti Palosaari {0x38, 0x10}, 155395d00d1SAntti Palosaari {0x39, 0x02}, 156395d00d1SAntti Palosaari {0x42, 0x60}, 157395d00d1SAntti Palosaari {0x4a, 0x80}, 158395d00d1SAntti Palosaari {0x4b, 0x04}, 159395d00d1SAntti Palosaari {0x4d, 0x91}, 160395d00d1SAntti Palosaari {0x5d, 0xc8}, 161395d00d1SAntti Palosaari {0x50, 0x36}, 162395d00d1SAntti Palosaari {0x51, 0x36}, 163395d00d1SAntti Palosaari {0x52, 0x36}, 164395d00d1SAntti Palosaari {0x53, 0x36}, 165dcaf0fbfSAntti Palosaari {0x56, 0x01}, 166395d00d1SAntti Palosaari {0x63, 0x0f}, 167395d00d1SAntti Palosaari {0x64, 0x10}, 168395d00d1SAntti Palosaari {0x65, 0x20}, 169395d00d1SAntti Palosaari {0x68, 0x46}, 170395d00d1SAntti Palosaari {0x69, 0xcd}, 171395d00d1SAntti Palosaari {0x70, 0x20}, 172395d00d1SAntti Palosaari {0x71, 0x70}, 173395d00d1SAntti Palosaari {0x72, 0x04}, 174395d00d1SAntti Palosaari {0x73, 0x00}, 175395d00d1SAntti Palosaari {0x70, 0x40}, 176395d00d1SAntti Palosaari {0x71, 0x70}, 177395d00d1SAntti Palosaari {0x72, 0x04}, 178395d00d1SAntti Palosaari {0x73, 0x00}, 179395d00d1SAntti Palosaari {0x70, 0x60}, 180395d00d1SAntti Palosaari {0x71, 0x70}, 181395d00d1SAntti Palosaari {0x72, 0x04}, 182395d00d1SAntti Palosaari {0x73, 0x00}, 183395d00d1SAntti Palosaari {0x70, 0x80}, 184395d00d1SAntti Palosaari {0x71, 0x70}, 185395d00d1SAntti Palosaari {0x72, 0x04}, 186395d00d1SAntti Palosaari {0x73, 0x00}, 187395d00d1SAntti Palosaari {0x70, 0xa0}, 188395d00d1SAntti Palosaari {0x71, 0x70}, 189395d00d1SAntti Palosaari {0x72, 0x04}, 190395d00d1SAntti Palosaari {0x73, 0x00}, 191395d00d1SAntti Palosaari {0x70, 0x1f}, 192395d00d1SAntti Palosaari {0x76, 0x38}, 193395d00d1SAntti Palosaari {0x77, 0xa6}, 194395d00d1SAntti Palosaari {0x78, 0x0c}, 195395d00d1SAntti Palosaari {0x79, 0x80}, 196395d00d1SAntti Palosaari {0x7f, 0x14}, 197395d00d1SAntti Palosaari {0x85, 0x08}, 198395d00d1SAntti Palosaari {0xcd, 0xf4}, 199395d00d1SAntti Palosaari {0x90, 0x33}, 200395d00d1SAntti Palosaari {0x86, 0x00}, 201395d00d1SAntti Palosaari {0x87, 0x0f}, 202395d00d1SAntti Palosaari {0x89, 0x00}, 203395d00d1SAntti Palosaari {0x8b, 0x44}, 204395d00d1SAntti Palosaari {0x8c, 0x66}, 205395d00d1SAntti Palosaari {0x9d, 0xc1}, 206395d00d1SAntti Palosaari {0x8a, 0x10}, 207395d00d1SAntti Palosaari {0xad, 0x40}, 208395d00d1SAntti Palosaari {0xa0, 0x44}, 209395d00d1SAntti Palosaari {0xc0, 0x08}, 210395d00d1SAntti Palosaari {0xc1, 0x10}, 211395d00d1SAntti Palosaari {0xc2, 0x08}, 212395d00d1SAntti Palosaari {0xc3, 0x10}, 213395d00d1SAntti Palosaari {0xc4, 0x08}, 214395d00d1SAntti Palosaari {0xc5, 0xf0}, 215395d00d1SAntti Palosaari {0xc6, 0xff}, 216395d00d1SAntti Palosaari {0xc7, 0x00}, 217395d00d1SAntti Palosaari {0xc8, 0x1a}, 218395d00d1SAntti Palosaari {0xc9, 0x80}, 219395d00d1SAntti Palosaari {0xca, 0x23}, 220395d00d1SAntti Palosaari {0xcb, 0x24}, 221395d00d1SAntti Palosaari {0xcc, 0xf4}, 222395d00d1SAntti Palosaari {0xce, 0x74}, 223395d00d1SAntti Palosaari {0x00, 0x00}, 224395d00d1SAntti Palosaari {0xbd, 0x01}, 225395d00d1SAntti Palosaari {0xb8, 0x00}, 226395d00d1SAntti Palosaari }; 227395d00d1SAntti Palosaari 228f4df95bcSnibble.max static const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = { 229f4df95bcSnibble.max {0x23, 0x07}, 230f4df95bcSnibble.max {0x08, 0x03}, 231f4df95bcSnibble.max {0x0c, 0x02}, 232f4df95bcSnibble.max {0x20, 0x00}, 233f4df95bcSnibble.max {0x21, 0x54}, 234f4df95bcSnibble.max {0x25, 0x82}, 235f4df95bcSnibble.max {0x27, 0x31}, 236f4df95bcSnibble.max {0x30, 0x08}, 237f4df95bcSnibble.max {0x31, 0x40}, 238f4df95bcSnibble.max {0x32, 0x32}, 239f4df95bcSnibble.max {0x33, 0x35}, 240f4df95bcSnibble.max {0x35, 0xff}, 241f4df95bcSnibble.max {0x3a, 0x00}, 242f4df95bcSnibble.max {0x37, 0x10}, 243f4df95bcSnibble.max {0x38, 0x10}, 244f4df95bcSnibble.max {0x39, 0x02}, 245f4df95bcSnibble.max {0x42, 0x60}, 246f4df95bcSnibble.max {0x4a, 0x80}, 247f4df95bcSnibble.max {0x4b, 0x04}, 248f4df95bcSnibble.max {0x4d, 0x91}, 249f4df95bcSnibble.max {0x5d, 0xc8}, 250f4df95bcSnibble.max {0x50, 0x36}, 251f4df95bcSnibble.max {0x51, 0x36}, 252f4df95bcSnibble.max {0x52, 0x36}, 253f4df95bcSnibble.max {0x53, 0x36}, 254f4df95bcSnibble.max {0x63, 0x0f}, 255f4df95bcSnibble.max {0x64, 0x30}, 256f4df95bcSnibble.max {0x65, 0x40}, 257f4df95bcSnibble.max {0x68, 0x26}, 258f4df95bcSnibble.max {0x69, 0x4c}, 259f4df95bcSnibble.max {0x70, 0x20}, 260f4df95bcSnibble.max {0x71, 0x70}, 261f4df95bcSnibble.max {0x72, 0x04}, 262f4df95bcSnibble.max {0x73, 0x00}, 263f4df95bcSnibble.max {0x70, 0x40}, 264f4df95bcSnibble.max {0x71, 0x70}, 265f4df95bcSnibble.max {0x72, 0x04}, 266f4df95bcSnibble.max {0x73, 0x00}, 267f4df95bcSnibble.max {0x70, 0x60}, 268f4df95bcSnibble.max {0x71, 0x70}, 269f4df95bcSnibble.max {0x72, 0x04}, 270f4df95bcSnibble.max {0x73, 0x00}, 271f4df95bcSnibble.max {0x70, 0x80}, 272f4df95bcSnibble.max {0x71, 0x70}, 273f4df95bcSnibble.max {0x72, 0x04}, 274f4df95bcSnibble.max {0x73, 0x00}, 275f4df95bcSnibble.max {0x70, 0xa0}, 276f4df95bcSnibble.max {0x71, 0x70}, 277f4df95bcSnibble.max {0x72, 0x04}, 278f4df95bcSnibble.max {0x73, 0x00}, 279f4df95bcSnibble.max {0x70, 0x1f}, 280f4df95bcSnibble.max {0x76, 0x38}, 281f4df95bcSnibble.max {0x77, 0xa6}, 282f4df95bcSnibble.max {0x78, 0x0c}, 283f4df95bcSnibble.max {0x79, 0x80}, 284f4df95bcSnibble.max {0x7f, 0x14}, 285f4df95bcSnibble.max {0x7c, 0x00}, 286f4df95bcSnibble.max {0xae, 0x82}, 287f4df95bcSnibble.max {0x80, 0x64}, 288f4df95bcSnibble.max {0x81, 0x66}, 289f4df95bcSnibble.max {0x82, 0x44}, 290f4df95bcSnibble.max {0x85, 0x04}, 291f4df95bcSnibble.max {0xcd, 0xf4}, 292f4df95bcSnibble.max {0x90, 0x33}, 293f4df95bcSnibble.max {0xa0, 0x44}, 294f4df95bcSnibble.max {0xbe, 0x00}, 295f4df95bcSnibble.max {0xc0, 0x08}, 296f4df95bcSnibble.max {0xc3, 0x10}, 297f4df95bcSnibble.max {0xc4, 0x08}, 298f4df95bcSnibble.max {0xc5, 0xf0}, 299f4df95bcSnibble.max {0xc6, 0xff}, 300f4df95bcSnibble.max {0xc7, 0x00}, 301f4df95bcSnibble.max {0xc8, 0x1a}, 302f4df95bcSnibble.max {0xc9, 0x80}, 303f4df95bcSnibble.max {0xe0, 0xf8}, 304f4df95bcSnibble.max {0xe6, 0x8b}, 305f4df95bcSnibble.max {0xd0, 0x40}, 306f4df95bcSnibble.max {0xf8, 0x20}, 307f4df95bcSnibble.max {0xfa, 0x0f}, 308f4df95bcSnibble.max {0x00, 0x00}, 309f4df95bcSnibble.max {0xbd, 0x01}, 310f4df95bcSnibble.max {0xb8, 0x00}, 311f4df95bcSnibble.max {0x29, 0x11}, 312f4df95bcSnibble.max }; 313f4df95bcSnibble.max 314f4df95bcSnibble.max static const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = { 315f4df95bcSnibble.max {0x23, 0x07}, 316f4df95bcSnibble.max {0x08, 0x07}, 317f4df95bcSnibble.max {0x0c, 0x02}, 318f4df95bcSnibble.max {0x20, 0x00}, 319f4df95bcSnibble.max {0x21, 0x54}, 320f4df95bcSnibble.max {0x25, 0x82}, 321f4df95bcSnibble.max {0x27, 0x31}, 322f4df95bcSnibble.max {0x30, 0x08}, 323f4df95bcSnibble.max {0x32, 0x32}, 324f4df95bcSnibble.max {0x33, 0x35}, 325f4df95bcSnibble.max {0x35, 0xff}, 326f4df95bcSnibble.max {0x3a, 0x00}, 327f4df95bcSnibble.max {0x37, 0x10}, 328f4df95bcSnibble.max {0x38, 0x10}, 329f4df95bcSnibble.max {0x39, 0x02}, 330f4df95bcSnibble.max {0x42, 0x60}, 331f4df95bcSnibble.max {0x4a, 0x80}, 332f4df95bcSnibble.max {0x4b, 0x04}, 333f4df95bcSnibble.max {0x4d, 0x91}, 334f4df95bcSnibble.max {0x5d, 0xc8}, 335f4df95bcSnibble.max {0x50, 0x36}, 336f4df95bcSnibble.max {0x51, 0x36}, 337f4df95bcSnibble.max {0x52, 0x36}, 338f4df95bcSnibble.max {0x53, 0x36}, 339f4df95bcSnibble.max {0x63, 0x0f}, 340f4df95bcSnibble.max {0x64, 0x10}, 341f4df95bcSnibble.max {0x65, 0x20}, 342f4df95bcSnibble.max {0x68, 0x46}, 343f4df95bcSnibble.max {0x69, 0xcd}, 344f4df95bcSnibble.max {0x70, 0x20}, 345f4df95bcSnibble.max {0x71, 0x70}, 346f4df95bcSnibble.max {0x72, 0x04}, 347f4df95bcSnibble.max {0x73, 0x00}, 348f4df95bcSnibble.max {0x70, 0x40}, 349f4df95bcSnibble.max {0x71, 0x70}, 350f4df95bcSnibble.max {0x72, 0x04}, 351f4df95bcSnibble.max {0x73, 0x00}, 352f4df95bcSnibble.max {0x70, 0x60}, 353f4df95bcSnibble.max {0x71, 0x70}, 354f4df95bcSnibble.max {0x72, 0x04}, 355f4df95bcSnibble.max {0x73, 0x00}, 356f4df95bcSnibble.max {0x70, 0x80}, 357f4df95bcSnibble.max {0x71, 0x70}, 358f4df95bcSnibble.max {0x72, 0x04}, 359f4df95bcSnibble.max {0x73, 0x00}, 360f4df95bcSnibble.max {0x70, 0xa0}, 361f4df95bcSnibble.max {0x71, 0x70}, 362f4df95bcSnibble.max {0x72, 0x04}, 363f4df95bcSnibble.max {0x73, 0x00}, 364f4df95bcSnibble.max {0x70, 0x1f}, 365f4df95bcSnibble.max {0x76, 0x38}, 366f4df95bcSnibble.max {0x77, 0xa6}, 367f4df95bcSnibble.max {0x78, 0x0c}, 368f4df95bcSnibble.max {0x79, 0x80}, 369f4df95bcSnibble.max {0x7f, 0x14}, 370f4df95bcSnibble.max {0x85, 0x08}, 371f4df95bcSnibble.max {0xcd, 0xf4}, 372f4df95bcSnibble.max {0x90, 0x33}, 373f4df95bcSnibble.max {0x86, 0x00}, 374f4df95bcSnibble.max {0x87, 0x0f}, 375f4df95bcSnibble.max {0x89, 0x00}, 376f4df95bcSnibble.max {0x8b, 0x44}, 377f4df95bcSnibble.max {0x8c, 0x66}, 378f4df95bcSnibble.max {0x9d, 0xc1}, 379f4df95bcSnibble.max {0x8a, 0x10}, 380f4df95bcSnibble.max {0xad, 0x40}, 381f4df95bcSnibble.max {0xa0, 0x44}, 382f4df95bcSnibble.max {0xbe, 0x00}, 383f4df95bcSnibble.max {0xc0, 0x08}, 384f4df95bcSnibble.max {0xc1, 0x10}, 385f4df95bcSnibble.max {0xc2, 0x08}, 386f4df95bcSnibble.max {0xc3, 0x10}, 387f4df95bcSnibble.max {0xc4, 0x08}, 388f4df95bcSnibble.max {0xc5, 0xf0}, 389f4df95bcSnibble.max {0xc6, 0xff}, 390f4df95bcSnibble.max {0xc7, 0x00}, 391f4df95bcSnibble.max {0xc8, 0x1a}, 392f4df95bcSnibble.max {0xc9, 0x80}, 393f4df95bcSnibble.max {0xca, 0x23}, 394f4df95bcSnibble.max {0xcb, 0x24}, 395f4df95bcSnibble.max {0xcc, 0xf4}, 396f4df95bcSnibble.max {0xce, 0x74}, 397f4df95bcSnibble.max {0x00, 0x00}, 398f4df95bcSnibble.max {0xbd, 0x01}, 399f4df95bcSnibble.max {0xb8, 0x00}, 400f4df95bcSnibble.max {0x29, 0x01}, 401f4df95bcSnibble.max }; 402395d00d1SAntti Palosaari #endif 403