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 
20fada1935SMauro Carvalho Chehab #include <media/dvb_frontend.h>
21395d00d1SAntti Palosaari #include "m88ds3103.h"
22fada1935SMauro Carvalho Chehab #include <media/dvb_math.h>
23395d00d1SAntti Palosaari #include <linux/firmware.h>
2444b9055bSAntti Palosaari #include <linux/i2c-mux.h>
25478932b1SAntti Palosaari #include <linux/regmap.h>
263ae266f8SAntti Palosaari #include <linux/math64.h>
27395d00d1SAntti Palosaari 
28395d00d1SAntti Palosaari #define M88DS3103_FIRMWARE "dvb-demod-m88ds3103.fw"
29f4df95bcSnibble.max #define M88RS6000_FIRMWARE "dvb-demod-m88rs6000.fw"
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;
35478932b1SAntti Palosaari 	struct regmap_config regmap_config;
36478932b1SAntti Palosaari 	struct regmap *regmap;
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 */
44e00fed40SPeter Rosin 	struct i2c_mux_core *muxc;
45f4df95bcSnibble.max 	/* auto detect chip id to do different config */
46f4df95bcSnibble.max 	u8 chip_id;
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;
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