]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/media/msi3101/sdr-msi3101.c
[media] msi3101: add debug dump for unknown stream data
[karo-tx-linux.git] / drivers / staging / media / msi3101 / sdr-msi3101.c
1 /*
2  * Mirics MSi3101 SDR Dongle driver
3  *
4  * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>
5  *
6  *    This program is free software; you can redistribute it and/or modify
7  *    it under the terms of the GNU General Public License as published by
8  *    the Free Software Foundation; either version 2 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This program is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU General Public License for more details.
15  *
16  *    You should have received a copy of the GNU General Public License along
17  *    with this program; if not, write to the Free Software Foundation, Inc.,
18  *    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19  */
20
21 #include <linux/kernel.h>
22 #include <linux/module.h>
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/input.h>
26 #include <linux/videodev2.h>
27 #include <media/v4l2-device.h>
28 #include <media/v4l2-ioctl.h>
29 #include <media/v4l2-ctrls.h>
30 #include <media/v4l2-event.h>
31 #include <linux/usb.h>
32 #include <linux/mutex.h>
33 #include <media/videobuf2-vmalloc.h>
34
35 struct msi3101_gain {
36         u8 tot:7;
37         u8 baseband:6;
38         bool lna:1;
39         bool mixer:1;
40 };
41
42 /* 60 – 120 MHz band, lna 24dB, mixer 19dB */
43 static const struct msi3101_gain msi3101_gain_lut_120[] = {
44         {  0,  0,  0,  0},
45         {  1,  1,  0,  0},
46         {  2,  2,  0,  0},
47         {  3,  3,  0,  0},
48         {  4,  4,  0,  0},
49         {  5,  5,  0,  0},
50         {  6,  6,  0,  0},
51         {  7,  7,  0,  0},
52         {  8,  8,  0,  0},
53         {  9,  9,  0,  0},
54         { 10, 10,  0,  0},
55         { 11, 11,  0,  0},
56         { 12, 12,  0,  0},
57         { 13, 13,  0,  0},
58         { 14, 14,  0,  0},
59         { 15, 15,  0,  0},
60         { 16, 16,  0,  0},
61         { 17, 17,  0,  0},
62         { 18, 18,  0,  0},
63         { 19, 19,  0,  0},
64         { 20, 20,  0,  0},
65         { 21, 21,  0,  0},
66         { 22, 22,  0,  0},
67         { 23, 23,  0,  0},
68         { 24, 24,  0,  0},
69         { 25, 25,  0,  0},
70         { 26, 26,  0,  0},
71         { 27, 27,  0,  0},
72         { 28, 28,  0,  0},
73         { 29,  5,  1,  0},
74         { 30,  6,  1,  0},
75         { 31,  7,  1,  0},
76         { 32,  8,  1,  0},
77         { 33,  9,  1,  0},
78         { 34, 10,  1,  0},
79         { 35, 11,  1,  0},
80         { 36, 12,  1,  0},
81         { 37, 13,  1,  0},
82         { 38, 14,  1,  0},
83         { 39, 15,  1,  0},
84         { 40, 16,  1,  0},
85         { 41, 17,  1,  0},
86         { 42, 18,  1,  0},
87         { 43, 19,  1,  0},
88         { 44, 20,  1,  0},
89         { 45, 21,  1,  0},
90         { 46, 22,  1,  0},
91         { 47, 23,  1,  0},
92         { 48, 24,  1,  0},
93         { 49, 25,  1,  0},
94         { 50, 26,  1,  0},
95         { 51, 27,  1,  0},
96         { 52, 28,  1,  0},
97         { 53, 29,  1,  0},
98         { 54, 30,  1,  0},
99         { 55, 31,  1,  0},
100         { 56, 32,  1,  0},
101         { 57, 33,  1,  0},
102         { 58, 34,  1,  0},
103         { 59, 35,  1,  0},
104         { 60, 36,  1,  0},
105         { 61, 37,  1,  0},
106         { 62, 38,  1,  0},
107         { 63, 39,  1,  0},
108         { 64, 40,  1,  0},
109         { 65, 41,  1,  0},
110         { 66, 42,  1,  0},
111         { 67, 43,  1,  0},
112         { 68, 44,  1,  0},
113         { 69, 45,  1,  0},
114         { 70, 46,  1,  0},
115         { 71, 47,  1,  0},
116         { 72, 48,  1,  0},
117         { 73, 49,  1,  0},
118         { 74, 50,  1,  0},
119         { 75, 51,  1,  0},
120         { 76, 52,  1,  0},
121         { 77, 53,  1,  0},
122         { 78, 54,  1,  0},
123         { 79, 55,  1,  0},
124         { 80, 56,  1,  0},
125         { 81, 57,  1,  0},
126         { 82, 58,  1,  0},
127         { 83, 40,  1,  1},
128         { 84, 41,  1,  1},
129         { 85, 42,  1,  1},
130         { 86, 43,  1,  1},
131         { 87, 44,  1,  1},
132         { 88, 45,  1,  1},
133         { 89, 46,  1,  1},
134         { 90, 47,  1,  1},
135         { 91, 48,  1,  1},
136         { 92, 49,  1,  1},
137         { 93, 50,  1,  1},
138         { 94, 51,  1,  1},
139         { 95, 52,  1,  1},
140         { 96, 53,  1,  1},
141         { 97, 54,  1,  1},
142         { 98, 55,  1,  1},
143         { 99, 56,  1,  1},
144         {100, 57,  1,  1},
145         {101, 58,  1,  1},
146         {102, 59,  1,  1},
147 };
148
149 /* 120 – 245 MHz band, lna 24dB, mixer 19dB */
150 static const struct msi3101_gain msi3101_gain_lut_245[] = {
151         {  0,  0,  0,  0},
152         {  1,  1,  0,  0},
153         {  2,  2,  0,  0},
154         {  3,  3,  0,  0},
155         {  4,  4,  0,  0},
156         {  5,  5,  0,  0},
157         {  6,  6,  0,  0},
158         {  7,  7,  0,  0},
159         {  8,  8,  0,  0},
160         {  9,  9,  0,  0},
161         { 10, 10,  0,  0},
162         { 11, 11,  0,  0},
163         { 12, 12,  0,  0},
164         { 13, 13,  0,  0},
165         { 14, 14,  0,  0},
166         { 15, 15,  0,  0},
167         { 16, 16,  0,  0},
168         { 17, 17,  0,  0},
169         { 18, 18,  0,  0},
170         { 19, 19,  0,  0},
171         { 20, 20,  0,  0},
172         { 21, 21,  0,  0},
173         { 22, 22,  0,  0},
174         { 23, 23,  0,  0},
175         { 24, 24,  0,  0},
176         { 25, 25,  0,  0},
177         { 26, 26,  0,  0},
178         { 27, 27,  0,  0},
179         { 28, 28,  0,  0},
180         { 29,  5,  1,  0},
181         { 30,  6,  1,  0},
182         { 31,  7,  1,  0},
183         { 32,  8,  1,  0},
184         { 33,  9,  1,  0},
185         { 34, 10,  1,  0},
186         { 35, 11,  1,  0},
187         { 36, 12,  1,  0},
188         { 37, 13,  1,  0},
189         { 38, 14,  1,  0},
190         { 39, 15,  1,  0},
191         { 40, 16,  1,  0},
192         { 41, 17,  1,  0},
193         { 42, 18,  1,  0},
194         { 43, 19,  1,  0},
195         { 44, 20,  1,  0},
196         { 45, 21,  1,  0},
197         { 46, 22,  1,  0},
198         { 47, 23,  1,  0},
199         { 48, 24,  1,  0},
200         { 49, 25,  1,  0},
201         { 50, 26,  1,  0},
202         { 51, 27,  1,  0},
203         { 52, 28,  1,  0},
204         { 53, 29,  1,  0},
205         { 54, 30,  1,  0},
206         { 55, 31,  1,  0},
207         { 56, 32,  1,  0},
208         { 57, 33,  1,  0},
209         { 58, 34,  1,  0},
210         { 59, 35,  1,  0},
211         { 60, 36,  1,  0},
212         { 61, 37,  1,  0},
213         { 62, 38,  1,  0},
214         { 63, 39,  1,  0},
215         { 64, 40,  1,  0},
216         { 65, 41,  1,  0},
217         { 66, 42,  1,  0},
218         { 67, 43,  1,  0},
219         { 68, 44,  1,  0},
220         { 69, 45,  1,  0},
221         { 70, 46,  1,  0},
222         { 71, 47,  1,  0},
223         { 72, 48,  1,  0},
224         { 73, 49,  1,  0},
225         { 74, 50,  1,  0},
226         { 75, 51,  1,  0},
227         { 76, 52,  1,  0},
228         { 77, 53,  1,  0},
229         { 78, 54,  1,  0},
230         { 79, 55,  1,  0},
231         { 80, 56,  1,  0},
232         { 81, 57,  1,  0},
233         { 82, 58,  1,  0},
234         { 83, 40,  1,  1},
235         { 84, 41,  1,  1},
236         { 85, 42,  1,  1},
237         { 86, 43,  1,  1},
238         { 87, 44,  1,  1},
239         { 88, 45,  1,  1},
240         { 89, 46,  1,  1},
241         { 90, 47,  1,  1},
242         { 91, 48,  1,  1},
243         { 92, 49,  1,  1},
244         { 93, 50,  1,  1},
245         { 94, 51,  1,  1},
246         { 95, 52,  1,  1},
247         { 96, 53,  1,  1},
248         { 97, 54,  1,  1},
249         { 98, 55,  1,  1},
250         { 99, 56,  1,  1},
251         {100, 57,  1,  1},
252         {101, 58,  1,  1},
253         {102, 59,  1,  1},
254 };
255
256 /* 420 – 1000 MHz band, lna 7dB, mixer 19dB */
257 static const struct msi3101_gain msi3101_gain_lut_1000[] = {
258         {  0,  0, 0,  0},
259         {  1,  1, 0,  0},
260         {  2,  2, 0,  0},
261         {  3,  3, 0,  0},
262         {  4,  4, 0,  0},
263         {  5,  5, 0,  0},
264         {  6,  6, 0,  0},
265         {  7,  7, 0,  0},
266         {  8,  8, 0,  0},
267         {  9,  9, 0,  0},
268         { 10, 10, 0,  0},
269         { 11, 11, 0,  0},
270         { 12,  5, 1,  0},
271         { 13,  6, 1,  0},
272         { 14,  7, 1,  0},
273         { 15,  8, 1,  0},
274         { 16,  9, 1,  0},
275         { 17, 10, 1,  0},
276         { 18, 11, 1,  0},
277         { 19, 12, 1,  0},
278         { 20, 13, 1,  0},
279         { 21, 14, 1,  0},
280         { 22, 15, 1,  0},
281         { 23, 16, 1,  0},
282         { 24, 17, 1,  0},
283         { 25, 18, 1,  0},
284         { 26, 19, 1,  0},
285         { 27, 20, 1,  0},
286         { 28, 21, 1,  0},
287         { 29, 22, 1,  0},
288         { 30, 23, 1,  0},
289         { 31, 24, 1,  0},
290         { 32, 25, 1,  0},
291         { 33, 26, 1,  0},
292         { 34, 27, 1,  0},
293         { 35, 28, 1,  0},
294         { 36, 29, 1,  0},
295         { 37, 30, 1,  0},
296         { 38, 31, 1,  0},
297         { 39, 32, 1,  0},
298         { 40, 33, 1,  0},
299         { 41, 34, 1,  0},
300         { 42, 35, 1,  0},
301         { 43, 36, 1,  0},
302         { 44, 37, 1,  0},
303         { 45, 38, 1,  0},
304         { 46, 39, 1,  0},
305         { 47, 40, 1,  0},
306         { 48, 41, 1,  0},
307         { 49, 42, 1,  0},
308         { 50, 43, 1,  0},
309         { 51, 44, 1,  0},
310         { 52, 45, 1,  0},
311         { 53, 46, 1,  0},
312         { 54, 47, 1,  0},
313         { 55, 48, 1,  0},
314         { 56, 49, 1,  0},
315         { 57, 50, 1,  0},
316         { 58, 51, 1,  0},
317         { 59, 52, 1,  0},
318         { 60, 53, 1,  0},
319         { 61, 54, 1,  0},
320         { 62, 55, 1,  0},
321         { 63, 56, 1,  0},
322         { 64, 57, 1,  0},
323         { 65, 58, 1,  0},
324         { 66, 40, 1,  1},
325         { 67, 41, 1,  1},
326         { 68, 42, 1,  1},
327         { 69, 43, 1,  1},
328         { 70, 44, 1,  1},
329         { 71, 45, 1,  1},
330         { 72, 46, 1,  1},
331         { 73, 47, 1,  1},
332         { 74, 48, 1,  1},
333         { 75, 49, 1,  1},
334         { 76, 50, 1,  1},
335         { 77, 51, 1,  1},
336         { 78, 52, 1,  1},
337         { 79, 53, 1,  1},
338         { 80, 54, 1,  1},
339         { 81, 55, 1,  1},
340         { 82, 56, 1,  1},
341         { 83, 57, 1,  1},
342         { 84, 58, 1,  1},
343         { 85, 59, 1,  1},
344 };
345
346 /*
347  *   iConfiguration          0
348  *     bInterfaceNumber        0
349  *     bAlternateSetting       1
350  *     bNumEndpoints           1
351  *       bEndpointAddress     0x81  EP 1 IN
352  *       bmAttributes            1
353  *         Transfer Type            Isochronous
354  *       wMaxPacketSize     0x1400  3x 1024 bytes
355  *       bInterval               1
356  */
357 #define MAX_ISO_BUFS            (8)
358 #define ISO_FRAMES_PER_DESC     (8)
359 #define ISO_MAX_FRAME_SIZE      (3 * 1024)
360 #define ISO_BUFFER_SIZE         (ISO_FRAMES_PER_DESC * ISO_MAX_FRAME_SIZE)
361
362 #define MAX_ISOC_ERRORS         20
363
364 #define MSI3101_CID_SAMPLING_MODE         ((V4L2_CID_USER_BASE | 0xf000) + 0)
365 #define MSI3101_CID_SAMPLING_RATE         ((V4L2_CID_USER_BASE | 0xf000) + 1)
366 #define MSI3101_CID_SAMPLING_RESOLUTION   ((V4L2_CID_USER_BASE | 0xf000) + 2)
367 #define MSI3101_CID_TUNER_RF              ((V4L2_CID_USER_BASE | 0xf000) + 10)
368 #define MSI3101_CID_TUNER_BW              ((V4L2_CID_USER_BASE | 0xf000) + 11)
369 #define MSI3101_CID_TUNER_IF              ((V4L2_CID_USER_BASE | 0xf000) + 12)
370 #define MSI3101_CID_TUNER_GAIN            ((V4L2_CID_USER_BASE | 0xf000) + 13)
371
372 /* intermediate buffers with raw data from the USB device */
373 struct msi3101_frame_buf {
374         struct vb2_buffer vb;   /* common v4l buffer stuff -- must be first */
375         struct list_head list;
376         void *data;             /* raw data from USB device */
377         int filled;             /* number of bytes filled to *data */
378 };
379
380 struct msi3101_state {
381         struct video_device vdev;
382         struct v4l2_device v4l2_dev;
383
384         /* videobuf2 queue and queued buffers list */
385         struct vb2_queue vb_queue;
386         struct list_head queued_bufs;
387         spinlock_t queued_bufs_lock; /* Protects queued_bufs */
388
389         /* Note if taking both locks v4l2_lock must always be locked first! */
390         struct mutex v4l2_lock;      /* Protects everything else */
391         struct mutex vb_queue_lock;  /* Protects vb_queue and capt_file */
392
393         /* Pointer to our usb_device, will be NULL after unplug */
394         struct usb_device *udev; /* Both mutexes most be hold when setting! */
395
396         unsigned int isoc_errors; /* number of contiguous ISOC errors */
397         unsigned int vb_full; /* vb is full and packets dropped */
398
399         struct urb *urbs[MAX_ISO_BUFS];
400
401         /* Controls */
402         struct v4l2_ctrl_handler ctrl_handler;
403         struct v4l2_ctrl *ctrl_sampling_rate;
404         struct v4l2_ctrl *ctrl_tuner_rf;
405         struct v4l2_ctrl *ctrl_tuner_bw;
406         struct v4l2_ctrl *ctrl_tuner_if;
407         struct v4l2_ctrl *ctrl_tuner_gain;
408
409         u32 next_sample; /* for track lost packets */
410         u32 sample; /* for sample rate calc */
411         unsigned long jiffies;
412         unsigned int sample_ctrl_bit[4];
413 };
414
415 /* Private functions */
416 static struct msi3101_frame_buf *msi3101_get_next_fill_buf(
417                 struct msi3101_state *s)
418 {
419         unsigned long flags = 0;
420         struct msi3101_frame_buf *buf = NULL;
421
422         spin_lock_irqsave(&s->queued_bufs_lock, flags);
423         if (list_empty(&s->queued_bufs))
424                 goto leave;
425
426         buf = list_entry(s->queued_bufs.next, struct msi3101_frame_buf, list);
427         list_del(&buf->list);
428 leave:
429         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
430         return buf;
431 }
432
433 /*
434  * +===========================================================================
435  * |   00-1023 | USB packet
436  * +===========================================================================
437  * |   00-  03 | sequence number of first sample in that USB packet
438  * +---------------------------------------------------------------------------
439  * |   04-  15 | garbage
440  * +---------------------------------------------------------------------------
441  * |   16- 175 | samples
442  * +---------------------------------------------------------------------------
443  * |  176- 179 | control bits for previous samples
444  * +---------------------------------------------------------------------------
445  * |  180- 339 | samples
446  * +---------------------------------------------------------------------------
447  * |  340- 343 | control bits for previous samples
448  * +---------------------------------------------------------------------------
449  * |  344- 503 | samples
450  * +---------------------------------------------------------------------------
451  * |  504- 507 | control bits for previous samples
452  * +---------------------------------------------------------------------------
453  * |  508- 667 | samples
454  * +---------------------------------------------------------------------------
455  * |  668- 671 | control bits for previous samples
456  * +---------------------------------------------------------------------------
457  * |  672- 831 | samples
458  * +---------------------------------------------------------------------------
459  * |  832- 835 | control bits for previous samples
460  * +---------------------------------------------------------------------------
461  * |  836- 995 | samples
462  * +---------------------------------------------------------------------------
463  * |  996- 999 | control bits for previous samples
464  * +---------------------------------------------------------------------------
465  * | 1000-1023 | garbage
466  * +---------------------------------------------------------------------------
467  *
468  * Bytes 4 - 7 could have some meaning?
469  *
470  * Control bits for previous samples is 32-bit field, containing 16 x 2-bit
471  * numbers. This results one 2-bit number for 8 samples. It is likely used for
472  * for bit shifting sample by given bits, increasing actual sampling resolution.
473  * Number 2 (0b10) was never seen.
474  *
475  * 6 * 16 * 2 * 4 = 768 samples. 768 * 4 = 3072 bytes
476  */
477
478 /*
479  * Converts signed 10-bit integer into 32-bit IEEE floating point
480  * representation.
481  * Will be exact from 0 to 2^24.  Above that, we round towards zero
482  * as the fractional bits will not fit in a float.  (It would be better to
483  * round towards even as the fpu does, but that is slower.)
484  */
485 #define I2F_FRAC_BITS  23
486 #define I2F_MASK ((1 << I2F_FRAC_BITS) - 1)
487 static u32 msi3101_convert_sample(struct msi3101_state *s, u16 x, int shift)
488 {
489         u32 msb, exponent, fraction, sign;
490         s->sample_ctrl_bit[shift]++;
491
492         /* Zero is special */
493         if (!x)
494                 return 0;
495
496         /* Convert 10-bit two's complement to 13-bit */
497         if (x & (1 << 9)) {
498                 x |= ~0U << 10; /* set all the rest bits to one */
499                 x <<= shift;
500                 x = -x;
501                 x &= 0xfff; /* result is 12 bit ... + sign */
502                 sign = 1 << 31;
503         } else {
504                 x <<= shift;
505                 sign = 0 << 31;
506         }
507
508         /* Get location of the most significant bit */
509         msb = __fls(x);
510
511         /*
512          * Use a rotate instead of a shift because that works both leftwards
513          * and rightwards due to the mod(32) behaviour.  This means we don't
514          * need to check to see if we are above 2^24 or not.
515          */
516         fraction = ror32(x, (msb - I2F_FRAC_BITS) & 0x1f) & I2F_MASK;
517         exponent = (127 + msb) << I2F_FRAC_BITS;
518
519         return (fraction + exponent) | sign;
520 }
521
522 #define MSI3101_CONVERT_IN_URB_HANDLER
523 #define MSI3101_EXTENSIVE_DEBUG
524 static int msi3101_convert_stream(struct msi3101_state *s, u32 *dst,
525                 u8 *src, unsigned int src_len)
526 {
527         int i, j, k, l, i_max, dst_len = 0;
528         u16 sample[4];
529         u32 bits;
530 #ifdef MSI3101_EXTENSIVE_DEBUG
531         u32 sample_num[3];
532 #endif
533         /* There could be 1-3 1024 bytes URB frames */
534         i_max = src_len / 1024;
535         for (i = 0; i < i_max; i++) {
536 #ifdef MSI3101_EXTENSIVE_DEBUG
537                 sample_num[i] = src[3] << 24 | src[2] << 16 | src[1] << 8 | src[0] << 0;
538                 if (i == 0 && s->next_sample != sample_num[0]) {
539                         dev_dbg(&s->udev->dev,
540                                         "%d samples lost, %d %08x:%08x\n",
541                                         sample_num[0] - s->next_sample,
542                                         src_len, s->next_sample, sample_num[0]);
543                 }
544
545                 /*
546                  * Dump all unknown 'garbage' data - maybe we will discover
547                  * someday if there is something rational...
548                  */
549                 dev_dbg_ratelimited(&s->udev->dev,
550                                 "%*ph  %*ph\n", 12, &src[4], 24, &src[1000]);
551                 memset(&src[4], 0, 12);
552                 memset(&src[1000], 0, 24);
553 #endif
554                 src += 16;
555                 for (j = 0; j < 6; j++) {
556                         bits = src[160 + 3] << 24 | src[160 + 2] << 16 | src[160 + 1] << 8 | src[160 + 0] << 0;
557                         for (k = 0; k < 16; k++) {
558                                 for (l = 0; l < 10; l += 5) {
559                                         sample[0] = (src[l + 0] & 0xff) >> 0 | (src[l + 1] & 0x03) << 8;
560                                         sample[1] = (src[l + 1] & 0xfc) >> 2 | (src[l + 2] & 0x0f) << 6;
561                                         sample[2] = (src[l + 2] & 0xf0) >> 4 | (src[l + 3] & 0x3f) << 4;
562                                         sample[3] = (src[l + 3] & 0xc0) >> 6 | (src[l + 4] & 0xff) << 2;
563
564                                         *dst++ = msi3101_convert_sample(s, sample[0], (bits >> (2 * k)) & 0x3);
565                                         *dst++ = msi3101_convert_sample(s, sample[1], (bits >> (2 * k)) & 0x3);
566                                         *dst++ = msi3101_convert_sample(s, sample[2], (bits >> (2 * k)) & 0x3);
567                                         *dst++ = msi3101_convert_sample(s, sample[3], (bits >> (2 * k)) & 0x3);
568
569                                         /* 4 x 32bit float samples */
570                                         dst_len += 4 * 4;
571                                 }
572                                 src += 10;
573                         }
574 #ifdef MSI3101_EXTENSIVE_DEBUG
575                         dev_dbg_ratelimited(&s->udev->dev,
576                                         "sample control bits %08x\n", bits);
577 #endif
578                         src += 4;
579                 }
580                 src += 24;
581         }
582
583 #ifdef MSI3101_EXTENSIVE_DEBUG
584         /* calculate samping rate and output it in 10 seconds intervals */
585         if ((s->jiffies + msecs_to_jiffies(10000)) <= jiffies) {
586                 unsigned long jiffies_now = jiffies;
587                 unsigned long msecs = jiffies_to_msecs(jiffies_now) - jiffies_to_msecs(s->jiffies);
588                 unsigned int samples = sample_num[i_max - 1] - s->sample;
589                 s->jiffies = jiffies_now;
590                 s->sample = sample_num[i_max - 1];
591                 dev_dbg(&s->udev->dev,
592                                 "slen=%d samples=%u msecs=%lu sampling rate=%lu bits=%d.%d.%d.%d\n",
593                                 src_len, samples, msecs,
594                                 samples * 1000UL / msecs,
595                                 s->sample_ctrl_bit[0], s->sample_ctrl_bit[1],
596                                 s->sample_ctrl_bit[2], s->sample_ctrl_bit[3]);
597         }
598
599         /* next sample (sample = sample + i * 384) */
600         s->next_sample = sample_num[i_max - 1] + 384;
601 #endif
602         return dst_len;
603 }
604
605 /*
606  * This gets called for the Isochronous pipe (stream). This is done in interrupt
607  * time, so it has to be fast, not crash, and not stall. Neat.
608  */
609 static void msi3101_isoc_handler(struct urb *urb)
610 {
611         struct msi3101_state *s = (struct msi3101_state *)urb->context;
612         int i, flen, fstatus;
613         unsigned char *iso_buf = NULL;
614         struct msi3101_frame_buf *fbuf;
615
616         if (urb->status == -ENOENT || urb->status == -ECONNRESET ||
617                         urb->status == -ESHUTDOWN) {
618                 dev_dbg(&s->udev->dev, "URB (%p) unlinked %ssynchronuously\n",
619                                 urb, urb->status == -ENOENT ? "" : "a");
620                 return;
621         }
622
623         if (urb->status != 0) {
624                 dev_dbg(&s->udev->dev,
625                                 "msi3101_isoc_handler() called with status %d\n",
626                                 urb->status);
627                 /* Give up after a number of contiguous errors */
628                 if (++s->isoc_errors > MAX_ISOC_ERRORS)
629                         dev_dbg(&s->udev->dev,
630                                         "Too many ISOC errors, bailing out\n");
631                 goto handler_end;
632         } else {
633                 /* Reset ISOC error counter. We did get here, after all. */
634                 s->isoc_errors = 0;
635         }
636
637         /* Compact data */
638         for (i = 0; i < urb->number_of_packets; i++) {
639                 /* Check frame error */
640                 fstatus = urb->iso_frame_desc[i].status;
641                 if (fstatus) {
642                         dev_dbg(&s->udev->dev,
643                                         "frame=%d/%d has error %d skipping\n",
644                                         i, urb->number_of_packets, fstatus);
645                         goto skip;
646                 }
647
648                 /* Check if that frame contains data */
649                 flen = urb->iso_frame_desc[i].actual_length;
650                 if (flen == 0)
651                         goto skip;
652
653                 iso_buf = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
654
655                 /* Get free framebuffer */
656                 fbuf = msi3101_get_next_fill_buf(s);
657                 if (fbuf == NULL) {
658                         s->vb_full++;
659                         dev_dbg_ratelimited(&s->udev->dev,
660                                         "videobuf is full, %d packets dropped\n",
661                                         s->vb_full);
662                         goto skip;
663                 }
664
665                 /* fill framebuffer */
666 #ifdef MSI3101_CONVERT_IN_URB_HANDLER
667                 vb2_set_plane_payload(&fbuf->vb, 0,
668                                 msi3101_convert_stream(s,
669                                 vb2_plane_vaddr(&fbuf->vb, 0), iso_buf, flen));
670 #else
671                 memcpy(fbuf->data, iso_buf, flen);
672                 fbuf->filled = flen;
673 #endif
674                 vb2_buffer_done(&fbuf->vb, VB2_BUF_STATE_DONE);
675 skip:
676                 ;
677         }
678
679 handler_end:
680         i = usb_submit_urb(urb, GFP_ATOMIC);
681         if (i != 0)
682                 dev_dbg(&s->udev->dev,
683                                 "Error (%d) re-submitting urb in msi3101_isoc_handler\n",
684                                 i);
685 }
686
687 static void msi3101_iso_stop(struct msi3101_state *s)
688 {
689         int i;
690         dev_dbg(&s->udev->dev, "%s:\n", __func__);
691
692         /* Unlinking ISOC buffers one by one */
693         for (i = 0; i < MAX_ISO_BUFS; i++) {
694                 if (s->urbs[i]) {
695                         dev_dbg(&s->udev->dev, "Unlinking URB %p\n",
696                                         s->urbs[i]);
697                         usb_kill_urb(s->urbs[i]);
698                 }
699         }
700 }
701
702 static void msi3101_iso_free(struct msi3101_state *s)
703 {
704         int i;
705         dev_dbg(&s->udev->dev, "%s:\n", __func__);
706
707         /* Freeing ISOC buffers one by one */
708         for (i = 0; i < MAX_ISO_BUFS; i++) {
709                 if (s->urbs[i]) {
710                         dev_dbg(&s->udev->dev, "Freeing URB\n");
711                         if (s->urbs[i]->transfer_buffer) {
712                                 usb_free_coherent(s->udev,
713                                         s->urbs[i]->transfer_buffer_length,
714                                         s->urbs[i]->transfer_buffer,
715                                         s->urbs[i]->transfer_dma);
716                         }
717                         usb_free_urb(s->urbs[i]);
718                         s->urbs[i] = NULL;
719                 }
720         }
721 }
722
723 /* Both v4l2_lock and vb_queue_lock should be locked when calling this */
724 static void msi3101_isoc_cleanup(struct msi3101_state *s)
725 {
726         dev_dbg(&s->udev->dev, "%s:\n", __func__);
727
728         msi3101_iso_stop(s);
729         msi3101_iso_free(s);
730 }
731
732 /* Both v4l2_lock and vb_queue_lock should be locked when calling this */
733 static int msi3101_isoc_init(struct msi3101_state *s)
734 {
735         struct usb_device *udev;
736         struct urb *urb;
737         int i, j, ret;
738         dev_dbg(&s->udev->dev, "%s:\n", __func__);
739
740         s->isoc_errors = 0;
741         udev = s->udev;
742
743         ret = usb_set_interface(s->udev, 0, 1);
744         if (ret < 0)
745                 return ret;
746
747         /* Allocate and init Isochronuous urbs */
748         for (i = 0; i < MAX_ISO_BUFS; i++) {
749                 urb = usb_alloc_urb(ISO_FRAMES_PER_DESC, GFP_KERNEL);
750                 if (urb == NULL) {
751                         dev_err(&s->udev->dev,
752                                         "Failed to allocate urb %d\n", i);
753                         msi3101_isoc_cleanup(s);
754                         return -ENOMEM;
755                 }
756                 s->urbs[i] = urb;
757                 dev_dbg(&s->udev->dev, "Allocated URB at 0x%p\n", urb);
758
759                 urb->interval = 1;
760                 urb->dev = udev;
761                 urb->pipe = usb_rcvisocpipe(udev, 0x81);
762                 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
763                 urb->transfer_buffer = usb_alloc_coherent(udev, ISO_BUFFER_SIZE,
764                                 GFP_KERNEL, &urb->transfer_dma);
765                 if (urb->transfer_buffer == NULL) {
766                         dev_err(&s->udev->dev,
767                                         "Failed to allocate urb buffer %d\n",
768                                         i);
769                         msi3101_isoc_cleanup(s);
770                         return -ENOMEM;
771                 }
772                 urb->transfer_buffer_length = ISO_BUFFER_SIZE;
773                 urb->complete = msi3101_isoc_handler;
774                 urb->context = s;
775                 urb->start_frame = 0;
776                 urb->number_of_packets = ISO_FRAMES_PER_DESC;
777                 for (j = 0; j < ISO_FRAMES_PER_DESC; j++) {
778                         urb->iso_frame_desc[j].offset = j * ISO_MAX_FRAME_SIZE;
779                         urb->iso_frame_desc[j].length = ISO_MAX_FRAME_SIZE;
780                 }
781         }
782
783         /* link */
784         for (i = 0; i < MAX_ISO_BUFS; i++) {
785                 ret = usb_submit_urb(s->urbs[i], GFP_KERNEL);
786                 if (ret) {
787                         dev_err(&s->udev->dev,
788                                         "isoc_init() submit_urb %d failed with error %d\n",
789                                         i, ret);
790                         msi3101_isoc_cleanup(s);
791                         return ret;
792                 }
793                 dev_dbg(&s->udev->dev, "URB 0x%p submitted.\n", s->urbs[i]);
794         }
795
796         /* All is done... */
797         return 0;
798 }
799
800 /* Must be called with vb_queue_lock hold */
801 static void msi3101_cleanup_queued_bufs(struct msi3101_state *s)
802 {
803         unsigned long flags = 0;
804         dev_dbg(&s->udev->dev, "%s:\n", __func__);
805
806         spin_lock_irqsave(&s->queued_bufs_lock, flags);
807         while (!list_empty(&s->queued_bufs)) {
808                 struct msi3101_frame_buf *buf;
809
810                 buf = list_entry(s->queued_bufs.next, struct msi3101_frame_buf,
811                                  list);
812                 list_del(&buf->list);
813                 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
814         }
815         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
816 }
817
818 /* The user yanked out the cable... */
819 static void msi3101_disconnect(struct usb_interface *intf)
820 {
821         struct v4l2_device *v = usb_get_intfdata(intf);
822         struct msi3101_state *s =
823                         container_of(v, struct msi3101_state, v4l2_dev);
824         dev_dbg(&s->udev->dev, "%s:\n", __func__);
825
826         mutex_lock(&s->vb_queue_lock);
827         mutex_lock(&s->v4l2_lock);
828         /* No need to keep the urbs around after disconnection */
829         s->udev = NULL;
830
831         v4l2_device_disconnect(&s->v4l2_dev);
832         video_unregister_device(&s->vdev);
833         mutex_unlock(&s->v4l2_lock);
834         mutex_unlock(&s->vb_queue_lock);
835
836         v4l2_device_put(&s->v4l2_dev);
837 }
838
839 static int msi3101_querycap(struct file *file, void *fh,
840                 struct v4l2_capability *cap)
841 {
842         struct msi3101_state *s = video_drvdata(file);
843         dev_dbg(&s->udev->dev, "%s:\n", __func__);
844
845         strlcpy(cap->driver, KBUILD_MODNAME, sizeof(cap->driver));
846         strlcpy(cap->card, s->vdev.name, sizeof(cap->card));
847         usb_make_path(s->udev, cap->bus_info, sizeof(cap->bus_info));
848         cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
849                         V4L2_CAP_READWRITE;
850         cap->device_caps = V4L2_CAP_TUNER;
851         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
852         return 0;
853 }
854
855
856 /* Videobuf2 operations */
857 static int msi3101_queue_setup(struct vb2_queue *vq,
858                 const struct v4l2_format *fmt, unsigned int *nbuffers,
859                 unsigned int *nplanes, unsigned int sizes[], void *alloc_ctxs[])
860 {
861         struct msi3101_state *s = vb2_get_drv_priv(vq);
862         dev_dbg(&s->udev->dev, "%s: *nbuffers=%d\n", __func__, *nbuffers);
863
864         /* Absolute min and max number of buffers available for mmap() */
865         *nbuffers = 32;
866         *nplanes = 1;
867         sizes[0] = PAGE_ALIGN(3 * 3072); /* 3 * 768 * 4 */
868         dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n",
869                         __func__, *nbuffers, sizes[0]);
870         return 0;
871 }
872
873 static int msi3101_buf_init(struct vb2_buffer *vb)
874 {
875         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
876         struct msi3101_frame_buf *fbuf =
877                         container_of(vb, struct msi3101_frame_buf, vb);
878         dev_dbg(&s->udev->dev, "%s:\n", __func__);
879
880         fbuf->data = vzalloc(ISO_MAX_FRAME_SIZE);
881         if (fbuf->data == NULL)
882                 return -ENOMEM;
883
884         return 0;
885 }
886
887 static int msi3101_buf_prepare(struct vb2_buffer *vb)
888 {
889         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
890
891         /* Don't allow queing new buffers after device disconnection */
892         if (!s->udev)
893                 return -ENODEV;
894
895         return 0;
896 }
897
898 #ifdef MSI3101_CONVERT_IN_URB_HANDLER
899 static int msi3101_buf_finish(struct vb2_buffer *vb)
900 {
901         return 0;
902 }
903 #else
904 static int msi3101_buf_finish(struct vb2_buffer *vb)
905 {
906         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
907         struct msi3101_frame_buf *fbuf =
908                         container_of(vb, struct msi3101_frame_buf, vb);
909         int ret;
910         u32 *dst = vb2_plane_vaddr(&fbuf->vb, 0);
911         ret = msi3101_convert_stream(s, dst, fbuf->data, fbuf->filled);
912         vb2_set_plane_payload(&fbuf->vb, 0, ret);
913         return 0;
914 }
915 #endif
916
917 static void msi3101_buf_cleanup(struct vb2_buffer *vb)
918 {
919         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
920         struct msi3101_frame_buf *buf =
921                         container_of(vb, struct msi3101_frame_buf, vb);
922         dev_dbg(&s->udev->dev, "%s:\n", __func__);
923
924         vfree(buf->data);
925 }
926 static void msi3101_buf_queue(struct vb2_buffer *vb)
927 {
928         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
929         struct msi3101_frame_buf *buf =
930                         container_of(vb, struct msi3101_frame_buf, vb);
931         unsigned long flags = 0;
932
933         /* Check the device has not disconnected between prep and queuing */
934         if (!s->udev) {
935                 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
936                 return;
937         }
938
939         spin_lock_irqsave(&s->queued_bufs_lock, flags);
940         list_add_tail(&buf->list, &s->queued_bufs);
941         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
942 }
943
944 #define CMD_WREG               0x41
945 #define CMD_START_STREAMING    0x43
946 #define CMD_STOP_STREAMING     0x45
947 #define CMD_READ_UNKNOW        0x48
948
949 #define msi3101_dbg_usb_control_msg(udev, r, t, v, _i, b, l) { \
950         char *direction; \
951         if (t == (USB_TYPE_VENDOR | USB_DIR_OUT)) \
952                 direction = ">>>"; \
953         else \
954                 direction = "<<<"; \
955         dev_dbg(&udev->dev, "%s: %02x %02x %02x %02x %02x %02x %02x %02x " \
956                         "%s %*ph\n",  __func__, t, r, v & 0xff, v >> 8, \
957                         _i & 0xff, _i >> 8, l & 0xff, l >> 8, direction, l, b); \
958 }
959
960 static int msi3101_ctrl_msg(struct msi3101_state *s, u8 cmd, u32 data)
961 {
962         int ret;
963         u8 request = cmd;
964         u8 requesttype = USB_DIR_OUT | USB_TYPE_VENDOR;
965         u16 value = (data >> 0) & 0xffff;
966         u16 index = (data >> 16) & 0xffff;
967
968         msi3101_dbg_usb_control_msg(s->udev,
969                         request, requesttype, value, index, NULL, 0);
970
971         ret = usb_control_msg(s->udev, usb_sndctrlpipe(s->udev, 0),
972                         request, requesttype, value, index, NULL, 0, 2000);
973
974         if (ret)
975                 dev_err(&s->udev->dev, "%s: failed %d, cmd %02x, data %04x\n",
976                                 __func__, ret, cmd, data);
977
978         return ret;
979 };
980
981 static int msi3101_tuner_write(struct msi3101_state *s, u32 data)
982 {
983         return msi3101_ctrl_msg(s, CMD_WREG, data << 8 | 0x09);
984 };
985
986 #define F_REF 24000000
987 #define DIV_R_IN 2
988 static int msi3101_set_usb_adc(struct msi3101_state *s)
989 {
990         int ret, div_n, div_m, div_r_out, f_sr, f_vco;
991         u32 reg4, reg3;
992         /*
993          * Synthesizer config is just a educated guess...
994          *
995          * [7:0]   0x03, register address
996          * [8]     1, always
997          * [9]     ?
998          * [12:10] output divider
999          * [13]    0 ?
1000          * [14]    0 ?
1001          * [15]    increase sr by max fract
1002          * [16:19] N
1003          * [23:20] ?
1004          * [24:31] 0x01
1005          *
1006          * output divider
1007          * val   div
1008          *   0     - (invalid)
1009          *   1     4
1010          *   2     6
1011          *   3     8
1012          *   4    10
1013          *   5    12
1014          *   6    14
1015          *   7    16
1016          *
1017          * VCO 202000000 - 720000000++
1018          */
1019
1020         f_sr = s->ctrl_sampling_rate->val64;
1021         reg3 = 0x01c00303;
1022
1023         for (div_r_out = 4; div_r_out < 16; div_r_out += 2) {
1024                 f_vco = f_sr * div_r_out * 12;
1025                 dev_dbg(&s->udev->dev, "%s: div_r_out=%d f_vco=%d\n",
1026                                 __func__, div_r_out, f_vco);
1027                 if (f_vco >= 202000000)
1028                         break;
1029         }
1030
1031         div_n = f_vco / (F_REF * DIV_R_IN);
1032         div_m = f_vco % (F_REF * DIV_R_IN);
1033
1034         reg3 |= div_n << 16;
1035         reg3 |= (div_r_out / 2 - 1) << 10;
1036         reg4 = 0x0ffffful * div_m / F_REF;
1037
1038         if (reg4 >= 0x0ffffful) {
1039                 dev_dbg(&s->udev->dev,
1040                                 "%s: extending fractional part value %08x\n",
1041                                 __func__, reg4);
1042                 reg4 -= 0x0ffffful;
1043                 reg3 |= 1 << 15;
1044         }
1045
1046         reg4 = (reg4 << 8) | 0x04;
1047
1048         dev_dbg(&s->udev->dev,
1049                         "%s: f_sr=%d f_vco=%d div_n=%d div_m=%d div_r_out=%d reg4=%08x\n",
1050                         __func__, f_sr, f_vco, div_n, div_m, div_r_out, reg4);
1051
1052         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00608008);
1053         if (ret)
1054                 goto err;
1055
1056         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00000c05);
1057         if (ret)
1058                 goto err;
1059
1060         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00020000);
1061         if (ret)
1062                 goto err;
1063
1064         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00480102);
1065         if (ret)
1066                 goto err;
1067
1068         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00f38008);
1069         if (ret)
1070                 goto err;
1071
1072         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x0000a507);
1073         if (ret)
1074                 goto err;
1075
1076         ret = msi3101_ctrl_msg(s, CMD_WREG, reg4);
1077         if (ret)
1078                 goto err;
1079
1080         ret = msi3101_ctrl_msg(s, CMD_WREG, reg3);
1081         if (ret)
1082                 goto err;
1083 err:
1084         return ret;
1085 };
1086
1087 static int msi3101_set_tuner(struct msi3101_state *s)
1088 {
1089         int i, ret, len;
1090         u32 reg, synthstep, thresh, n, frac;
1091         u64 fsynth;
1092         u8 mode, lo_div;
1093         const struct msi3101_gain *gain_lut;
1094         static const struct {
1095                 u32 rf;
1096                 u8 mode;
1097                 u8 lo_div;
1098         } band_lut[] = {
1099                 { 30000000, 0x01, 16}, /* AM_MODE1 */
1100                 {108000000, 0x02, 32}, /* VHF_MODE */
1101                 {240000000, 0x04, 16}, /* B3_MODE */
1102                 {960000000, 0x08,  4}, /* B45_MODE */
1103                 {167500000, 0x10,  2}, /* BL_MODE */
1104         };
1105         static const struct {
1106                 u32 freq;
1107                 u8 val;
1108         } if_freq_lut[] = {
1109                 {      0, 0x03}, /* Zero IF */
1110                 { 450000, 0x02}, /* 450 kHz IF */
1111                 {1620000, 0x01}, /* 1.62 MHz IF */
1112                 {2048000, 0x00}, /* 2.048 MHz IF */
1113         };
1114         static const struct {
1115                 u32 freq;
1116                 u8 val;
1117         } bandwidth_lut[] = {
1118                 { 200000, 0x00}, /* 200 kHz */
1119                 { 300000, 0x01}, /* 300 kHz */
1120                 { 600000, 0x02}, /* 600 kHz */
1121                 {1536000, 0x03}, /* 1.536 MHz */
1122                 {5000000, 0x04}, /* 5 MHz */
1123                 {6000000, 0x05}, /* 6 MHz */
1124                 {7000000, 0x06}, /* 7 MHz */
1125                 {8000000, 0x07}, /* 8 MHz */
1126         };
1127
1128         unsigned int rf_freq = s->ctrl_tuner_rf->val64;
1129
1130         /*
1131          * bandwidth (Hz)
1132          * 200000, 300000, 600000, 1536000, 5000000, 6000000, 7000000, 8000000
1133          */
1134         int bandwidth = s->ctrl_tuner_bw->val;
1135
1136         /*
1137          * intermediate frequency (Hz)
1138          * 0, 450000, 1620000, 2048000
1139          */
1140         int if_freq = s->ctrl_tuner_if->val;
1141
1142         /*
1143          * gain reduction (dB)
1144          * 0 - 102 below 420 MHz
1145          * 0 - 85 above 420 MHz
1146          */
1147         int gain = s->ctrl_tuner_gain->val;
1148
1149         dev_dbg(&s->udev->dev,
1150                         "%s: rf_freq=%d bandwidth=%d if_freq=%d gain=%d\n",
1151                         __func__, rf_freq, bandwidth, if_freq, gain);
1152
1153         ret = -EINVAL;
1154
1155         for (i = 0; i < ARRAY_SIZE(band_lut); i++) {
1156                 if (rf_freq <= band_lut[i].rf) {
1157                         mode = band_lut[i].mode;
1158                         lo_div = band_lut[i].lo_div;
1159                         break;
1160                 }
1161         }
1162
1163         if (i == ARRAY_SIZE(band_lut))
1164                 goto err;
1165
1166         for (i = 0; i < ARRAY_SIZE(if_freq_lut); i++) {
1167                 if (if_freq == if_freq_lut[i].freq) {
1168                         if_freq = if_freq_lut[i].val;
1169                         break;
1170                 }
1171         }
1172
1173         if (i == ARRAY_SIZE(if_freq_lut))
1174                 goto err;
1175
1176         for (i = 0; i < ARRAY_SIZE(bandwidth_lut); i++) {
1177                 if (bandwidth == bandwidth_lut[i].freq) {
1178                         bandwidth = bandwidth_lut[i].val;
1179                         break;
1180                 }
1181         }
1182
1183         if (i == ARRAY_SIZE(bandwidth_lut))
1184                 goto err;
1185
1186         #define FSTEP 10000
1187         #define FREF1 24000000
1188         fsynth = (rf_freq + 0) * lo_div;
1189         synthstep = FSTEP * lo_div;
1190         thresh = (FREF1 * 4) / synthstep;
1191         n = fsynth / (FREF1 * 4);
1192         frac = thresh * (fsynth % (FREF1 * 4)) / (FREF1 * 4);
1193
1194         if (thresh > 4095 || n > 63 || frac > 4095) {
1195                 dev_dbg(&s->udev->dev,
1196                                 "%s: synth setup failed rf=%d thresh=%d n=%d frac=%d\n",
1197                                 __func__, rf_freq, thresh, n, frac);
1198                 ret = -EINVAL;
1199                 goto err;
1200         }
1201
1202         ret = msi3101_tuner_write(s, 0x00000e);
1203         ret = msi3101_tuner_write(s, 0x000003);
1204
1205         reg = 0 << 0;
1206         reg |= mode << 4;
1207         reg |= 1 << 10;
1208         reg |= if_freq << 12;
1209         reg |= bandwidth << 14;
1210         reg |= 0x02 << 17;
1211         reg |= 0x00 << 20;
1212         ret = msi3101_tuner_write(s, reg);
1213         if (ret)
1214                 goto err;
1215
1216         reg = 5 << 0;
1217         reg |= thresh << 4;
1218         reg |= 1 << 19;
1219         reg |= 1 << 21;
1220         ret = msi3101_tuner_write(s, reg);
1221         if (ret)
1222                 goto err;
1223
1224         reg = 2 << 0;
1225         reg |= frac << 4;
1226         reg |= n << 16;
1227         ret = msi3101_tuner_write(s, reg);
1228         if (ret)
1229                 goto err;
1230
1231         if (rf_freq < 120000000) {
1232                 gain_lut = msi3101_gain_lut_120;
1233                 len = ARRAY_SIZE(msi3101_gain_lut_120);
1234         } else if (rf_freq < 245000000) {
1235                 gain_lut = msi3101_gain_lut_245;
1236                 len = ARRAY_SIZE(msi3101_gain_lut_120);
1237         } else {
1238                 gain_lut = msi3101_gain_lut_1000;
1239                 len = ARRAY_SIZE(msi3101_gain_lut_1000);
1240         }
1241
1242         for (i = 0; i < len; i++) {
1243                 if (gain_lut[i].tot >= gain)
1244                         break;
1245         }
1246
1247         if (i == len)
1248                 goto err;
1249
1250         dev_dbg(&s->udev->dev,
1251                         "%s: gain tot=%d baseband=%d lna=%d mixer=%d\n",
1252                         __func__, gain_lut[i].tot, gain_lut[i].baseband,
1253                         gain_lut[i].lna, gain_lut[i].mixer);
1254
1255         reg = 1 << 0;
1256         reg |= gain_lut[i].baseband << 4;
1257         reg |= 0 << 10;
1258         reg |= gain_lut[i].mixer << 12;
1259         reg |= gain_lut[i].lna << 13;
1260         reg |= 4 << 14;
1261         reg |= 0 << 17;
1262         ret = msi3101_tuner_write(s, reg);
1263         if (ret)
1264                 goto err;
1265
1266         reg = 6 << 0;
1267         reg |= 63 << 4;
1268         reg |= 4095 << 10;
1269         ret = msi3101_tuner_write(s, reg);
1270         if (ret)
1271                 goto err;
1272
1273         return 0;
1274 err:
1275         dev_dbg(&s->udev->dev, "%s: failed %d\n", __func__, ret);
1276         return ret;
1277 };
1278
1279 static int msi3101_start_streaming(struct vb2_queue *vq, unsigned int count)
1280 {
1281         struct msi3101_state *s = vb2_get_drv_priv(vq);
1282         int ret;
1283         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1284
1285         if (!s->udev)
1286                 return -ENODEV;
1287
1288         if (mutex_lock_interruptible(&s->v4l2_lock))
1289                 return -ERESTARTSYS;
1290
1291         ret = msi3101_set_usb_adc(s);
1292
1293         ret = msi3101_isoc_init(s);
1294         if (ret)
1295                 msi3101_cleanup_queued_bufs(s);
1296
1297         ret = msi3101_ctrl_msg(s, CMD_START_STREAMING, 0);
1298
1299         mutex_unlock(&s->v4l2_lock);
1300
1301         return ret;
1302 }
1303
1304 static int msi3101_stop_streaming(struct vb2_queue *vq)
1305 {
1306         struct msi3101_state *s = vb2_get_drv_priv(vq);
1307         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1308
1309         if (mutex_lock_interruptible(&s->v4l2_lock))
1310                 return -ERESTARTSYS;
1311
1312         if (s->udev)
1313                 msi3101_isoc_cleanup(s);
1314
1315         msi3101_cleanup_queued_bufs(s);
1316
1317         /* according to tests, at least 700us delay is required  */
1318         msleep(20);
1319         msi3101_ctrl_msg(s, CMD_STOP_STREAMING, 0);
1320
1321         mutex_unlock(&s->v4l2_lock);
1322
1323         return 0;
1324 }
1325
1326 static struct vb2_ops msi3101_vb2_ops = {
1327         .queue_setup            = msi3101_queue_setup,
1328         .buf_init               = msi3101_buf_init,
1329         .buf_prepare            = msi3101_buf_prepare,
1330         .buf_finish             = msi3101_buf_finish,
1331         .buf_cleanup            = msi3101_buf_cleanup,
1332         .buf_queue              = msi3101_buf_queue,
1333         .start_streaming        = msi3101_start_streaming,
1334         .stop_streaming         = msi3101_stop_streaming,
1335         .wait_prepare           = vb2_ops_wait_prepare,
1336         .wait_finish            = vb2_ops_wait_finish,
1337 };
1338
1339 static int msi3101_enum_input(struct file *file, void *fh, struct v4l2_input *i)
1340 {
1341         if (i->index != 0)
1342                 return -EINVAL;
1343
1344         strlcpy(i->name, "SDR data", sizeof(i->name));
1345         i->type = V4L2_INPUT_TYPE_CAMERA;
1346
1347         return 0;
1348 }
1349
1350 static int msi3101_g_input(struct file *file, void *fh, unsigned int *i)
1351 {
1352         *i = 0;
1353
1354         return 0;
1355 }
1356
1357 static int msi3101_s_input(struct file *file, void *fh, unsigned int i)
1358 {
1359         return i ? -EINVAL : 0;
1360 }
1361
1362 static int vidioc_s_tuner(struct file *file, void *priv,
1363                 const struct v4l2_tuner *v)
1364 {
1365         struct msi3101_state *s = video_drvdata(file);
1366         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1367
1368         return 0;
1369 }
1370
1371 static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *v)
1372 {
1373         struct msi3101_state *s = video_drvdata(file);
1374         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1375
1376         strcpy(v->name, "SDR RX");
1377         v->capability = V4L2_TUNER_CAP_LOW;
1378
1379         return 0;
1380 }
1381
1382 static int vidioc_s_frequency(struct file *file, void *priv,
1383                 const struct v4l2_frequency *f)
1384 {
1385         struct msi3101_state *s = video_drvdata(file);
1386         dev_dbg(&s->udev->dev, "%s: frequency=%u Hz (%d)\n",
1387                         __func__, f->frequency * 625U / 10U, f->frequency);
1388
1389         return v4l2_ctrl_s_ctrl_int64(s->ctrl_tuner_rf,
1390                         f->frequency * 625U / 10U);
1391 }
1392
1393 const struct v4l2_ioctl_ops msi3101_ioctl_ops = {
1394         .vidioc_querycap          = msi3101_querycap,
1395
1396         .vidioc_enum_input        = msi3101_enum_input,
1397         .vidioc_g_input           = msi3101_g_input,
1398         .vidioc_s_input           = msi3101_s_input,
1399
1400         .vidioc_reqbufs           = vb2_ioctl_reqbufs,
1401         .vidioc_create_bufs       = vb2_ioctl_create_bufs,
1402         .vidioc_prepare_buf       = vb2_ioctl_prepare_buf,
1403         .vidioc_querybuf          = vb2_ioctl_querybuf,
1404         .vidioc_qbuf              = vb2_ioctl_qbuf,
1405         .vidioc_dqbuf             = vb2_ioctl_dqbuf,
1406
1407         .vidioc_streamon          = vb2_ioctl_streamon,
1408         .vidioc_streamoff         = vb2_ioctl_streamoff,
1409
1410         .vidioc_g_tuner           = vidioc_g_tuner,
1411         .vidioc_s_tuner           = vidioc_s_tuner,
1412         .vidioc_s_frequency       = vidioc_s_frequency,
1413
1414         .vidioc_subscribe_event   = v4l2_ctrl_subscribe_event,
1415         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1416         .vidioc_log_status        = v4l2_ctrl_log_status,
1417 };
1418
1419 static const struct v4l2_file_operations msi3101_fops = {
1420         .owner                    = THIS_MODULE,
1421         .open                     = v4l2_fh_open,
1422         .release                  = vb2_fop_release,
1423         .read                     = vb2_fop_read,
1424         .poll                     = vb2_fop_poll,
1425         .mmap                     = vb2_fop_mmap,
1426         .unlocked_ioctl           = video_ioctl2,
1427 };
1428
1429 static struct video_device msi3101_template = {
1430         .name                     = "Mirics MSi3101 SDR Dongle",
1431         .release                  = video_device_release_empty,
1432         .fops                     = &msi3101_fops,
1433         .ioctl_ops                = &msi3101_ioctl_ops,
1434 };
1435
1436 static int msi3101_s_ctrl(struct v4l2_ctrl *ctrl)
1437 {
1438         struct msi3101_state *s =
1439                         container_of(ctrl->handler, struct msi3101_state,
1440                                         ctrl_handler);
1441         int ret;
1442         dev_dbg(&s->udev->dev,
1443                         "%s: id=%d name=%s val=%d min=%d max=%d step=%d\n",
1444                         __func__, ctrl->id, ctrl->name, ctrl->val,
1445                         ctrl->minimum, ctrl->maximum, ctrl->step);
1446
1447         switch (ctrl->id) {
1448         case MSI3101_CID_SAMPLING_MODE:
1449         case MSI3101_CID_SAMPLING_RATE:
1450         case MSI3101_CID_SAMPLING_RESOLUTION:
1451                 ret = 0;
1452                 break;
1453         case MSI3101_CID_TUNER_RF:
1454         case MSI3101_CID_TUNER_BW:
1455         case MSI3101_CID_TUNER_IF:
1456         case MSI3101_CID_TUNER_GAIN:
1457                 ret = msi3101_set_tuner(s);
1458                 break;
1459         default:
1460                 ret = -EINVAL;
1461         }
1462
1463         return ret;
1464 }
1465
1466 static const struct v4l2_ctrl_ops msi3101_ctrl_ops = {
1467         .s_ctrl = msi3101_s_ctrl,
1468 };
1469
1470 static void msi3101_video_release(struct v4l2_device *v)
1471 {
1472         struct msi3101_state *s =
1473                         container_of(v, struct msi3101_state, v4l2_dev);
1474
1475         v4l2_ctrl_handler_free(&s->ctrl_handler);
1476         v4l2_device_unregister(&s->v4l2_dev);
1477         kfree(s);
1478 }
1479
1480 static int msi3101_probe(struct usb_interface *intf,
1481                 const struct usb_device_id *id)
1482 {
1483         struct usb_device *udev = interface_to_usbdev(intf);
1484         struct msi3101_state *s = NULL;
1485         int ret;
1486         static const char * const ctrl_sampling_mode_qmenu_strings[] = {
1487                 "Quadrature Sampling",
1488                 NULL,
1489         };
1490         static const struct v4l2_ctrl_config ctrl_sampling_mode = {
1491                 .ops    = &msi3101_ctrl_ops,
1492                 .id     = MSI3101_CID_SAMPLING_MODE,
1493                 .type   = V4L2_CTRL_TYPE_MENU,
1494                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1495                 .name   = "Sampling Mode",
1496                 .qmenu  = ctrl_sampling_mode_qmenu_strings,
1497         };
1498         static const struct v4l2_ctrl_config ctrl_sampling_rate = {
1499                 .ops    = &msi3101_ctrl_ops,
1500                 .id     = MSI3101_CID_SAMPLING_RATE,
1501                 .type   = V4L2_CTRL_TYPE_INTEGER64,
1502                 .name   = "Sampling Rate",
1503                 .min    = 500000,
1504                 .max    = 12000000,
1505                 .def    = 2048000,
1506                 .step   = 1,
1507         };
1508         static const struct v4l2_ctrl_config ctrl_sampling_resolution = {
1509                 .ops    = &msi3101_ctrl_ops,
1510                 .id     = MSI3101_CID_SAMPLING_RESOLUTION,
1511                 .type   = V4L2_CTRL_TYPE_INTEGER,
1512                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1513                 .name   = "Sampling Resolution",
1514                 .min    = 10,
1515                 .max    = 10,
1516                 .def    = 10,
1517                 .step   = 1,
1518         };
1519         static const struct v4l2_ctrl_config ctrl_tuner_rf = {
1520                 .ops    = &msi3101_ctrl_ops,
1521                 .id     = MSI3101_CID_TUNER_RF,
1522                 .type   = V4L2_CTRL_TYPE_INTEGER64,
1523                 .name   = "Tuner RF",
1524                 .min    = 40000000,
1525                 .max    = 2000000000,
1526                 .def    = 100000000,
1527                 .step   = 1,
1528         };
1529         static const struct v4l2_ctrl_config ctrl_tuner_bw = {
1530                 .ops    = &msi3101_ctrl_ops,
1531                 .id     = MSI3101_CID_TUNER_BW,
1532                 .type   = V4L2_CTRL_TYPE_INTEGER,
1533                 .name   = "Tuner BW",
1534                 .min    = 200000,
1535                 .max    = 8000000,
1536                 .def    = 600000,
1537                 .step   = 1,
1538         };
1539         static const struct v4l2_ctrl_config ctrl_tuner_if = {
1540                 .ops    = &msi3101_ctrl_ops,
1541                 .id     = MSI3101_CID_TUNER_IF,
1542                 .type   = V4L2_CTRL_TYPE_INTEGER,
1543                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1544                 .name   = "Tuner IF",
1545                 .min    = 0,
1546                 .max    = 2048000,
1547                 .def    = 0,
1548                 .step   = 1,
1549         };
1550         static const struct v4l2_ctrl_config ctrl_tuner_gain = {
1551                 .ops    = &msi3101_ctrl_ops,
1552                 .id     = MSI3101_CID_TUNER_GAIN,
1553                 .type   = V4L2_CTRL_TYPE_INTEGER,
1554                 .name   = "Tuner Gain",
1555                 .min    = 0,
1556                 .max    = 102,
1557                 .def    = 0,
1558                 .step   = 1,
1559         };
1560
1561         s = kzalloc(sizeof(struct msi3101_state), GFP_KERNEL);
1562         if (s == NULL) {
1563                 pr_err("Could not allocate memory for msi3101_state\n");
1564                 return -ENOMEM;
1565         }
1566
1567         mutex_init(&s->v4l2_lock);
1568         mutex_init(&s->vb_queue_lock);
1569         spin_lock_init(&s->queued_bufs_lock);
1570         INIT_LIST_HEAD(&s->queued_bufs);
1571
1572         s->udev = udev;
1573
1574         /* Init videobuf2 queue structure */
1575         s->vb_queue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1576         s->vb_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
1577         s->vb_queue.drv_priv = s;
1578         s->vb_queue.buf_struct_size = sizeof(struct msi3101_frame_buf);
1579         s->vb_queue.ops = &msi3101_vb2_ops;
1580         s->vb_queue.mem_ops = &vb2_vmalloc_memops;
1581         s->vb_queue.timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1582         ret = vb2_queue_init(&s->vb_queue);
1583         if (ret < 0) {
1584                 dev_err(&s->udev->dev, "Could not initialize vb2 queue\n");
1585                 goto err_free_mem;
1586         }
1587
1588         /* Init video_device structure */
1589         s->vdev = msi3101_template;
1590         s->vdev.queue = &s->vb_queue;
1591         s->vdev.queue->lock = &s->vb_queue_lock;
1592         set_bit(V4L2_FL_USE_FH_PRIO, &s->vdev.flags);
1593         video_set_drvdata(&s->vdev, s);
1594
1595         /* Register controls */
1596         v4l2_ctrl_handler_init(&s->ctrl_handler, 7);
1597         v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_mode, NULL);
1598         s->ctrl_sampling_rate = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_rate, NULL);
1599         v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_resolution, NULL);
1600         s->ctrl_tuner_rf = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_rf, NULL);
1601         s->ctrl_tuner_bw = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_bw, NULL);
1602         s->ctrl_tuner_if = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_if, NULL);
1603         s->ctrl_tuner_gain = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_gain, NULL);
1604         if (s->ctrl_handler.error) {
1605                 ret = s->ctrl_handler.error;
1606                 dev_err(&s->udev->dev, "Could not initialize controls\n");
1607                 goto err_free_controls;
1608         }
1609
1610         /* Register the v4l2_device structure */
1611         s->v4l2_dev.release = msi3101_video_release;
1612         ret = v4l2_device_register(&intf->dev, &s->v4l2_dev);
1613         if (ret) {
1614                 dev_err(&s->udev->dev,
1615                                 "Failed to register v4l2-device (%d)\n", ret);
1616                 goto err_free_controls;
1617         }
1618
1619         s->v4l2_dev.ctrl_handler = &s->ctrl_handler;
1620         s->vdev.v4l2_dev = &s->v4l2_dev;
1621         s->vdev.lock = &s->v4l2_lock;
1622
1623         ret = video_register_device(&s->vdev, VFL_TYPE_GRABBER, -1);
1624         if (ret < 0) {
1625                 dev_err(&s->udev->dev,
1626                                 "Failed to register as video device (%d)\n",
1627                                 ret);
1628                 goto err_unregister_v4l2_dev;
1629         }
1630         dev_info(&s->udev->dev, "Registered as %s\n",
1631                         video_device_node_name(&s->vdev));
1632
1633         return 0;
1634
1635 err_unregister_v4l2_dev:
1636         v4l2_device_unregister(&s->v4l2_dev);
1637 err_free_controls:
1638         v4l2_ctrl_handler_free(&s->ctrl_handler);
1639 err_free_mem:
1640         kfree(s);
1641         return ret;
1642 }
1643
1644 /* USB device ID list */
1645 static struct usb_device_id msi3101_id_table[] = {
1646         { USB_DEVICE(0x1df7, 0x2500) },
1647         { USB_DEVICE(0x2040, 0xd300) }, /* Hauppauge WinTV 133559 LF */
1648         { }
1649 };
1650 MODULE_DEVICE_TABLE(usb, msi3101_id_table);
1651
1652 /* USB subsystem interface */
1653 static struct usb_driver msi3101_driver = {
1654         .name                     = KBUILD_MODNAME,
1655         .probe                    = msi3101_probe,
1656         .disconnect               = msi3101_disconnect,
1657         .id_table                 = msi3101_id_table,
1658 };
1659
1660 module_usb_driver(msi3101_driver);
1661
1662 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1663 MODULE_DESCRIPTION("Mirics MSi3101 SDR Dongle");
1664 MODULE_LICENSE("GPL");