linux/drivers/media/dvb-frontends/rtl2832_sdr.c
<<
>>
Prefs
   1/*
   2 * Realtek RTL2832U SDR 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 * GNU Radio plugin "gr-kernel" for device usage will be on:
  21 * http://git.linuxtv.org/anttip/gr-kernel.git
  22 *
  23 */
  24
  25#include "rtl2832_sdr.h"
  26#include "dvb_usb.h"
  27
  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>
  34
  35#include <linux/platform_device.h>
  36#include <linux/jiffies.h>
  37#include <linux/math64.h>
  38
  39static bool rtl2832_sdr_emulated_fmt;
  40module_param_named(emulated_formats, rtl2832_sdr_emulated_fmt, bool, 0644);
  41MODULE_PARM_DESC(emulated_formats, "enable emulated formats (disappears in future)");
  42
  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)
  46
  47#define MAX_BULK_BUFS            (10)
  48#define BULK_BUFFER_SIZE         (128 * 512)
  49
  50static const struct v4l2_frequency_band bands_adc[] = {
  51        {
  52                .tuner = 0,
  53                .type = V4L2_TUNER_ADC,
  54                .index = 0,
  55                .capability = V4L2_TUNER_CAP_1HZ | V4L2_TUNER_CAP_FREQ_BANDS,
  56                .rangelow   =  300000,
  57                .rangehigh  =  300000,
  58        },
  59        {
  60                .tuner = 0,
  61                .type = V4L2_TUNER_ADC,
  62                .index = 1,
  63                .capability = V4L2_TUNER_CAP_1HZ | V4L2_TUNER_CAP_FREQ_BANDS,
  64                .rangelow   =  900001,
  65                .rangehigh  = 2800000,
  66        },
  67        {
  68                .tuner = 0,
  69                .type = V4L2_TUNER_ADC,
  70                .index = 2,
  71                .capability = V4L2_TUNER_CAP_1HZ | V4L2_TUNER_CAP_FREQ_BANDS,
  72                .rangelow   = 3200000,
  73                .rangehigh  = 3200000,
  74        },
  75};
  76
  77static const struct v4l2_frequency_band bands_fm[] = {
  78        {
  79                .tuner = 1,
  80                .type = V4L2_TUNER_RF,
  81                .index = 0,
  82                .capability = V4L2_TUNER_CAP_1HZ | V4L2_TUNER_CAP_FREQ_BANDS,
  83                .rangelow   =    50000000,
  84                .rangehigh  =  2000000000,
  85        },
  86};
  87
  88/* stream formats */
  89struct rtl2832_sdr_format {
  90        char    *name;
  91        u32     pixelformat;
  92        u32     buffersize;
  93};
  94
  95static struct rtl2832_sdr_format formats[] = {
  96        {
  97                .name           = "Complex U8",
  98                .pixelformat    = V4L2_SDR_FMT_CU8,
  99                .buffersize     = BULK_BUFFER_SIZE,
 100        }, {
 101                .name           = "Complex U16LE (emulated)",
 102                .pixelformat    = V4L2_SDR_FMT_CU16LE,
 103                .buffersize     = BULK_BUFFER_SIZE * 2,
 104        },
 105};
 106
 107static const unsigned int NUM_FORMATS = ARRAY_SIZE(formats);
 108
 109/* intermediate buffers with raw data from the USB device */
 110struct rtl2832_sdr_frame_buf {
 111        /* common v4l buffer stuff -- must be first */
 112        struct vb2_v4l2_buffer vb;
 113        struct list_head list;
 114};
 115
 116struct rtl2832_sdr_dev {
 117#define POWER_ON           0  /* BIT(0) */
 118#define URB_BUF            1  /* BIT(1) */
 119        unsigned long flags;
 120
 121        struct platform_device *pdev;
 122
 123        struct video_device vdev;
 124        struct v4l2_device v4l2_dev;
 125        struct v4l2_subdev *v4l2_subdev;
 126
 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 */
 132
 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 */
 136
 137        /* Pointer to our usb_device, will be NULL after unplug */
 138        struct usb_device *udev; /* Both mutexes most be hold when setting! */
 139
 140        unsigned int vb_full; /* vb is full and packets dropped */
 141
 142        struct urb     *urb_list[MAX_BULK_BUFS];
 143        int            buf_num;
 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;
 148        int urbs_submitted;
 149
 150        unsigned int f_adc, f_tuner;
 151        u32 pixelformat;
 152        u32 buffersize;
 153        unsigned int num_formats;
 154
 155        /* Controls */
 156        struct v4l2_ctrl_handler hdl;
 157        struct v4l2_ctrl *bandwidth_auto;
 158        struct v4l2_ctrl *bandwidth;
 159
 160        /* for sample rate calc */
 161        unsigned int sample;
 162        unsigned int sample_measured;
 163        unsigned long jiffies_next;
 164};
 165
 166/* write multiple registers */
 167static int rtl2832_sdr_wr_regs(struct rtl2832_sdr_dev *dev, u16 reg,
 168                const u8 *val, int len)
 169{
 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;
 173
 174        return pdata->bulk_write(client, reg, val, len);
 175}
 176
 177#if 0
 178/* read multiple registers */
 179static int rtl2832_sdr_rd_regs(struct rtl2832_sdr_dev *dev, u16 reg, u8 *val,
 180                int len)
 181{
 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;
 185
 186        return pdata->bulk_read(client, reg, val, len);
 187}
 188#endif
 189
 190/* write single register */
 191static int rtl2832_sdr_wr_reg(struct rtl2832_sdr_dev *dev, u16 reg, u8 val)
 192{
 193        return rtl2832_sdr_wr_regs(dev, reg, &val, 1);
 194}
 195
 196/* write single register with mask */
 197static int rtl2832_sdr_wr_reg_mask(struct rtl2832_sdr_dev *dev, u16 reg,
 198                u8 val, u8 mask)
 199{
 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;
 203
 204        return pdata->update_bits(client, reg, mask, val);
 205}
 206
 207/* Private functions */
 208static struct rtl2832_sdr_frame_buf *rtl2832_sdr_get_next_fill_buf(
 209                struct rtl2832_sdr_dev *dev)
 210{
 211        unsigned long flags;
 212        struct rtl2832_sdr_frame_buf *buf = NULL;
 213
 214        spin_lock_irqsave(&dev->queued_bufs_lock, flags);
 215        if (list_empty(&dev->queued_bufs))
 216                goto leave;
 217
 218        buf = list_entry(dev->queued_bufs.next,
 219                        struct rtl2832_sdr_frame_buf, list);
 220        list_del(&buf->list);
 221leave:
 222        spin_unlock_irqrestore(&dev->queued_bufs_lock, flags);
 223        return buf;
 224}
 225
 226static unsigned int rtl2832_sdr_convert_stream(struct rtl2832_sdr_dev *dev,
 227                void *dst, const u8 *src, unsigned int src_len)
 228{
 229        struct platform_device *pdev = dev->pdev;
 230        unsigned int dst_len;
 231
 232        if (dev->pixelformat ==  V4L2_SDR_FMT_CU8) {
 233                /* native stream, no need to convert */
 234                memcpy(dst, src, src_len);
 235                dst_len = src_len;
 236        } else if (dev->pixelformat == V4L2_SDR_FMT_CU16LE) {
 237                /* convert u8 to u16 */
 238                unsigned int i;
 239                u16 *u16dst = dst;
 240
 241                for (i = 0; i < src_len; i++)
 242                        *u16dst++ = (src[i] << 8) | (src[i] >> 0);
 243                dst_len = 2 * src_len;
 244        } else {
 245                dst_len = 0;
 246        }
 247
 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;
 254
 255                dev->jiffies_next = jiffies + msecs_to_jiffies(MSECS);
 256                dev->sample_measured = dev->sample;
 257                dev_dbg(&pdev->dev,
 258                        "slen=%u samples=%u msecs=%u sample rate=%lu\n",
 259                        src_len, samples, msecs, samples * 1000UL / msecs);
 260        }
 261
 262        /* total number of I+Q pairs */
 263        dev->sample += src_len / 2;
 264
 265        return dst_len;
 266}
 267
 268/*
 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.
 271 */
 272static void rtl2832_sdr_urb_complete(struct urb *urb)
 273{
 274        struct rtl2832_sdr_dev *dev = urb->context;
 275        struct platform_device *pdev = dev->pdev;
 276        struct rtl2832_sdr_frame_buf *fbuf;
 277
 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);
 281
 282        switch (urb->status) {
 283        case 0:             /* success */
 284        case -ETIMEDOUT:    /* NAK */
 285                break;
 286        case -ECONNRESET:   /* kill */
 287        case -ENOENT:
 288        case -ESHUTDOWN:
 289                return;
 290        default:            /* error */
 291                dev_err_ratelimited(&pdev->dev, "urb failed=%d\n", urb->status);
 292                break;
 293        }
 294
 295        if (likely(urb->actual_length > 0)) {
 296                void *ptr;
 297                unsigned int len;
 298                /* get free framebuffer */
 299                fbuf = rtl2832_sdr_get_next_fill_buf(dev);
 300                if (unlikely(fbuf == NULL)) {
 301                        dev->vb_full++;
 302                        dev_notice_ratelimited(&pdev->dev,
 303                                               "videobuf is full, %d packets dropped\n",
 304                                               dev->vb_full);
 305                        goto skip;
 306                }
 307
 308                /* fill framebuffer */
 309                ptr = vb2_plane_vaddr(&fbuf->vb.vb2_buf, 0);
 310                len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer,
 311                                urb->actual_length);
 312                vb2_set_plane_payload(&fbuf->vb.vb2_buf, 0, len);
 313                fbuf->vb.vb2_buf.timestamp = ktime_get_ns();
 314                fbuf->vb.sequence = dev->sequence++;
 315                vb2_buffer_done(&fbuf->vb.vb2_buf, VB2_BUF_STATE_DONE);
 316        }
 317skip:
 318        usb_submit_urb(urb, GFP_ATOMIC);
 319}
 320
 321static int rtl2832_sdr_kill_urbs(struct rtl2832_sdr_dev *dev)
 322{
 323        struct platform_device *pdev = dev->pdev;
 324        int i;
 325
 326        for (i = dev->urbs_submitted - 1; i >= 0; i--) {
 327                dev_dbg(&pdev->dev, "kill urb=%d\n", i);
 328                /* stop the URB */
 329                usb_kill_urb(dev->urb_list[i]);
 330        }
 331        dev->urbs_submitted = 0;
 332
 333        return 0;
 334}
 335
 336static int rtl2832_sdr_submit_urbs(struct rtl2832_sdr_dev *dev)
 337{
 338        struct platform_device *pdev = dev->pdev;
 339        int i, ret;
 340
 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);
 344                if (ret) {
 345                        dev_err(&pdev->dev,
 346                                "Could not submit urb no. %d - get them all back\n",
 347                                i);
 348                        rtl2832_sdr_kill_urbs(dev);
 349                        return ret;
 350                }
 351                dev->urbs_submitted++;
 352        }
 353
 354        return 0;
 355}
 356
 357static int rtl2832_sdr_free_stream_bufs(struct rtl2832_sdr_dev *dev)
 358{
 359        struct platform_device *pdev = dev->pdev;
 360
 361        if (test_bit(URB_BUF, &dev->flags)) {
 362                while (dev->buf_num) {
 363                        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]);
 368                }
 369        }
 370        clear_bit(URB_BUF, &dev->flags);
 371
 372        return 0;
 373}
 374
 375static int rtl2832_sdr_alloc_stream_bufs(struct rtl2832_sdr_dev *dev)
 376{
 377        struct platform_device *pdev = dev->pdev;
 378
 379        dev->buf_num = 0;
 380        dev->buf_size = BULK_BUFFER_SIZE;
 381
 382        dev_dbg(&pdev->dev, "all in all I will use %u bytes for streaming\n",
 383                MAX_BULK_BUFS * BULK_BUFFER_SIZE);
 384
 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",
 391                                dev->buf_num);
 392                        rtl2832_sdr_free_stream_bufs(dev);
 393                        return -ENOMEM;
 394                }
 395
 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);
 400        }
 401
 402        return 0;
 403}
 404
 405static int rtl2832_sdr_free_urbs(struct rtl2832_sdr_dev *dev)
 406{
 407        struct platform_device *pdev = dev->pdev;
 408        int i;
 409
 410        rtl2832_sdr_kill_urbs(dev);
 411
 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);
 415                        /* free the URBs */
 416                        usb_free_urb(dev->urb_list[i]);
 417                }
 418        }
 419        dev->urbs_initialized = 0;
 420
 421        return 0;
 422}
 423
 424static int rtl2832_sdr_alloc_urbs(struct rtl2832_sdr_dev *dev)
 425{
 426        struct platform_device *pdev = dev->pdev;
 427        int i, j;
 428
 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]);
 437                        return -ENOMEM;
 438                }
 439                usb_fill_bulk_urb(dev->urb_list[i],
 440                                dev->udev,
 441                                usb_rcvbulkpipe(dev->udev, 0x81),
 442                                dev->buf_list[i],
 443                                BULK_BUFFER_SIZE,
 444                                rtl2832_sdr_urb_complete, dev);
 445
 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++;
 449        }
 450
 451        return 0;
 452}
 453
 454/* Must be called with vb_queue_lock hold */
 455static void rtl2832_sdr_cleanup_queued_bufs(struct rtl2832_sdr_dev *dev)
 456{
 457        struct platform_device *pdev = dev->pdev;
 458        unsigned long flags;
 459
 460        dev_dbg(&pdev->dev, "\n");
 461
 462        spin_lock_irqsave(&dev->queued_bufs_lock, flags);
 463        while (!list_empty(&dev->queued_bufs)) {
 464                struct rtl2832_sdr_frame_buf *buf;
 465
 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);
 470        }
 471        spin_unlock_irqrestore(&dev->queued_bufs_lock, flags);
 472}
 473
 474static int rtl2832_sdr_querycap(struct file *file, void *fh,
 475                struct v4l2_capability *cap)
 476{
 477        struct rtl2832_sdr_dev *dev = video_drvdata(file);
 478        struct platform_device *pdev = dev->pdev;
 479
 480        dev_dbg(&pdev->dev, "\n");
 481
 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;
 488        return 0;
 489}
 490
 491/* Videobuf2 operations */
 492static int rtl2832_sdr_queue_setup(struct vb2_queue *vq,
 493                unsigned int *nbuffers,
 494                unsigned int *nplanes, unsigned int sizes[], void *alloc_ctxs[])
 495{
 496        struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq);
 497        struct platform_device *pdev = dev->pdev;
 498
 499        dev_dbg(&pdev->dev, "nbuffers=%d\n", *nbuffers);
 500
 501        /* Need at least 8 buffers */
 502        if (vq->num_buffers + *nbuffers < 8)
 503                *nbuffers = 8 - vq->num_buffers;
 504        *nplanes = 1;
 505        sizes[0] = PAGE_ALIGN(dev->buffersize);
 506        dev_dbg(&pdev->dev, "nbuffers=%d sizes[0]=%d\n", *nbuffers, sizes[0]);
 507        return 0;
 508}
 509
 510static int rtl2832_sdr_buf_prepare(struct vb2_buffer *vb)
 511{
 512        struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
 513
 514        /* Don't allow queing new buffers after device disconnection */
 515        if (!dev->udev)
 516                return -ENODEV;
 517
 518        return 0;
 519}
 520
 521static void rtl2832_sdr_buf_queue(struct vb2_buffer *vb)
 522{
 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);
 527        unsigned long flags;
 528
 529        /* Check the device has not disconnected between prep and queuing */
 530        if (!dev->udev) {
 531                vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
 532                return;
 533        }
 534
 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);
 538}
 539
 540static int rtl2832_sdr_set_adc(struct rtl2832_sdr_dev *dev)
 541{
 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;
 545        int ret;
 546        unsigned int f_sr, f_if;
 547        u8 buf[4], u8tmp1, u8tmp2;
 548        u64 u64tmp;
 549        u32 u32tmp;
 550
 551        dev_dbg(&pdev->dev, "f_adc=%u\n", dev->f_adc);
 552
 553        if (!test_bit(POWER_ON, &dev->flags))
 554                return 0;
 555
 556        if (dev->f_adc == 0)
 557                return 0;
 558
 559        f_sr = dev->f_adc;
 560
 561        ret = rtl2832_sdr_wr_regs(dev, 0x13e, "\x00\x00", 2);
 562        if (ret)
 563                goto err;
 564
 565        ret = rtl2832_sdr_wr_regs(dev, 0x115, "\x00\x00\x00\x00", 4);
 566        if (ret)
 567                goto err;
 568
 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);
 572        else
 573                ret = -EINVAL;
 574
 575        if (ret)
 576                goto err;
 577
 578        /* program IF */
 579        u64tmp = f_if % pdata->clk;
 580        u64tmp *= 0x400000;
 581        u64tmp = div_u64(u64tmp, pdata->clk);
 582        u64tmp = -u64tmp;
 583        u32tmp = u64tmp & 0x3fffff;
 584
 585        dev_dbg(&pdev->dev, "f_if=%u if_ctl=%08x\n", f_if, u32tmp);
 586
 587        buf[0] = (u32tmp >> 16) & 0xff;
 588        buf[1] = (u32tmp >>  8) & 0xff;
 589        buf[2] = (u32tmp >>  0) & 0xff;
 590
 591        ret = rtl2832_sdr_wr_regs(dev, 0x119, buf, 3);
 592        if (ret)
 593                goto err;
 594
 595        /* BB / IF mode */
 596        /* POR: 0x1b1=0x1f, 0x008=0x0d, 0x006=0x80 */
 597        if (f_if) {
 598                u8tmp1 = 0x1a; /* disable Zero-IF */
 599                u8tmp2 = 0x8d; /* enable ADC I */
 600        } else {
 601                u8tmp1 = 0x1b; /* enable Zero-IF, DC, IQ */
 602                u8tmp2 = 0xcd; /* enable ADC I, ADC Q */
 603        }
 604
 605        ret = rtl2832_sdr_wr_reg(dev, 0x1b1, u8tmp1);
 606        if (ret)
 607                goto err;
 608
 609        ret = rtl2832_sdr_wr_reg(dev, 0x008, u8tmp2);
 610        if (ret)
 611                goto err;
 612
 613        ret = rtl2832_sdr_wr_reg(dev, 0x006, 0x80);
 614        if (ret)
 615                goto err;
 616
 617        /* program sampling rate (resampling down) */
 618        u32tmp = div_u64(pdata->clk * 0x400000ULL, f_sr * 4U);
 619        u32tmp <<= 2;
 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);
 625        if (ret)
 626                goto err;
 627
 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",
 631                        20);
 632        if (ret)
 633                goto err;
 634
 635        ret = rtl2832_sdr_wr_regs(dev, 0x017, "\x11\x10", 2);
 636        if (ret)
 637                goto err;
 638
 639        /* mode */
 640        ret = rtl2832_sdr_wr_regs(dev, 0x019, "\x05", 1);
 641        if (ret)
 642                goto err;
 643
 644        ret = rtl2832_sdr_wr_regs(dev, 0x01a, "\x1b\x16\x0d\x06\x01\xff", 6);
 645        if (ret)
 646                goto err;
 647
 648        /* FSM */
 649        ret = rtl2832_sdr_wr_regs(dev, 0x192, "\x00\xf0\x0f", 3);
 650        if (ret)
 651                goto err;
 652
 653        /* PID filter */
 654        ret = rtl2832_sdr_wr_regs(dev, 0x061, "\x60", 1);
 655        if (ret)
 656                goto err;
 657
 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);
 695                break;
 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);
 727                break;
 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);
 752                break;
 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);
 775                break;
 776        default:
 777                dev_notice(&pdev->dev, "Unsupported tuner\n");
 778        }
 779
 780        /* software reset */
 781        ret = rtl2832_sdr_wr_reg_mask(dev, 0x101, 0x04, 0x04);
 782        if (ret)
 783                goto err;
 784
 785        ret = rtl2832_sdr_wr_reg_mask(dev, 0x101, 0x00, 0x04);
 786        if (ret)
 787                goto err;
 788err:
 789        return ret;
 790};
 791
 792static void rtl2832_sdr_unset_adc(struct rtl2832_sdr_dev *dev)
 793{
 794        struct platform_device *pdev = dev->pdev;
 795        int ret;
 796
 797        dev_dbg(&pdev->dev, "\n");
 798
 799        /* PID filter */
 800        ret = rtl2832_sdr_wr_regs(dev, 0x061, "\xe0", 1);
 801        if (ret)
 802                goto err;
 803
 804        /* mode */
 805        ret = rtl2832_sdr_wr_regs(dev, 0x019, "\x20", 1);
 806        if (ret)
 807                goto err;
 808
 809        ret = rtl2832_sdr_wr_regs(dev, 0x017, "\x11\x10", 2);
 810        if (ret)
 811                goto err;
 812
 813        /* FSM */
 814        ret = rtl2832_sdr_wr_regs(dev, 0x192, "\x00\x0f\xff", 3);
 815        if (ret)
 816                goto err;
 817
 818        ret = rtl2832_sdr_wr_regs(dev, 0x13e, "\x40\x00", 2);
 819        if (ret)
 820                goto err;
 821
 822        ret = rtl2832_sdr_wr_regs(dev, 0x115, "\x06\x3f\xce\xcc", 4);
 823        if (ret)
 824                goto err;
 825err:
 826        return;
 827};
 828
 829static int rtl2832_sdr_set_tuner_freq(struct rtl2832_sdr_dev *dev)
 830{
 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;
 837
 838        /*
 839         * tuner RF (Hz)
 840         */
 841        if (dev->f_tuner == 0)
 842                return 0;
 843
 844        /*
 845         * bandwidth (Hz)
 846         */
 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);
 853        } else {
 854                c->bandwidth_hz = v4l2_ctrl_g_ctrl(bandwidth);
 855        }
 856
 857        c->frequency = dev->f_tuner;
 858        c->delivery_system = SYS_DVBT;
 859
 860        dev_dbg(&pdev->dev, "frequency=%u bandwidth=%d\n",
 861                c->frequency, c->bandwidth_hz);
 862
 863        if (!test_bit(POWER_ON, &dev->flags))
 864                return 0;
 865
 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);
 869        }
 870
 871        return 0;
 872};
 873
 874static int rtl2832_sdr_set_tuner(struct rtl2832_sdr_dev *dev)
 875{
 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;
 879
 880        dev_dbg(&pdev->dev, "\n");
 881
 882        if (fe->ops.tuner_ops.init)
 883                fe->ops.tuner_ops.init(fe);
 884
 885        return 0;
 886};
 887
 888static void rtl2832_sdr_unset_tuner(struct rtl2832_sdr_dev *dev)
 889{
 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;
 893
 894        dev_dbg(&pdev->dev, "\n");
 895
 896        if (fe->ops.tuner_ops.sleep)
 897                fe->ops.tuner_ops.sleep(fe);
 898
 899        return;
 900};
 901
 902static int rtl2832_sdr_start_streaming(struct vb2_queue *vq, unsigned int count)
 903{
 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;
 908        int ret;
 909
 910        dev_dbg(&pdev->dev, "\n");
 911
 912        if (!dev->udev)
 913                return -ENODEV;
 914
 915        if (mutex_lock_interruptible(&dev->v4l2_lock))
 916                return -ERESTARTSYS;
 917
 918        if (d->props->power_ctrl)
 919                d->props->power_ctrl(d, 1);
 920
 921        /* enable ADC */
 922        if (d->props->frontend_ctrl)
 923                d->props->frontend_ctrl(pdata->dvb_frontend, 1);
 924
 925        set_bit(POWER_ON, &dev->flags);
 926
 927        /* wake-up tuner */
 928        if (V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, core, s_power))
 929                ret = v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 1);
 930        else
 931                ret = rtl2832_sdr_set_tuner(dev);
 932        if (ret)
 933                goto err;
 934
 935        ret = rtl2832_sdr_set_tuner_freq(dev);
 936        if (ret)
 937                goto err;
 938
 939        ret = rtl2832_sdr_set_adc(dev);
 940        if (ret)
 941                goto err;
 942
 943        ret = rtl2832_sdr_alloc_stream_bufs(dev);
 944        if (ret)
 945                goto err;
 946
 947        ret = rtl2832_sdr_alloc_urbs(dev);
 948        if (ret)
 949                goto err;
 950
 951        dev->sequence = 0;
 952
 953        ret = rtl2832_sdr_submit_urbs(dev);
 954        if (ret)
 955                goto err;
 956
 957err:
 958        mutex_unlock(&dev->v4l2_lock);
 959
 960        return ret;
 961}
 962
 963static void rtl2832_sdr_stop_streaming(struct vb2_queue *vq)
 964{
 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;
 969
 970        dev_dbg(&pdev->dev, "\n");
 971
 972        mutex_lock(&dev->v4l2_lock);
 973
 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);
 979
 980        /* sleep tuner */
 981        if (V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, core, s_power))
 982                v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 0);
 983        else
 984                rtl2832_sdr_unset_tuner(dev);
 985
 986        clear_bit(POWER_ON, &dev->flags);
 987
 988        /* disable ADC */
 989        if (d->props->frontend_ctrl)
 990                d->props->frontend_ctrl(pdata->dvb_frontend, 0);
 991
 992        if (d->props->power_ctrl)
 993                d->props->power_ctrl(d, 0);
 994
 995        mutex_unlock(&dev->v4l2_lock);
 996}
 997
 998static 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,
1006};
1007
1008static int rtl2832_sdr_g_tuner(struct file *file, void *priv,
1009                struct v4l2_tuner *v)
1010{
1011        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1012        struct platform_device *pdev = dev->pdev;
1013        int ret;
1014
1015        dev_dbg(&pdev->dev, "index=%d type=%d\n", v->index, v->type);
1016
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;
1023                ret = 0;
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;
1033                ret = 0;
1034        } else {
1035                ret = -EINVAL;
1036        }
1037        return ret;
1038}
1039
1040static int rtl2832_sdr_s_tuner(struct file *file, void *priv,
1041                const struct v4l2_tuner *v)
1042{
1043        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1044        struct platform_device *pdev = dev->pdev;
1045        int ret;
1046
1047        dev_dbg(&pdev->dev, "\n");
1048
1049        if (v->index == 0) {
1050                ret = 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) {
1055                ret = 0;
1056        } else {
1057                ret = -EINVAL;
1058        }
1059        return ret;
1060}
1061
1062static int rtl2832_sdr_enum_freq_bands(struct file *file, void *priv,
1063                struct v4l2_frequency_band *band)
1064{
1065        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1066        struct platform_device *pdev = dev->pdev;
1067        int ret;
1068
1069        dev_dbg(&pdev->dev, "tuner=%d type=%d index=%d\n",
1070                band->tuner, band->type, band->index);
1071
1072        if (band->tuner == 0) {
1073                if (band->index >= ARRAY_SIZE(bands_adc))
1074                        return -EINVAL;
1075
1076                *band = bands_adc[band->index];
1077                ret = 0;
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))
1083                        return -EINVAL;
1084
1085                *band = bands_fm[band->index];
1086                ret = 0;
1087        } else {
1088                ret = -EINVAL;
1089        }
1090        return ret;
1091}
1092
1093static int rtl2832_sdr_g_frequency(struct file *file, void *priv,
1094                struct v4l2_frequency *f)
1095{
1096        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1097        struct platform_device *pdev = dev->pdev;
1098        int ret;
1099
1100        dev_dbg(&pdev->dev, "tuner=%d type=%d\n", f->tuner, f->type);
1101
1102        if (f->tuner == 0) {
1103                f->frequency = dev->f_adc;
1104                f->type = V4L2_TUNER_ADC;
1105                ret = 0;
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;
1113                ret = 0;
1114        } else {
1115                ret = -EINVAL;
1116        }
1117        return ret;
1118}
1119
1120static int rtl2832_sdr_s_frequency(struct file *file, void *priv,
1121                const struct v4l2_frequency *f)
1122{
1123        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1124        struct platform_device *pdev = dev->pdev;
1125        int ret, band;
1126
1127        dev_dbg(&pdev->dev, "tuner=%d type=%d frequency=%u\n",
1128                f->tuner, f->type, f->frequency);
1129
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)
1133
1134        if (f->tuner == 0 && f->type == V4L2_TUNER_ADC) {
1135                if (f->frequency < BAND_ADC_0)
1136                        band = 0;
1137                else if (f->frequency < BAND_ADC_1)
1138                        band = 1;
1139                else
1140                        band = 2;
1141
1142                dev->f_adc = clamp_t(unsigned int, f->frequency,
1143                                     bands_adc[band].rangelow,
1144                                     bands_adc[band].rangehigh);
1145
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);
1156
1157                ret = rtl2832_sdr_set_tuner_freq(dev);
1158        } else {
1159                ret = -EINVAL;
1160        }
1161        return ret;
1162}
1163
1164static int rtl2832_sdr_enum_fmt_sdr_cap(struct file *file, void *priv,
1165                struct v4l2_fmtdesc *f)
1166{
1167        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1168        struct platform_device *pdev = dev->pdev;
1169
1170        dev_dbg(&pdev->dev, "\n");
1171
1172        if (f->index >= dev->num_formats)
1173                return -EINVAL;
1174
1175        strlcpy(f->description, formats[f->index].name, sizeof(f->description));
1176        f->pixelformat = formats[f->index].pixelformat;
1177
1178        return 0;
1179}
1180
1181static int rtl2832_sdr_g_fmt_sdr_cap(struct file *file, void *priv,
1182                struct v4l2_format *f)
1183{
1184        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1185        struct platform_device *pdev = dev->pdev;
1186
1187        dev_dbg(&pdev->dev, "\n");
1188
1189        f->fmt.sdr.pixelformat = dev->pixelformat;
1190        f->fmt.sdr.buffersize = dev->buffersize;
1191
1192        memset(f->fmt.sdr.reserved, 0, sizeof(f->fmt.sdr.reserved));
1193
1194        return 0;
1195}
1196
1197static int rtl2832_sdr_s_fmt_sdr_cap(struct file *file, void *priv,
1198                struct v4l2_format *f)
1199{
1200        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1201        struct platform_device *pdev = dev->pdev;
1202        struct vb2_queue *q = &dev->vb_queue;
1203        int i;
1204
1205        dev_dbg(&pdev->dev, "pixelformat fourcc %4.4s\n",
1206                (char *)&f->fmt.sdr.pixelformat);
1207
1208        if (vb2_is_busy(q))
1209                return -EBUSY;
1210
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;
1217                        return 0;
1218                }
1219        }
1220
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;
1225
1226        return 0;
1227}
1228
1229static int rtl2832_sdr_try_fmt_sdr_cap(struct file *file, void *priv,
1230                struct v4l2_format *f)
1231{
1232        struct rtl2832_sdr_dev *dev = video_drvdata(file);
1233        struct platform_device *pdev = dev->pdev;
1234        int i;
1235
1236        dev_dbg(&pdev->dev, "pixelformat fourcc %4.4s\n",
1237                (char *)&f->fmt.sdr.pixelformat);
1238
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;
1243                        return 0;
1244                }
1245        }
1246
1247        f->fmt.sdr.pixelformat = formats[0].pixelformat;
1248        f->fmt.sdr.buffersize = formats[0].buffersize;
1249
1250        return 0;
1251}
1252
1253static const struct v4l2_ioctl_ops rtl2832_sdr_ioctl_ops = {
1254        .vidioc_querycap          = rtl2832_sdr_querycap,
1255
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,
1260
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,
1267
1268        .vidioc_streamon          = vb2_ioctl_streamon,
1269        .vidioc_streamoff         = vb2_ioctl_streamoff,
1270
1271        .vidioc_g_tuner           = rtl2832_sdr_g_tuner,
1272        .vidioc_s_tuner           = rtl2832_sdr_s_tuner,
1273
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,
1277
1278        .vidioc_subscribe_event   = v4l2_ctrl_subscribe_event,
1279        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1280        .vidioc_log_status        = v4l2_ctrl_log_status,
1281};
1282
1283static 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,
1291};
1292
1293static 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,
1298};
1299
1300static int rtl2832_sdr_s_ctrl(struct v4l2_ctrl *ctrl)
1301{
1302        struct rtl2832_sdr_dev *dev =
1303                        container_of(ctrl->handler, struct rtl2832_sdr_dev,
1304                                        hdl);
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;
1309        int ret;
1310
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,
1313                ctrl->step);
1314
1315        switch (ctrl->id) {
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);
1322                        u32 offset;
1323
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;
1330                }
1331                c->bandwidth_hz = dev->bandwidth->val;
1332
1333                if (!test_bit(POWER_ON, &dev->flags))
1334                        return 0;
1335
1336                if (fe->ops.tuner_ops.set_params)
1337                        ret = fe->ops.tuner_ops.set_params(fe);
1338                else
1339                        ret = 0;
1340                break;
1341        default:
1342                ret = -EINVAL;
1343        }
1344
1345        return ret;
1346}
1347
1348static const struct v4l2_ctrl_ops rtl2832_sdr_ctrl_ops = {
1349        .s_ctrl = rtl2832_sdr_s_ctrl,
1350};
1351
1352static void rtl2832_sdr_video_release(struct v4l2_device *v)
1353{
1354        struct rtl2832_sdr_dev *dev =
1355                        container_of(v, struct rtl2832_sdr_dev, v4l2_dev);
1356        struct platform_device *pdev = dev->pdev;
1357
1358        dev_dbg(&pdev->dev, "\n");
1359
1360        v4l2_ctrl_handler_free(&dev->hdl);
1361        v4l2_device_unregister(&dev->v4l2_dev);
1362        kfree(dev);
1363}
1364
1365/* Platform driver interface */
1366static int rtl2832_sdr_probe(struct platform_device *pdev)
1367{
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;
1372        int ret;
1373
1374        dev_dbg(&pdev->dev, "\n");
1375
1376        if (!pdata) {
1377                dev_err(&pdev->dev, "Cannot proceed without platform data\n");
1378                ret = -EINVAL;
1379                goto err;
1380        }
1381        if (!pdev->dev.parent->driver) {
1382                dev_dbg(&pdev->dev, "No parent device\n");
1383                ret = -EINVAL;
1384                goto err;
1385        }
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");
1389                ret = -EINVAL;
1390                goto err;
1391        }
1392        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1393        if (dev == NULL) {
1394                ret = -ENOMEM;
1395                goto err_module_put;
1396        }
1397
1398        /* setup the state */
1399        subdev = pdata->v4l2_subdev;
1400        dev->v4l2_subdev = pdata->v4l2_subdev;
1401        dev->pdev = pdev;
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;
1410
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);
1415
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);
1425        if (ret) {
1426                dev_err(&pdev->dev, "Could not initialize vb2 queue\n");
1427                goto err_kfree;
1428        }
1429
1430        /* Register controls */
1431        switch (pdata->tuner) {
1432        case RTL2832_SDR_TUNER_E4000:
1433                v4l2_ctrl_handler_init(&dev->hdl, 9);
1434                if (subdev)
1435                        v4l2_ctrl_add_handler(&dev->hdl, subdev->ctrl_handler, NULL);
1436                break;
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,
1442                                                        0, 1, 1, 1);
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);
1447                break;
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,
1453                                                        0, 1, 1, 1);
1454                dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, ops,
1455                                                   V4L2_CID_RF_TUNER_BANDWIDTH,
1456                                                   6000000, 8000000, 1000000,
1457                                                   6000000);
1458                v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false);
1459                break;
1460        case RTL2832_SDR_TUNER_FC2580:
1461                v4l2_ctrl_handler_init(&dev->hdl, 2);
1462                if (subdev)
1463                        v4l2_ctrl_add_handler(&dev->hdl, subdev->ctrl_handler,
1464                                              NULL);
1465                break;
1466        default:
1467                v4l2_ctrl_handler_init(&dev->hdl, 0);
1468                dev_err(&pdev->dev, "Unsupported tuner\n");
1469                goto err_v4l2_ctrl_handler_free;
1470        }
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;
1475        }
1476
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);
1482
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);
1486        if (ret) {
1487                dev_err(&pdev->dev, "Failed to register v4l2-device %d\n", ret);
1488                goto err_v4l2_ctrl_handler_free;
1489        }
1490
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;
1495
1496        ret = video_register_device(&dev->vdev, VFL_TYPE_SDR, -1);
1497        if (ret) {
1498                dev_err(&pdev->dev, "Failed to register as video device %d\n",
1499                        ret);
1500                goto err_v4l2_device_unregister;
1501        }
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);
1508        return 0;
1509err_v4l2_device_unregister:
1510        v4l2_device_unregister(&dev->v4l2_dev);
1511err_v4l2_ctrl_handler_free:
1512        v4l2_ctrl_handler_free(&dev->hdl);
1513err_kfree:
1514        kfree(dev);
1515err_module_put:
1516        module_put(pdev->dev.parent->driver->owner);
1517err:
1518        return ret;
1519}
1520
1521static int rtl2832_sdr_remove(struct platform_device *pdev)
1522{
1523        struct rtl2832_sdr_dev *dev = platform_get_drvdata(pdev);
1524
1525        dev_dbg(&pdev->dev, "\n");
1526
1527        mutex_lock(&dev->vb_queue_lock);
1528        mutex_lock(&dev->v4l2_lock);
1529        /* No need to keep the urbs around after disconnection */
1530        dev->udev = NULL;
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);
1537
1538        return 0;
1539}
1540
1541static struct platform_driver rtl2832_sdr_driver = {
1542        .driver = {
1543                .name   = "rtl2832_sdr",
1544        },
1545        .probe          = rtl2832_sdr_probe,
1546        .remove         = rtl2832_sdr_remove,
1547};
1548module_platform_driver(rtl2832_sdr_driver);
1549
1550MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1551MODULE_DESCRIPTION("Realtek RTL2832 SDR driver");
1552MODULE_LICENSE("GPL");
1553