2 * Realtek RTL2832U SDR driver
4 * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>
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.
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.
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.
20 * GNU Radio plugin "gr-kernel" for device usage will be on:
21 * http://git.linuxtv.org/anttip/gr-kernel.git
25 #include "rtl2832_sdr.h"
28 #include <media/v4l2-device.h>
29 #include <media/v4l2-ioctl.h>
30 #include <media/v4l2-ctrls.h>
31 #include <media/v4l2-event.h>
32 #include <media/videobuf2-v4l2.h>
33 #include <media/videobuf2-vmalloc.h>
35 #include <linux/platform_device.h>
36 #include <linux/jiffies.h>
37 #include <linux/math64.h>
39 static bool rtl2832_sdr_emulated_fmt
;
40 module_param_named(emulated_formats
, rtl2832_sdr_emulated_fmt
, bool, 0644);
41 MODULE_PARM_DESC(emulated_formats
, "enable emulated formats (disappears in future)");
43 /* Original macro does not contain enough null pointer checks for our need */
44 #define V4L2_SUBDEV_HAS_OP(sd, o, f) \
45 ((sd) && (sd)->ops && (sd)->ops->o && (sd)->ops->o->f)
47 #define MAX_BULK_BUFS (10)
48 #define BULK_BUFFER_SIZE (128 * 512)
50 static const struct v4l2_frequency_band bands_adc
[] = {
53 .type
= V4L2_TUNER_ADC
,
55 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
61 .type
= V4L2_TUNER_ADC
,
63 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
69 .type
= V4L2_TUNER_ADC
,
71 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
77 static const struct v4l2_frequency_band bands_fm
[] = {
80 .type
= V4L2_TUNER_RF
,
82 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
84 .rangehigh
= 2000000000,
89 struct rtl2832_sdr_format
{
95 static struct rtl2832_sdr_format formats
[] = {
98 .pixelformat
= V4L2_SDR_FMT_CU8
,
99 .buffersize
= BULK_BUFFER_SIZE
,
101 .name
= "Complex U16LE (emulated)",
102 .pixelformat
= V4L2_SDR_FMT_CU16LE
,
103 .buffersize
= BULK_BUFFER_SIZE
* 2,
107 static const unsigned int NUM_FORMATS
= ARRAY_SIZE(formats
);
109 /* intermediate buffers with raw data from the USB device */
110 struct rtl2832_sdr_frame_buf
{
111 /* common v4l buffer stuff -- must be first */
112 struct vb2_v4l2_buffer vb
;
113 struct list_head list
;
116 struct rtl2832_sdr_dev
{
117 #define POWER_ON 0 /* BIT(0) */
118 #define URB_BUF 1 /* BIT(1) */
121 struct platform_device
*pdev
;
123 struct video_device vdev
;
124 struct v4l2_device v4l2_dev
;
125 struct v4l2_subdev
*v4l2_subdev
;
127 /* videobuf2 queue and queued buffers list */
128 struct vb2_queue vb_queue
;
129 struct list_head queued_bufs
;
130 spinlock_t queued_bufs_lock
; /* Protects queued_bufs */
131 unsigned sequence
; /* buffer sequence counter */
133 /* Note if taking both locks v4l2_lock must always be locked first! */
134 struct mutex v4l2_lock
; /* Protects everything else */
135 struct mutex vb_queue_lock
; /* Protects vb_queue and capt_file */
137 /* Pointer to our usb_device, will be NULL after unplug */
138 struct usb_device
*udev
; /* Both mutexes most be hold when setting! */
140 unsigned int vb_full
; /* vb is full and packets dropped */
142 struct urb
*urb_list
[MAX_BULK_BUFS
];
144 unsigned long buf_size
;
145 u8
*buf_list
[MAX_BULK_BUFS
];
146 dma_addr_t dma_addr
[MAX_BULK_BUFS
];
147 int urbs_initialized
;
150 unsigned int f_adc
, f_tuner
;
153 unsigned int num_formats
;
156 struct v4l2_ctrl_handler hdl
;
157 struct v4l2_ctrl
*bandwidth_auto
;
158 struct v4l2_ctrl
*bandwidth
;
160 /* for sample rate calc */
162 unsigned int sample_measured
;
163 unsigned long jiffies_next
;
166 /* write multiple registers */
167 static int rtl2832_sdr_wr_regs(struct rtl2832_sdr_dev
*dev
, u16 reg
,
168 const u8
*val
, int len
)
170 struct platform_device
*pdev
= dev
->pdev
;
171 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
172 struct i2c_client
*client
= pdata
->i2c_client
;
174 return pdata
->bulk_write(client
, reg
, val
, len
);
178 /* read multiple registers */
179 static int rtl2832_sdr_rd_regs(struct rtl2832_sdr_dev
*dev
, u16 reg
, u8
*val
,
182 struct platform_device
*pdev
= dev
->pdev
;
183 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
184 struct i2c_client
*client
= pdata
->i2c_client
;
186 return pdata
->bulk_read(client
, reg
, val
, len
);
190 /* write single register */
191 static int rtl2832_sdr_wr_reg(struct rtl2832_sdr_dev
*dev
, u16 reg
, u8 val
)
193 return rtl2832_sdr_wr_regs(dev
, reg
, &val
, 1);
196 /* write single register with mask */
197 static int rtl2832_sdr_wr_reg_mask(struct rtl2832_sdr_dev
*dev
, u16 reg
,
200 struct platform_device
*pdev
= dev
->pdev
;
201 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
202 struct i2c_client
*client
= pdata
->i2c_client
;
204 return pdata
->update_bits(client
, reg
, mask
, val
);
207 /* Private functions */
208 static struct rtl2832_sdr_frame_buf
*rtl2832_sdr_get_next_fill_buf(
209 struct rtl2832_sdr_dev
*dev
)
212 struct rtl2832_sdr_frame_buf
*buf
= NULL
;
214 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
215 if (list_empty(&dev
->queued_bufs
))
218 buf
= list_entry(dev
->queued_bufs
.next
,
219 struct rtl2832_sdr_frame_buf
, list
);
220 list_del(&buf
->list
);
222 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
226 static unsigned int rtl2832_sdr_convert_stream(struct rtl2832_sdr_dev
*dev
,
227 void *dst
, const u8
*src
, unsigned int src_len
)
229 struct platform_device
*pdev
= dev
->pdev
;
230 unsigned int dst_len
;
232 if (dev
->pixelformat
== V4L2_SDR_FMT_CU8
) {
233 /* native stream, no need to convert */
234 memcpy(dst
, src
, src_len
);
236 } else if (dev
->pixelformat
== V4L2_SDR_FMT_CU16LE
) {
237 /* convert u8 to u16 */
241 for (i
= 0; i
< src_len
; i
++)
242 *u16dst
++ = (src
[i
] << 8) | (src
[i
] >> 0);
243 dst_len
= 2 * src_len
;
248 /* calculate sample rate and output it in 10 seconds intervals */
249 if (unlikely(time_is_before_jiffies(dev
->jiffies_next
))) {
250 #define MSECS 10000UL
251 unsigned int msecs
= jiffies_to_msecs(jiffies
-
252 dev
->jiffies_next
+ msecs_to_jiffies(MSECS
));
253 unsigned int samples
= dev
->sample
- dev
->sample_measured
;
255 dev
->jiffies_next
= jiffies
+ msecs_to_jiffies(MSECS
);
256 dev
->sample_measured
= dev
->sample
;
258 "slen=%u samples=%u msecs=%u sample rate=%lu\n",
259 src_len
, samples
, msecs
, samples
* 1000UL / msecs
);
262 /* total number of I+Q pairs */
263 dev
->sample
+= src_len
/ 2;
269 * This gets called for the bulk stream pipe. This is done in interrupt
270 * time, so it has to be fast, not crash, and not stall. Neat.
272 static void rtl2832_sdr_urb_complete(struct urb
*urb
)
274 struct rtl2832_sdr_dev
*dev
= urb
->context
;
275 struct platform_device
*pdev
= dev
->pdev
;
276 struct rtl2832_sdr_frame_buf
*fbuf
;
278 dev_dbg_ratelimited(&pdev
->dev
, "status=%d length=%d/%d errors=%d\n",
279 urb
->status
, urb
->actual_length
,
280 urb
->transfer_buffer_length
, urb
->error_count
);
282 switch (urb
->status
) {
283 case 0: /* success */
284 case -ETIMEDOUT
: /* NAK */
286 case -ECONNRESET
: /* kill */
291 dev_err_ratelimited(&pdev
->dev
, "urb failed=%d\n", urb
->status
);
295 if (likely(urb
->actual_length
> 0)) {
298 /* get free framebuffer */
299 fbuf
= rtl2832_sdr_get_next_fill_buf(dev
);
300 if (unlikely(fbuf
== NULL
)) {
302 dev_notice_ratelimited(&pdev
->dev
,
303 "videobuf is full, %d packets dropped\n",
308 /* fill framebuffer */
309 ptr
= vb2_plane_vaddr(&fbuf
->vb
.vb2_buf
, 0);
310 len
= rtl2832_sdr_convert_stream(dev
, ptr
, urb
->transfer_buffer
,
312 vb2_set_plane_payload(&fbuf
->vb
.vb2_buf
, 0, len
);
313 v4l2_get_timestamp(&fbuf
->vb
.timestamp
);
314 fbuf
->vb
.sequence
= dev
->sequence
++;
315 vb2_buffer_done(&fbuf
->vb
.vb2_buf
, VB2_BUF_STATE_DONE
);
318 usb_submit_urb(urb
, GFP_ATOMIC
);
321 static int rtl2832_sdr_kill_urbs(struct rtl2832_sdr_dev
*dev
)
323 struct platform_device
*pdev
= dev
->pdev
;
326 for (i
= dev
->urbs_submitted
- 1; i
>= 0; i
--) {
327 dev_dbg(&pdev
->dev
, "kill urb=%d\n", i
);
329 usb_kill_urb(dev
->urb_list
[i
]);
331 dev
->urbs_submitted
= 0;
336 static int rtl2832_sdr_submit_urbs(struct rtl2832_sdr_dev
*dev
)
338 struct platform_device
*pdev
= dev
->pdev
;
341 for (i
= 0; i
< dev
->urbs_initialized
; i
++) {
342 dev_dbg(&pdev
->dev
, "submit urb=%d\n", i
);
343 ret
= usb_submit_urb(dev
->urb_list
[i
], GFP_ATOMIC
);
346 "Could not submit urb no. %d - get them all back\n",
348 rtl2832_sdr_kill_urbs(dev
);
351 dev
->urbs_submitted
++;
357 static int rtl2832_sdr_free_stream_bufs(struct rtl2832_sdr_dev
*dev
)
359 struct platform_device
*pdev
= dev
->pdev
;
361 if (test_bit(URB_BUF
, &dev
->flags
)) {
362 while (dev
->buf_num
) {
364 dev_dbg(&pdev
->dev
, "free buf=%d\n", dev
->buf_num
);
365 usb_free_coherent(dev
->udev
, dev
->buf_size
,
366 dev
->buf_list
[dev
->buf_num
],
367 dev
->dma_addr
[dev
->buf_num
]);
370 clear_bit(URB_BUF
, &dev
->flags
);
375 static int rtl2832_sdr_alloc_stream_bufs(struct rtl2832_sdr_dev
*dev
)
377 struct platform_device
*pdev
= dev
->pdev
;
380 dev
->buf_size
= BULK_BUFFER_SIZE
;
382 dev_dbg(&pdev
->dev
, "all in all I will use %u bytes for streaming\n",
383 MAX_BULK_BUFS
* BULK_BUFFER_SIZE
);
385 for (dev
->buf_num
= 0; dev
->buf_num
< MAX_BULK_BUFS
; dev
->buf_num
++) {
386 dev
->buf_list
[dev
->buf_num
] = usb_alloc_coherent(dev
->udev
,
387 BULK_BUFFER_SIZE
, GFP_ATOMIC
,
388 &dev
->dma_addr
[dev
->buf_num
]);
389 if (!dev
->buf_list
[dev
->buf_num
]) {
390 dev_dbg(&pdev
->dev
, "alloc buf=%d failed\n",
392 rtl2832_sdr_free_stream_bufs(dev
);
396 dev_dbg(&pdev
->dev
, "alloc buf=%d %p (dma %llu)\n",
397 dev
->buf_num
, dev
->buf_list
[dev
->buf_num
],
398 (long long)dev
->dma_addr
[dev
->buf_num
]);
399 set_bit(URB_BUF
, &dev
->flags
);
405 static int rtl2832_sdr_free_urbs(struct rtl2832_sdr_dev
*dev
)
407 struct platform_device
*pdev
= dev
->pdev
;
410 rtl2832_sdr_kill_urbs(dev
);
412 for (i
= dev
->urbs_initialized
- 1; i
>= 0; i
--) {
413 if (dev
->urb_list
[i
]) {
414 dev_dbg(&pdev
->dev
, "free urb=%d\n", i
);
416 usb_free_urb(dev
->urb_list
[i
]);
419 dev
->urbs_initialized
= 0;
424 static int rtl2832_sdr_alloc_urbs(struct rtl2832_sdr_dev
*dev
)
426 struct platform_device
*pdev
= dev
->pdev
;
429 /* allocate the URBs */
430 for (i
= 0; i
< MAX_BULK_BUFS
; i
++) {
431 dev_dbg(&pdev
->dev
, "alloc urb=%d\n", i
);
432 dev
->urb_list
[i
] = usb_alloc_urb(0, GFP_ATOMIC
);
433 if (!dev
->urb_list
[i
]) {
434 dev_dbg(&pdev
->dev
, "failed\n");
435 for (j
= 0; j
< i
; j
++)
436 usb_free_urb(dev
->urb_list
[j
]);
439 usb_fill_bulk_urb(dev
->urb_list
[i
],
441 usb_rcvbulkpipe(dev
->udev
, 0x81),
444 rtl2832_sdr_urb_complete
, dev
);
446 dev
->urb_list
[i
]->transfer_flags
= URB_NO_TRANSFER_DMA_MAP
;
447 dev
->urb_list
[i
]->transfer_dma
= dev
->dma_addr
[i
];
448 dev
->urbs_initialized
++;
454 /* Must be called with vb_queue_lock hold */
455 static void rtl2832_sdr_cleanup_queued_bufs(struct rtl2832_sdr_dev
*dev
)
457 struct platform_device
*pdev
= dev
->pdev
;
460 dev_dbg(&pdev
->dev
, "\n");
462 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
463 while (!list_empty(&dev
->queued_bufs
)) {
464 struct rtl2832_sdr_frame_buf
*buf
;
466 buf
= list_entry(dev
->queued_bufs
.next
,
467 struct rtl2832_sdr_frame_buf
, list
);
468 list_del(&buf
->list
);
469 vb2_buffer_done(&buf
->vb
.vb2_buf
, VB2_BUF_STATE_ERROR
);
471 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
474 static int rtl2832_sdr_querycap(struct file
*file
, void *fh
,
475 struct v4l2_capability
*cap
)
477 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
478 struct platform_device
*pdev
= dev
->pdev
;
480 dev_dbg(&pdev
->dev
, "\n");
482 strlcpy(cap
->driver
, KBUILD_MODNAME
, sizeof(cap
->driver
));
483 strlcpy(cap
->card
, dev
->vdev
.name
, sizeof(cap
->card
));
484 usb_make_path(dev
->udev
, cap
->bus_info
, sizeof(cap
->bus_info
));
485 cap
->device_caps
= V4L2_CAP_SDR_CAPTURE
| V4L2_CAP_STREAMING
|
486 V4L2_CAP_READWRITE
| V4L2_CAP_TUNER
;
487 cap
->capabilities
= cap
->device_caps
| V4L2_CAP_DEVICE_CAPS
;
491 /* Videobuf2 operations */
492 static int rtl2832_sdr_queue_setup(struct vb2_queue
*vq
,
493 const void *parg
, unsigned int *nbuffers
,
494 unsigned int *nplanes
, unsigned int sizes
[], void *alloc_ctxs
[])
496 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
497 struct platform_device
*pdev
= dev
->pdev
;
499 dev_dbg(&pdev
->dev
, "nbuffers=%d\n", *nbuffers
);
501 /* Need at least 8 buffers */
502 if (vq
->num_buffers
+ *nbuffers
< 8)
503 *nbuffers
= 8 - vq
->num_buffers
;
505 sizes
[0] = PAGE_ALIGN(dev
->buffersize
);
506 dev_dbg(&pdev
->dev
, "nbuffers=%d sizes[0]=%d\n", *nbuffers
, sizes
[0]);
510 static int rtl2832_sdr_buf_prepare(struct vb2_buffer
*vb
)
512 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
514 /* Don't allow queing new buffers after device disconnection */
521 static void rtl2832_sdr_buf_queue(struct vb2_buffer
*vb
)
523 struct vb2_v4l2_buffer
*vbuf
= to_vb2_v4l2_buffer(vb
);
524 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
525 struct rtl2832_sdr_frame_buf
*buf
=
526 container_of(vbuf
, struct rtl2832_sdr_frame_buf
, vb
);
529 /* Check the device has not disconnected between prep and queuing */
531 vb2_buffer_done(&buf
->vb
.vb2_buf
, VB2_BUF_STATE_ERROR
);
535 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
536 list_add_tail(&buf
->list
, &dev
->queued_bufs
);
537 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
540 static int rtl2832_sdr_set_adc(struct rtl2832_sdr_dev
*dev
)
542 struct platform_device
*pdev
= dev
->pdev
;
543 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
544 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
546 unsigned int f_sr
, f_if
;
547 u8 buf
[4], u8tmp1
, u8tmp2
;
551 dev_dbg(&pdev
->dev
, "f_adc=%u\n", dev
->f_adc
);
553 if (!test_bit(POWER_ON
, &dev
->flags
))
561 ret
= rtl2832_sdr_wr_regs(dev
, 0x13e, "\x00\x00", 2);
565 ret
= rtl2832_sdr_wr_regs(dev
, 0x115, "\x00\x00\x00\x00", 4);
569 /* get IF from tuner */
570 if (fe
->ops
.tuner_ops
.get_if_frequency
)
571 ret
= fe
->ops
.tuner_ops
.get_if_frequency(fe
, &f_if
);
579 u64tmp
= f_if
% pdata
->clk
;
581 u64tmp
= div_u64(u64tmp
, pdata
->clk
);
583 u32tmp
= u64tmp
& 0x3fffff;
585 dev_dbg(&pdev
->dev
, "f_if=%u if_ctl=%08x\n", f_if
, u32tmp
);
587 buf
[0] = (u32tmp
>> 16) & 0xff;
588 buf
[1] = (u32tmp
>> 8) & 0xff;
589 buf
[2] = (u32tmp
>> 0) & 0xff;
591 ret
= rtl2832_sdr_wr_regs(dev
, 0x119, buf
, 3);
596 /* POR: 0x1b1=0x1f, 0x008=0x0d, 0x006=0x80 */
598 u8tmp1
= 0x1a; /* disable Zero-IF */
599 u8tmp2
= 0x8d; /* enable ADC I */
601 u8tmp1
= 0x1b; /* enable Zero-IF, DC, IQ */
602 u8tmp2
= 0xcd; /* enable ADC I, ADC Q */
605 ret
= rtl2832_sdr_wr_reg(dev
, 0x1b1, u8tmp1
);
609 ret
= rtl2832_sdr_wr_reg(dev
, 0x008, u8tmp2
);
613 ret
= rtl2832_sdr_wr_reg(dev
, 0x006, 0x80);
617 /* program sampling rate (resampling down) */
618 u32tmp
= div_u64(pdata
->clk
* 0x400000ULL
, f_sr
* 4U);
620 buf
[0] = (u32tmp
>> 24) & 0xff;
621 buf
[1] = (u32tmp
>> 16) & 0xff;
622 buf
[2] = (u32tmp
>> 8) & 0xff;
623 buf
[3] = (u32tmp
>> 0) & 0xff;
624 ret
= rtl2832_sdr_wr_regs(dev
, 0x19f, buf
, 4);
628 /* low-pass filter */
629 ret
= rtl2832_sdr_wr_regs(dev
, 0x11c,
630 "\xca\xdc\xd7\xd8\xe0\xf2\x0e\x35\x06\x50\x9c\x0d\x71\x11\x14\x71\x74\x19\x41\xa5",
635 ret
= rtl2832_sdr_wr_regs(dev
, 0x017, "\x11\x10", 2);
640 ret
= rtl2832_sdr_wr_regs(dev
, 0x019, "\x05", 1);
644 ret
= rtl2832_sdr_wr_regs(dev
, 0x01a, "\x1b\x16\x0d\x06\x01\xff", 6);
649 ret
= rtl2832_sdr_wr_regs(dev
, 0x192, "\x00\xf0\x0f", 3);
654 ret
= rtl2832_sdr_wr_regs(dev
, 0x061, "\x60", 1);
658 /* used RF tuner based settings */
659 switch (pdata
->tuner
) {
660 case RTL2832_SDR_TUNER_E4000
:
661 ret
= rtl2832_sdr_wr_regs(dev
, 0x112, "\x5a", 1);
662 ret
= rtl2832_sdr_wr_regs(dev
, 0x102, "\x40", 1);
663 ret
= rtl2832_sdr_wr_regs(dev
, 0x103, "\x5a", 1);
664 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c7, "\x30", 1);
665 ret
= rtl2832_sdr_wr_regs(dev
, 0x104, "\xd0", 1);
666 ret
= rtl2832_sdr_wr_regs(dev
, 0x105, "\xbe", 1);
667 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c8, "\x18", 1);
668 ret
= rtl2832_sdr_wr_regs(dev
, 0x106, "\x35", 1);
669 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c9, "\x21", 1);
670 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ca, "\x21", 1);
671 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cb, "\x00", 1);
672 ret
= rtl2832_sdr_wr_regs(dev
, 0x107, "\x40", 1);
673 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cd, "\x10", 1);
674 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ce, "\x10", 1);
675 ret
= rtl2832_sdr_wr_regs(dev
, 0x108, "\x80", 1);
676 ret
= rtl2832_sdr_wr_regs(dev
, 0x109, "\x7f", 1);
677 ret
= rtl2832_sdr_wr_regs(dev
, 0x10a, "\x80", 1);
678 ret
= rtl2832_sdr_wr_regs(dev
, 0x10b, "\x7f", 1);
679 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
680 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
681 ret
= rtl2832_sdr_wr_regs(dev
, 0x011, "\xd4", 1);
682 ret
= rtl2832_sdr_wr_regs(dev
, 0x1e5, "\xf0", 1);
683 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d9, "\x00", 1);
684 ret
= rtl2832_sdr_wr_regs(dev
, 0x1db, "\x00", 1);
685 ret
= rtl2832_sdr_wr_regs(dev
, 0x1dd, "\x14", 1);
686 ret
= rtl2832_sdr_wr_regs(dev
, 0x1de, "\xec", 1);
687 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d8, "\x0c", 1);
688 ret
= rtl2832_sdr_wr_regs(dev
, 0x1e6, "\x02", 1);
689 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d7, "\x09", 1);
690 ret
= rtl2832_sdr_wr_regs(dev
, 0x00d, "\x83", 1);
691 ret
= rtl2832_sdr_wr_regs(dev
, 0x010, "\x49", 1);
692 ret
= rtl2832_sdr_wr_regs(dev
, 0x00d, "\x87", 1);
693 ret
= rtl2832_sdr_wr_regs(dev
, 0x00d, "\x85", 1);
694 ret
= rtl2832_sdr_wr_regs(dev
, 0x013, "\x02", 1);
696 case RTL2832_SDR_TUNER_FC0012
:
697 case RTL2832_SDR_TUNER_FC0013
:
698 ret
= rtl2832_sdr_wr_regs(dev
, 0x112, "\x5a", 1);
699 ret
= rtl2832_sdr_wr_regs(dev
, 0x102, "\x40", 1);
700 ret
= rtl2832_sdr_wr_regs(dev
, 0x103, "\x5a", 1);
701 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c7, "\x2c", 1);
702 ret
= rtl2832_sdr_wr_regs(dev
, 0x104, "\xcc", 1);
703 ret
= rtl2832_sdr_wr_regs(dev
, 0x105, "\xbe", 1);
704 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c8, "\x16", 1);
705 ret
= rtl2832_sdr_wr_regs(dev
, 0x106, "\x35", 1);
706 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c9, "\x21", 1);
707 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ca, "\x21", 1);
708 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cb, "\x00", 1);
709 ret
= rtl2832_sdr_wr_regs(dev
, 0x107, "\x40", 1);
710 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cd, "\x10", 1);
711 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ce, "\x10", 1);
712 ret
= rtl2832_sdr_wr_regs(dev
, 0x108, "\x80", 1);
713 ret
= rtl2832_sdr_wr_regs(dev
, 0x109, "\x7f", 1);
714 ret
= rtl2832_sdr_wr_regs(dev
, 0x10a, "\x80", 1);
715 ret
= rtl2832_sdr_wr_regs(dev
, 0x10b, "\x7f", 1);
716 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
717 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
718 ret
= rtl2832_sdr_wr_regs(dev
, 0x011, "\xe9\xbf", 2);
719 ret
= rtl2832_sdr_wr_regs(dev
, 0x1e5, "\xf0", 1);
720 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d9, "\x00", 1);
721 ret
= rtl2832_sdr_wr_regs(dev
, 0x1db, "\x00", 1);
722 ret
= rtl2832_sdr_wr_regs(dev
, 0x1dd, "\x11", 1);
723 ret
= rtl2832_sdr_wr_regs(dev
, 0x1de, "\xef", 1);
724 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d8, "\x0c", 1);
725 ret
= rtl2832_sdr_wr_regs(dev
, 0x1e6, "\x02", 1);
726 ret
= rtl2832_sdr_wr_regs(dev
, 0x1d7, "\x09", 1);
728 case RTL2832_SDR_TUNER_R820T
:
729 case RTL2832_SDR_TUNER_R828D
:
730 ret
= rtl2832_sdr_wr_regs(dev
, 0x112, "\x5a", 1);
731 ret
= rtl2832_sdr_wr_regs(dev
, 0x102, "\x40", 1);
732 ret
= rtl2832_sdr_wr_regs(dev
, 0x115, "\x01", 1);
733 ret
= rtl2832_sdr_wr_regs(dev
, 0x103, "\x80", 1);
734 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c7, "\x24", 1);
735 ret
= rtl2832_sdr_wr_regs(dev
, 0x104, "\xcc", 1);
736 ret
= rtl2832_sdr_wr_regs(dev
, 0x105, "\xbe", 1);
737 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c8, "\x14", 1);
738 ret
= rtl2832_sdr_wr_regs(dev
, 0x106, "\x35", 1);
739 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c9, "\x21", 1);
740 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ca, "\x21", 1);
741 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cb, "\x00", 1);
742 ret
= rtl2832_sdr_wr_regs(dev
, 0x107, "\x40", 1);
743 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cd, "\x10", 1);
744 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ce, "\x10", 1);
745 ret
= rtl2832_sdr_wr_regs(dev
, 0x108, "\x80", 1);
746 ret
= rtl2832_sdr_wr_regs(dev
, 0x109, "\x7f", 1);
747 ret
= rtl2832_sdr_wr_regs(dev
, 0x10a, "\x80", 1);
748 ret
= rtl2832_sdr_wr_regs(dev
, 0x10b, "\x7f", 1);
749 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
750 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
751 ret
= rtl2832_sdr_wr_regs(dev
, 0x011, "\xf4", 1);
753 case RTL2832_SDR_TUNER_FC2580
:
754 ret
= rtl2832_sdr_wr_regs(dev
, 0x112, "\x39", 1);
755 ret
= rtl2832_sdr_wr_regs(dev
, 0x102, "\x40", 1);
756 ret
= rtl2832_sdr_wr_regs(dev
, 0x103, "\x5a", 1);
757 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c7, "\x2c", 1);
758 ret
= rtl2832_sdr_wr_regs(dev
, 0x104, "\xcc", 1);
759 ret
= rtl2832_sdr_wr_regs(dev
, 0x105, "\xbe", 1);
760 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c8, "\x16", 1);
761 ret
= rtl2832_sdr_wr_regs(dev
, 0x106, "\x35", 1);
762 ret
= rtl2832_sdr_wr_regs(dev
, 0x1c9, "\x21", 1);
763 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ca, "\x21", 1);
764 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cb, "\x00", 1);
765 ret
= rtl2832_sdr_wr_regs(dev
, 0x107, "\x40", 1);
766 ret
= rtl2832_sdr_wr_regs(dev
, 0x1cd, "\x10", 1);
767 ret
= rtl2832_sdr_wr_regs(dev
, 0x1ce, "\x10", 1);
768 ret
= rtl2832_sdr_wr_regs(dev
, 0x108, "\x80", 1);
769 ret
= rtl2832_sdr_wr_regs(dev
, 0x109, "\x7f", 1);
770 ret
= rtl2832_sdr_wr_regs(dev
, 0x10a, "\x9c", 1);
771 ret
= rtl2832_sdr_wr_regs(dev
, 0x10b, "\x7f", 1);
772 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
773 ret
= rtl2832_sdr_wr_regs(dev
, 0x00e, "\xfc", 1);
774 ret
= rtl2832_sdr_wr_regs(dev
, 0x011, "\xe9\xf4", 2);
777 dev_notice(&pdev
->dev
, "Unsupported tuner\n");
781 ret
= rtl2832_sdr_wr_reg_mask(dev
, 0x101, 0x04, 0x04);
785 ret
= rtl2832_sdr_wr_reg_mask(dev
, 0x101, 0x00, 0x04);
792 static void rtl2832_sdr_unset_adc(struct rtl2832_sdr_dev
*dev
)
794 struct platform_device
*pdev
= dev
->pdev
;
797 dev_dbg(&pdev
->dev
, "\n");
800 ret
= rtl2832_sdr_wr_regs(dev
, 0x061, "\xe0", 1);
805 ret
= rtl2832_sdr_wr_regs(dev
, 0x019, "\x20", 1);
809 ret
= rtl2832_sdr_wr_regs(dev
, 0x017, "\x11\x10", 2);
814 ret
= rtl2832_sdr_wr_regs(dev
, 0x192, "\x00\x0f\xff", 3);
818 ret
= rtl2832_sdr_wr_regs(dev
, 0x13e, "\x40\x00", 2);
822 ret
= rtl2832_sdr_wr_regs(dev
, 0x115, "\x06\x3f\xce\xcc", 4);
829 static int rtl2832_sdr_set_tuner_freq(struct rtl2832_sdr_dev
*dev
)
831 struct platform_device
*pdev
= dev
->pdev
;
832 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
833 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
834 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
835 struct v4l2_ctrl
*bandwidth_auto
;
836 struct v4l2_ctrl
*bandwidth
;
841 if (dev
->f_tuner
== 0)
847 bandwidth_auto
= v4l2_ctrl_find(&dev
->hdl
,
848 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
);
849 bandwidth
= v4l2_ctrl_find(&dev
->hdl
, V4L2_CID_RF_TUNER_BANDWIDTH
);
850 if (v4l2_ctrl_g_ctrl(bandwidth_auto
)) {
851 c
->bandwidth_hz
= dev
->f_adc
;
852 v4l2_ctrl_s_ctrl(bandwidth
, dev
->f_adc
);
854 c
->bandwidth_hz
= v4l2_ctrl_g_ctrl(bandwidth
);
857 c
->frequency
= dev
->f_tuner
;
858 c
->delivery_system
= SYS_DVBT
;
860 dev_dbg(&pdev
->dev
, "frequency=%u bandwidth=%d\n",
861 c
->frequency
, c
->bandwidth_hz
);
863 if (!test_bit(POWER_ON
, &dev
->flags
))
866 if (!V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_frequency
)) {
867 if (fe
->ops
.tuner_ops
.set_params
)
868 fe
->ops
.tuner_ops
.set_params(fe
);
874 static int rtl2832_sdr_set_tuner(struct rtl2832_sdr_dev
*dev
)
876 struct platform_device
*pdev
= dev
->pdev
;
877 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
878 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
880 dev_dbg(&pdev
->dev
, "\n");
882 if (fe
->ops
.tuner_ops
.init
)
883 fe
->ops
.tuner_ops
.init(fe
);
888 static void rtl2832_sdr_unset_tuner(struct rtl2832_sdr_dev
*dev
)
890 struct platform_device
*pdev
= dev
->pdev
;
891 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
892 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
894 dev_dbg(&pdev
->dev
, "\n");
896 if (fe
->ops
.tuner_ops
.sleep
)
897 fe
->ops
.tuner_ops
.sleep(fe
);
902 static int rtl2832_sdr_start_streaming(struct vb2_queue
*vq
, unsigned int count
)
904 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
905 struct platform_device
*pdev
= dev
->pdev
;
906 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
907 struct dvb_usb_device
*d
= pdata
->dvb_usb_device
;
910 dev_dbg(&pdev
->dev
, "\n");
915 if (mutex_lock_interruptible(&dev
->v4l2_lock
))
918 if (d
->props
->power_ctrl
)
919 d
->props
->power_ctrl(d
, 1);
922 if (d
->props
->frontend_ctrl
)
923 d
->props
->frontend_ctrl(pdata
->dvb_frontend
, 1);
925 set_bit(POWER_ON
, &dev
->flags
);
928 if (V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, core
, s_power
))
929 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, core
, s_power
, 1);
931 ret
= rtl2832_sdr_set_tuner(dev
);
935 ret
= rtl2832_sdr_set_tuner_freq(dev
);
939 ret
= rtl2832_sdr_set_adc(dev
);
943 ret
= rtl2832_sdr_alloc_stream_bufs(dev
);
947 ret
= rtl2832_sdr_alloc_urbs(dev
);
953 ret
= rtl2832_sdr_submit_urbs(dev
);
958 mutex_unlock(&dev
->v4l2_lock
);
963 static void rtl2832_sdr_stop_streaming(struct vb2_queue
*vq
)
965 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
966 struct platform_device
*pdev
= dev
->pdev
;
967 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
968 struct dvb_usb_device
*d
= pdata
->dvb_usb_device
;
970 dev_dbg(&pdev
->dev
, "\n");
972 mutex_lock(&dev
->v4l2_lock
);
974 rtl2832_sdr_kill_urbs(dev
);
975 rtl2832_sdr_free_urbs(dev
);
976 rtl2832_sdr_free_stream_bufs(dev
);
977 rtl2832_sdr_cleanup_queued_bufs(dev
);
978 rtl2832_sdr_unset_adc(dev
);
981 if (V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, core
, s_power
))
982 v4l2_subdev_call(dev
->v4l2_subdev
, core
, s_power
, 0);
984 rtl2832_sdr_unset_tuner(dev
);
986 clear_bit(POWER_ON
, &dev
->flags
);
989 if (d
->props
->frontend_ctrl
)
990 d
->props
->frontend_ctrl(pdata
->dvb_frontend
, 0);
992 if (d
->props
->power_ctrl
)
993 d
->props
->power_ctrl(d
, 0);
995 mutex_unlock(&dev
->v4l2_lock
);
998 static struct vb2_ops rtl2832_sdr_vb2_ops
= {
999 .queue_setup
= rtl2832_sdr_queue_setup
,
1000 .buf_prepare
= rtl2832_sdr_buf_prepare
,
1001 .buf_queue
= rtl2832_sdr_buf_queue
,
1002 .start_streaming
= rtl2832_sdr_start_streaming
,
1003 .stop_streaming
= rtl2832_sdr_stop_streaming
,
1004 .wait_prepare
= vb2_ops_wait_prepare
,
1005 .wait_finish
= vb2_ops_wait_finish
,
1008 static int rtl2832_sdr_g_tuner(struct file
*file
, void *priv
,
1009 struct v4l2_tuner
*v
)
1011 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1012 struct platform_device
*pdev
= dev
->pdev
;
1015 dev_dbg(&pdev
->dev
, "index=%d type=%d\n", v
->index
, v
->type
);
1017 if (v
->index
== 0) {
1018 strlcpy(v
->name
, "ADC: Realtek RTL2832", sizeof(v
->name
));
1019 v
->type
= V4L2_TUNER_ADC
;
1020 v
->capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
;
1021 v
->rangelow
= 300000;
1022 v
->rangehigh
= 3200000;
1024 } else if (v
->index
== 1 &&
1025 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, g_tuner
)) {
1026 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, g_tuner
, v
);
1027 } else if (v
->index
== 1) {
1028 strlcpy(v
->name
, "RF: <unknown>", sizeof(v
->name
));
1029 v
->type
= V4L2_TUNER_RF
;
1030 v
->capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
;
1031 v
->rangelow
= 50000000;
1032 v
->rangehigh
= 2000000000;
1040 static int rtl2832_sdr_s_tuner(struct file
*file
, void *priv
,
1041 const struct v4l2_tuner
*v
)
1043 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1044 struct platform_device
*pdev
= dev
->pdev
;
1047 dev_dbg(&pdev
->dev
, "\n");
1049 if (v
->index
== 0) {
1051 } else if (v
->index
== 1 &&
1052 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_tuner
)) {
1053 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, s_tuner
, v
);
1054 } else if (v
->index
== 1) {
1062 static int rtl2832_sdr_enum_freq_bands(struct file
*file
, void *priv
,
1063 struct v4l2_frequency_band
*band
)
1065 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1066 struct platform_device
*pdev
= dev
->pdev
;
1069 dev_dbg(&pdev
->dev
, "tuner=%d type=%d index=%d\n",
1070 band
->tuner
, band
->type
, band
->index
);
1072 if (band
->tuner
== 0) {
1073 if (band
->index
>= ARRAY_SIZE(bands_adc
))
1076 *band
= bands_adc
[band
->index
];
1078 } else if (band
->tuner
== 1 &&
1079 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, enum_freq_bands
)) {
1080 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, enum_freq_bands
, band
);
1081 } else if (band
->tuner
== 1) {
1082 if (band
->index
>= ARRAY_SIZE(bands_fm
))
1085 *band
= bands_fm
[band
->index
];
1093 static int rtl2832_sdr_g_frequency(struct file
*file
, void *priv
,
1094 struct v4l2_frequency
*f
)
1096 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1097 struct platform_device
*pdev
= dev
->pdev
;
1100 dev_dbg(&pdev
->dev
, "tuner=%d type=%d\n", f
->tuner
, f
->type
);
1102 if (f
->tuner
== 0) {
1103 f
->frequency
= dev
->f_adc
;
1104 f
->type
= V4L2_TUNER_ADC
;
1106 } else if (f
->tuner
== 1 &&
1107 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, g_frequency
)) {
1108 f
->type
= V4L2_TUNER_RF
;
1109 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, g_frequency
, f
);
1110 } else if (f
->tuner
== 1) {
1111 f
->frequency
= dev
->f_tuner
;
1112 f
->type
= V4L2_TUNER_RF
;
1120 static int rtl2832_sdr_s_frequency(struct file
*file
, void *priv
,
1121 const struct v4l2_frequency
*f
)
1123 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1124 struct platform_device
*pdev
= dev
->pdev
;
1127 dev_dbg(&pdev
->dev
, "tuner=%d type=%d frequency=%u\n",
1128 f
->tuner
, f
->type
, f
->frequency
);
1130 /* ADC band midpoints */
1131 #define BAND_ADC_0 ((bands_adc[0].rangehigh + bands_adc[1].rangelow) / 2)
1132 #define BAND_ADC_1 ((bands_adc[1].rangehigh + bands_adc[2].rangelow) / 2)
1134 if (f
->tuner
== 0 && f
->type
== V4L2_TUNER_ADC
) {
1135 if (f
->frequency
< BAND_ADC_0
)
1137 else if (f
->frequency
< BAND_ADC_1
)
1142 dev
->f_adc
= clamp_t(unsigned int, f
->frequency
,
1143 bands_adc
[band
].rangelow
,
1144 bands_adc
[band
].rangehigh
);
1146 dev_dbg(&pdev
->dev
, "ADC frequency=%u Hz\n", dev
->f_adc
);
1147 ret
= rtl2832_sdr_set_adc(dev
);
1148 } else if (f
->tuner
== 1 &&
1149 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_frequency
)) {
1150 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, s_frequency
, f
);
1151 } else if (f
->tuner
== 1) {
1152 dev
->f_tuner
= clamp_t(unsigned int, f
->frequency
,
1153 bands_fm
[0].rangelow
,
1154 bands_fm
[0].rangehigh
);
1155 dev_dbg(&pdev
->dev
, "RF frequency=%u Hz\n", f
->frequency
);
1157 ret
= rtl2832_sdr_set_tuner_freq(dev
);
1164 static int rtl2832_sdr_enum_fmt_sdr_cap(struct file
*file
, void *priv
,
1165 struct v4l2_fmtdesc
*f
)
1167 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1168 struct platform_device
*pdev
= dev
->pdev
;
1170 dev_dbg(&pdev
->dev
, "\n");
1172 if (f
->index
>= dev
->num_formats
)
1175 strlcpy(f
->description
, formats
[f
->index
].name
, sizeof(f
->description
));
1176 f
->pixelformat
= formats
[f
->index
].pixelformat
;
1181 static int rtl2832_sdr_g_fmt_sdr_cap(struct file
*file
, void *priv
,
1182 struct v4l2_format
*f
)
1184 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1185 struct platform_device
*pdev
= dev
->pdev
;
1187 dev_dbg(&pdev
->dev
, "\n");
1189 f
->fmt
.sdr
.pixelformat
= dev
->pixelformat
;
1190 f
->fmt
.sdr
.buffersize
= dev
->buffersize
;
1192 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1197 static int rtl2832_sdr_s_fmt_sdr_cap(struct file
*file
, void *priv
,
1198 struct v4l2_format
*f
)
1200 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1201 struct platform_device
*pdev
= dev
->pdev
;
1202 struct vb2_queue
*q
= &dev
->vb_queue
;
1205 dev_dbg(&pdev
->dev
, "pixelformat fourcc %4.4s\n",
1206 (char *)&f
->fmt
.sdr
.pixelformat
);
1211 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1212 for (i
= 0; i
< dev
->num_formats
; i
++) {
1213 if (formats
[i
].pixelformat
== f
->fmt
.sdr
.pixelformat
) {
1214 dev
->pixelformat
= formats
[i
].pixelformat
;
1215 dev
->buffersize
= formats
[i
].buffersize
;
1216 f
->fmt
.sdr
.buffersize
= formats
[i
].buffersize
;
1221 dev
->pixelformat
= formats
[0].pixelformat
;
1222 dev
->buffersize
= formats
[0].buffersize
;
1223 f
->fmt
.sdr
.pixelformat
= formats
[0].pixelformat
;
1224 f
->fmt
.sdr
.buffersize
= formats
[0].buffersize
;
1229 static int rtl2832_sdr_try_fmt_sdr_cap(struct file
*file
, void *priv
,
1230 struct v4l2_format
*f
)
1232 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1233 struct platform_device
*pdev
= dev
->pdev
;
1236 dev_dbg(&pdev
->dev
, "pixelformat fourcc %4.4s\n",
1237 (char *)&f
->fmt
.sdr
.pixelformat
);
1239 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1240 for (i
= 0; i
< dev
->num_formats
; i
++) {
1241 if (formats
[i
].pixelformat
== f
->fmt
.sdr
.pixelformat
) {
1242 f
->fmt
.sdr
.buffersize
= formats
[i
].buffersize
;
1247 f
->fmt
.sdr
.pixelformat
= formats
[0].pixelformat
;
1248 f
->fmt
.sdr
.buffersize
= formats
[0].buffersize
;
1253 static const struct v4l2_ioctl_ops rtl2832_sdr_ioctl_ops
= {
1254 .vidioc_querycap
= rtl2832_sdr_querycap
,
1256 .vidioc_enum_fmt_sdr_cap
= rtl2832_sdr_enum_fmt_sdr_cap
,
1257 .vidioc_g_fmt_sdr_cap
= rtl2832_sdr_g_fmt_sdr_cap
,
1258 .vidioc_s_fmt_sdr_cap
= rtl2832_sdr_s_fmt_sdr_cap
,
1259 .vidioc_try_fmt_sdr_cap
= rtl2832_sdr_try_fmt_sdr_cap
,
1261 .vidioc_reqbufs
= vb2_ioctl_reqbufs
,
1262 .vidioc_create_bufs
= vb2_ioctl_create_bufs
,
1263 .vidioc_prepare_buf
= vb2_ioctl_prepare_buf
,
1264 .vidioc_querybuf
= vb2_ioctl_querybuf
,
1265 .vidioc_qbuf
= vb2_ioctl_qbuf
,
1266 .vidioc_dqbuf
= vb2_ioctl_dqbuf
,
1268 .vidioc_streamon
= vb2_ioctl_streamon
,
1269 .vidioc_streamoff
= vb2_ioctl_streamoff
,
1271 .vidioc_g_tuner
= rtl2832_sdr_g_tuner
,
1272 .vidioc_s_tuner
= rtl2832_sdr_s_tuner
,
1274 .vidioc_enum_freq_bands
= rtl2832_sdr_enum_freq_bands
,
1275 .vidioc_g_frequency
= rtl2832_sdr_g_frequency
,
1276 .vidioc_s_frequency
= rtl2832_sdr_s_frequency
,
1278 .vidioc_subscribe_event
= v4l2_ctrl_subscribe_event
,
1279 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
1280 .vidioc_log_status
= v4l2_ctrl_log_status
,
1283 static const struct v4l2_file_operations rtl2832_sdr_fops
= {
1284 .owner
= THIS_MODULE
,
1285 .open
= v4l2_fh_open
,
1286 .release
= vb2_fop_release
,
1287 .read
= vb2_fop_read
,
1288 .poll
= vb2_fop_poll
,
1289 .mmap
= vb2_fop_mmap
,
1290 .unlocked_ioctl
= video_ioctl2
,
1293 static struct video_device rtl2832_sdr_template
= {
1294 .name
= "Realtek RTL2832 SDR",
1295 .release
= video_device_release_empty
,
1296 .fops
= &rtl2832_sdr_fops
,
1297 .ioctl_ops
= &rtl2832_sdr_ioctl_ops
,
1300 static int rtl2832_sdr_s_ctrl(struct v4l2_ctrl
*ctrl
)
1302 struct rtl2832_sdr_dev
*dev
=
1303 container_of(ctrl
->handler
, struct rtl2832_sdr_dev
,
1305 struct platform_device
*pdev
= dev
->pdev
;
1306 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
1307 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
1308 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
1311 dev_dbg(&pdev
->dev
, "id=%d name=%s val=%d min=%lld max=%lld step=%lld\n",
1312 ctrl
->id
, ctrl
->name
, ctrl
->val
, ctrl
->minimum
, ctrl
->maximum
,
1316 case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
:
1317 case V4L2_CID_RF_TUNER_BANDWIDTH
:
1318 /* TODO: these controls should be moved to tuner drivers */
1319 if (dev
->bandwidth_auto
->val
) {
1320 /* Round towards the closest legal value */
1321 s32 val
= dev
->f_adc
+ div_u64(dev
->bandwidth
->step
, 2);
1324 val
= clamp_t(s32
, val
, dev
->bandwidth
->minimum
,
1325 dev
->bandwidth
->maximum
);
1326 offset
= val
- dev
->bandwidth
->minimum
;
1327 offset
= dev
->bandwidth
->step
*
1328 div_u64(offset
, dev
->bandwidth
->step
);
1329 dev
->bandwidth
->val
= dev
->bandwidth
->minimum
+ offset
;
1331 c
->bandwidth_hz
= dev
->bandwidth
->val
;
1333 if (!test_bit(POWER_ON
, &dev
->flags
))
1336 if (fe
->ops
.tuner_ops
.set_params
)
1337 ret
= fe
->ops
.tuner_ops
.set_params(fe
);
1348 static const struct v4l2_ctrl_ops rtl2832_sdr_ctrl_ops
= {
1349 .s_ctrl
= rtl2832_sdr_s_ctrl
,
1352 static void rtl2832_sdr_video_release(struct v4l2_device
*v
)
1354 struct rtl2832_sdr_dev
*dev
=
1355 container_of(v
, struct rtl2832_sdr_dev
, v4l2_dev
);
1356 struct platform_device
*pdev
= dev
->pdev
;
1358 dev_dbg(&pdev
->dev
, "\n");
1360 v4l2_ctrl_handler_free(&dev
->hdl
);
1361 v4l2_device_unregister(&dev
->v4l2_dev
);
1365 /* Platform driver interface */
1366 static int rtl2832_sdr_probe(struct platform_device
*pdev
)
1368 struct rtl2832_sdr_dev
*dev
;
1369 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
1370 const struct v4l2_ctrl_ops
*ops
= &rtl2832_sdr_ctrl_ops
;
1371 struct v4l2_subdev
*subdev
;
1374 dev_dbg(&pdev
->dev
, "\n");
1377 dev_err(&pdev
->dev
, "Cannot proceed without platform data\n");
1381 if (!pdev
->dev
.parent
->driver
) {
1382 dev_dbg(&pdev
->dev
, "No parent device\n");
1386 /* try to refcount host drv since we are the consumer */
1387 if (!try_module_get(pdev
->dev
.parent
->driver
->owner
)) {
1388 dev_err(&pdev
->dev
, "Refcount fail");
1392 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
1395 goto err_module_put
;
1398 /* setup the state */
1399 subdev
= pdata
->v4l2_subdev
;
1400 dev
->v4l2_subdev
= pdata
->v4l2_subdev
;
1402 dev
->udev
= pdata
->dvb_usb_device
->udev
;
1403 dev
->f_adc
= bands_adc
[0].rangelow
;
1404 dev
->f_tuner
= bands_fm
[0].rangelow
;
1405 dev
->pixelformat
= formats
[0].pixelformat
;
1406 dev
->buffersize
= formats
[0].buffersize
;
1407 dev
->num_formats
= NUM_FORMATS
;
1408 if (!rtl2832_sdr_emulated_fmt
)
1409 dev
->num_formats
-= 1;
1411 mutex_init(&dev
->v4l2_lock
);
1412 mutex_init(&dev
->vb_queue_lock
);
1413 spin_lock_init(&dev
->queued_bufs_lock
);
1414 INIT_LIST_HEAD(&dev
->queued_bufs
);
1416 /* Init videobuf2 queue structure */
1417 dev
->vb_queue
.type
= V4L2_BUF_TYPE_SDR_CAPTURE
;
1418 dev
->vb_queue
.io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_READ
;
1419 dev
->vb_queue
.drv_priv
= dev
;
1420 dev
->vb_queue
.buf_struct_size
= sizeof(struct rtl2832_sdr_frame_buf
);
1421 dev
->vb_queue
.ops
= &rtl2832_sdr_vb2_ops
;
1422 dev
->vb_queue
.mem_ops
= &vb2_vmalloc_memops
;
1423 dev
->vb_queue
.timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1424 ret
= vb2_queue_init(&dev
->vb_queue
);
1426 dev_err(&pdev
->dev
, "Could not initialize vb2 queue\n");
1430 /* Register controls */
1431 switch (pdata
->tuner
) {
1432 case RTL2832_SDR_TUNER_E4000
:
1433 v4l2_ctrl_handler_init(&dev
->hdl
, 9);
1435 v4l2_ctrl_add_handler(&dev
->hdl
, subdev
->ctrl_handler
, NULL
);
1437 case RTL2832_SDR_TUNER_R820T
:
1438 case RTL2832_SDR_TUNER_R828D
:
1439 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1440 dev
->bandwidth_auto
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1441 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
,
1443 dev
->bandwidth
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1444 V4L2_CID_RF_TUNER_BANDWIDTH
,
1445 0, 8000000, 100000, 0);
1446 v4l2_ctrl_auto_cluster(2, &dev
->bandwidth_auto
, 0, false);
1448 case RTL2832_SDR_TUNER_FC0012
:
1449 case RTL2832_SDR_TUNER_FC0013
:
1450 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1451 dev
->bandwidth_auto
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1452 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
,
1454 dev
->bandwidth
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1455 V4L2_CID_RF_TUNER_BANDWIDTH
,
1456 6000000, 8000000, 1000000,
1458 v4l2_ctrl_auto_cluster(2, &dev
->bandwidth_auto
, 0, false);
1460 case RTL2832_SDR_TUNER_FC2580
:
1461 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1463 v4l2_ctrl_add_handler(&dev
->hdl
, subdev
->ctrl_handler
,
1467 v4l2_ctrl_handler_init(&dev
->hdl
, 0);
1468 dev_err(&pdev
->dev
, "Unsupported tuner\n");
1469 goto err_v4l2_ctrl_handler_free
;
1471 if (dev
->hdl
.error
) {
1472 ret
= dev
->hdl
.error
;
1473 dev_err(&pdev
->dev
, "Could not initialize controls\n");
1474 goto err_v4l2_ctrl_handler_free
;
1477 /* Init video_device structure */
1478 dev
->vdev
= rtl2832_sdr_template
;
1479 dev
->vdev
.queue
= &dev
->vb_queue
;
1480 dev
->vdev
.queue
->lock
= &dev
->vb_queue_lock
;
1481 video_set_drvdata(&dev
->vdev
, dev
);
1483 /* Register the v4l2_device structure */
1484 dev
->v4l2_dev
.release
= rtl2832_sdr_video_release
;
1485 ret
= v4l2_device_register(&pdev
->dev
, &dev
->v4l2_dev
);
1487 dev_err(&pdev
->dev
, "Failed to register v4l2-device %d\n", ret
);
1488 goto err_v4l2_ctrl_handler_free
;
1491 dev
->v4l2_dev
.ctrl_handler
= &dev
->hdl
;
1492 dev
->vdev
.v4l2_dev
= &dev
->v4l2_dev
;
1493 dev
->vdev
.lock
= &dev
->v4l2_lock
;
1494 dev
->vdev
.vfl_dir
= VFL_DIR_RX
;
1496 ret
= video_register_device(&dev
->vdev
, VFL_TYPE_SDR
, -1);
1498 dev_err(&pdev
->dev
, "Failed to register as video device %d\n",
1500 goto err_v4l2_device_unregister
;
1502 dev_info(&pdev
->dev
, "Registered as %s\n",
1503 video_device_node_name(&dev
->vdev
));
1504 dev_info(&pdev
->dev
, "Realtek RTL2832 SDR attached\n");
1505 dev_notice(&pdev
->dev
,
1506 "SDR API is still slightly experimental and functionality changes may follow\n");
1507 platform_set_drvdata(pdev
, dev
);
1509 err_v4l2_device_unregister
:
1510 v4l2_device_unregister(&dev
->v4l2_dev
);
1511 err_v4l2_ctrl_handler_free
:
1512 v4l2_ctrl_handler_free(&dev
->hdl
);
1516 module_put(pdev
->dev
.parent
->driver
->owner
);
1521 static int rtl2832_sdr_remove(struct platform_device
*pdev
)
1523 struct rtl2832_sdr_dev
*dev
= platform_get_drvdata(pdev
);
1525 dev_dbg(&pdev
->dev
, "\n");
1527 mutex_lock(&dev
->vb_queue_lock
);
1528 mutex_lock(&dev
->v4l2_lock
);
1529 /* No need to keep the urbs around after disconnection */
1531 v4l2_device_disconnect(&dev
->v4l2_dev
);
1532 video_unregister_device(&dev
->vdev
);
1533 mutex_unlock(&dev
->v4l2_lock
);
1534 mutex_unlock(&dev
->vb_queue_lock
);
1535 v4l2_device_put(&dev
->v4l2_dev
);
1536 module_put(pdev
->dev
.parent
->driver
->owner
);
1541 static struct platform_driver rtl2832_sdr_driver
= {
1543 .name
= "rtl2832_sdr",
1545 .probe
= rtl2832_sdr_probe
,
1546 .remove
= rtl2832_sdr_remove
,
1548 module_platform_driver(rtl2832_sdr_driver
);
1550 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1551 MODULE_DESCRIPTION("Realtek RTL2832 SDR driver");
1552 MODULE_LICENSE("GPL");