b6a8939d1236a671f666dac89c74b1f56654e8bd
[linux-2.6-block.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 };
413
414 /* Private functions */
415 static struct msi3101_frame_buf *msi3101_get_next_fill_buf(
416                 struct msi3101_state *s)
417 {
418         unsigned long flags = 0;
419         struct msi3101_frame_buf *buf = NULL;
420
421         spin_lock_irqsave(&s->queued_bufs_lock, flags);
422         if (list_empty(&s->queued_bufs))
423                 goto leave;
424
425         buf = list_entry(s->queued_bufs.next, struct msi3101_frame_buf, list);
426         list_del(&buf->list);
427 leave:
428         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
429         return buf;
430 }
431
432 /*
433  * Converts signed 10-bit integer into 32-bit IEEE floating point
434  * representation.
435  * Will be exact from 0 to 2^24.  Above that, we round towards zero
436  * as the fractional bits will not fit in a float.  (It would be better to
437  * round towards even as the fpu does, but that is slower.)
438  */
439 #define I2F_FRAC_BITS  23
440 #define I2F_MASK ((1 << I2F_FRAC_BITS) - 1)
441 static uint32_t msi3101_int2float(uint32_t x)
442 {
443         uint32_t msb, exponent, fraction, sign;
444
445         /* Zero is special */
446         if (!x)
447                 return 0;
448
449         /* Negative / positive value */
450         if (x & 0x200) {
451                 x = -x;
452                 x &= 0x3ff;
453                 sign = 1 << 31;
454         } else {
455                 sign = 0 << 31;
456         }
457
458         /* Get location of the most significant bit */
459         msb = __fls(x);
460
461         /*
462          * Use a rotate instead of a shift because that works both leftwards
463          * and rightwards due to the mod(32) behaviour.  This means we don't
464          * need to check to see if we are above 2^24 or not.
465          */
466         fraction = ror32(x, (msb - I2F_FRAC_BITS) & 0x1f) & I2F_MASK;
467         exponent = (127 + msb) << I2F_FRAC_BITS;
468
469         return (fraction + exponent) | sign;
470 }
471
472 #define MSI3101_CONVERT_IN_URB_HANDLER
473 #define MSI3101_EXTENSIVE_DEBUG
474 static int msi3101_convert_stream(struct msi3101_state *s, u32 *dst,
475                 const u8 *src, unsigned int src_len)
476 {
477         int i, j, k, l, i_max, dst_len = 0;
478         u16 sample[4];
479 #ifdef MSI3101_EXTENSIVE_DEBUG
480         u32 sample_num[3];
481 #endif
482         /* There could be 1-3 1024 bytes URB frames */
483         i_max = src_len / 1024;
484         for (i = 0; i < i_max; i++) {
485 #ifdef MSI3101_EXTENSIVE_DEBUG
486                 sample_num[i] = src[3] << 24 | src[2] << 16 | src[1] << 8 | src[0] << 0;
487                 if (i == 0 && s->next_sample != sample_num[0]) {
488                         dev_dbg(&s->udev->dev,
489                                         "%d samples lost, %d %08x:%08x\n",
490                                         sample_num[0] - s->next_sample,
491                                         src_len, s->next_sample, sample_num[0]);
492                 }
493 #endif
494                 src += 16;
495                 for (j = 0; j < 6; j++) {
496                         for (k = 0; k < 16; k++) {
497                                 for (l = 0; l < 10; l += 5) {
498                                         sample[0] = (src[l + 0] & 0xff) >> 0 | (src[l + 1] & 0x03) << 8;
499                                         sample[1] = (src[l + 1] & 0xfc) >> 2 | (src[l + 2] & 0x0f) << 6;
500                                         sample[2] = (src[l + 2] & 0xf0) >> 4 | (src[l + 3] & 0x3f) << 4;
501                                         sample[3] = (src[l + 3] & 0xc0) >> 6 | (src[l + 4] & 0xff) << 2;
502
503                                         *dst++ = msi3101_int2float(sample[0]);
504                                         *dst++ = msi3101_int2float(sample[1]);
505                                         *dst++ = msi3101_int2float(sample[2]);
506                                         *dst++ = msi3101_int2float(sample[3]);
507
508                                         /* 4 x 32bit float samples */
509                                         dst_len += 4 * 4;
510                                 }
511                                 src += 10;
512                         }
513 #ifdef MSI3101_EXTENSIVE_DEBUG
514                         if (memcmp(src, "\xff\xff\xff\xff", 4) && memcmp(src, "\x00\x00\x00\x00", 4))
515                                 dev_dbg_ratelimited(&s->udev->dev,
516                                                 "padding %*ph\n", 4, src);
517 #endif
518                         src += 4;
519                 }
520                 src += 24;
521         }
522
523 #ifdef MSI3101_EXTENSIVE_DEBUG
524         /* calculate samping rate and output it in 10 seconds intervals */
525         if ((s->jiffies + msecs_to_jiffies(10000)) <= jiffies) {
526                 unsigned long jiffies_now = jiffies;
527                 unsigned long msecs = jiffies_to_msecs(jiffies_now) - jiffies_to_msecs(s->jiffies);
528                 unsigned int samples = sample_num[i_max - 1] - s->sample;
529                 s->jiffies = jiffies_now;
530                 s->sample = sample_num[i_max - 1];
531                 dev_dbg(&s->udev->dev,
532                                 "slen=%d samples=%u msecs=%lu sampling rate=%lu\n",
533                                 src_len, samples, msecs,
534                                 samples * 1000UL / msecs);
535         }
536
537         /* next sample (sample = sample + i * 384) */
538         s->next_sample = sample_num[i_max - 1] + 384;
539 #endif
540         return dst_len;
541 }
542
543 /*
544  * This gets called for the Isochronous pipe (stream). This is done in interrupt
545  * time, so it has to be fast, not crash, and not stall. Neat.
546  */
547 static void msi3101_isoc_handler(struct urb *urb)
548 {
549         struct msi3101_state *s = (struct msi3101_state *)urb->context;
550         int i, flen, fstatus;
551         unsigned char *iso_buf = NULL;
552         struct msi3101_frame_buf *fbuf;
553
554         if (urb->status == -ENOENT || urb->status == -ECONNRESET ||
555                         urb->status == -ESHUTDOWN) {
556                 dev_dbg(&s->udev->dev, "URB (%p) unlinked %ssynchronuously\n",
557                                 urb, urb->status == -ENOENT ? "" : "a");
558                 return;
559         }
560
561         if (urb->status != 0) {
562                 dev_dbg(&s->udev->dev,
563                                 "msi3101_isoc_handler() called with status %d\n",
564                                 urb->status);
565                 /* Give up after a number of contiguous errors */
566                 if (++s->isoc_errors > MAX_ISOC_ERRORS)
567                         dev_dbg(&s->udev->dev,
568                                         "Too many ISOC errors, bailing out\n");
569                 goto handler_end;
570         } else {
571                 /* Reset ISOC error counter. We did get here, after all. */
572                 s->isoc_errors = 0;
573         }
574
575         /* Compact data */
576         for (i = 0; i < urb->number_of_packets; i++) {
577                 /* Check frame error */
578                 fstatus = urb->iso_frame_desc[i].status;
579                 if (fstatus) {
580                         dev_dbg(&s->udev->dev,
581                                         "frame=%d/%d has error %d skipping\n",
582                                         i, urb->number_of_packets, fstatus);
583                         goto skip;
584                 }
585
586                 /* Check if that frame contains data */
587                 flen = urb->iso_frame_desc[i].actual_length;
588                 if (flen == 0)
589                         goto skip;
590
591                 iso_buf = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
592
593                 /* Get free framebuffer */
594                 fbuf = msi3101_get_next_fill_buf(s);
595                 if (fbuf == NULL) {
596                         s->vb_full++;
597                         dev_dbg_ratelimited(&s->udev->dev,
598                                         "videobuf is full, %d packets dropped\n",
599                                         s->vb_full);
600                         goto skip;
601                 }
602
603                 /* fill framebuffer */
604 #ifdef MSI3101_CONVERT_IN_URB_HANDLER
605                 vb2_set_plane_payload(&fbuf->vb, 0,
606                                 msi3101_convert_stream(s,
607                                 vb2_plane_vaddr(&fbuf->vb, 0), iso_buf, flen));
608 #else
609                 memcpy(fbuf->data, iso_buf, flen);
610                 fbuf->filled = flen;
611 #endif
612                 vb2_buffer_done(&fbuf->vb, VB2_BUF_STATE_DONE);
613 skip:
614                 ;
615         }
616
617 handler_end:
618         i = usb_submit_urb(urb, GFP_ATOMIC);
619         if (i != 0)
620                 dev_dbg(&s->udev->dev,
621                                 "Error (%d) re-submitting urb in msi3101_isoc_handler\n",
622                                 i);
623 }
624
625 static void msi3101_iso_stop(struct msi3101_state *s)
626 {
627         int i;
628         dev_dbg(&s->udev->dev, "%s:\n", __func__);
629
630         /* Unlinking ISOC buffers one by one */
631         for (i = 0; i < MAX_ISO_BUFS; i++) {
632                 if (s->urbs[i]) {
633                         dev_dbg(&s->udev->dev, "Unlinking URB %p\n",
634                                         s->urbs[i]);
635                         usb_kill_urb(s->urbs[i]);
636                 }
637         }
638 }
639
640 static void msi3101_iso_free(struct msi3101_state *s)
641 {
642         int i;
643         dev_dbg(&s->udev->dev, "%s:\n", __func__);
644
645         /* Freeing ISOC buffers one by one */
646         for (i = 0; i < MAX_ISO_BUFS; i++) {
647                 if (s->urbs[i]) {
648                         dev_dbg(&s->udev->dev, "Freeing URB\n");
649                         if (s->urbs[i]->transfer_buffer) {
650                                 usb_free_coherent(s->udev,
651                                         s->urbs[i]->transfer_buffer_length,
652                                         s->urbs[i]->transfer_buffer,
653                                         s->urbs[i]->transfer_dma);
654                         }
655                         usb_free_urb(s->urbs[i]);
656                         s->urbs[i] = NULL;
657                 }
658         }
659 }
660
661 /* Both v4l2_lock and vb_queue_lock should be locked when calling this */
662 static void msi3101_isoc_cleanup(struct msi3101_state *s)
663 {
664         dev_dbg(&s->udev->dev, "%s:\n", __func__);
665
666         msi3101_iso_stop(s);
667         msi3101_iso_free(s);
668 }
669
670 /* Both v4l2_lock and vb_queue_lock should be locked when calling this */
671 static int msi3101_isoc_init(struct msi3101_state *s)
672 {
673         struct usb_device *udev;
674         struct urb *urb;
675         int i, j, ret;
676         dev_dbg(&s->udev->dev, "%s:\n", __func__);
677
678         s->isoc_errors = 0;
679         udev = s->udev;
680
681         ret = usb_set_interface(s->udev, 0, 1);
682         if (ret < 0)
683                 return ret;
684
685         /* Allocate and init Isochronuous urbs */
686         for (i = 0; i < MAX_ISO_BUFS; i++) {
687                 urb = usb_alloc_urb(ISO_FRAMES_PER_DESC, GFP_KERNEL);
688                 if (urb == NULL) {
689                         dev_err(&s->udev->dev,
690                                         "Failed to allocate urb %d\n", i);
691                         msi3101_isoc_cleanup(s);
692                         return -ENOMEM;
693                 }
694                 s->urbs[i] = urb;
695                 dev_dbg(&s->udev->dev, "Allocated URB at 0x%p\n", urb);
696
697                 urb->interval = 1;
698                 urb->dev = udev;
699                 urb->pipe = usb_rcvisocpipe(udev, 0x81);
700                 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
701                 urb->transfer_buffer = usb_alloc_coherent(udev, ISO_BUFFER_SIZE,
702                                 GFP_KERNEL, &urb->transfer_dma);
703                 if (urb->transfer_buffer == NULL) {
704                         dev_err(&s->udev->dev,
705                                         "Failed to allocate urb buffer %d\n",
706                                         i);
707                         msi3101_isoc_cleanup(s);
708                         return -ENOMEM;
709                 }
710                 urb->transfer_buffer_length = ISO_BUFFER_SIZE;
711                 urb->complete = msi3101_isoc_handler;
712                 urb->context = s;
713                 urb->start_frame = 0;
714                 urb->number_of_packets = ISO_FRAMES_PER_DESC;
715                 for (j = 0; j < ISO_FRAMES_PER_DESC; j++) {
716                         urb->iso_frame_desc[j].offset = j * ISO_MAX_FRAME_SIZE;
717                         urb->iso_frame_desc[j].length = ISO_MAX_FRAME_SIZE;
718                 }
719         }
720
721         /* link */
722         for (i = 0; i < MAX_ISO_BUFS; i++) {
723                 ret = usb_submit_urb(s->urbs[i], GFP_KERNEL);
724                 if (ret) {
725                         dev_err(&s->udev->dev,
726                                         "isoc_init() submit_urb %d failed with error %d\n",
727                                         i, ret);
728                         msi3101_isoc_cleanup(s);
729                         return ret;
730                 }
731                 dev_dbg(&s->udev->dev, "URB 0x%p submitted.\n", s->urbs[i]);
732         }
733
734         /* All is done... */
735         return 0;
736 }
737
738 /* Must be called with vb_queue_lock hold */
739 static void msi3101_cleanup_queued_bufs(struct msi3101_state *s)
740 {
741         unsigned long flags = 0;
742         dev_dbg(&s->udev->dev, "%s:\n", __func__);
743
744         spin_lock_irqsave(&s->queued_bufs_lock, flags);
745         while (!list_empty(&s->queued_bufs)) {
746                 struct msi3101_frame_buf *buf;
747
748                 buf = list_entry(s->queued_bufs.next, struct msi3101_frame_buf,
749                                  list);
750                 list_del(&buf->list);
751                 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
752         }
753         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
754 }
755
756 /* The user yanked out the cable... */
757 static void msi3101_disconnect(struct usb_interface *intf)
758 {
759         struct v4l2_device *v = usb_get_intfdata(intf);
760         struct msi3101_state *s =
761                         container_of(v, struct msi3101_state, v4l2_dev);
762         dev_dbg(&s->udev->dev, "%s:\n", __func__);
763
764         mutex_lock(&s->vb_queue_lock);
765         mutex_lock(&s->v4l2_lock);
766         /* No need to keep the urbs around after disconnection */
767         s->udev = NULL;
768
769         v4l2_device_disconnect(&s->v4l2_dev);
770         video_unregister_device(&s->vdev);
771         mutex_unlock(&s->v4l2_lock);
772         mutex_unlock(&s->vb_queue_lock);
773
774         v4l2_device_put(&s->v4l2_dev);
775 }
776
777 static int msi3101_querycap(struct file *file, void *fh,
778                 struct v4l2_capability *cap)
779 {
780         struct msi3101_state *s = video_drvdata(file);
781         dev_dbg(&s->udev->dev, "%s:\n", __func__);
782
783         strlcpy(cap->driver, KBUILD_MODNAME, sizeof(cap->driver));
784         strlcpy(cap->card, s->vdev.name, sizeof(cap->card));
785         usb_make_path(s->udev, cap->bus_info, sizeof(cap->bus_info));
786         cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
787                         V4L2_CAP_READWRITE;
788         cap->device_caps = V4L2_CAP_TUNER;
789         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
790         return 0;
791 }
792
793
794 /* Videobuf2 operations */
795 static int msi3101_queue_setup(struct vb2_queue *vq,
796                 const struct v4l2_format *fmt, unsigned int *nbuffers,
797                 unsigned int *nplanes, unsigned int sizes[], void *alloc_ctxs[])
798 {
799         struct msi3101_state *s = vb2_get_drv_priv(vq);
800         dev_dbg(&s->udev->dev, "%s: *nbuffers=%d\n", __func__, *nbuffers);
801
802         /* Absolute min and max number of buffers available for mmap() */
803         *nbuffers = 32;
804         *nplanes = 1;
805         sizes[0] = PAGE_ALIGN(3 * 3072); /* 3 * 768 * 4 */
806         dev_dbg(&s->udev->dev, "%s: nbuffers=%d sizes[0]=%d\n",
807                         __func__, *nbuffers, sizes[0]);
808         return 0;
809 }
810
811 static int msi3101_buf_init(struct vb2_buffer *vb)
812 {
813         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
814         struct msi3101_frame_buf *fbuf =
815                         container_of(vb, struct msi3101_frame_buf, vb);
816         dev_dbg(&s->udev->dev, "%s:\n", __func__);
817
818         fbuf->data = vzalloc(ISO_MAX_FRAME_SIZE);
819         if (fbuf->data == NULL)
820                 return -ENOMEM;
821
822         return 0;
823 }
824
825 static int msi3101_buf_prepare(struct vb2_buffer *vb)
826 {
827         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
828
829         /* Don't allow queing new buffers after device disconnection */
830         if (!s->udev)
831                 return -ENODEV;
832
833         return 0;
834 }
835
836 /*
837  * +===========================================================================
838  * |   00-1024 | USB packet
839  * +===========================================================================
840  * |   00-  03 | packet address
841  * +---------------------------------------------------------------------------
842  * |   04-  15 | garbage
843  * +---------------------------------------------------------------------------
844  * |   16- 175 | samples
845  * +---------------------------------------------------------------------------
846  * |  176- 179 | padding
847  * +---------------------------------------------------------------------------
848  * |  180- 339 | samples
849  * +---------------------------------------------------------------------------
850  * |  340- 343 | padding
851  * +---------------------------------------------------------------------------
852  * |  344- 503 | samples
853  * +---------------------------------------------------------------------------
854  * |  504- 507 | padding
855  * +---------------------------------------------------------------------------
856  * |  508- 667 | samples
857  * +---------------------------------------------------------------------------
858  * |  668- 671 | padding
859  * +---------------------------------------------------------------------------
860  * |  672- 831 | samples
861  * +---------------------------------------------------------------------------
862  * |  832- 835 | padding
863  * +---------------------------------------------------------------------------
864  * |  836- 995 | samples
865  * +---------------------------------------------------------------------------
866  * |  996- 999 | padding
867  * +---------------------------------------------------------------------------
868  * | 1000-1024 | garbage
869  * +---------------------------------------------------------------------------
870  *
871  * bytes 4 - 7 could have some meaning?
872  * padding is "00 00 00 00" or "ff ff ff ff"
873  * 6 * 16 * 2 * 4 = 768 samples. 768 * 4 = 3072 bytes
874  */
875 #ifdef MSI3101_CONVERT_IN_URB_HANDLER
876 static int msi3101_buf_finish(struct vb2_buffer *vb)
877 {
878         return 0;
879 }
880 #else
881 static int msi3101_buf_finish(struct vb2_buffer *vb)
882 {
883         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
884         struct msi3101_frame_buf *fbuf =
885                         container_of(vb, struct msi3101_frame_buf, vb);
886         int ret;
887         u32 *dst = vb2_plane_vaddr(&fbuf->vb, 0);
888         ret = msi3101_convert_stream(s, dst, fbuf->data, fbuf->filled);
889         vb2_set_plane_payload(&fbuf->vb, 0, ret);
890         return 0;
891 }
892 #endif
893
894 static void msi3101_buf_cleanup(struct vb2_buffer *vb)
895 {
896         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
897         struct msi3101_frame_buf *buf =
898                         container_of(vb, struct msi3101_frame_buf, vb);
899         dev_dbg(&s->udev->dev, "%s:\n", __func__);
900
901         vfree(buf->data);
902 }
903 static void msi3101_buf_queue(struct vb2_buffer *vb)
904 {
905         struct msi3101_state *s = vb2_get_drv_priv(vb->vb2_queue);
906         struct msi3101_frame_buf *buf =
907                         container_of(vb, struct msi3101_frame_buf, vb);
908         unsigned long flags = 0;
909
910         /* Check the device has not disconnected between prep and queuing */
911         if (!s->udev) {
912                 vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
913                 return;
914         }
915
916         spin_lock_irqsave(&s->queued_bufs_lock, flags);
917         list_add_tail(&buf->list, &s->queued_bufs);
918         spin_unlock_irqrestore(&s->queued_bufs_lock, flags);
919 }
920
921 #define CMD_WREG               0x41
922 #define CMD_START_STREAMING    0x43
923 #define CMD_STOP_STREAMING     0x45
924 #define CMD_READ_UNKNOW        0x48
925
926 #define msi3101_dbg_usb_control_msg(udev, r, t, v, _i, b, l) { \
927         char *direction; \
928         if (t == (USB_TYPE_VENDOR | USB_DIR_OUT)) \
929                 direction = ">>>"; \
930         else \
931                 direction = "<<<"; \
932         dev_dbg(&udev->dev, "%s: %02x %02x %02x %02x %02x %02x %02x %02x " \
933                         "%s %*ph\n",  __func__, t, r, v & 0xff, v >> 8, \
934                         _i & 0xff, _i >> 8, l & 0xff, l >> 8, direction, l, b); \
935 }
936
937 static int msi3101_ctrl_msg(struct msi3101_state *s, u8 cmd, u32 data)
938 {
939         int ret;
940         u8 request = cmd;
941         u8 requesttype = USB_DIR_OUT | USB_TYPE_VENDOR;
942         u16 value = (data >> 0) & 0xffff;
943         u16 index = (data >> 16) & 0xffff;
944
945         msi3101_dbg_usb_control_msg(s->udev,
946                         request, requesttype, value, index, NULL, 0);
947
948         ret = usb_control_msg(s->udev, usb_rcvctrlpipe(s->udev, 0),
949                         request, requesttype, value, index, NULL, 0, 2000);
950
951         if (ret)
952                 dev_err(&s->udev->dev, "%s: failed %d, cmd %02x, data %04x\n",
953                                 __func__, ret, cmd, data);
954
955         return ret;
956 };
957
958 static int msi3101_tuner_write(struct msi3101_state *s, u32 data)
959 {
960         return msi3101_ctrl_msg(s, CMD_WREG, data << 8 | 0x09);
961 };
962
963 #define F_REF 24000000
964 #define DIV_R_IN 2
965 static int msi3101_set_usb_adc(struct msi3101_state *s)
966 {
967         int ret, div_n, div_m, div_r_out, f_sr, f_vco;
968         u32 reg4, reg3;
969         /*
970          * Synthesizer config is just a educated guess...
971          *
972          * [7:0]   0x03, register address
973          * [8]     1, always
974          * [9]     ?
975          * [12:10] output divider
976          * [13]    0 ?
977          * [14]    0 ?
978          * [15]    increase sr by max fract
979          * [16:19] N
980          * [23:20] ?
981          * [24:31] 0x01
982          *
983          * output divider
984          * val   div
985          *   0     - (invalid)
986          *   1     4
987          *   2     6
988          *   3     8
989          *   4    10
990          *   5    12
991          *   6    14
992          *   7    16
993          *
994          * VCO 202000000 - 720000000++
995          */
996
997         f_sr = s->ctrl_sampling_rate->val64;
998         reg3 = 0x01c00303;
999
1000         for (div_r_out = 4; div_r_out < 16; div_r_out += 2) {
1001                 f_vco = f_sr * div_r_out * 12;
1002                 dev_dbg(&s->udev->dev, "%s: div_r_out=%d f_vco=%d\n",
1003                                 __func__, div_r_out, f_vco);
1004                 if (f_vco >= 202000000)
1005                         break;
1006         }
1007
1008         div_n = f_vco / (F_REF * DIV_R_IN);
1009         div_m = f_vco % (F_REF * DIV_R_IN);
1010
1011         reg3 |= div_n << 16;
1012         reg3 |= (div_r_out / 2 - 1) << 10;
1013         reg4 = 0x0ffffful * div_m / F_REF;
1014
1015         if (reg4 >= 0x0ffffful) {
1016                 dev_dbg(&s->udev->dev,
1017                                 "%s: extending fractional part value %08x\n",
1018                                 __func__, reg4);
1019                 reg4 -= 0x0ffffful;
1020                 reg3 |= 1 << 15;
1021         }
1022
1023         reg4 = (reg4 << 8) | 0x04;
1024
1025         dev_dbg(&s->udev->dev,
1026                         "%s: f_sr=%d f_vco=%d div_n=%d div_m=%d div_r_out=%d reg4=%08x\n",
1027                         __func__, f_sr, f_vco, div_n, div_m, div_r_out, reg4);
1028
1029         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00608008);
1030         if (ret)
1031                 goto err;
1032
1033         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00000c05);
1034         if (ret)
1035                 goto err;
1036
1037         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00020000);
1038         if (ret)
1039                 goto err;
1040
1041         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00480102);
1042         if (ret)
1043                 goto err;
1044
1045         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x00f38008);
1046         if (ret)
1047                 goto err;
1048
1049         ret = msi3101_ctrl_msg(s, CMD_WREG, 0x0000a507);
1050         if (ret)
1051                 goto err;
1052
1053         ret = msi3101_ctrl_msg(s, CMD_WREG, reg4);
1054         if (ret)
1055                 goto err;
1056
1057         ret = msi3101_ctrl_msg(s, CMD_WREG, reg3);
1058         if (ret)
1059                 goto err;
1060 err:
1061         return ret;
1062 };
1063
1064 static int msi3101_set_tuner(struct msi3101_state *s)
1065 {
1066         int i, ret, len;
1067         u32 reg, synthstep, thresh, n, frac;
1068         u64 fsynth;
1069         u8 mode, lo_div;
1070         const struct msi3101_gain *gain_lut;
1071         static const struct {
1072                 u32 rf;
1073                 u8 mode;
1074                 u8 lo_div;
1075         } band_lut[] = {
1076                 { 30000000, 0x01, 16}, /* AM_MODE1 */
1077                 {108000000, 0x02, 32}, /* VHF_MODE */
1078                 {240000000, 0x04, 16}, /* B3_MODE */
1079                 {960000000, 0x08,  4}, /* B45_MODE */
1080                 {167500000, 0x10,  2}, /* BL_MODE */
1081         };
1082         static const struct {
1083                 u32 freq;
1084                 u8 val;
1085         } if_freq_lut[] = {
1086                 {      0, 0x03}, /* Zero IF */
1087                 { 450000, 0x02}, /* 450 kHz IF */
1088                 {1620000, 0x01}, /* 1.62 MHz IF */
1089                 {2048000, 0x00}, /* 2.048 MHz IF */
1090         };
1091         static const struct {
1092                 u32 freq;
1093                 u8 val;
1094         } bandwidth_lut[] = {
1095                 { 200000, 0x00}, /* 200 kHz */
1096                 { 300000, 0x01}, /* 300 kHz */
1097                 { 600000, 0x02}, /* 600 kHz */
1098                 {1536000, 0x03}, /* 1.536 MHz */
1099                 {5000000, 0x04}, /* 5 MHz */
1100                 {6000000, 0x05}, /* 6 MHz */
1101                 {7000000, 0x06}, /* 7 MHz */
1102                 {8000000, 0x07}, /* 8 MHz */
1103         };
1104
1105         unsigned int rf_freq = s->ctrl_tuner_rf->val64;
1106
1107         /*
1108          * bandwidth (Hz)
1109          * 200000, 300000, 600000, 1536000, 5000000, 6000000, 7000000, 8000000
1110          */
1111         int bandwidth = s->ctrl_tuner_bw->val;
1112
1113         /*
1114          * intermediate frequency (Hz)
1115          * 0, 450000, 1620000, 2048000
1116          */
1117         int if_freq = s->ctrl_tuner_if->val;
1118
1119         /*
1120          * gain reduction (dB)
1121          * 0 - 102 below 420 MHz
1122          * 0 - 85 above 420 MHz
1123          */
1124         int gain = s->ctrl_tuner_gain->val;
1125
1126         dev_dbg(&s->udev->dev,
1127                         "%s: rf_freq=%d bandwidth=%d if_freq=%d gain=%d\n",
1128                         __func__, rf_freq, bandwidth, if_freq, gain);
1129
1130         ret = -EINVAL;
1131
1132         for (i = 0; i < ARRAY_SIZE(band_lut); i++) {
1133                 if (rf_freq <= band_lut[i].rf) {
1134                         mode = band_lut[i].mode;
1135                         lo_div = band_lut[i].lo_div;
1136                         break;
1137                 }
1138         }
1139
1140         if (i == ARRAY_SIZE(band_lut))
1141                 goto err;
1142
1143         for (i = 0; i < ARRAY_SIZE(if_freq_lut); i++) {
1144                 if (if_freq == if_freq_lut[i].freq) {
1145                         if_freq = if_freq_lut[i].val;
1146                         break;
1147                 }
1148         }
1149
1150         if (i == ARRAY_SIZE(if_freq_lut))
1151                 goto err;
1152
1153         for (i = 0; i < ARRAY_SIZE(bandwidth_lut); i++) {
1154                 if (bandwidth == bandwidth_lut[i].freq) {
1155                         bandwidth = bandwidth_lut[i].val;
1156                         break;
1157                 }
1158         }
1159
1160         if (i == ARRAY_SIZE(bandwidth_lut))
1161                 goto err;
1162
1163         #define FSTEP 10000
1164         #define FREF1 24000000
1165         fsynth = (rf_freq + 0) * lo_div;
1166         synthstep = FSTEP * lo_div;
1167         thresh = (FREF1 * 4) / synthstep;
1168         n = fsynth / (FREF1 * 4);
1169         frac = thresh * (fsynth % (FREF1 * 4)) / (FREF1 * 4);
1170
1171         if (thresh > 4095 || n > 63 || frac > 4095) {
1172                 dev_dbg(&s->udev->dev,
1173                                 "%s: synth setup failed rf=%d thresh=%d n=%d frac=%d\n",
1174                                 __func__, rf_freq, thresh, n, frac);
1175                 ret = -EINVAL;
1176                 goto err;
1177         }
1178
1179         ret = msi3101_tuner_write(s, 0x00000e);
1180         ret = msi3101_tuner_write(s, 0x000003);
1181
1182         reg = 0 << 0;
1183         reg |= mode << 4;
1184         reg |= 1 << 10;
1185         reg |= if_freq << 12;
1186         reg |= bandwidth << 14;
1187         reg |= 0x02 << 17;
1188         reg |= 0x00 << 20;
1189         ret = msi3101_tuner_write(s, reg);
1190         if (ret)
1191                 goto err;
1192
1193         reg = 5 << 0;
1194         reg |= thresh << 4;
1195         reg |= 1 << 19;
1196         reg |= 1 << 21;
1197         ret = msi3101_tuner_write(s, reg);
1198         if (ret)
1199                 goto err;
1200
1201         reg = 2 << 0;
1202         reg |= frac << 4;
1203         reg |= n << 16;
1204         ret = msi3101_tuner_write(s, reg);
1205         if (ret)
1206                 goto err;
1207
1208         if (rf_freq < 120000000) {
1209                 gain_lut = msi3101_gain_lut_120;
1210                 len = ARRAY_SIZE(msi3101_gain_lut_120);
1211         } else if (rf_freq < 245000000) {
1212                 gain_lut = msi3101_gain_lut_245;
1213                 len = ARRAY_SIZE(msi3101_gain_lut_120);
1214         } else {
1215                 gain_lut = msi3101_gain_lut_1000;
1216                 len = ARRAY_SIZE(msi3101_gain_lut_1000);
1217         }
1218
1219         for (i = 0; i < len; i++) {
1220                 if (gain_lut[i].tot >= gain)
1221                         break;
1222         }
1223
1224         if (i == len)
1225                 goto err;
1226
1227         dev_dbg(&s->udev->dev,
1228                         "%s: gain tot=%d baseband=%d lna=%d mixer=%d\n",
1229                         __func__, gain_lut[i].tot, gain_lut[i].baseband,
1230                         gain_lut[i].lna, gain_lut[i].mixer);
1231
1232         reg = 1 << 0;
1233         reg |= gain_lut[i].baseband << 4;
1234         reg |= 0 << 10;
1235         reg |= gain_lut[i].mixer << 12;
1236         reg |= gain_lut[i].lna << 13;
1237         reg |= 4 << 14;
1238         reg |= 0 << 17;
1239         ret = msi3101_tuner_write(s, reg);
1240         if (ret)
1241                 goto err;
1242
1243         reg = 6 << 0;
1244         reg |= 63 << 4;
1245         reg |= 4095 << 10;
1246         ret = msi3101_tuner_write(s, reg);
1247         if (ret)
1248                 goto err;
1249
1250         return 0;
1251 err:
1252         dev_dbg(&s->udev->dev, "%s: failed %d\n", __func__, ret);
1253         return ret;
1254 };
1255
1256 static int msi3101_start_streaming(struct vb2_queue *vq, unsigned int count)
1257 {
1258         struct msi3101_state *s = vb2_get_drv_priv(vq);
1259         int ret;
1260         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1261
1262         if (!s->udev)
1263                 return -ENODEV;
1264
1265         if (mutex_lock_interruptible(&s->v4l2_lock))
1266                 return -ERESTARTSYS;
1267
1268         ret = msi3101_set_usb_adc(s);
1269
1270         ret = msi3101_isoc_init(s);
1271         if (ret)
1272                 msi3101_cleanup_queued_bufs(s);
1273
1274         ret = msi3101_ctrl_msg(s, CMD_START_STREAMING, 0);
1275
1276         mutex_unlock(&s->v4l2_lock);
1277
1278         return ret;
1279 }
1280
1281 static int msi3101_stop_streaming(struct vb2_queue *vq)
1282 {
1283         struct msi3101_state *s = vb2_get_drv_priv(vq);
1284         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1285
1286         if (mutex_lock_interruptible(&s->v4l2_lock))
1287                 return -ERESTARTSYS;
1288
1289         msi3101_ctrl_msg(s, CMD_STOP_STREAMING, 0);
1290
1291         if (s->udev)
1292                 msi3101_isoc_cleanup(s);
1293
1294         msi3101_cleanup_queued_bufs(s);
1295         mutex_unlock(&s->v4l2_lock);
1296
1297         return 0;
1298 }
1299
1300 static struct vb2_ops msi3101_vb2_ops = {
1301         .queue_setup            = msi3101_queue_setup,
1302         .buf_init               = msi3101_buf_init,
1303         .buf_prepare            = msi3101_buf_prepare,
1304         .buf_finish             = msi3101_buf_finish,
1305         .buf_cleanup            = msi3101_buf_cleanup,
1306         .buf_queue              = msi3101_buf_queue,
1307         .start_streaming        = msi3101_start_streaming,
1308         .stop_streaming         = msi3101_stop_streaming,
1309         .wait_prepare           = vb2_ops_wait_prepare,
1310         .wait_finish            = vb2_ops_wait_finish,
1311 };
1312
1313 static int msi3101_enum_input(struct file *file, void *fh, struct v4l2_input *i)
1314 {
1315         if (i->index != 0)
1316                 return -EINVAL;
1317
1318         strlcpy(i->name, "SDR data", sizeof(i->name));
1319         i->type = V4L2_INPUT_TYPE_CAMERA;
1320
1321         return 0;
1322 }
1323
1324 static int msi3101_g_input(struct file *file, void *fh, unsigned int *i)
1325 {
1326         *i = 0;
1327
1328         return 0;
1329 }
1330
1331 static int msi3101_s_input(struct file *file, void *fh, unsigned int i)
1332 {
1333         return i ? -EINVAL : 0;
1334 }
1335
1336 static int vidioc_s_tuner(struct file *file, void *priv,
1337                 const struct v4l2_tuner *v)
1338 {
1339         struct msi3101_state *s = video_drvdata(file);
1340         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1341
1342         return 0;
1343 }
1344
1345 static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *v)
1346 {
1347         struct msi3101_state *s = video_drvdata(file);
1348         dev_dbg(&s->udev->dev, "%s:\n", __func__);
1349
1350         strcpy(v->name, "SDR RX");
1351         v->capability = V4L2_TUNER_CAP_LOW;
1352
1353         return 0;
1354 }
1355
1356 static int vidioc_s_frequency(struct file *file, void *priv,
1357                 const struct v4l2_frequency *f)
1358 {
1359         struct msi3101_state *s = video_drvdata(file);
1360         dev_dbg(&s->udev->dev, "%s: frequency=%u Hz (%d)\n",
1361                         __func__, f->frequency * 625U / 10U, f->frequency);
1362
1363         return v4l2_ctrl_s_ctrl_int64(s->ctrl_tuner_rf,
1364                         f->frequency * 625U / 10U);
1365 }
1366
1367 const struct v4l2_ioctl_ops msi3101_ioctl_ops = {
1368         .vidioc_querycap          = msi3101_querycap,
1369
1370         .vidioc_enum_input        = msi3101_enum_input,
1371         .vidioc_g_input           = msi3101_g_input,
1372         .vidioc_s_input           = msi3101_s_input,
1373
1374         .vidioc_reqbufs           = vb2_ioctl_reqbufs,
1375         .vidioc_create_bufs       = vb2_ioctl_create_bufs,
1376         .vidioc_prepare_buf       = vb2_ioctl_prepare_buf,
1377         .vidioc_querybuf          = vb2_ioctl_querybuf,
1378         .vidioc_qbuf              = vb2_ioctl_qbuf,
1379         .vidioc_dqbuf             = vb2_ioctl_dqbuf,
1380
1381         .vidioc_streamon          = vb2_ioctl_streamon,
1382         .vidioc_streamoff         = vb2_ioctl_streamoff,
1383
1384         .vidioc_g_tuner           = vidioc_g_tuner,
1385         .vidioc_s_tuner           = vidioc_s_tuner,
1386         .vidioc_s_frequency       = vidioc_s_frequency,
1387
1388         .vidioc_subscribe_event   = v4l2_ctrl_subscribe_event,
1389         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1390         .vidioc_log_status        = v4l2_ctrl_log_status,
1391 };
1392
1393 static const struct v4l2_file_operations msi3101_fops = {
1394         .owner                    = THIS_MODULE,
1395         .open                     = v4l2_fh_open,
1396         .release                  = vb2_fop_release,
1397         .read                     = vb2_fop_read,
1398         .poll                     = vb2_fop_poll,
1399         .mmap                     = vb2_fop_mmap,
1400         .unlocked_ioctl           = video_ioctl2,
1401 };
1402
1403 static struct video_device msi3101_template = {
1404         .name                     = "Mirics MSi3101 SDR Dongle",
1405         .release                  = video_device_release_empty,
1406         .fops                     = &msi3101_fops,
1407         .ioctl_ops                = &msi3101_ioctl_ops,
1408 };
1409
1410 static int msi3101_s_ctrl(struct v4l2_ctrl *ctrl)
1411 {
1412         struct msi3101_state *s =
1413                         container_of(ctrl->handler, struct msi3101_state,
1414                                         ctrl_handler);
1415         int ret;
1416         dev_dbg(&s->udev->dev,
1417                         "%s: id=%d name=%s val=%d min=%d max=%d step=%d\n",
1418                         __func__, ctrl->id, ctrl->name, ctrl->val,
1419                         ctrl->minimum, ctrl->maximum, ctrl->step);
1420
1421         switch (ctrl->id) {
1422         case MSI3101_CID_SAMPLING_MODE:
1423         case MSI3101_CID_SAMPLING_RATE:
1424         case MSI3101_CID_SAMPLING_RESOLUTION:
1425                 ret = 0;
1426                 break;
1427         case MSI3101_CID_TUNER_RF:
1428         case MSI3101_CID_TUNER_BW:
1429         case MSI3101_CID_TUNER_IF:
1430         case MSI3101_CID_TUNER_GAIN:
1431                 ret = msi3101_set_tuner(s);
1432                 break;
1433         default:
1434                 ret = -EINVAL;
1435         }
1436
1437         return ret;
1438 }
1439
1440 static const struct v4l2_ctrl_ops msi3101_ctrl_ops = {
1441         .s_ctrl = msi3101_s_ctrl,
1442 };
1443
1444 static void msi3101_video_release(struct v4l2_device *v)
1445 {
1446         struct msi3101_state *s =
1447                         container_of(v, struct msi3101_state, v4l2_dev);
1448
1449         v4l2_ctrl_handler_free(&s->ctrl_handler);
1450         v4l2_device_unregister(&s->v4l2_dev);
1451         kfree(s);
1452 }
1453
1454 static int msi3101_probe(struct usb_interface *intf,
1455                 const struct usb_device_id *id)
1456 {
1457         struct usb_device *udev = interface_to_usbdev(intf);
1458         struct msi3101_state *s = NULL;
1459         int ret;
1460         static const char * const ctrl_sampling_mode_qmenu_strings[] = {
1461                 "Quadrature Sampling",
1462                 NULL,
1463         };
1464         static const struct v4l2_ctrl_config ctrl_sampling_mode = {
1465                 .ops    = &msi3101_ctrl_ops,
1466                 .id     = MSI3101_CID_SAMPLING_MODE,
1467                 .type   = V4L2_CTRL_TYPE_MENU,
1468                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1469                 .name   = "Sampling Mode",
1470                 .qmenu  = ctrl_sampling_mode_qmenu_strings,
1471         };
1472         static const struct v4l2_ctrl_config ctrl_sampling_rate = {
1473                 .ops    = &msi3101_ctrl_ops,
1474                 .id     = MSI3101_CID_SAMPLING_RATE,
1475                 .type   = V4L2_CTRL_TYPE_INTEGER64,
1476                 .name   = "Sampling Rate",
1477                 .min    = 500000,
1478                 .max    = 12000000,
1479                 .def    = 2048000,
1480                 .step   = 1,
1481         };
1482         static const struct v4l2_ctrl_config ctrl_sampling_resolution = {
1483                 .ops    = &msi3101_ctrl_ops,
1484                 .id     = MSI3101_CID_SAMPLING_RESOLUTION,
1485                 .type   = V4L2_CTRL_TYPE_INTEGER,
1486                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1487                 .name   = "Sampling Resolution",
1488                 .min    = 10,
1489                 .max    = 10,
1490                 .def    = 10,
1491                 .step   = 1,
1492         };
1493         static const struct v4l2_ctrl_config ctrl_tuner_rf = {
1494                 .ops    = &msi3101_ctrl_ops,
1495                 .id     = MSI3101_CID_TUNER_RF,
1496                 .type   = V4L2_CTRL_TYPE_INTEGER64,
1497                 .name   = "Tuner RF",
1498                 .min    = 40000000,
1499                 .max    = 2000000000,
1500                 .def    = 100000000,
1501                 .step   = 1,
1502         };
1503         static const struct v4l2_ctrl_config ctrl_tuner_bw = {
1504                 .ops    = &msi3101_ctrl_ops,
1505                 .id     = MSI3101_CID_TUNER_BW,
1506                 .type   = V4L2_CTRL_TYPE_INTEGER,
1507                 .name   = "Tuner BW",
1508                 .min    = 200000,
1509                 .max    = 8000000,
1510                 .def    = 600000,
1511                 .step   = 1,
1512         };
1513         static const struct v4l2_ctrl_config ctrl_tuner_if = {
1514                 .ops    = &msi3101_ctrl_ops,
1515                 .id     = MSI3101_CID_TUNER_IF,
1516                 .type   = V4L2_CTRL_TYPE_INTEGER,
1517                 .flags  = V4L2_CTRL_FLAG_INACTIVE,
1518                 .name   = "Tuner IF",
1519                 .min    = 0,
1520                 .max    = 2048000,
1521                 .def    = 0,
1522                 .step   = 1,
1523         };
1524         static const struct v4l2_ctrl_config ctrl_tuner_gain = {
1525                 .ops    = &msi3101_ctrl_ops,
1526                 .id     = MSI3101_CID_TUNER_GAIN,
1527                 .type   = V4L2_CTRL_TYPE_INTEGER,
1528                 .name   = "Tuner Gain",
1529                 .min    = 0,
1530                 .max    = 102,
1531                 .def    = 0,
1532                 .step   = 1,
1533         };
1534
1535         s = kzalloc(sizeof(struct msi3101_state), GFP_KERNEL);
1536         if (s == NULL) {
1537                 pr_err("Could not allocate memory for msi3101_state\n");
1538                 return -ENOMEM;
1539         }
1540
1541         mutex_init(&s->v4l2_lock);
1542         mutex_init(&s->vb_queue_lock);
1543         spin_lock_init(&s->queued_bufs_lock);
1544         INIT_LIST_HEAD(&s->queued_bufs);
1545
1546         s->udev = udev;
1547
1548         /* Init videobuf2 queue structure */
1549         s->vb_queue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1550         s->vb_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
1551         s->vb_queue.drv_priv = s;
1552         s->vb_queue.buf_struct_size = sizeof(struct msi3101_frame_buf);
1553         s->vb_queue.ops = &msi3101_vb2_ops;
1554         s->vb_queue.mem_ops = &vb2_vmalloc_memops;
1555         s->vb_queue.timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1556         ret = vb2_queue_init(&s->vb_queue);
1557         if (ret < 0) {
1558                 dev_err(&s->udev->dev, "Could not initialize vb2 queue\n");
1559                 goto err_free_mem;
1560         }
1561
1562         /* Init video_device structure */
1563         s->vdev = msi3101_template;
1564         s->vdev.queue = &s->vb_queue;
1565         s->vdev.queue->lock = &s->vb_queue_lock;
1566         set_bit(V4L2_FL_USE_FH_PRIO, &s->vdev.flags);
1567         video_set_drvdata(&s->vdev, s);
1568
1569         /* Register controls */
1570         v4l2_ctrl_handler_init(&s->ctrl_handler, 7);
1571         v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_mode, NULL);
1572         s->ctrl_sampling_rate = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_rate, NULL);
1573         v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_sampling_resolution, NULL);
1574         s->ctrl_tuner_rf = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_rf, NULL);
1575         s->ctrl_tuner_bw = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_bw, NULL);
1576         s->ctrl_tuner_if = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_if, NULL);
1577         s->ctrl_tuner_gain = v4l2_ctrl_new_custom(&s->ctrl_handler, &ctrl_tuner_gain, NULL);
1578         if (s->ctrl_handler.error) {
1579                 ret = s->ctrl_handler.error;
1580                 dev_err(&s->udev->dev, "Could not initialize controls\n");
1581                 goto err_free_controls;
1582         }
1583
1584         /* Register the v4l2_device structure */
1585         s->v4l2_dev.release = msi3101_video_release;
1586         ret = v4l2_device_register(&intf->dev, &s->v4l2_dev);
1587         if (ret) {
1588                 dev_err(&s->udev->dev,
1589                                 "Failed to register v4l2-device (%d)\n", ret);
1590                 goto err_free_controls;
1591         }
1592
1593         s->v4l2_dev.ctrl_handler = &s->ctrl_handler;
1594         s->vdev.v4l2_dev = &s->v4l2_dev;
1595         s->vdev.lock = &s->v4l2_lock;
1596
1597         ret = video_register_device(&s->vdev, VFL_TYPE_GRABBER, -1);
1598         if (ret < 0) {
1599                 dev_err(&s->udev->dev,
1600                                 "Failed to register as video device (%d)\n",
1601                                 ret);
1602                 goto err_unregister_v4l2_dev;
1603         }
1604         dev_info(&s->udev->dev, "Registered as %s\n",
1605                         video_device_node_name(&s->vdev));
1606
1607         return 0;
1608
1609 err_unregister_v4l2_dev:
1610         v4l2_device_unregister(&s->v4l2_dev);
1611 err_free_controls:
1612         v4l2_ctrl_handler_free(&s->ctrl_handler);
1613 err_free_mem:
1614         kfree(s);
1615         return ret;
1616 }
1617
1618 /* USB device ID list */
1619 static struct usb_device_id msi3101_id_table[] = {
1620         { USB_DEVICE(0x1df7, 0x2500) },
1621         { }
1622 };
1623 MODULE_DEVICE_TABLE(usb, msi3101_id_table);
1624
1625 /* USB subsystem interface */
1626 static struct usb_driver msi3101_driver = {
1627         .name                     = KBUILD_MODNAME,
1628         .probe                    = msi3101_probe,
1629         .disconnect               = msi3101_disconnect,
1630         .id_table                 = msi3101_id_table,
1631 };
1632
1633 module_usb_driver(msi3101_driver);
1634
1635 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1636 MODULE_DESCRIPTION("Mirics MSi3101 SDR Dongle");
1637 MODULE_LICENSE("GPL");