Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / media / dvb-frontends / m88ds3103_priv.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Montage Technology M88DS3103/M88RS6000 demodulator driver
4  *
5  * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>
6  */
7
8 #ifndef M88DS3103_PRIV_H
9 #define M88DS3103_PRIV_H
10
11 #include <media/dvb_frontend.h>
12 #include "m88ds3103.h"
13 #include <media/dvb_math.h>
14 #include <linux/firmware.h>
15 #include <linux/i2c-mux.h>
16 #include <linux/regmap.h>
17 #include <linux/math64.h>
18
19 #define M88DS3103_FIRMWARE "/*(DEBLOBBED)*/"
20 #define M88RS6000_FIRMWARE "/*(DEBLOBBED)*/"
21 #define M88RS6000_CHIP_ID 0x74
22 #define M88DS3103_CHIP_ID 0x70
23
24 struct m88ds3103_dev {
25         struct i2c_client *client;
26         struct regmap_config regmap_config;
27         struct regmap *regmap;
28         struct m88ds3103_config config;
29         const struct m88ds3103_config *cfg;
30         struct dvb_frontend fe;
31         enum fe_delivery_system delivery_system;
32         enum fe_status fe_status;
33         u32 dvbv3_ber; /* for old DVBv3 API read_ber */
34         bool warm; /* FW running */
35         struct i2c_mux_core *muxc;
36         /* auto detect chip id to do different config */
37         u8 chip_id;
38         /* main mclk is calculated for M88RS6000 dynamically */
39         s32 mclk;
40         u64 post_bit_error;
41         u64 post_bit_count;
42 };
43
44 struct m88ds3103_reg_val {
45         u8 reg;
46         u8 val;
47 };
48
49 static const struct m88ds3103_reg_val m88ds3103_dvbs_init_reg_vals[] = {
50         {0x23, 0x07},
51         {0x08, 0x03},
52         {0x0c, 0x02},
53         {0x21, 0x54},
54         {0x25, 0x8a},
55         {0x27, 0x31},
56         {0x30, 0x08},
57         {0x31, 0x40},
58         {0x32, 0x32},
59         {0x35, 0xff},
60         {0x3a, 0x00},
61         {0x37, 0x10},
62         {0x38, 0x10},
63         {0x39, 0x02},
64         {0x42, 0x60},
65         {0x4a, 0x80},
66         {0x4b, 0x04},
67         {0x4d, 0x91},
68         {0x5d, 0xc8},
69         {0x50, 0x36},
70         {0x51, 0x36},
71         {0x52, 0x36},
72         {0x53, 0x36},
73         {0x56, 0x01},
74         {0x63, 0x0f},
75         {0x64, 0x30},
76         {0x65, 0x40},
77         {0x68, 0x26},
78         {0x69, 0x4c},
79         {0x70, 0x20},
80         {0x71, 0x70},
81         {0x72, 0x04},
82         {0x73, 0x00},
83         {0x70, 0x40},
84         {0x71, 0x70},
85         {0x72, 0x04},
86         {0x73, 0x00},
87         {0x70, 0x60},
88         {0x71, 0x70},
89         {0x72, 0x04},
90         {0x73, 0x00},
91         {0x70, 0x80},
92         {0x71, 0x70},
93         {0x72, 0x04},
94         {0x73, 0x00},
95         {0x70, 0xa0},
96         {0x71, 0x70},
97         {0x72, 0x04},
98         {0x73, 0x00},
99         {0x70, 0x1f},
100         {0x76, 0x38},
101         {0x77, 0xa6},
102         {0x78, 0x0c},
103         {0x79, 0x80},
104         {0x7f, 0x14},
105         {0x7c, 0x00},
106         {0xae, 0x82},
107         {0x80, 0x64},
108         {0x81, 0x66},
109         {0x82, 0x44},
110         {0x85, 0x04},
111         {0xcd, 0xf4},
112         {0x90, 0x33},
113         {0xa0, 0x44},
114         {0xc0, 0x08},
115         {0xc3, 0x10},
116         {0xc4, 0x08},
117         {0xc5, 0xf0},
118         {0xc6, 0xff},
119         {0xc7, 0x00},
120         {0xc8, 0x1a},
121         {0xc9, 0x80},
122         {0xe0, 0xf8},
123         {0xe6, 0x8b},
124         {0xd0, 0x40},
125         {0xf8, 0x20},
126         {0xfa, 0x0f},
127         {0x00, 0x00},
128         {0xbd, 0x01},
129         {0xb8, 0x00},
130 };
131
132 static const struct m88ds3103_reg_val m88ds3103_dvbs2_init_reg_vals[] = {
133         {0x23, 0x07},
134         {0x08, 0x07},
135         {0x0c, 0x02},
136         {0x21, 0x54},
137         {0x25, 0x8a},
138         {0x27, 0x31},
139         {0x30, 0x08},
140         {0x32, 0x32},
141         {0x35, 0xff},
142         {0x3a, 0x00},
143         {0x37, 0x10},
144         {0x38, 0x10},
145         {0x39, 0x02},
146         {0x42, 0x60},
147         {0x4a, 0x80},
148         {0x4b, 0x04},
149         {0x4d, 0x91},
150         {0x5d, 0xc8},
151         {0x50, 0x36},
152         {0x51, 0x36},
153         {0x52, 0x36},
154         {0x53, 0x36},
155         {0x56, 0x01},
156         {0x63, 0x0f},
157         {0x64, 0x10},
158         {0x65, 0x20},
159         {0x68, 0x46},
160         {0x69, 0xcd},
161         {0x70, 0x20},
162         {0x71, 0x70},
163         {0x72, 0x04},
164         {0x73, 0x00},
165         {0x70, 0x40},
166         {0x71, 0x70},
167         {0x72, 0x04},
168         {0x73, 0x00},
169         {0x70, 0x60},
170         {0x71, 0x70},
171         {0x72, 0x04},
172         {0x73, 0x00},
173         {0x70, 0x80},
174         {0x71, 0x70},
175         {0x72, 0x04},
176         {0x73, 0x00},
177         {0x70, 0xa0},
178         {0x71, 0x70},
179         {0x72, 0x04},
180         {0x73, 0x00},
181         {0x70, 0x1f},
182         {0x76, 0x38},
183         {0x77, 0xa6},
184         {0x78, 0x0c},
185         {0x79, 0x80},
186         {0x7f, 0x14},
187         {0x85, 0x08},
188         {0xcd, 0xf4},
189         {0x90, 0x33},
190         {0x86, 0x00},
191         {0x87, 0x0f},
192         {0x89, 0x00},
193         {0x8b, 0x44},
194         {0x8c, 0x66},
195         {0x9d, 0xc1},
196         {0x8a, 0x10},
197         {0xad, 0x40},
198         {0xa0, 0x44},
199         {0xc0, 0x08},
200         {0xc1, 0x10},
201         {0xc2, 0x08},
202         {0xc3, 0x10},
203         {0xc4, 0x08},
204         {0xc5, 0xf0},
205         {0xc6, 0xff},
206         {0xc7, 0x00},
207         {0xc8, 0x1a},
208         {0xc9, 0x80},
209         {0xca, 0x23},
210         {0xcb, 0x24},
211         {0xcc, 0xf4},
212         {0xce, 0x74},
213         {0x00, 0x00},
214         {0xbd, 0x01},
215         {0xb8, 0x00},
216 };
217
218 static const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = {
219         {0x23, 0x07},
220         {0x08, 0x03},
221         {0x0c, 0x02},
222         {0x20, 0x00},
223         {0x21, 0x54},
224         {0x25, 0x82},
225         {0x27, 0x31},
226         {0x30, 0x08},
227         {0x31, 0x40},
228         {0x32, 0x32},
229         {0x33, 0x35},
230         {0x35, 0xff},
231         {0x3a, 0x00},
232         {0x37, 0x10},
233         {0x38, 0x10},
234         {0x39, 0x02},
235         {0x42, 0x60},
236         {0x4a, 0x80},
237         {0x4b, 0x04},
238         {0x4d, 0x91},
239         {0x5d, 0xc8},
240         {0x50, 0x36},
241         {0x51, 0x36},
242         {0x52, 0x36},
243         {0x53, 0x36},
244         {0x63, 0x0f},
245         {0x64, 0x30},
246         {0x65, 0x40},
247         {0x68, 0x26},
248         {0x69, 0x4c},
249         {0x70, 0x20},
250         {0x71, 0x70},
251         {0x72, 0x04},
252         {0x73, 0x00},
253         {0x70, 0x40},
254         {0x71, 0x70},
255         {0x72, 0x04},
256         {0x73, 0x00},
257         {0x70, 0x60},
258         {0x71, 0x70},
259         {0x72, 0x04},
260         {0x73, 0x00},
261         {0x70, 0x80},
262         {0x71, 0x70},
263         {0x72, 0x04},
264         {0x73, 0x00},
265         {0x70, 0xa0},
266         {0x71, 0x70},
267         {0x72, 0x04},
268         {0x73, 0x00},
269         {0x70, 0x1f},
270         {0x76, 0x38},
271         {0x77, 0xa6},
272         {0x78, 0x0c},
273         {0x79, 0x80},
274         {0x7f, 0x14},
275         {0x7c, 0x00},
276         {0xae, 0x82},
277         {0x80, 0x64},
278         {0x81, 0x66},
279         {0x82, 0x44},
280         {0x85, 0x04},
281         {0xcd, 0xf4},
282         {0x90, 0x33},
283         {0xa0, 0x44},
284         {0xbe, 0x00},
285         {0xc0, 0x08},
286         {0xc3, 0x10},
287         {0xc4, 0x08},
288         {0xc5, 0xf0},
289         {0xc6, 0xff},
290         {0xc7, 0x00},
291         {0xc8, 0x1a},
292         {0xc9, 0x80},
293         {0xe0, 0xf8},
294         {0xe6, 0x8b},
295         {0xd0, 0x40},
296         {0xf8, 0x20},
297         {0xfa, 0x0f},
298         {0x00, 0x00},
299         {0xbd, 0x01},
300         {0xb8, 0x00},
301         {0x29, 0x11},
302 };
303
304 static const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = {
305         {0x23, 0x07},
306         {0x08, 0x07},
307         {0x0c, 0x02},
308         {0x20, 0x00},
309         {0x21, 0x54},
310         {0x25, 0x82},
311         {0x27, 0x31},
312         {0x30, 0x08},
313         {0x32, 0x32},
314         {0x33, 0x35},
315         {0x35, 0xff},
316         {0x3a, 0x00},
317         {0x37, 0x10},
318         {0x38, 0x10},
319         {0x39, 0x02},
320         {0x42, 0x60},
321         {0x4a, 0x80},
322         {0x4b, 0x04},
323         {0x4d, 0x91},
324         {0x5d, 0xc8},
325         {0x50, 0x36},
326         {0x51, 0x36},
327         {0x52, 0x36},
328         {0x53, 0x36},
329         {0x63, 0x0f},
330         {0x64, 0x10},
331         {0x65, 0x20},
332         {0x68, 0x46},
333         {0x69, 0xcd},
334         {0x70, 0x20},
335         {0x71, 0x70},
336         {0x72, 0x04},
337         {0x73, 0x00},
338         {0x70, 0x40},
339         {0x71, 0x70},
340         {0x72, 0x04},
341         {0x73, 0x00},
342         {0x70, 0x60},
343         {0x71, 0x70},
344         {0x72, 0x04},
345         {0x73, 0x00},
346         {0x70, 0x80},
347         {0x71, 0x70},
348         {0x72, 0x04},
349         {0x73, 0x00},
350         {0x70, 0xa0},
351         {0x71, 0x70},
352         {0x72, 0x04},
353         {0x73, 0x00},
354         {0x70, 0x1f},
355         {0x76, 0x38},
356         {0x77, 0xa6},
357         {0x78, 0x0c},
358         {0x79, 0x80},
359         {0x7f, 0x14},
360         {0x85, 0x08},
361         {0xcd, 0xf4},
362         {0x90, 0x33},
363         {0x86, 0x00},
364         {0x87, 0x0f},
365         {0x89, 0x00},
366         {0x8b, 0x44},
367         {0x8c, 0x66},
368         {0x9d, 0xc1},
369         {0x8a, 0x10},
370         {0xad, 0x40},
371         {0xa0, 0x44},
372         {0xbe, 0x00},
373         {0xc0, 0x08},
374         {0xc1, 0x10},
375         {0xc2, 0x08},
376         {0xc3, 0x10},
377         {0xc4, 0x08},
378         {0xc5, 0xf0},
379         {0xc6, 0xff},
380         {0xc7, 0x00},
381         {0xc8, 0x1a},
382         {0xc9, 0x80},
383         {0xca, 0x23},
384         {0xcb, 0x24},
385         {0xcc, 0xf4},
386         {0xce, 0x74},
387         {0x00, 0x00},
388         {0xbd, 0x01},
389         {0xb8, 0x00},
390         {0x29, 0x01},
391 };
392 #endif