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"
13*f97fa3dcSAndy Shevchenko #include <linux/int_log.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