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