1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Realtek RTL2832U SDR driver
5 * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>
7 * GNU Radio plugin "gr-kernel" for device usage will be on:
8 * https://git.linuxtv.org/anttip/gr-kernel.git
11 #include "rtl2832_sdr.h"
14 #include <media/v4l2-device.h>
15 #include <media/v4l2-ioctl.h>
16 #include <media/v4l2-ctrls.h>
17 #include <media/v4l2-event.h>
18 #include <media/videobuf2-v4l2.h>
19 #include <media/videobuf2-vmalloc.h>
21 #include <linux/platform_device.h>
22 #include <linux/jiffies.h>
23 #include <linux/math64.h>
24 #include <linux/regmap.h>
26 static bool rtl2832_sdr_emulated_fmt
;
27 module_param_named(emulated_formats
, rtl2832_sdr_emulated_fmt
, bool, 0644);
28 MODULE_PARM_DESC(emulated_formats
, "enable emulated formats (disappears in future)");
30 /* Original macro does not contain enough null pointer checks for our need */
31 #define V4L2_SUBDEV_HAS_OP(sd, o, f) \
32 ((sd) && (sd)->ops && (sd)->ops->o && (sd)->ops->o->f)
34 #define MAX_BULK_BUFS (10)
35 #define BULK_BUFFER_SIZE (128 * 512)
37 static const struct v4l2_frequency_band bands_adc
[] = {
40 .type
= V4L2_TUNER_ADC
,
42 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
48 .type
= V4L2_TUNER_ADC
,
50 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
56 .type
= V4L2_TUNER_ADC
,
58 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
64 static const struct v4l2_frequency_band bands_fm
[] = {
67 .type
= V4L2_TUNER_RF
,
69 .capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
,
71 .rangehigh
= 2000000000,
76 struct rtl2832_sdr_format
{
82 static struct rtl2832_sdr_format formats
[] = {
84 .pixelformat
= V4L2_SDR_FMT_CU8
,
85 .buffersize
= BULK_BUFFER_SIZE
,
87 .pixelformat
= V4L2_SDR_FMT_CU16LE
,
88 .buffersize
= BULK_BUFFER_SIZE
* 2,
92 static const unsigned int NUM_FORMATS
= ARRAY_SIZE(formats
);
94 /* intermediate buffers with raw data from the USB device */
95 struct rtl2832_sdr_frame_buf
{
96 /* common v4l buffer stuff -- must be first */
97 struct vb2_v4l2_buffer vb
;
98 struct list_head list
;
101 struct rtl2832_sdr_dev
{
102 #define POWER_ON 0 /* BIT(0) */
103 #define URB_BUF 1 /* BIT(1) */
106 struct platform_device
*pdev
;
107 struct regmap
*regmap
;
109 struct video_device vdev
;
110 struct v4l2_device v4l2_dev
;
111 struct v4l2_subdev
*v4l2_subdev
;
113 /* videobuf2 queue and queued buffers list */
114 struct vb2_queue vb_queue
;
115 struct list_head queued_bufs
;
116 spinlock_t queued_bufs_lock
; /* Protects queued_bufs */
117 unsigned sequence
; /* buffer sequence counter */
119 /* Note if taking both locks v4l2_lock must always be locked first! */
120 struct mutex v4l2_lock
; /* Protects everything else */
121 struct mutex vb_queue_lock
; /* Protects vb_queue and capt_file */
123 /* Pointer to our usb_device, will be NULL after unplug */
124 struct usb_device
*udev
; /* Both mutexes most be hold when setting! */
126 unsigned int vb_full
; /* vb is full and packets dropped */
128 struct urb
*urb_list
[MAX_BULK_BUFS
];
130 unsigned long buf_size
;
131 u8
*buf_list
[MAX_BULK_BUFS
];
132 dma_addr_t dma_addr
[MAX_BULK_BUFS
];
133 int urbs_initialized
;
136 unsigned int f_adc
, f_tuner
;
139 unsigned int num_formats
;
142 struct v4l2_ctrl_handler hdl
;
143 struct v4l2_ctrl
*bandwidth_auto
;
144 struct v4l2_ctrl
*bandwidth
;
146 /* for sample rate calc */
148 unsigned int sample_measured
;
149 unsigned long jiffies_next
;
152 /* Private functions */
153 static struct rtl2832_sdr_frame_buf
*rtl2832_sdr_get_next_fill_buf(
154 struct rtl2832_sdr_dev
*dev
)
157 struct rtl2832_sdr_frame_buf
*buf
= NULL
;
159 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
160 if (list_empty(&dev
->queued_bufs
))
163 buf
= list_entry(dev
->queued_bufs
.next
,
164 struct rtl2832_sdr_frame_buf
, list
);
165 list_del(&buf
->list
);
167 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
171 static unsigned int rtl2832_sdr_convert_stream(struct rtl2832_sdr_dev
*dev
,
172 void *dst
, const u8
*src
, unsigned int src_len
)
174 struct platform_device
*pdev
= dev
->pdev
;
175 unsigned int dst_len
;
177 if (dev
->pixelformat
== V4L2_SDR_FMT_CU8
) {
178 /* native stream, no need to convert */
179 memcpy(dst
, src
, src_len
);
181 } else if (dev
->pixelformat
== V4L2_SDR_FMT_CU16LE
) {
182 /* convert u8 to u16 */
186 for (i
= 0; i
< src_len
; i
++)
187 *u16dst
++ = (src
[i
] << 8) | (src
[i
] >> 0);
188 dst_len
= 2 * src_len
;
193 /* calculate sample rate and output it in 10 seconds intervals */
194 if (unlikely(time_is_before_jiffies(dev
->jiffies_next
))) {
195 #define MSECS 10000UL
196 unsigned int msecs
= jiffies_to_msecs(jiffies
-
197 dev
->jiffies_next
+ msecs_to_jiffies(MSECS
));
198 unsigned int samples
= dev
->sample
- dev
->sample_measured
;
200 dev
->jiffies_next
= jiffies
+ msecs_to_jiffies(MSECS
);
201 dev
->sample_measured
= dev
->sample
;
203 "slen=%u samples=%u msecs=%u sample rate=%lu\n",
204 src_len
, samples
, msecs
, samples
* 1000UL / msecs
);
207 /* total number of I+Q pairs */
208 dev
->sample
+= src_len
/ 2;
214 * This gets called for the bulk stream pipe. This is done in interrupt
215 * time, so it has to be fast, not crash, and not stall. Neat.
217 static void rtl2832_sdr_urb_complete(struct urb
*urb
)
219 struct rtl2832_sdr_dev
*dev
= urb
->context
;
220 struct platform_device
*pdev
= dev
->pdev
;
221 struct rtl2832_sdr_frame_buf
*fbuf
;
223 dev_dbg_ratelimited(&pdev
->dev
, "status=%d length=%d/%d errors=%d\n",
224 urb
->status
, urb
->actual_length
,
225 urb
->transfer_buffer_length
, urb
->error_count
);
227 switch (urb
->status
) {
228 case 0: /* success */
229 case -ETIMEDOUT
: /* NAK */
231 case -ECONNRESET
: /* kill */
236 dev_err_ratelimited(&pdev
->dev
, "urb failed=%d\n", urb
->status
);
240 if (likely(urb
->actual_length
> 0)) {
243 /* get free framebuffer */
244 fbuf
= rtl2832_sdr_get_next_fill_buf(dev
);
245 if (unlikely(fbuf
== NULL
)) {
247 dev_notice_ratelimited(&pdev
->dev
,
248 "videobuf is full, %d packets dropped\n",
253 /* fill framebuffer */
254 ptr
= vb2_plane_vaddr(&fbuf
->vb
.vb2_buf
, 0);
255 len
= rtl2832_sdr_convert_stream(dev
, ptr
, urb
->transfer_buffer
,
257 vb2_set_plane_payload(&fbuf
->vb
.vb2_buf
, 0, len
);
258 fbuf
->vb
.vb2_buf
.timestamp
= ktime_get_ns();
259 fbuf
->vb
.sequence
= dev
->sequence
++;
260 vb2_buffer_done(&fbuf
->vb
.vb2_buf
, VB2_BUF_STATE_DONE
);
263 usb_submit_urb(urb
, GFP_ATOMIC
);
266 static int rtl2832_sdr_kill_urbs(struct rtl2832_sdr_dev
*dev
)
268 struct platform_device
*pdev
= dev
->pdev
;
271 for (i
= dev
->urbs_submitted
- 1; i
>= 0; i
--) {
272 dev_dbg(&pdev
->dev
, "kill urb=%d\n", i
);
274 usb_kill_urb(dev
->urb_list
[i
]);
276 dev
->urbs_submitted
= 0;
281 static int rtl2832_sdr_submit_urbs(struct rtl2832_sdr_dev
*dev
)
283 struct platform_device
*pdev
= dev
->pdev
;
286 for (i
= 0; i
< dev
->urbs_initialized
; i
++) {
287 dev_dbg(&pdev
->dev
, "submit urb=%d\n", i
);
288 ret
= usb_submit_urb(dev
->urb_list
[i
], GFP_KERNEL
);
291 "Could not submit urb no. %d - get them all back\n",
293 rtl2832_sdr_kill_urbs(dev
);
296 dev
->urbs_submitted
++;
302 static int rtl2832_sdr_free_stream_bufs(struct rtl2832_sdr_dev
*dev
)
304 struct platform_device
*pdev
= dev
->pdev
;
306 if (test_bit(URB_BUF
, &dev
->flags
)) {
307 while (dev
->buf_num
) {
309 dev_dbg(&pdev
->dev
, "free buf=%d\n", dev
->buf_num
);
310 usb_free_coherent(dev
->udev
, dev
->buf_size
,
311 dev
->buf_list
[dev
->buf_num
],
312 dev
->dma_addr
[dev
->buf_num
]);
315 clear_bit(URB_BUF
, &dev
->flags
);
320 static int rtl2832_sdr_alloc_stream_bufs(struct rtl2832_sdr_dev
*dev
)
322 struct platform_device
*pdev
= dev
->pdev
;
325 dev
->buf_size
= BULK_BUFFER_SIZE
;
327 dev_dbg(&pdev
->dev
, "all in all I will use %u bytes for streaming\n",
328 MAX_BULK_BUFS
* BULK_BUFFER_SIZE
);
330 for (dev
->buf_num
= 0; dev
->buf_num
< MAX_BULK_BUFS
; dev
->buf_num
++) {
331 dev
->buf_list
[dev
->buf_num
] = usb_alloc_coherent(dev
->udev
,
332 BULK_BUFFER_SIZE
, GFP_KERNEL
,
333 &dev
->dma_addr
[dev
->buf_num
]);
334 if (!dev
->buf_list
[dev
->buf_num
]) {
335 dev_dbg(&pdev
->dev
, "alloc buf=%d failed\n",
337 rtl2832_sdr_free_stream_bufs(dev
);
341 dev_dbg(&pdev
->dev
, "alloc buf=%d %p (dma %llu)\n",
342 dev
->buf_num
, dev
->buf_list
[dev
->buf_num
],
343 (long long)dev
->dma_addr
[dev
->buf_num
]);
344 set_bit(URB_BUF
, &dev
->flags
);
350 static int rtl2832_sdr_free_urbs(struct rtl2832_sdr_dev
*dev
)
352 struct platform_device
*pdev
= dev
->pdev
;
355 rtl2832_sdr_kill_urbs(dev
);
357 for (i
= dev
->urbs_initialized
- 1; i
>= 0; i
--) {
358 if (dev
->urb_list
[i
]) {
359 dev_dbg(&pdev
->dev
, "free urb=%d\n", i
);
361 usb_free_urb(dev
->urb_list
[i
]);
364 dev
->urbs_initialized
= 0;
369 static int rtl2832_sdr_alloc_urbs(struct rtl2832_sdr_dev
*dev
)
371 struct platform_device
*pdev
= dev
->pdev
;
374 /* allocate the URBs */
375 for (i
= 0; i
< MAX_BULK_BUFS
; i
++) {
376 dev_dbg(&pdev
->dev
, "alloc urb=%d\n", i
);
377 dev
->urb_list
[i
] = usb_alloc_urb(0, GFP_KERNEL
);
378 if (!dev
->urb_list
[i
]) {
379 for (j
= 0; j
< i
; j
++)
380 usb_free_urb(dev
->urb_list
[j
]);
383 usb_fill_bulk_urb(dev
->urb_list
[i
],
385 usb_rcvbulkpipe(dev
->udev
, 0x81),
388 rtl2832_sdr_urb_complete
, dev
);
390 dev
->urb_list
[i
]->transfer_flags
= URB_NO_TRANSFER_DMA_MAP
;
391 dev
->urb_list
[i
]->transfer_dma
= dev
->dma_addr
[i
];
392 dev
->urbs_initialized
++;
398 /* Must be called with vb_queue_lock hold */
399 static void rtl2832_sdr_cleanup_queued_bufs(struct rtl2832_sdr_dev
*dev
)
401 struct platform_device
*pdev
= dev
->pdev
;
404 dev_dbg(&pdev
->dev
, "\n");
406 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
407 while (!list_empty(&dev
->queued_bufs
)) {
408 struct rtl2832_sdr_frame_buf
*buf
;
410 buf
= list_entry(dev
->queued_bufs
.next
,
411 struct rtl2832_sdr_frame_buf
, list
);
412 list_del(&buf
->list
);
413 vb2_buffer_done(&buf
->vb
.vb2_buf
, VB2_BUF_STATE_ERROR
);
415 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
418 static int rtl2832_sdr_querycap(struct file
*file
, void *fh
,
419 struct v4l2_capability
*cap
)
421 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
422 struct platform_device
*pdev
= dev
->pdev
;
424 dev_dbg(&pdev
->dev
, "\n");
426 strscpy(cap
->driver
, KBUILD_MODNAME
, sizeof(cap
->driver
));
427 strscpy(cap
->card
, dev
->vdev
.name
, sizeof(cap
->card
));
428 usb_make_path(dev
->udev
, cap
->bus_info
, sizeof(cap
->bus_info
));
432 /* Videobuf2 operations */
433 static int rtl2832_sdr_queue_setup(struct vb2_queue
*vq
,
434 unsigned int *nbuffers
,
435 unsigned int *nplanes
, unsigned int sizes
[], struct device
*alloc_devs
[])
437 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
438 struct platform_device
*pdev
= dev
->pdev
;
440 dev_dbg(&pdev
->dev
, "nbuffers=%d\n", *nbuffers
);
442 /* Need at least 8 buffers */
443 if (vq
->num_buffers
+ *nbuffers
< 8)
444 *nbuffers
= 8 - vq
->num_buffers
;
446 sizes
[0] = PAGE_ALIGN(dev
->buffersize
);
447 dev_dbg(&pdev
->dev
, "nbuffers=%d sizes[0]=%d\n", *nbuffers
, sizes
[0]);
451 static int rtl2832_sdr_buf_prepare(struct vb2_buffer
*vb
)
453 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
455 /* Don't allow queueing new buffers after device disconnection */
462 static void rtl2832_sdr_buf_queue(struct vb2_buffer
*vb
)
464 struct vb2_v4l2_buffer
*vbuf
= to_vb2_v4l2_buffer(vb
);
465 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vb
->vb2_queue
);
466 struct rtl2832_sdr_frame_buf
*buf
=
467 container_of(vbuf
, struct rtl2832_sdr_frame_buf
, vb
);
470 /* Check the device has not disconnected between prep and queuing */
472 vb2_buffer_done(&buf
->vb
.vb2_buf
, VB2_BUF_STATE_ERROR
);
476 spin_lock_irqsave(&dev
->queued_bufs_lock
, flags
);
477 list_add_tail(&buf
->list
, &dev
->queued_bufs
);
478 spin_unlock_irqrestore(&dev
->queued_bufs_lock
, flags
);
481 static int rtl2832_sdr_set_adc(struct rtl2832_sdr_dev
*dev
)
483 struct platform_device
*pdev
= dev
->pdev
;
484 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
485 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
487 unsigned int f_sr
, f_if
;
488 u8 buf
[4], u8tmp1
, u8tmp2
;
492 dev_dbg(&pdev
->dev
, "f_adc=%u\n", dev
->f_adc
);
494 if (!test_bit(POWER_ON
, &dev
->flags
))
502 ret
= regmap_bulk_write(dev
->regmap
, 0x13e, "\x00\x00", 2);
506 ret
= regmap_bulk_write(dev
->regmap
, 0x115, "\x00\x00\x00\x00", 4);
510 /* get IF from tuner */
511 if (fe
->ops
.tuner_ops
.get_if_frequency
)
512 ret
= fe
->ops
.tuner_ops
.get_if_frequency(fe
, &f_if
);
520 u64tmp
= f_if
% pdata
->clk
;
522 u64tmp
= div_u64(u64tmp
, pdata
->clk
);
524 u32tmp
= u64tmp
& 0x3fffff;
526 dev_dbg(&pdev
->dev
, "f_if=%u if_ctl=%08x\n", f_if
, u32tmp
);
528 buf
[0] = (u32tmp
>> 16) & 0xff;
529 buf
[1] = (u32tmp
>> 8) & 0xff;
530 buf
[2] = (u32tmp
>> 0) & 0xff;
532 ret
= regmap_bulk_write(dev
->regmap
, 0x119, buf
, 3);
537 /* POR: 0x1b1=0x1f, 0x008=0x0d, 0x006=0x80 */
539 u8tmp1
= 0x1a; /* disable Zero-IF */
540 u8tmp2
= 0x8d; /* enable ADC I */
542 u8tmp1
= 0x1b; /* enable Zero-IF, DC, IQ */
543 u8tmp2
= 0xcd; /* enable ADC I, ADC Q */
546 ret
= regmap_write(dev
->regmap
, 0x1b1, u8tmp1
);
550 ret
= regmap_write(dev
->regmap
, 0x008, u8tmp2
);
554 ret
= regmap_write(dev
->regmap
, 0x006, 0x80);
558 /* program sampling rate (resampling down) */
559 u32tmp
= div_u64(pdata
->clk
* 0x400000ULL
, f_sr
* 4U);
561 buf
[0] = (u32tmp
>> 24) & 0xff;
562 buf
[1] = (u32tmp
>> 16) & 0xff;
563 buf
[2] = (u32tmp
>> 8) & 0xff;
564 buf
[3] = (u32tmp
>> 0) & 0xff;
565 ret
= regmap_bulk_write(dev
->regmap
, 0x19f, buf
, 4);
569 /* low-pass filter */
570 ret
= regmap_bulk_write(dev
->regmap
, 0x11c,
571 "\xca\xdc\xd7\xd8\xe0\xf2\x0e\x35\x06\x50\x9c\x0d\x71\x11\x14\x71\x74\x19\x41\xa5",
576 ret
= regmap_bulk_write(dev
->regmap
, 0x017, "\x11\x10", 2);
581 ret
= regmap_write(dev
->regmap
, 0x019, 0x05);
585 ret
= regmap_bulk_write(dev
->regmap
, 0x01a,
586 "\x1b\x16\x0d\x06\x01\xff", 6);
591 ret
= regmap_bulk_write(dev
->regmap
, 0x192, "\x00\xf0\x0f", 3);
596 ret
= regmap_write(dev
->regmap
, 0x061, 0x60);
600 /* used RF tuner based settings */
601 switch (pdata
->tuner
) {
602 case RTL2832_SDR_TUNER_E4000
:
603 ret
= regmap_write(dev
->regmap
, 0x112, 0x5a);
604 ret
= regmap_write(dev
->regmap
, 0x102, 0x40);
605 ret
= regmap_write(dev
->regmap
, 0x103, 0x5a);
606 ret
= regmap_write(dev
->regmap
, 0x1c7, 0x30);
607 ret
= regmap_write(dev
->regmap
, 0x104, 0xd0);
608 ret
= regmap_write(dev
->regmap
, 0x105, 0xbe);
609 ret
= regmap_write(dev
->regmap
, 0x1c8, 0x18);
610 ret
= regmap_write(dev
->regmap
, 0x106, 0x35);
611 ret
= regmap_write(dev
->regmap
, 0x1c9, 0x21);
612 ret
= regmap_write(dev
->regmap
, 0x1ca, 0x21);
613 ret
= regmap_write(dev
->regmap
, 0x1cb, 0x00);
614 ret
= regmap_write(dev
->regmap
, 0x107, 0x40);
615 ret
= regmap_write(dev
->regmap
, 0x1cd, 0x10);
616 ret
= regmap_write(dev
->regmap
, 0x1ce, 0x10);
617 ret
= regmap_write(dev
->regmap
, 0x108, 0x80);
618 ret
= regmap_write(dev
->regmap
, 0x109, 0x7f);
619 ret
= regmap_write(dev
->regmap
, 0x10a, 0x80);
620 ret
= regmap_write(dev
->regmap
, 0x10b, 0x7f);
621 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
622 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
623 ret
= regmap_write(dev
->regmap
, 0x011, 0xd4);
624 ret
= regmap_write(dev
->regmap
, 0x1e5, 0xf0);
625 ret
= regmap_write(dev
->regmap
, 0x1d9, 0x00);
626 ret
= regmap_write(dev
->regmap
, 0x1db, 0x00);
627 ret
= regmap_write(dev
->regmap
, 0x1dd, 0x14);
628 ret
= regmap_write(dev
->regmap
, 0x1de, 0xec);
629 ret
= regmap_write(dev
->regmap
, 0x1d8, 0x0c);
630 ret
= regmap_write(dev
->regmap
, 0x1e6, 0x02);
631 ret
= regmap_write(dev
->regmap
, 0x1d7, 0x09);
632 ret
= regmap_write(dev
->regmap
, 0x00d, 0x83);
633 ret
= regmap_write(dev
->regmap
, 0x010, 0x49);
634 ret
= regmap_write(dev
->regmap
, 0x00d, 0x87);
635 ret
= regmap_write(dev
->regmap
, 0x00d, 0x85);
636 ret
= regmap_write(dev
->regmap
, 0x013, 0x02);
638 case RTL2832_SDR_TUNER_FC0012
:
639 case RTL2832_SDR_TUNER_FC0013
:
640 ret
= regmap_write(dev
->regmap
, 0x112, 0x5a);
641 ret
= regmap_write(dev
->regmap
, 0x102, 0x40);
642 ret
= regmap_write(dev
->regmap
, 0x103, 0x5a);
643 ret
= regmap_write(dev
->regmap
, 0x1c7, 0x2c);
644 ret
= regmap_write(dev
->regmap
, 0x104, 0xcc);
645 ret
= regmap_write(dev
->regmap
, 0x105, 0xbe);
646 ret
= regmap_write(dev
->regmap
, 0x1c8, 0x16);
647 ret
= regmap_write(dev
->regmap
, 0x106, 0x35);
648 ret
= regmap_write(dev
->regmap
, 0x1c9, 0x21);
649 ret
= regmap_write(dev
->regmap
, 0x1ca, 0x21);
650 ret
= regmap_write(dev
->regmap
, 0x1cb, 0x00);
651 ret
= regmap_write(dev
->regmap
, 0x107, 0x40);
652 ret
= regmap_write(dev
->regmap
, 0x1cd, 0x10);
653 ret
= regmap_write(dev
->regmap
, 0x1ce, 0x10);
654 ret
= regmap_write(dev
->regmap
, 0x108, 0x80);
655 ret
= regmap_write(dev
->regmap
, 0x109, 0x7f);
656 ret
= regmap_write(dev
->regmap
, 0x10a, 0x80);
657 ret
= regmap_write(dev
->regmap
, 0x10b, 0x7f);
658 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
659 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
660 ret
= regmap_bulk_write(dev
->regmap
, 0x011, "\xe9\xbf", 2);
661 ret
= regmap_write(dev
->regmap
, 0x1e5, 0xf0);
662 ret
= regmap_write(dev
->regmap
, 0x1d9, 0x00);
663 ret
= regmap_write(dev
->regmap
, 0x1db, 0x00);
664 ret
= regmap_write(dev
->regmap
, 0x1dd, 0x11);
665 ret
= regmap_write(dev
->regmap
, 0x1de, 0xef);
666 ret
= regmap_write(dev
->regmap
, 0x1d8, 0x0c);
667 ret
= regmap_write(dev
->regmap
, 0x1e6, 0x02);
668 ret
= regmap_write(dev
->regmap
, 0x1d7, 0x09);
670 case RTL2832_SDR_TUNER_R820T
:
671 case RTL2832_SDR_TUNER_R828D
:
672 ret
= regmap_write(dev
->regmap
, 0x112, 0x5a);
673 ret
= regmap_write(dev
->regmap
, 0x102, 0x40);
674 ret
= regmap_write(dev
->regmap
, 0x115, 0x01);
675 ret
= regmap_write(dev
->regmap
, 0x103, 0x80);
676 ret
= regmap_write(dev
->regmap
, 0x1c7, 0x24);
677 ret
= regmap_write(dev
->regmap
, 0x104, 0xcc);
678 ret
= regmap_write(dev
->regmap
, 0x105, 0xbe);
679 ret
= regmap_write(dev
->regmap
, 0x1c8, 0x14);
680 ret
= regmap_write(dev
->regmap
, 0x106, 0x35);
681 ret
= regmap_write(dev
->regmap
, 0x1c9, 0x21);
682 ret
= regmap_write(dev
->regmap
, 0x1ca, 0x21);
683 ret
= regmap_write(dev
->regmap
, 0x1cb, 0x00);
684 ret
= regmap_write(dev
->regmap
, 0x107, 0x40);
685 ret
= regmap_write(dev
->regmap
, 0x1cd, 0x10);
686 ret
= regmap_write(dev
->regmap
, 0x1ce, 0x10);
687 ret
= regmap_write(dev
->regmap
, 0x108, 0x80);
688 ret
= regmap_write(dev
->regmap
, 0x109, 0x7f);
689 ret
= regmap_write(dev
->regmap
, 0x10a, 0x80);
690 ret
= regmap_write(dev
->regmap
, 0x10b, 0x7f);
691 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
692 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
693 ret
= regmap_write(dev
->regmap
, 0x011, 0xf4);
695 case RTL2832_SDR_TUNER_FC2580
:
696 ret
= regmap_write(dev
->regmap
, 0x112, 0x39);
697 ret
= regmap_write(dev
->regmap
, 0x102, 0x40);
698 ret
= regmap_write(dev
->regmap
, 0x103, 0x5a);
699 ret
= regmap_write(dev
->regmap
, 0x1c7, 0x2c);
700 ret
= regmap_write(dev
->regmap
, 0x104, 0xcc);
701 ret
= regmap_write(dev
->regmap
, 0x105, 0xbe);
702 ret
= regmap_write(dev
->regmap
, 0x1c8, 0x16);
703 ret
= regmap_write(dev
->regmap
, 0x106, 0x35);
704 ret
= regmap_write(dev
->regmap
, 0x1c9, 0x21);
705 ret
= regmap_write(dev
->regmap
, 0x1ca, 0x21);
706 ret
= regmap_write(dev
->regmap
, 0x1cb, 0x00);
707 ret
= regmap_write(dev
->regmap
, 0x107, 0x40);
708 ret
= regmap_write(dev
->regmap
, 0x1cd, 0x10);
709 ret
= regmap_write(dev
->regmap
, 0x1ce, 0x10);
710 ret
= regmap_write(dev
->regmap
, 0x108, 0x80);
711 ret
= regmap_write(dev
->regmap
, 0x109, 0x7f);
712 ret
= regmap_write(dev
->regmap
, 0x10a, 0x9c);
713 ret
= regmap_write(dev
->regmap
, 0x10b, 0x7f);
714 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
715 ret
= regmap_write(dev
->regmap
, 0x00e, 0xfc);
716 ret
= regmap_bulk_write(dev
->regmap
, 0x011, "\xe9\xf4", 2);
719 dev_notice(&pdev
->dev
, "Unsupported tuner\n");
723 ret
= regmap_update_bits(dev
->regmap
, 0x101, 0x04, 0x04);
727 ret
= regmap_update_bits(dev
->regmap
, 0x101, 0x04, 0x00);
734 static void rtl2832_sdr_unset_adc(struct rtl2832_sdr_dev
*dev
)
736 struct platform_device
*pdev
= dev
->pdev
;
739 dev_dbg(&pdev
->dev
, "\n");
742 ret
= regmap_write(dev
->regmap
, 0x061, 0xe0);
747 ret
= regmap_write(dev
->regmap
, 0x019, 0x20);
751 ret
= regmap_bulk_write(dev
->regmap
, 0x017, "\x11\x10", 2);
756 ret
= regmap_bulk_write(dev
->regmap
, 0x192, "\x00\x0f\xff", 3);
760 ret
= regmap_bulk_write(dev
->regmap
, 0x13e, "\x40\x00", 2);
764 ret
= regmap_bulk_write(dev
->regmap
, 0x115, "\x06\x3f\xce\xcc", 4);
771 static int rtl2832_sdr_set_tuner_freq(struct rtl2832_sdr_dev
*dev
)
773 struct platform_device
*pdev
= dev
->pdev
;
774 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
775 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
776 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
777 struct v4l2_ctrl
*bandwidth_auto
;
778 struct v4l2_ctrl
*bandwidth
;
783 if (dev
->f_tuner
== 0)
789 bandwidth_auto
= v4l2_ctrl_find(&dev
->hdl
,
790 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
);
791 bandwidth
= v4l2_ctrl_find(&dev
->hdl
, V4L2_CID_RF_TUNER_BANDWIDTH
);
792 if (v4l2_ctrl_g_ctrl(bandwidth_auto
)) {
793 c
->bandwidth_hz
= dev
->f_adc
;
794 v4l2_ctrl_s_ctrl(bandwidth
, dev
->f_adc
);
796 c
->bandwidth_hz
= v4l2_ctrl_g_ctrl(bandwidth
);
799 c
->frequency
= dev
->f_tuner
;
800 c
->delivery_system
= SYS_DVBT
;
802 dev_dbg(&pdev
->dev
, "frequency=%u bandwidth=%d\n",
803 c
->frequency
, c
->bandwidth_hz
);
805 if (!test_bit(POWER_ON
, &dev
->flags
))
808 if (!V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_frequency
)) {
809 if (fe
->ops
.tuner_ops
.set_params
)
810 fe
->ops
.tuner_ops
.set_params(fe
);
816 static int rtl2832_sdr_set_tuner(struct rtl2832_sdr_dev
*dev
)
818 struct platform_device
*pdev
= dev
->pdev
;
819 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
820 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
822 dev_dbg(&pdev
->dev
, "\n");
824 if (fe
->ops
.tuner_ops
.init
)
825 fe
->ops
.tuner_ops
.init(fe
);
830 static void rtl2832_sdr_unset_tuner(struct rtl2832_sdr_dev
*dev
)
832 struct platform_device
*pdev
= dev
->pdev
;
833 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
834 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
836 dev_dbg(&pdev
->dev
, "\n");
838 if (fe
->ops
.tuner_ops
.sleep
)
839 fe
->ops
.tuner_ops
.sleep(fe
);
844 static int rtl2832_sdr_start_streaming(struct vb2_queue
*vq
, unsigned int count
)
846 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
847 struct platform_device
*pdev
= dev
->pdev
;
848 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
849 struct dvb_usb_device
*d
= pdata
->dvb_usb_device
;
852 dev_dbg(&pdev
->dev
, "\n");
857 if (mutex_lock_interruptible(&dev
->v4l2_lock
))
860 if (d
->props
->power_ctrl
)
861 d
->props
->power_ctrl(d
, 1);
864 if (d
->props
->frontend_ctrl
)
865 d
->props
->frontend_ctrl(pdata
->dvb_frontend
, 1);
867 set_bit(POWER_ON
, &dev
->flags
);
870 if (V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, core
, s_power
))
871 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, core
, s_power
, 1);
873 ret
= rtl2832_sdr_set_tuner(dev
);
877 ret
= rtl2832_sdr_set_tuner_freq(dev
);
881 ret
= rtl2832_sdr_set_adc(dev
);
885 ret
= rtl2832_sdr_alloc_stream_bufs(dev
);
889 ret
= rtl2832_sdr_alloc_urbs(dev
);
895 ret
= rtl2832_sdr_submit_urbs(dev
);
900 mutex_unlock(&dev
->v4l2_lock
);
905 static void rtl2832_sdr_stop_streaming(struct vb2_queue
*vq
)
907 struct rtl2832_sdr_dev
*dev
= vb2_get_drv_priv(vq
);
908 struct platform_device
*pdev
= dev
->pdev
;
909 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
910 struct dvb_usb_device
*d
= pdata
->dvb_usb_device
;
912 dev_dbg(&pdev
->dev
, "\n");
914 mutex_lock(&dev
->v4l2_lock
);
916 rtl2832_sdr_kill_urbs(dev
);
917 rtl2832_sdr_free_urbs(dev
);
918 rtl2832_sdr_free_stream_bufs(dev
);
919 rtl2832_sdr_cleanup_queued_bufs(dev
);
920 rtl2832_sdr_unset_adc(dev
);
923 if (V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, core
, s_power
))
924 v4l2_subdev_call(dev
->v4l2_subdev
, core
, s_power
, 0);
926 rtl2832_sdr_unset_tuner(dev
);
928 clear_bit(POWER_ON
, &dev
->flags
);
931 if (d
->props
->frontend_ctrl
)
932 d
->props
->frontend_ctrl(pdata
->dvb_frontend
, 0);
934 if (d
->props
->power_ctrl
)
935 d
->props
->power_ctrl(d
, 0);
937 mutex_unlock(&dev
->v4l2_lock
);
940 static const struct vb2_ops rtl2832_sdr_vb2_ops
= {
941 .queue_setup
= rtl2832_sdr_queue_setup
,
942 .buf_prepare
= rtl2832_sdr_buf_prepare
,
943 .buf_queue
= rtl2832_sdr_buf_queue
,
944 .start_streaming
= rtl2832_sdr_start_streaming
,
945 .stop_streaming
= rtl2832_sdr_stop_streaming
,
946 .wait_prepare
= vb2_ops_wait_prepare
,
947 .wait_finish
= vb2_ops_wait_finish
,
950 static int rtl2832_sdr_g_tuner(struct file
*file
, void *priv
,
951 struct v4l2_tuner
*v
)
953 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
954 struct platform_device
*pdev
= dev
->pdev
;
957 dev_dbg(&pdev
->dev
, "index=%d type=%d\n", v
->index
, v
->type
);
960 strscpy(v
->name
, "ADC: Realtek RTL2832", sizeof(v
->name
));
961 v
->type
= V4L2_TUNER_ADC
;
962 v
->capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
;
963 v
->rangelow
= 300000;
964 v
->rangehigh
= 3200000;
966 } else if (v
->index
== 1 &&
967 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, g_tuner
)) {
968 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, g_tuner
, v
);
969 } else if (v
->index
== 1) {
970 strscpy(v
->name
, "RF: <unknown>", sizeof(v
->name
));
971 v
->type
= V4L2_TUNER_RF
;
972 v
->capability
= V4L2_TUNER_CAP_1HZ
| V4L2_TUNER_CAP_FREQ_BANDS
;
973 v
->rangelow
= 50000000;
974 v
->rangehigh
= 2000000000;
982 static int rtl2832_sdr_s_tuner(struct file
*file
, void *priv
,
983 const struct v4l2_tuner
*v
)
985 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
986 struct platform_device
*pdev
= dev
->pdev
;
989 dev_dbg(&pdev
->dev
, "\n");
993 } else if (v
->index
== 1 &&
994 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_tuner
)) {
995 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, s_tuner
, v
);
996 } else if (v
->index
== 1) {
1004 static int rtl2832_sdr_enum_freq_bands(struct file
*file
, void *priv
,
1005 struct v4l2_frequency_band
*band
)
1007 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1008 struct platform_device
*pdev
= dev
->pdev
;
1011 dev_dbg(&pdev
->dev
, "tuner=%d type=%d index=%d\n",
1012 band
->tuner
, band
->type
, band
->index
);
1014 if (band
->tuner
== 0) {
1015 if (band
->index
>= ARRAY_SIZE(bands_adc
))
1018 *band
= bands_adc
[band
->index
];
1020 } else if (band
->tuner
== 1 &&
1021 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, enum_freq_bands
)) {
1022 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, enum_freq_bands
, band
);
1023 } else if (band
->tuner
== 1) {
1024 if (band
->index
>= ARRAY_SIZE(bands_fm
))
1027 *band
= bands_fm
[band
->index
];
1035 static int rtl2832_sdr_g_frequency(struct file
*file
, void *priv
,
1036 struct v4l2_frequency
*f
)
1038 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1039 struct platform_device
*pdev
= dev
->pdev
;
1042 dev_dbg(&pdev
->dev
, "tuner=%d type=%d\n", f
->tuner
, f
->type
);
1044 if (f
->tuner
== 0) {
1045 f
->frequency
= dev
->f_adc
;
1046 f
->type
= V4L2_TUNER_ADC
;
1048 } else if (f
->tuner
== 1 &&
1049 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, g_frequency
)) {
1050 f
->type
= V4L2_TUNER_RF
;
1051 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, g_frequency
, f
);
1052 } else if (f
->tuner
== 1) {
1053 f
->frequency
= dev
->f_tuner
;
1054 f
->type
= V4L2_TUNER_RF
;
1062 static int rtl2832_sdr_s_frequency(struct file
*file
, void *priv
,
1063 const struct v4l2_frequency
*f
)
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 frequency=%u\n",
1070 f
->tuner
, f
->type
, f
->frequency
);
1072 /* ADC band midpoints */
1073 #define BAND_ADC_0 ((bands_adc[0].rangehigh + bands_adc[1].rangelow) / 2)
1074 #define BAND_ADC_1 ((bands_adc[1].rangehigh + bands_adc[2].rangelow) / 2)
1076 if (f
->tuner
== 0 && f
->type
== V4L2_TUNER_ADC
) {
1077 if (f
->frequency
< BAND_ADC_0
)
1079 else if (f
->frequency
< BAND_ADC_1
)
1084 dev
->f_adc
= clamp_t(unsigned int, f
->frequency
,
1085 bands_adc
[band
].rangelow
,
1086 bands_adc
[band
].rangehigh
);
1088 dev_dbg(&pdev
->dev
, "ADC frequency=%u Hz\n", dev
->f_adc
);
1089 ret
= rtl2832_sdr_set_adc(dev
);
1090 } else if (f
->tuner
== 1 &&
1091 V4L2_SUBDEV_HAS_OP(dev
->v4l2_subdev
, tuner
, s_frequency
)) {
1092 ret
= v4l2_subdev_call(dev
->v4l2_subdev
, tuner
, s_frequency
, f
);
1093 } else if (f
->tuner
== 1) {
1094 dev
->f_tuner
= clamp_t(unsigned int, f
->frequency
,
1095 bands_fm
[0].rangelow
,
1096 bands_fm
[0].rangehigh
);
1097 dev_dbg(&pdev
->dev
, "RF frequency=%u Hz\n", f
->frequency
);
1099 ret
= rtl2832_sdr_set_tuner_freq(dev
);
1106 static int rtl2832_sdr_enum_fmt_sdr_cap(struct file
*file
, void *priv
,
1107 struct v4l2_fmtdesc
*f
)
1109 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1110 struct platform_device
*pdev
= dev
->pdev
;
1112 dev_dbg(&pdev
->dev
, "\n");
1114 if (f
->index
>= dev
->num_formats
)
1117 f
->pixelformat
= formats
[f
->index
].pixelformat
;
1122 static int rtl2832_sdr_g_fmt_sdr_cap(struct file
*file
, void *priv
,
1123 struct v4l2_format
*f
)
1125 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1126 struct platform_device
*pdev
= dev
->pdev
;
1128 dev_dbg(&pdev
->dev
, "\n");
1130 f
->fmt
.sdr
.pixelformat
= dev
->pixelformat
;
1131 f
->fmt
.sdr
.buffersize
= dev
->buffersize
;
1133 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1138 static int rtl2832_sdr_s_fmt_sdr_cap(struct file
*file
, void *priv
,
1139 struct v4l2_format
*f
)
1141 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1142 struct platform_device
*pdev
= dev
->pdev
;
1143 struct vb2_queue
*q
= &dev
->vb_queue
;
1146 dev_dbg(&pdev
->dev
, "pixelformat fourcc %4.4s\n",
1147 (char *)&f
->fmt
.sdr
.pixelformat
);
1152 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1153 for (i
= 0; i
< dev
->num_formats
; i
++) {
1154 if (formats
[i
].pixelformat
== f
->fmt
.sdr
.pixelformat
) {
1155 dev
->pixelformat
= formats
[i
].pixelformat
;
1156 dev
->buffersize
= formats
[i
].buffersize
;
1157 f
->fmt
.sdr
.buffersize
= formats
[i
].buffersize
;
1162 dev
->pixelformat
= formats
[0].pixelformat
;
1163 dev
->buffersize
= formats
[0].buffersize
;
1164 f
->fmt
.sdr
.pixelformat
= formats
[0].pixelformat
;
1165 f
->fmt
.sdr
.buffersize
= formats
[0].buffersize
;
1170 static int rtl2832_sdr_try_fmt_sdr_cap(struct file
*file
, void *priv
,
1171 struct v4l2_format
*f
)
1173 struct rtl2832_sdr_dev
*dev
= video_drvdata(file
);
1174 struct platform_device
*pdev
= dev
->pdev
;
1177 dev_dbg(&pdev
->dev
, "pixelformat fourcc %4.4s\n",
1178 (char *)&f
->fmt
.sdr
.pixelformat
);
1180 memset(f
->fmt
.sdr
.reserved
, 0, sizeof(f
->fmt
.sdr
.reserved
));
1181 for (i
= 0; i
< dev
->num_formats
; i
++) {
1182 if (formats
[i
].pixelformat
== f
->fmt
.sdr
.pixelformat
) {
1183 f
->fmt
.sdr
.buffersize
= formats
[i
].buffersize
;
1188 f
->fmt
.sdr
.pixelformat
= formats
[0].pixelformat
;
1189 f
->fmt
.sdr
.buffersize
= formats
[0].buffersize
;
1194 static const struct v4l2_ioctl_ops rtl2832_sdr_ioctl_ops
= {
1195 .vidioc_querycap
= rtl2832_sdr_querycap
,
1197 .vidioc_enum_fmt_sdr_cap
= rtl2832_sdr_enum_fmt_sdr_cap
,
1198 .vidioc_g_fmt_sdr_cap
= rtl2832_sdr_g_fmt_sdr_cap
,
1199 .vidioc_s_fmt_sdr_cap
= rtl2832_sdr_s_fmt_sdr_cap
,
1200 .vidioc_try_fmt_sdr_cap
= rtl2832_sdr_try_fmt_sdr_cap
,
1202 .vidioc_reqbufs
= vb2_ioctl_reqbufs
,
1203 .vidioc_create_bufs
= vb2_ioctl_create_bufs
,
1204 .vidioc_prepare_buf
= vb2_ioctl_prepare_buf
,
1205 .vidioc_querybuf
= vb2_ioctl_querybuf
,
1206 .vidioc_qbuf
= vb2_ioctl_qbuf
,
1207 .vidioc_dqbuf
= vb2_ioctl_dqbuf
,
1209 .vidioc_streamon
= vb2_ioctl_streamon
,
1210 .vidioc_streamoff
= vb2_ioctl_streamoff
,
1212 .vidioc_g_tuner
= rtl2832_sdr_g_tuner
,
1213 .vidioc_s_tuner
= rtl2832_sdr_s_tuner
,
1215 .vidioc_enum_freq_bands
= rtl2832_sdr_enum_freq_bands
,
1216 .vidioc_g_frequency
= rtl2832_sdr_g_frequency
,
1217 .vidioc_s_frequency
= rtl2832_sdr_s_frequency
,
1219 .vidioc_subscribe_event
= v4l2_ctrl_subscribe_event
,
1220 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
1221 .vidioc_log_status
= v4l2_ctrl_log_status
,
1224 static const struct v4l2_file_operations rtl2832_sdr_fops
= {
1225 .owner
= THIS_MODULE
,
1226 .open
= v4l2_fh_open
,
1227 .release
= vb2_fop_release
,
1228 .read
= vb2_fop_read
,
1229 .poll
= vb2_fop_poll
,
1230 .mmap
= vb2_fop_mmap
,
1231 .unlocked_ioctl
= video_ioctl2
,
1234 static struct video_device rtl2832_sdr_template
= {
1235 .name
= "Realtek RTL2832 SDR",
1236 .release
= video_device_release_empty
,
1237 .fops
= &rtl2832_sdr_fops
,
1238 .ioctl_ops
= &rtl2832_sdr_ioctl_ops
,
1239 .device_caps
= V4L2_CAP_SDR_CAPTURE
| V4L2_CAP_STREAMING
|
1240 V4L2_CAP_READWRITE
| V4L2_CAP_TUNER
,
1243 static int rtl2832_sdr_s_ctrl(struct v4l2_ctrl
*ctrl
)
1245 struct rtl2832_sdr_dev
*dev
=
1246 container_of(ctrl
->handler
, struct rtl2832_sdr_dev
,
1248 struct platform_device
*pdev
= dev
->pdev
;
1249 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
1250 struct dvb_frontend
*fe
= pdata
->dvb_frontend
;
1251 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
1254 dev_dbg(&pdev
->dev
, "id=%d name=%s val=%d min=%lld max=%lld step=%lld\n",
1255 ctrl
->id
, ctrl
->name
, ctrl
->val
, ctrl
->minimum
, ctrl
->maximum
,
1259 case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
:
1260 case V4L2_CID_RF_TUNER_BANDWIDTH
:
1261 /* TODO: these controls should be moved to tuner drivers */
1262 if (dev
->bandwidth_auto
->val
) {
1263 /* Round towards the closest legal value */
1264 s32 val
= dev
->f_adc
+ div_u64(dev
->bandwidth
->step
, 2);
1267 val
= clamp_t(s32
, val
, dev
->bandwidth
->minimum
,
1268 dev
->bandwidth
->maximum
);
1269 offset
= val
- dev
->bandwidth
->minimum
;
1270 offset
= dev
->bandwidth
->step
*
1271 div_u64(offset
, dev
->bandwidth
->step
);
1272 dev
->bandwidth
->val
= dev
->bandwidth
->minimum
+ offset
;
1274 c
->bandwidth_hz
= dev
->bandwidth
->val
;
1276 if (!test_bit(POWER_ON
, &dev
->flags
))
1279 if (fe
->ops
.tuner_ops
.set_params
)
1280 ret
= fe
->ops
.tuner_ops
.set_params(fe
);
1291 static const struct v4l2_ctrl_ops rtl2832_sdr_ctrl_ops
= {
1292 .s_ctrl
= rtl2832_sdr_s_ctrl
,
1295 static void rtl2832_sdr_video_release(struct v4l2_device
*v
)
1297 struct rtl2832_sdr_dev
*dev
=
1298 container_of(v
, struct rtl2832_sdr_dev
, v4l2_dev
);
1299 struct platform_device
*pdev
= dev
->pdev
;
1301 dev_dbg(&pdev
->dev
, "\n");
1303 v4l2_ctrl_handler_free(&dev
->hdl
);
1304 v4l2_device_unregister(&dev
->v4l2_dev
);
1308 /* Platform driver interface */
1309 static int rtl2832_sdr_probe(struct platform_device
*pdev
)
1311 struct rtl2832_sdr_dev
*dev
;
1312 struct rtl2832_sdr_platform_data
*pdata
= pdev
->dev
.platform_data
;
1313 const struct v4l2_ctrl_ops
*ops
= &rtl2832_sdr_ctrl_ops
;
1314 struct v4l2_subdev
*subdev
;
1317 dev_dbg(&pdev
->dev
, "\n");
1320 dev_err(&pdev
->dev
, "Cannot proceed without platform data\n");
1324 if (!pdev
->dev
.parent
->driver
) {
1325 dev_dbg(&pdev
->dev
, "No parent device\n");
1329 /* try to refcount host drv since we are the consumer */
1330 if (!try_module_get(pdev
->dev
.parent
->driver
->owner
)) {
1331 dev_err(&pdev
->dev
, "Refcount fail");
1335 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
1338 goto err_module_put
;
1341 /* setup the state */
1342 subdev
= pdata
->v4l2_subdev
;
1343 dev
->v4l2_subdev
= pdata
->v4l2_subdev
;
1345 dev
->regmap
= pdata
->regmap
;
1346 dev
->udev
= pdata
->dvb_usb_device
->udev
;
1347 dev
->f_adc
= bands_adc
[0].rangelow
;
1348 dev
->f_tuner
= bands_fm
[0].rangelow
;
1349 dev
->pixelformat
= formats
[0].pixelformat
;
1350 dev
->buffersize
= formats
[0].buffersize
;
1351 dev
->num_formats
= NUM_FORMATS
;
1352 if (!rtl2832_sdr_emulated_fmt
)
1353 dev
->num_formats
-= 1;
1355 mutex_init(&dev
->v4l2_lock
);
1356 mutex_init(&dev
->vb_queue_lock
);
1357 spin_lock_init(&dev
->queued_bufs_lock
);
1358 INIT_LIST_HEAD(&dev
->queued_bufs
);
1360 /* Init videobuf2 queue structure */
1361 dev
->vb_queue
.type
= V4L2_BUF_TYPE_SDR_CAPTURE
;
1362 dev
->vb_queue
.io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_READ
;
1363 dev
->vb_queue
.drv_priv
= dev
;
1364 dev
->vb_queue
.buf_struct_size
= sizeof(struct rtl2832_sdr_frame_buf
);
1365 dev
->vb_queue
.ops
= &rtl2832_sdr_vb2_ops
;
1366 dev
->vb_queue
.mem_ops
= &vb2_vmalloc_memops
;
1367 dev
->vb_queue
.timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1368 ret
= vb2_queue_init(&dev
->vb_queue
);
1370 dev_err(&pdev
->dev
, "Could not initialize vb2 queue\n");
1374 /* Register controls */
1375 switch (pdata
->tuner
) {
1376 case RTL2832_SDR_TUNER_E4000
:
1377 v4l2_ctrl_handler_init(&dev
->hdl
, 9);
1379 v4l2_ctrl_add_handler(&dev
->hdl
, subdev
->ctrl_handler
,
1382 case RTL2832_SDR_TUNER_R820T
:
1383 case RTL2832_SDR_TUNER_R828D
:
1384 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1385 dev
->bandwidth_auto
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1386 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
,
1388 dev
->bandwidth
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1389 V4L2_CID_RF_TUNER_BANDWIDTH
,
1390 0, 8000000, 100000, 0);
1391 v4l2_ctrl_auto_cluster(2, &dev
->bandwidth_auto
, 0, false);
1393 case RTL2832_SDR_TUNER_FC0012
:
1394 case RTL2832_SDR_TUNER_FC0013
:
1395 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1396 dev
->bandwidth_auto
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1397 V4L2_CID_RF_TUNER_BANDWIDTH_AUTO
,
1399 dev
->bandwidth
= v4l2_ctrl_new_std(&dev
->hdl
, ops
,
1400 V4L2_CID_RF_TUNER_BANDWIDTH
,
1401 6000000, 8000000, 1000000,
1403 v4l2_ctrl_auto_cluster(2, &dev
->bandwidth_auto
, 0, false);
1405 case RTL2832_SDR_TUNER_FC2580
:
1406 v4l2_ctrl_handler_init(&dev
->hdl
, 2);
1408 v4l2_ctrl_add_handler(&dev
->hdl
, subdev
->ctrl_handler
,
1412 v4l2_ctrl_handler_init(&dev
->hdl
, 0);
1413 dev_err(&pdev
->dev
, "Unsupported tuner\n");
1415 goto err_v4l2_ctrl_handler_free
;
1417 if (dev
->hdl
.error
) {
1418 ret
= dev
->hdl
.error
;
1419 dev_err(&pdev
->dev
, "Could not initialize controls\n");
1420 goto err_v4l2_ctrl_handler_free
;
1423 /* Init video_device structure */
1424 dev
->vdev
= rtl2832_sdr_template
;
1425 dev
->vdev
.queue
= &dev
->vb_queue
;
1426 dev
->vdev
.queue
->lock
= &dev
->vb_queue_lock
;
1427 video_set_drvdata(&dev
->vdev
, dev
);
1429 /* Register the v4l2_device structure */
1430 dev
->v4l2_dev
.release
= rtl2832_sdr_video_release
;
1431 ret
= v4l2_device_register(&pdev
->dev
, &dev
->v4l2_dev
);
1433 dev_err(&pdev
->dev
, "Failed to register v4l2-device %d\n", ret
);
1434 goto err_v4l2_ctrl_handler_free
;
1437 dev
->v4l2_dev
.ctrl_handler
= &dev
->hdl
;
1438 dev
->vdev
.v4l2_dev
= &dev
->v4l2_dev
;
1439 dev
->vdev
.lock
= &dev
->v4l2_lock
;
1440 dev
->vdev
.vfl_dir
= VFL_DIR_RX
;
1442 ret
= video_register_device(&dev
->vdev
, VFL_TYPE_SDR
, -1);
1444 dev_err(&pdev
->dev
, "Failed to register as video device %d\n",
1446 goto err_v4l2_device_unregister
;
1448 dev_info(&pdev
->dev
, "Registered as %s\n",
1449 video_device_node_name(&dev
->vdev
));
1450 dev_info(&pdev
->dev
, "Realtek RTL2832 SDR attached\n");
1451 dev_notice(&pdev
->dev
,
1452 "SDR API is still slightly experimental and functionality changes may follow\n");
1453 platform_set_drvdata(pdev
, dev
);
1455 err_v4l2_device_unregister
:
1456 v4l2_device_unregister(&dev
->v4l2_dev
);
1457 err_v4l2_ctrl_handler_free
:
1458 v4l2_ctrl_handler_free(&dev
->hdl
);
1462 module_put(pdev
->dev
.parent
->driver
->owner
);
1467 static int rtl2832_sdr_remove(struct platform_device
*pdev
)
1469 struct rtl2832_sdr_dev
*dev
= platform_get_drvdata(pdev
);
1471 dev_dbg(&pdev
->dev
, "\n");
1473 mutex_lock(&dev
->vb_queue_lock
);
1474 mutex_lock(&dev
->v4l2_lock
);
1475 /* No need to keep the urbs around after disconnection */
1477 v4l2_device_disconnect(&dev
->v4l2_dev
);
1478 video_unregister_device(&dev
->vdev
);
1479 mutex_unlock(&dev
->v4l2_lock
);
1480 mutex_unlock(&dev
->vb_queue_lock
);
1481 v4l2_device_put(&dev
->v4l2_dev
);
1482 module_put(pdev
->dev
.parent
->driver
->owner
);
1487 static struct platform_driver rtl2832_sdr_driver
= {
1489 .name
= "rtl2832_sdr",
1491 .probe
= rtl2832_sdr_probe
,
1492 .remove
= rtl2832_sdr_remove
,
1494 module_platform_driver(rtl2832_sdr_driver
);
1496 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1497 MODULE_DESCRIPTION("Realtek RTL2832 SDR driver");
1498 MODULE_LICENSE("GPL");