linux/drivers/media/platform/vivid/vivid-core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * vivid-core.c - A Virtual Video Test Driver, core initialization
   4 *
   5 * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
   6 */
   7
   8#include <linux/module.h>
   9#include <linux/errno.h>
  10#include <linux/kernel.h>
  11#include <linux/init.h>
  12#include <linux/sched.h>
  13#include <linux/slab.h>
  14#include <linux/vmalloc.h>
  15#include <linux/font.h>
  16#include <linux/mutex.h>
  17#include <linux/platform_device.h>
  18#include <linux/videodev2.h>
  19#include <linux/v4l2-dv-timings.h>
  20#include <media/videobuf2-vmalloc.h>
  21#include <media/videobuf2-dma-contig.h>
  22#include <media/v4l2-dv-timings.h>
  23#include <media/v4l2-ioctl.h>
  24#include <media/v4l2-fh.h>
  25#include <media/v4l2-event.h>
  26
  27#include "vivid-core.h"
  28#include "vivid-vid-common.h"
  29#include "vivid-vid-cap.h"
  30#include "vivid-vid-out.h"
  31#include "vivid-radio-common.h"
  32#include "vivid-radio-rx.h"
  33#include "vivid-radio-tx.h"
  34#include "vivid-sdr-cap.h"
  35#include "vivid-vbi-cap.h"
  36#include "vivid-vbi-out.h"
  37#include "vivid-osd.h"
  38#include "vivid-cec.h"
  39#include "vivid-ctrls.h"
  40
  41#define VIVID_MODULE_NAME "vivid"
  42
  43/* The maximum number of vivid devices */
  44#define VIVID_MAX_DEVS CONFIG_VIDEO_VIVID_MAX_DEVS
  45
  46MODULE_DESCRIPTION("Virtual Video Test Driver");
  47MODULE_AUTHOR("Hans Verkuil");
  48MODULE_LICENSE("GPL");
  49
  50static unsigned n_devs = 1;
  51module_param(n_devs, uint, 0444);
  52MODULE_PARM_DESC(n_devs, " number of driver instances to create");
  53
  54static int vid_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  55module_param_array(vid_cap_nr, int, NULL, 0444);
  56MODULE_PARM_DESC(vid_cap_nr, " videoX start number, -1 is autodetect");
  57
  58static int vid_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  59module_param_array(vid_out_nr, int, NULL, 0444);
  60MODULE_PARM_DESC(vid_out_nr, " videoX start number, -1 is autodetect");
  61
  62static int vbi_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  63module_param_array(vbi_cap_nr, int, NULL, 0444);
  64MODULE_PARM_DESC(vbi_cap_nr, " vbiX start number, -1 is autodetect");
  65
  66static int vbi_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  67module_param_array(vbi_out_nr, int, NULL, 0444);
  68MODULE_PARM_DESC(vbi_out_nr, " vbiX start number, -1 is autodetect");
  69
  70static int sdr_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  71module_param_array(sdr_cap_nr, int, NULL, 0444);
  72MODULE_PARM_DESC(sdr_cap_nr, " swradioX start number, -1 is autodetect");
  73
  74static int radio_rx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  75module_param_array(radio_rx_nr, int, NULL, 0444);
  76MODULE_PARM_DESC(radio_rx_nr, " radioX start number, -1 is autodetect");
  77
  78static int radio_tx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  79module_param_array(radio_tx_nr, int, NULL, 0444);
  80MODULE_PARM_DESC(radio_tx_nr, " radioX start number, -1 is autodetect");
  81
  82static int ccs_cap_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  83module_param_array(ccs_cap_mode, int, NULL, 0444);
  84MODULE_PARM_DESC(ccs_cap_mode, " capture crop/compose/scale mode:\n"
  85                           "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
  86                           "\t\t    -1=user-controlled (default)");
  87
  88static int ccs_out_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
  89module_param_array(ccs_out_mode, int, NULL, 0444);
  90MODULE_PARM_DESC(ccs_out_mode, " output crop/compose/scale mode:\n"
  91                           "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
  92                           "\t\t    -1=user-controlled (default)");
  93
  94static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 1 };
  95module_param_array(multiplanar, uint, NULL, 0444);
  96MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 2 creates a multiplanar device.");
  97
  98/* Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr + vbi-out + vid-out */
  99static unsigned node_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0x1d3d };
 100module_param_array(node_types, uint, NULL, 0444);
 101MODULE_PARM_DESC(node_types, " node types, default is 0x1d3d. Bitmask with the following meaning:\n"
 102                             "\t\t    bit 0: Video Capture node\n"
 103                             "\t\t    bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
 104                             "\t\t    bit 4: Radio Receiver node\n"
 105                             "\t\t    bit 5: Software Defined Radio Receiver node\n"
 106                             "\t\t    bit 8: Video Output node\n"
 107                             "\t\t    bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
 108                             "\t\t    bit 12: Radio Transmitter node\n"
 109                             "\t\t    bit 16: Framebuffer for testing overlays");
 110
 111/* Default: 4 inputs */
 112static unsigned num_inputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 4 };
 113module_param_array(num_inputs, uint, NULL, 0444);
 114MODULE_PARM_DESC(num_inputs, " number of inputs, default is 4");
 115
 116/* Default: input 0 = WEBCAM, 1 = TV, 2 = SVID, 3 = HDMI */
 117static unsigned input_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0xe4 };
 118module_param_array(input_types, uint, NULL, 0444);
 119MODULE_PARM_DESC(input_types, " input types, default is 0xe4. Two bits per input,\n"
 120                              "\t\t    bits 0-1 == input 0, bits 31-30 == input 15.\n"
 121                              "\t\t    Type 0 == webcam, 1 == TV, 2 == S-Video, 3 == HDMI");
 122
 123/* Default: 2 outputs */
 124static unsigned num_outputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
 125module_param_array(num_outputs, uint, NULL, 0444);
 126MODULE_PARM_DESC(num_outputs, " number of outputs, default is 2");
 127
 128/* Default: output 0 = SVID, 1 = HDMI */
 129static unsigned output_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
 130module_param_array(output_types, uint, NULL, 0444);
 131MODULE_PARM_DESC(output_types, " output types, default is 0x02. One bit per output,\n"
 132                              "\t\t    bit 0 == output 0, bit 15 == output 15.\n"
 133                              "\t\t    Type 0 == S-Video, 1 == HDMI");
 134
 135unsigned vivid_debug;
 136module_param(vivid_debug, uint, 0644);
 137MODULE_PARM_DESC(vivid_debug, " activates debug info");
 138
 139static bool no_error_inj;
 140module_param(no_error_inj, bool, 0444);
 141MODULE_PARM_DESC(no_error_inj, " if set disable the error injecting controls");
 142
 143static unsigned int allocators[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0 };
 144module_param_array(allocators, uint, NULL, 0444);
 145MODULE_PARM_DESC(allocators, " memory allocator selection, default is 0.\n"
 146                             "\t\t    0 == vmalloc\n"
 147                             "\t\t    1 == dma-contig");
 148
 149static struct vivid_dev *vivid_devs[VIVID_MAX_DEVS];
 150
 151const struct v4l2_rect vivid_min_rect = {
 152        0, 0, MIN_WIDTH, MIN_HEIGHT
 153};
 154
 155const struct v4l2_rect vivid_max_rect = {
 156        0, 0, MAX_WIDTH * MAX_ZOOM, MAX_HEIGHT * MAX_ZOOM
 157};
 158
 159static const u8 vivid_hdmi_edid[256] = {
 160        0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
 161        0x31, 0xd8, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
 162        0x22, 0x1a, 0x01, 0x03, 0x80, 0x60, 0x36, 0x78,
 163        0x0f, 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26,
 164        0x0f, 0x50, 0x54, 0x2f, 0xcf, 0x00, 0x31, 0x59,
 165        0x45, 0x59, 0x81, 0x80, 0x81, 0x40, 0x90, 0x40,
 166        0x95, 0x00, 0xa9, 0x40, 0xb3, 0x00, 0x08, 0xe8,
 167        0x00, 0x30, 0xf2, 0x70, 0x5a, 0x80, 0xb0, 0x58,
 168        0x8a, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00, 0x1e,
 169        0x00, 0x00, 0x00, 0xfd, 0x00, 0x18, 0x55, 0x18,
 170        0x87, 0x3c, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20,
 171        0x20, 0x20, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x76,
 172        0x69, 0x76, 0x69, 0x64, 0x0a, 0x20, 0x20, 0x20,
 173        0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x10,
 174        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 175        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b,
 176
 177        0x02, 0x03, 0x3f, 0xf0, 0x51, 0x61, 0x60, 0x5f,
 178        0x5e, 0x5d, 0x10, 0x1f, 0x04, 0x13, 0x22, 0x21,
 179        0x20, 0x05, 0x14, 0x02, 0x11, 0x01, 0x23, 0x09,
 180        0x07, 0x07, 0x83, 0x01, 0x00, 0x00, 0x6d, 0x03,
 181        0x0c, 0x00, 0x10, 0x00, 0x00, 0x3c, 0x21, 0x00,
 182        0x60, 0x01, 0x02, 0x03, 0x67, 0xd8, 0x5d, 0xc4,
 183        0x01, 0x78, 0x00, 0x00, 0xe2, 0x00, 0xea, 0xe3,
 184        0x05, 0x00, 0x00, 0xe3, 0x06, 0x01, 0x00, 0x4d,
 185        0xd0, 0x00, 0xa0, 0xf0, 0x70, 0x3e, 0x80, 0x30,
 186        0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00,
 187        0x1e, 0x1a, 0x36, 0x80, 0xa0, 0x70, 0x38, 0x1f,
 188        0x40, 0x30, 0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32,
 189        0x00, 0x00, 0x1a, 0x1a, 0x1d, 0x00, 0x80, 0x51,
 190        0xd0, 0x1c, 0x20, 0x40, 0x80, 0x35, 0x00, 0xc0,
 191        0x1c, 0x32, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
 192        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63,
 193};
 194
 195static int vidioc_querycap(struct file *file, void  *priv,
 196                                        struct v4l2_capability *cap)
 197{
 198        struct vivid_dev *dev = video_drvdata(file);
 199
 200        strcpy(cap->driver, "vivid");
 201        strcpy(cap->card, "vivid");
 202        snprintf(cap->bus_info, sizeof(cap->bus_info),
 203                        "platform:%s", dev->v4l2_dev.name);
 204
 205        cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps |
 206                dev->vbi_cap_caps | dev->vbi_out_caps |
 207                dev->radio_rx_caps | dev->radio_tx_caps |
 208                dev->sdr_cap_caps | V4L2_CAP_DEVICE_CAPS;
 209        return 0;
 210}
 211
 212static int vidioc_s_hw_freq_seek(struct file *file, void *fh, const struct v4l2_hw_freq_seek *a)
 213{
 214        struct video_device *vdev = video_devdata(file);
 215
 216        if (vdev->vfl_type == VFL_TYPE_RADIO)
 217                return vivid_radio_rx_s_hw_freq_seek(file, fh, a);
 218        return -ENOTTY;
 219}
 220
 221static int vidioc_enum_freq_bands(struct file *file, void *fh, struct v4l2_frequency_band *band)
 222{
 223        struct video_device *vdev = video_devdata(file);
 224
 225        if (vdev->vfl_type == VFL_TYPE_RADIO)
 226                return vivid_radio_rx_enum_freq_bands(file, fh, band);
 227        if (vdev->vfl_type == VFL_TYPE_SDR)
 228                return vivid_sdr_enum_freq_bands(file, fh, band);
 229        return -ENOTTY;
 230}
 231
 232static int vidioc_g_tuner(struct file *file, void *fh, struct v4l2_tuner *vt)
 233{
 234        struct video_device *vdev = video_devdata(file);
 235
 236        if (vdev->vfl_type == VFL_TYPE_RADIO)
 237                return vivid_radio_rx_g_tuner(file, fh, vt);
 238        if (vdev->vfl_type == VFL_TYPE_SDR)
 239                return vivid_sdr_g_tuner(file, fh, vt);
 240        return vivid_video_g_tuner(file, fh, vt);
 241}
 242
 243static int vidioc_s_tuner(struct file *file, void *fh, const struct v4l2_tuner *vt)
 244{
 245        struct video_device *vdev = video_devdata(file);
 246
 247        if (vdev->vfl_type == VFL_TYPE_RADIO)
 248                return vivid_radio_rx_s_tuner(file, fh, vt);
 249        if (vdev->vfl_type == VFL_TYPE_SDR)
 250                return vivid_sdr_s_tuner(file, fh, vt);
 251        return vivid_video_s_tuner(file, fh, vt);
 252}
 253
 254static int vidioc_g_frequency(struct file *file, void *fh, struct v4l2_frequency *vf)
 255{
 256        struct vivid_dev *dev = video_drvdata(file);
 257        struct video_device *vdev = video_devdata(file);
 258
 259        if (vdev->vfl_type == VFL_TYPE_RADIO)
 260                return vivid_radio_g_frequency(file,
 261                        vdev->vfl_dir == VFL_DIR_RX ?
 262                        &dev->radio_rx_freq : &dev->radio_tx_freq, vf);
 263        if (vdev->vfl_type == VFL_TYPE_SDR)
 264                return vivid_sdr_g_frequency(file, fh, vf);
 265        return vivid_video_g_frequency(file, fh, vf);
 266}
 267
 268static int vidioc_s_frequency(struct file *file, void *fh, const struct v4l2_frequency *vf)
 269{
 270        struct vivid_dev *dev = video_drvdata(file);
 271        struct video_device *vdev = video_devdata(file);
 272
 273        if (vdev->vfl_type == VFL_TYPE_RADIO)
 274                return vivid_radio_s_frequency(file,
 275                        vdev->vfl_dir == VFL_DIR_RX ?
 276                        &dev->radio_rx_freq : &dev->radio_tx_freq, vf);
 277        if (vdev->vfl_type == VFL_TYPE_SDR)
 278                return vivid_sdr_s_frequency(file, fh, vf);
 279        return vivid_video_s_frequency(file, fh, vf);
 280}
 281
 282static int vidioc_overlay(struct file *file, void *fh, unsigned i)
 283{
 284        struct video_device *vdev = video_devdata(file);
 285
 286        if (vdev->vfl_dir == VFL_DIR_RX)
 287                return vivid_vid_cap_overlay(file, fh, i);
 288        return vivid_vid_out_overlay(file, fh, i);
 289}
 290
 291static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *a)
 292{
 293        struct video_device *vdev = video_devdata(file);
 294
 295        if (vdev->vfl_dir == VFL_DIR_RX)
 296                return vivid_vid_cap_g_fbuf(file, fh, a);
 297        return vivid_vid_out_g_fbuf(file, fh, a);
 298}
 299
 300static int vidioc_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffer *a)
 301{
 302        struct video_device *vdev = video_devdata(file);
 303
 304        if (vdev->vfl_dir == VFL_DIR_RX)
 305                return vivid_vid_cap_s_fbuf(file, fh, a);
 306        return vivid_vid_out_s_fbuf(file, fh, a);
 307}
 308
 309static int vidioc_s_std(struct file *file, void *fh, v4l2_std_id id)
 310{
 311        struct video_device *vdev = video_devdata(file);
 312
 313        if (vdev->vfl_dir == VFL_DIR_RX)
 314                return vivid_vid_cap_s_std(file, fh, id);
 315        return vivid_vid_out_s_std(file, fh, id);
 316}
 317
 318static int vidioc_s_dv_timings(struct file *file, void *fh, struct v4l2_dv_timings *timings)
 319{
 320        struct video_device *vdev = video_devdata(file);
 321
 322        if (vdev->vfl_dir == VFL_DIR_RX)
 323                return vivid_vid_cap_s_dv_timings(file, fh, timings);
 324        return vivid_vid_out_s_dv_timings(file, fh, timings);
 325}
 326
 327static int vidioc_cropcap(struct file *file, void *fh, struct v4l2_cropcap *cc)
 328{
 329        struct video_device *vdev = video_devdata(file);
 330
 331        if (vdev->vfl_dir == VFL_DIR_RX)
 332                return vivid_vid_cap_cropcap(file, fh, cc);
 333        return vivid_vid_out_cropcap(file, fh, cc);
 334}
 335
 336static int vidioc_g_selection(struct file *file, void *fh,
 337                              struct v4l2_selection *sel)
 338{
 339        struct video_device *vdev = video_devdata(file);
 340
 341        if (vdev->vfl_dir == VFL_DIR_RX)
 342                return vivid_vid_cap_g_selection(file, fh, sel);
 343        return vivid_vid_out_g_selection(file, fh, sel);
 344}
 345
 346static int vidioc_s_selection(struct file *file, void *fh,
 347                              struct v4l2_selection *sel)
 348{
 349        struct video_device *vdev = video_devdata(file);
 350
 351        if (vdev->vfl_dir == VFL_DIR_RX)
 352                return vivid_vid_cap_s_selection(file, fh, sel);
 353        return vivid_vid_out_s_selection(file, fh, sel);
 354}
 355
 356static int vidioc_g_parm(struct file *file, void *fh,
 357                          struct v4l2_streamparm *parm)
 358{
 359        struct video_device *vdev = video_devdata(file);
 360
 361        if (vdev->vfl_dir == VFL_DIR_RX)
 362                return vivid_vid_cap_g_parm(file, fh, parm);
 363        return vivid_vid_out_g_parm(file, fh, parm);
 364}
 365
 366static int vidioc_s_parm(struct file *file, void *fh,
 367                          struct v4l2_streamparm *parm)
 368{
 369        struct video_device *vdev = video_devdata(file);
 370
 371        if (vdev->vfl_dir == VFL_DIR_RX)
 372                return vivid_vid_cap_s_parm(file, fh, parm);
 373        return vivid_vid_out_g_parm(file, fh, parm);
 374}
 375
 376static int vidioc_log_status(struct file *file, void *fh)
 377{
 378        struct vivid_dev *dev = video_drvdata(file);
 379        struct video_device *vdev = video_devdata(file);
 380
 381        v4l2_ctrl_log_status(file, fh);
 382        if (vdev->vfl_dir == VFL_DIR_RX && vdev->vfl_type == VFL_TYPE_GRABBER)
 383                tpg_log_status(&dev->tpg);
 384        return 0;
 385}
 386
 387static ssize_t vivid_radio_read(struct file *file, char __user *buf,
 388                         size_t size, loff_t *offset)
 389{
 390        struct video_device *vdev = video_devdata(file);
 391
 392        if (vdev->vfl_dir == VFL_DIR_TX)
 393                return -EINVAL;
 394        return vivid_radio_rx_read(file, buf, size, offset);
 395}
 396
 397static ssize_t vivid_radio_write(struct file *file, const char __user *buf,
 398                          size_t size, loff_t *offset)
 399{
 400        struct video_device *vdev = video_devdata(file);
 401
 402        if (vdev->vfl_dir == VFL_DIR_RX)
 403                return -EINVAL;
 404        return vivid_radio_tx_write(file, buf, size, offset);
 405}
 406
 407static __poll_t vivid_radio_poll(struct file *file, struct poll_table_struct *wait)
 408{
 409        struct video_device *vdev = video_devdata(file);
 410
 411        if (vdev->vfl_dir == VFL_DIR_RX)
 412                return vivid_radio_rx_poll(file, wait);
 413        return vivid_radio_tx_poll(file, wait);
 414}
 415
 416static bool vivid_is_in_use(struct video_device *vdev)
 417{
 418        unsigned long flags;
 419        bool res;
 420
 421        spin_lock_irqsave(&vdev->fh_lock, flags);
 422        res = !list_empty(&vdev->fh_list);
 423        spin_unlock_irqrestore(&vdev->fh_lock, flags);
 424        return res;
 425}
 426
 427static bool vivid_is_last_user(struct vivid_dev *dev)
 428{
 429        unsigned uses = vivid_is_in_use(&dev->vid_cap_dev) +
 430                        vivid_is_in_use(&dev->vid_out_dev) +
 431                        vivid_is_in_use(&dev->vbi_cap_dev) +
 432                        vivid_is_in_use(&dev->vbi_out_dev) +
 433                        vivid_is_in_use(&dev->sdr_cap_dev) +
 434                        vivid_is_in_use(&dev->radio_rx_dev) +
 435                        vivid_is_in_use(&dev->radio_tx_dev);
 436
 437        return uses == 1;
 438}
 439
 440static int vivid_fop_release(struct file *file)
 441{
 442        struct vivid_dev *dev = video_drvdata(file);
 443        struct video_device *vdev = video_devdata(file);
 444
 445        mutex_lock(&dev->mutex);
 446        if (!no_error_inj && v4l2_fh_is_singular_file(file) &&
 447            !video_is_registered(vdev) && vivid_is_last_user(dev)) {
 448                /*
 449                 * I am the last user of this driver, and a disconnect
 450                 * was forced (since this video_device is unregistered),
 451                 * so re-register all video_device's again.
 452                 */
 453                v4l2_info(&dev->v4l2_dev, "reconnect\n");
 454                set_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags);
 455                set_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags);
 456                set_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags);
 457                set_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags);
 458                set_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags);
 459                set_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags);
 460                set_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags);
 461        }
 462        mutex_unlock(&dev->mutex);
 463        if (file->private_data == dev->overlay_cap_owner)
 464                dev->overlay_cap_owner = NULL;
 465        if (file->private_data == dev->radio_rx_rds_owner) {
 466                dev->radio_rx_rds_last_block = 0;
 467                dev->radio_rx_rds_owner = NULL;
 468        }
 469        if (file->private_data == dev->radio_tx_rds_owner) {
 470                dev->radio_tx_rds_last_block = 0;
 471                dev->radio_tx_rds_owner = NULL;
 472        }
 473        if (vdev->queue)
 474                return vb2_fop_release(file);
 475        return v4l2_fh_release(file);
 476}
 477
 478static const struct v4l2_file_operations vivid_fops = {
 479        .owner          = THIS_MODULE,
 480        .open           = v4l2_fh_open,
 481        .release        = vivid_fop_release,
 482        .read           = vb2_fop_read,
 483        .write          = vb2_fop_write,
 484        .poll           = vb2_fop_poll,
 485        .unlocked_ioctl = video_ioctl2,
 486        .mmap           = vb2_fop_mmap,
 487};
 488
 489static const struct v4l2_file_operations vivid_radio_fops = {
 490        .owner          = THIS_MODULE,
 491        .open           = v4l2_fh_open,
 492        .release        = vivid_fop_release,
 493        .read           = vivid_radio_read,
 494        .write          = vivid_radio_write,
 495        .poll           = vivid_radio_poll,
 496        .unlocked_ioctl = video_ioctl2,
 497};
 498
 499static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
 500        .vidioc_querycap                = vidioc_querycap,
 501
 502        .vidioc_enum_fmt_vid_cap        = vidioc_enum_fmt_vid,
 503        .vidioc_g_fmt_vid_cap           = vidioc_g_fmt_vid_cap,
 504        .vidioc_try_fmt_vid_cap         = vidioc_try_fmt_vid_cap,
 505        .vidioc_s_fmt_vid_cap           = vidioc_s_fmt_vid_cap,
 506        .vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_mplane,
 507        .vidioc_g_fmt_vid_cap_mplane    = vidioc_g_fmt_vid_cap_mplane,
 508        .vidioc_try_fmt_vid_cap_mplane  = vidioc_try_fmt_vid_cap_mplane,
 509        .vidioc_s_fmt_vid_cap_mplane    = vidioc_s_fmt_vid_cap_mplane,
 510
 511        .vidioc_enum_fmt_vid_out        = vidioc_enum_fmt_vid,
 512        .vidioc_g_fmt_vid_out           = vidioc_g_fmt_vid_out,
 513        .vidioc_try_fmt_vid_out         = vidioc_try_fmt_vid_out,
 514        .vidioc_s_fmt_vid_out           = vidioc_s_fmt_vid_out,
 515        .vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_mplane,
 516        .vidioc_g_fmt_vid_out_mplane    = vidioc_g_fmt_vid_out_mplane,
 517        .vidioc_try_fmt_vid_out_mplane  = vidioc_try_fmt_vid_out_mplane,
 518        .vidioc_s_fmt_vid_out_mplane    = vidioc_s_fmt_vid_out_mplane,
 519
 520        .vidioc_g_selection             = vidioc_g_selection,
 521        .vidioc_s_selection             = vidioc_s_selection,
 522        .vidioc_cropcap                 = vidioc_cropcap,
 523
 524        .vidioc_g_fmt_vbi_cap           = vidioc_g_fmt_vbi_cap,
 525        .vidioc_try_fmt_vbi_cap         = vidioc_g_fmt_vbi_cap,
 526        .vidioc_s_fmt_vbi_cap           = vidioc_s_fmt_vbi_cap,
 527
 528        .vidioc_g_fmt_sliced_vbi_cap    = vidioc_g_fmt_sliced_vbi_cap,
 529        .vidioc_try_fmt_sliced_vbi_cap  = vidioc_try_fmt_sliced_vbi_cap,
 530        .vidioc_s_fmt_sliced_vbi_cap    = vidioc_s_fmt_sliced_vbi_cap,
 531        .vidioc_g_sliced_vbi_cap        = vidioc_g_sliced_vbi_cap,
 532
 533        .vidioc_g_fmt_vbi_out           = vidioc_g_fmt_vbi_out,
 534        .vidioc_try_fmt_vbi_out         = vidioc_g_fmt_vbi_out,
 535        .vidioc_s_fmt_vbi_out           = vidioc_s_fmt_vbi_out,
 536
 537        .vidioc_g_fmt_sliced_vbi_out    = vidioc_g_fmt_sliced_vbi_out,
 538        .vidioc_try_fmt_sliced_vbi_out  = vidioc_try_fmt_sliced_vbi_out,
 539        .vidioc_s_fmt_sliced_vbi_out    = vidioc_s_fmt_sliced_vbi_out,
 540
 541        .vidioc_enum_fmt_sdr_cap        = vidioc_enum_fmt_sdr_cap,
 542        .vidioc_g_fmt_sdr_cap           = vidioc_g_fmt_sdr_cap,
 543        .vidioc_try_fmt_sdr_cap         = vidioc_try_fmt_sdr_cap,
 544        .vidioc_s_fmt_sdr_cap           = vidioc_s_fmt_sdr_cap,
 545
 546        .vidioc_overlay                 = vidioc_overlay,
 547        .vidioc_enum_framesizes         = vidioc_enum_framesizes,
 548        .vidioc_enum_frameintervals     = vidioc_enum_frameintervals,
 549        .vidioc_g_parm                  = vidioc_g_parm,
 550        .vidioc_s_parm                  = vidioc_s_parm,
 551
 552        .vidioc_enum_fmt_vid_overlay    = vidioc_enum_fmt_vid_overlay,
 553        .vidioc_g_fmt_vid_overlay       = vidioc_g_fmt_vid_overlay,
 554        .vidioc_try_fmt_vid_overlay     = vidioc_try_fmt_vid_overlay,
 555        .vidioc_s_fmt_vid_overlay       = vidioc_s_fmt_vid_overlay,
 556        .vidioc_g_fmt_vid_out_overlay   = vidioc_g_fmt_vid_out_overlay,
 557        .vidioc_try_fmt_vid_out_overlay = vidioc_try_fmt_vid_out_overlay,
 558        .vidioc_s_fmt_vid_out_overlay   = vidioc_s_fmt_vid_out_overlay,
 559        .vidioc_g_fbuf                  = vidioc_g_fbuf,
 560        .vidioc_s_fbuf                  = vidioc_s_fbuf,
 561
 562        .vidioc_reqbufs                 = vb2_ioctl_reqbufs,
 563        .vidioc_create_bufs             = vb2_ioctl_create_bufs,
 564        .vidioc_prepare_buf             = vb2_ioctl_prepare_buf,
 565        .vidioc_querybuf                = vb2_ioctl_querybuf,
 566        .vidioc_qbuf                    = vb2_ioctl_qbuf,
 567        .vidioc_dqbuf                   = vb2_ioctl_dqbuf,
 568        .vidioc_expbuf                  = vb2_ioctl_expbuf,
 569        .vidioc_streamon                = vb2_ioctl_streamon,
 570        .vidioc_streamoff               = vb2_ioctl_streamoff,
 571
 572        .vidioc_enum_input              = vidioc_enum_input,
 573        .vidioc_g_input                 = vidioc_g_input,
 574        .vidioc_s_input                 = vidioc_s_input,
 575        .vidioc_s_audio                 = vidioc_s_audio,
 576        .vidioc_g_audio                 = vidioc_g_audio,
 577        .vidioc_enumaudio               = vidioc_enumaudio,
 578        .vidioc_s_frequency             = vidioc_s_frequency,
 579        .vidioc_g_frequency             = vidioc_g_frequency,
 580        .vidioc_s_tuner                 = vidioc_s_tuner,
 581        .vidioc_g_tuner                 = vidioc_g_tuner,
 582        .vidioc_s_modulator             = vidioc_s_modulator,
 583        .vidioc_g_modulator             = vidioc_g_modulator,
 584        .vidioc_s_hw_freq_seek          = vidioc_s_hw_freq_seek,
 585        .vidioc_enum_freq_bands         = vidioc_enum_freq_bands,
 586
 587        .vidioc_enum_output             = vidioc_enum_output,
 588        .vidioc_g_output                = vidioc_g_output,
 589        .vidioc_s_output                = vidioc_s_output,
 590        .vidioc_s_audout                = vidioc_s_audout,
 591        .vidioc_g_audout                = vidioc_g_audout,
 592        .vidioc_enumaudout              = vidioc_enumaudout,
 593
 594        .vidioc_querystd                = vidioc_querystd,
 595        .vidioc_g_std                   = vidioc_g_std,
 596        .vidioc_s_std                   = vidioc_s_std,
 597        .vidioc_s_dv_timings            = vidioc_s_dv_timings,
 598        .vidioc_g_dv_timings            = vidioc_g_dv_timings,
 599        .vidioc_query_dv_timings        = vidioc_query_dv_timings,
 600        .vidioc_enum_dv_timings         = vidioc_enum_dv_timings,
 601        .vidioc_dv_timings_cap          = vidioc_dv_timings_cap,
 602        .vidioc_g_edid                  = vidioc_g_edid,
 603        .vidioc_s_edid                  = vidioc_s_edid,
 604
 605        .vidioc_log_status              = vidioc_log_status,
 606        .vidioc_subscribe_event         = vidioc_subscribe_event,
 607        .vidioc_unsubscribe_event       = v4l2_event_unsubscribe,
 608};
 609
 610/* -----------------------------------------------------------------
 611        Initialization and module stuff
 612   ------------------------------------------------------------------*/
 613
 614static void vivid_dev_release(struct v4l2_device *v4l2_dev)
 615{
 616        struct vivid_dev *dev = container_of(v4l2_dev, struct vivid_dev, v4l2_dev);
 617
 618        vivid_free_controls(dev);
 619        v4l2_device_unregister(&dev->v4l2_dev);
 620        vfree(dev->scaled_line);
 621        vfree(dev->blended_line);
 622        vfree(dev->edid);
 623        vfree(dev->bitmap_cap);
 624        vfree(dev->bitmap_out);
 625        tpg_free(&dev->tpg);
 626        kfree(dev->query_dv_timings_qmenu);
 627        kfree(dev);
 628}
 629
 630static int vivid_create_instance(struct platform_device *pdev, int inst)
 631{
 632        static const struct v4l2_dv_timings def_dv_timings =
 633                                        V4L2_DV_BT_CEA_1280X720P60;
 634        static const struct vb2_mem_ops * const vivid_mem_ops[2] = {
 635                &vb2_vmalloc_memops,
 636                &vb2_dma_contig_memops,
 637        };
 638        unsigned in_type_counter[4] = { 0, 0, 0, 0 };
 639        unsigned out_type_counter[4] = { 0, 0, 0, 0 };
 640        int ccs_cap = ccs_cap_mode[inst];
 641        int ccs_out = ccs_out_mode[inst];
 642        bool has_tuner;
 643        bool has_modulator;
 644        struct vivid_dev *dev;
 645        struct video_device *vfd;
 646        struct vb2_queue *q;
 647        unsigned node_type = node_types[inst];
 648        unsigned int allocator = allocators[inst];
 649        v4l2_std_id tvnorms_cap = 0, tvnorms_out = 0;
 650        int ret;
 651        int i;
 652
 653        /* allocate main vivid state structure */
 654        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 655        if (!dev)
 656                return -ENOMEM;
 657
 658        dev->inst = inst;
 659
 660        /* register v4l2_device */
 661        snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
 662                        "%s-%03d", VIVID_MODULE_NAME, inst);
 663        ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
 664        if (ret) {
 665                kfree(dev);
 666                return ret;
 667        }
 668        dev->v4l2_dev.release = vivid_dev_release;
 669
 670        /* start detecting feature set */
 671
 672        /* do we use single- or multi-planar? */
 673        dev->multiplanar = multiplanar[inst] > 1;
 674        v4l2_info(&dev->v4l2_dev, "using %splanar format API\n",
 675                        dev->multiplanar ? "multi" : "single ");
 676
 677        /* how many inputs do we have and of what type? */
 678        dev->num_inputs = num_inputs[inst];
 679        if (dev->num_inputs < 1)
 680                dev->num_inputs = 1;
 681        if (dev->num_inputs >= MAX_INPUTS)
 682                dev->num_inputs = MAX_INPUTS;
 683        for (i = 0; i < dev->num_inputs; i++) {
 684                dev->input_type[i] = (input_types[inst] >> (i * 2)) & 0x3;
 685                dev->input_name_counter[i] = in_type_counter[dev->input_type[i]]++;
 686        }
 687        dev->has_audio_inputs = in_type_counter[TV] && in_type_counter[SVID];
 688        if (in_type_counter[HDMI] == 16) {
 689                /* The CEC physical address only allows for max 15 inputs */
 690                in_type_counter[HDMI]--;
 691                dev->num_inputs--;
 692        }
 693
 694        /* how many outputs do we have and of what type? */
 695        dev->num_outputs = num_outputs[inst];
 696        if (dev->num_outputs < 1)
 697                dev->num_outputs = 1;
 698        if (dev->num_outputs >= MAX_OUTPUTS)
 699                dev->num_outputs = MAX_OUTPUTS;
 700        for (i = 0; i < dev->num_outputs; i++) {
 701                dev->output_type[i] = ((output_types[inst] >> i) & 1) ? HDMI : SVID;
 702                dev->output_name_counter[i] = out_type_counter[dev->output_type[i]]++;
 703        }
 704        dev->has_audio_outputs = out_type_counter[SVID];
 705        if (out_type_counter[HDMI] == 16) {
 706                /*
 707                 * The CEC physical address only allows for max 15 inputs,
 708                 * so outputs are also limited to 15 to allow for easy
 709                 * CEC output to input mapping.
 710                 */
 711                out_type_counter[HDMI]--;
 712                dev->num_outputs--;
 713        }
 714
 715        /* do we create a video capture device? */
 716        dev->has_vid_cap = node_type & 0x0001;
 717
 718        /* do we create a vbi capture device? */
 719        if (in_type_counter[TV] || in_type_counter[SVID]) {
 720                dev->has_raw_vbi_cap = node_type & 0x0004;
 721                dev->has_sliced_vbi_cap = node_type & 0x0008;
 722                dev->has_vbi_cap = dev->has_raw_vbi_cap | dev->has_sliced_vbi_cap;
 723        }
 724
 725        /* do we create a video output device? */
 726        dev->has_vid_out = node_type & 0x0100;
 727
 728        /* do we create a vbi output device? */
 729        if (out_type_counter[SVID]) {
 730                dev->has_raw_vbi_out = node_type & 0x0400;
 731                dev->has_sliced_vbi_out = node_type & 0x0800;
 732                dev->has_vbi_out = dev->has_raw_vbi_out | dev->has_sliced_vbi_out;
 733        }
 734
 735        /* do we create a radio receiver device? */
 736        dev->has_radio_rx = node_type & 0x0010;
 737
 738        /* do we create a radio transmitter device? */
 739        dev->has_radio_tx = node_type & 0x1000;
 740
 741        /* do we create a software defined radio capture device? */
 742        dev->has_sdr_cap = node_type & 0x0020;
 743
 744        /* do we have a tuner? */
 745        has_tuner = ((dev->has_vid_cap || dev->has_vbi_cap) && in_type_counter[TV]) ||
 746                    dev->has_radio_rx || dev->has_sdr_cap;
 747
 748        /* do we have a modulator? */
 749        has_modulator = dev->has_radio_tx;
 750
 751        if (dev->has_vid_cap)
 752                /* do we have a framebuffer for overlay testing? */
 753                dev->has_fb = node_type & 0x10000;
 754
 755        /* can we do crop/compose/scaling while capturing? */
 756        if (no_error_inj && ccs_cap == -1)
 757                ccs_cap = 7;
 758
 759        /* if ccs_cap == -1, then the use can select it using controls */
 760        if (ccs_cap != -1) {
 761                dev->has_crop_cap = ccs_cap & 1;
 762                dev->has_compose_cap = ccs_cap & 2;
 763                dev->has_scaler_cap = ccs_cap & 4;
 764                v4l2_info(&dev->v4l2_dev, "Capture Crop: %c Compose: %c Scaler: %c\n",
 765                        dev->has_crop_cap ? 'Y' : 'N',
 766                        dev->has_compose_cap ? 'Y' : 'N',
 767                        dev->has_scaler_cap ? 'Y' : 'N');
 768        }
 769
 770        /* can we do crop/compose/scaling with video output? */
 771        if (no_error_inj && ccs_out == -1)
 772                ccs_out = 7;
 773
 774        /* if ccs_out == -1, then the use can select it using controls */
 775        if (ccs_out != -1) {
 776                dev->has_crop_out = ccs_out & 1;
 777                dev->has_compose_out = ccs_out & 2;
 778                dev->has_scaler_out = ccs_out & 4;
 779                v4l2_info(&dev->v4l2_dev, "Output Crop: %c Compose: %c Scaler: %c\n",
 780                        dev->has_crop_out ? 'Y' : 'N',
 781                        dev->has_compose_out ? 'Y' : 'N',
 782                        dev->has_scaler_out ? 'Y' : 'N');
 783        }
 784
 785        /* end detecting feature set */
 786
 787        if (dev->has_vid_cap) {
 788                /* set up the capabilities of the video capture device */
 789                dev->vid_cap_caps = dev->multiplanar ?
 790                        V4L2_CAP_VIDEO_CAPTURE_MPLANE :
 791                        V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY;
 792                dev->vid_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 793                if (dev->has_audio_inputs)
 794                        dev->vid_cap_caps |= V4L2_CAP_AUDIO;
 795                if (in_type_counter[TV])
 796                        dev->vid_cap_caps |= V4L2_CAP_TUNER;
 797        }
 798        if (dev->has_vid_out) {
 799                /* set up the capabilities of the video output device */
 800                dev->vid_out_caps = dev->multiplanar ?
 801                        V4L2_CAP_VIDEO_OUTPUT_MPLANE :
 802                        V4L2_CAP_VIDEO_OUTPUT;
 803                if (dev->has_fb)
 804                        dev->vid_out_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
 805                dev->vid_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 806                if (dev->has_audio_outputs)
 807                        dev->vid_out_caps |= V4L2_CAP_AUDIO;
 808        }
 809        if (dev->has_vbi_cap) {
 810                /* set up the capabilities of the vbi capture device */
 811                dev->vbi_cap_caps = (dev->has_raw_vbi_cap ? V4L2_CAP_VBI_CAPTURE : 0) |
 812                                    (dev->has_sliced_vbi_cap ? V4L2_CAP_SLICED_VBI_CAPTURE : 0);
 813                dev->vbi_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 814                if (dev->has_audio_inputs)
 815                        dev->vbi_cap_caps |= V4L2_CAP_AUDIO;
 816                if (in_type_counter[TV])
 817                        dev->vbi_cap_caps |= V4L2_CAP_TUNER;
 818        }
 819        if (dev->has_vbi_out) {
 820                /* set up the capabilities of the vbi output device */
 821                dev->vbi_out_caps = (dev->has_raw_vbi_out ? V4L2_CAP_VBI_OUTPUT : 0) |
 822                                    (dev->has_sliced_vbi_out ? V4L2_CAP_SLICED_VBI_OUTPUT : 0);
 823                dev->vbi_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 824                if (dev->has_audio_outputs)
 825                        dev->vbi_out_caps |= V4L2_CAP_AUDIO;
 826        }
 827        if (dev->has_sdr_cap) {
 828                /* set up the capabilities of the sdr capture device */
 829                dev->sdr_cap_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_TUNER;
 830                dev->sdr_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 831        }
 832        /* set up the capabilities of the radio receiver device */
 833        if (dev->has_radio_rx)
 834                dev->radio_rx_caps = V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE |
 835                                     V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
 836                                     V4L2_CAP_READWRITE;
 837        /* set up the capabilities of the radio transmitter device */
 838        if (dev->has_radio_tx)
 839                dev->radio_tx_caps = V4L2_CAP_RDS_OUTPUT | V4L2_CAP_MODULATOR |
 840                                     V4L2_CAP_READWRITE;
 841
 842        ret = -ENOMEM;
 843        /* initialize the test pattern generator */
 844        tpg_init(&dev->tpg, 640, 360);
 845        if (tpg_alloc(&dev->tpg, MAX_ZOOM * MAX_WIDTH))
 846                goto free_dev;
 847        dev->scaled_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
 848        if (!dev->scaled_line)
 849                goto free_dev;
 850        dev->blended_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
 851        if (!dev->blended_line)
 852                goto free_dev;
 853
 854        /* load the edid */
 855        dev->edid = vmalloc(256 * 128);
 856        if (!dev->edid)
 857                goto free_dev;
 858
 859        /* create a string array containing the names of all the preset timings */
 860        while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
 861                dev->query_dv_timings_size++;
 862        dev->query_dv_timings_qmenu = kmalloc_array(dev->query_dv_timings_size,
 863                                                    (sizeof(void *) + 32),
 864                                                    GFP_KERNEL);
 865        if (dev->query_dv_timings_qmenu == NULL)
 866                goto free_dev;
 867        for (i = 0; i < dev->query_dv_timings_size; i++) {
 868                const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
 869                char *p = (char *)&dev->query_dv_timings_qmenu[dev->query_dv_timings_size];
 870                u32 htot, vtot;
 871
 872                p += i * 32;
 873                dev->query_dv_timings_qmenu[i] = p;
 874
 875                htot = V4L2_DV_BT_FRAME_WIDTH(bt);
 876                vtot = V4L2_DV_BT_FRAME_HEIGHT(bt);
 877                snprintf(p, 32, "%ux%u%s%u",
 878                        bt->width, bt->height, bt->interlaced ? "i" : "p",
 879                        (u32)bt->pixelclock / (htot * vtot));
 880        }
 881
 882        /* disable invalid ioctls based on the feature set */
 883        if (!dev->has_audio_inputs) {
 884                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO);
 885                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO);
 886                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO);
 887                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO);
 888                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO);
 889                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO);
 890        }
 891        if (!dev->has_audio_outputs) {
 892                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT);
 893                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT);
 894                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT);
 895                v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT);
 896                v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT);
 897                v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT);
 898        }
 899        if (!in_type_counter[TV] && !in_type_counter[SVID]) {
 900                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD);
 901                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD);
 902                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD);
 903                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD);
 904        }
 905        if (!out_type_counter[SVID]) {
 906                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD);
 907                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD);
 908                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD);
 909        }
 910        if (!has_tuner && !has_modulator) {
 911                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY);
 912                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY);
 913                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY);
 914                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY);
 915        }
 916        if (!has_tuner) {
 917                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER);
 918                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER);
 919                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER);
 920                v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER);
 921        }
 922        if (in_type_counter[HDMI] == 0) {
 923                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID);
 924                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID);
 925                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP);
 926                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS);
 927                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS);
 928                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS);
 929                v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS);
 930        }
 931        if (out_type_counter[HDMI] == 0) {
 932                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID);
 933                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP);
 934                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS);
 935                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS);
 936                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS);
 937        }
 938        if (!dev->has_fb) {
 939                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF);
 940                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF);
 941                v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY);
 942        }
 943        v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
 944        v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
 945        v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
 946        v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY);
 947        v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY);
 948        v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES);
 949        v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS);
 950        v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY);
 951        v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY);
 952
 953        /* configure internal data */
 954        dev->fmt_cap = &vivid_formats[0];
 955        dev->fmt_out = &vivid_formats[0];
 956        if (!dev->multiplanar)
 957                vivid_formats[0].data_offset[0] = 0;
 958        dev->webcam_size_idx = 1;
 959        dev->webcam_ival_idx = 3;
 960        tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc);
 961        dev->std_cap = V4L2_STD_PAL;
 962        dev->std_out = V4L2_STD_PAL;
 963        if (dev->input_type[0] == TV || dev->input_type[0] == SVID)
 964                tvnorms_cap = V4L2_STD_ALL;
 965        if (dev->output_type[0] == SVID)
 966                tvnorms_out = V4L2_STD_ALL;
 967        dev->dv_timings_cap = def_dv_timings;
 968        dev->dv_timings_out = def_dv_timings;
 969        dev->tv_freq = 2804 /* 175.25 * 16 */;
 970        dev->tv_audmode = V4L2_TUNER_MODE_STEREO;
 971        dev->tv_field_cap = V4L2_FIELD_INTERLACED;
 972        dev->tv_field_out = V4L2_FIELD_INTERLACED;
 973        dev->radio_rx_freq = 95000 * 16;
 974        dev->radio_rx_audmode = V4L2_TUNER_MODE_STEREO;
 975        if (dev->has_radio_tx) {
 976                dev->radio_tx_freq = 95500 * 16;
 977                dev->radio_rds_loop = false;
 978        }
 979        dev->radio_tx_subchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_RDS;
 980        dev->sdr_adc_freq = 300000;
 981        dev->sdr_fm_freq = 50000000;
 982        dev->sdr_pixelformat = V4L2_SDR_FMT_CU8;
 983        dev->sdr_buffersize = SDR_CAP_SAMPLES_PER_BUF * 2;
 984
 985        dev->edid_max_blocks = dev->edid_blocks = 2;
 986        memcpy(dev->edid, vivid_hdmi_edid, sizeof(vivid_hdmi_edid));
 987        dev->radio_rds_init_time = ktime_get();
 988
 989        /* create all controls */
 990        ret = vivid_create_controls(dev, ccs_cap == -1, ccs_out == -1, no_error_inj,
 991                        in_type_counter[TV] || in_type_counter[SVID] ||
 992                        out_type_counter[SVID],
 993                        in_type_counter[HDMI] || out_type_counter[HDMI]);
 994        if (ret)
 995                goto unreg_dev;
 996
 997        /*
 998         * update the capture and output formats to do a proper initial
 999         * configuration.
1000         */
1001        vivid_update_format_cap(dev, false);
1002        vivid_update_format_out(dev);
1003
1004        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_cap);
1005        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_out);
1006        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_cap);
1007        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_out);
1008        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_rx);
1009        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_tx);
1010        v4l2_ctrl_handler_setup(&dev->ctrl_hdl_sdr_cap);
1011
1012        /* initialize overlay */
1013        dev->fb_cap.fmt.width = dev->src_rect.width;
1014        dev->fb_cap.fmt.height = dev->src_rect.height;
1015        dev->fb_cap.fmt.pixelformat = dev->fmt_cap->fourcc;
1016        dev->fb_cap.fmt.bytesperline = dev->src_rect.width * tpg_g_twopixelsize(&dev->tpg, 0) / 2;
1017        dev->fb_cap.fmt.sizeimage = dev->src_rect.height * dev->fb_cap.fmt.bytesperline;
1018
1019        /* initialize locks */
1020        spin_lock_init(&dev->slock);
1021        mutex_init(&dev->mutex);
1022
1023        /* init dma queues */
1024        INIT_LIST_HEAD(&dev->vid_cap_active);
1025        INIT_LIST_HEAD(&dev->vid_out_active);
1026        INIT_LIST_HEAD(&dev->vbi_cap_active);
1027        INIT_LIST_HEAD(&dev->vbi_out_active);
1028        INIT_LIST_HEAD(&dev->sdr_cap_active);
1029
1030        INIT_LIST_HEAD(&dev->cec_work_list);
1031        spin_lock_init(&dev->cec_slock);
1032        /*
1033         * Same as create_singlethread_workqueue, but now I can use the
1034         * string formatting of alloc_ordered_workqueue.
1035         */
1036        dev->cec_workqueue =
1037                alloc_ordered_workqueue("vivid-%03d-cec", WQ_MEM_RECLAIM, inst);
1038        if (!dev->cec_workqueue) {
1039                ret = -ENOMEM;
1040                goto unreg_dev;
1041        }
1042
1043        if (allocator == 1)
1044                dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1045        else if (allocator >= ARRAY_SIZE(vivid_mem_ops))
1046                allocator = 0;
1047
1048        /* start creating the vb2 queues */
1049        if (dev->has_vid_cap) {
1050                /* initialize vid_cap queue */
1051                q = &dev->vb_vid_cap_q;
1052                q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
1053                        V4L2_BUF_TYPE_VIDEO_CAPTURE;
1054                q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1055                q->drv_priv = dev;
1056                q->buf_struct_size = sizeof(struct vivid_buffer);
1057                q->ops = &vivid_vid_cap_qops;
1058                q->mem_ops = vivid_mem_ops[allocator];
1059                q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1060                q->min_buffers_needed = 2;
1061                q->lock = &dev->mutex;
1062                q->dev = dev->v4l2_dev.dev;
1063
1064                ret = vb2_queue_init(q);
1065                if (ret)
1066                        goto unreg_dev;
1067        }
1068
1069        if (dev->has_vid_out) {
1070                /* initialize vid_out queue */
1071                q = &dev->vb_vid_out_q;
1072                q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE :
1073                        V4L2_BUF_TYPE_VIDEO_OUTPUT;
1074                q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_WRITE;
1075                q->drv_priv = dev;
1076                q->buf_struct_size = sizeof(struct vivid_buffer);
1077                q->ops = &vivid_vid_out_qops;
1078                q->mem_ops = vivid_mem_ops[allocator];
1079                q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1080                q->min_buffers_needed = 2;
1081                q->lock = &dev->mutex;
1082                q->dev = dev->v4l2_dev.dev;
1083
1084                ret = vb2_queue_init(q);
1085                if (ret)
1086                        goto unreg_dev;
1087        }
1088
1089        if (dev->has_vbi_cap) {
1090                /* initialize vbi_cap queue */
1091                q = &dev->vb_vbi_cap_q;
1092                q->type = dev->has_raw_vbi_cap ? V4L2_BUF_TYPE_VBI_CAPTURE :
1093                                              V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
1094                q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1095                q->drv_priv = dev;
1096                q->buf_struct_size = sizeof(struct vivid_buffer);
1097                q->ops = &vivid_vbi_cap_qops;
1098                q->mem_ops = vivid_mem_ops[allocator];
1099                q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1100                q->min_buffers_needed = 2;
1101                q->lock = &dev->mutex;
1102                q->dev = dev->v4l2_dev.dev;
1103
1104                ret = vb2_queue_init(q);
1105                if (ret)
1106                        goto unreg_dev;
1107        }
1108
1109        if (dev->has_vbi_out) {
1110                /* initialize vbi_out queue */
1111                q = &dev->vb_vbi_out_q;
1112                q->type = dev->has_raw_vbi_out ? V4L2_BUF_TYPE_VBI_OUTPUT :
1113                                              V4L2_BUF_TYPE_SLICED_VBI_OUTPUT;
1114                q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_WRITE;
1115                q->drv_priv = dev;
1116                q->buf_struct_size = sizeof(struct vivid_buffer);
1117                q->ops = &vivid_vbi_out_qops;
1118                q->mem_ops = vivid_mem_ops[allocator];
1119                q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1120                q->min_buffers_needed = 2;
1121                q->lock = &dev->mutex;
1122                q->dev = dev->v4l2_dev.dev;
1123
1124                ret = vb2_queue_init(q);
1125                if (ret)
1126                        goto unreg_dev;
1127        }
1128
1129        if (dev->has_sdr_cap) {
1130                /* initialize sdr_cap queue */
1131                q = &dev->vb_sdr_cap_q;
1132                q->type = V4L2_BUF_TYPE_SDR_CAPTURE;
1133                q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1134                q->drv_priv = dev;
1135                q->buf_struct_size = sizeof(struct vivid_buffer);
1136                q->ops = &vivid_sdr_cap_qops;
1137                q->mem_ops = vivid_mem_ops[allocator];
1138                q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1139                q->min_buffers_needed = 8;
1140                q->lock = &dev->mutex;
1141                q->dev = dev->v4l2_dev.dev;
1142
1143                ret = vb2_queue_init(q);
1144                if (ret)
1145                        goto unreg_dev;
1146        }
1147
1148        if (dev->has_fb) {
1149                /* Create framebuffer for testing capture/output overlay */
1150                ret = vivid_fb_init(dev);
1151                if (ret)
1152                        goto unreg_dev;
1153                v4l2_info(&dev->v4l2_dev, "Framebuffer device registered as fb%d\n",
1154                                dev->fb_info.node);
1155        }
1156
1157        /* finally start creating the device nodes */
1158        if (dev->has_vid_cap) {
1159                vfd = &dev->vid_cap_dev;
1160                snprintf(vfd->name, sizeof(vfd->name),
1161                         "vivid-%03d-vid-cap", inst);
1162                vfd->fops = &vivid_fops;
1163                vfd->ioctl_ops = &vivid_ioctl_ops;
1164                vfd->device_caps = dev->vid_cap_caps;
1165                vfd->release = video_device_release_empty;
1166                vfd->v4l2_dev = &dev->v4l2_dev;
1167                vfd->queue = &dev->vb_vid_cap_q;
1168                vfd->tvnorms = tvnorms_cap;
1169
1170                /*
1171                 * Provide a mutex to v4l2 core. It will be used to protect
1172                 * all fops and v4l2 ioctls.
1173                 */
1174                vfd->lock = &dev->mutex;
1175                video_set_drvdata(vfd, dev);
1176
1177#ifdef CONFIG_VIDEO_VIVID_CEC
1178                if (in_type_counter[HDMI]) {
1179                        struct cec_adapter *adap;
1180
1181                        adap = vivid_cec_alloc_adap(dev, 0, false);
1182                        ret = PTR_ERR_OR_ZERO(adap);
1183                        if (ret < 0)
1184                                goto unreg_dev;
1185                        dev->cec_rx_adap = adap;
1186                        ret = cec_register_adapter(adap, &pdev->dev);
1187                        if (ret < 0) {
1188                                cec_delete_adapter(adap);
1189                                dev->cec_rx_adap = NULL;
1190                                goto unreg_dev;
1191                        }
1192                        cec_s_phys_addr(adap, 0, false);
1193                        v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI input 0\n",
1194                                  dev_name(&adap->devnode.dev));
1195                }
1196#endif
1197
1198                ret = video_register_device(vfd, VFL_TYPE_GRABBER, vid_cap_nr[inst]);
1199                if (ret < 0)
1200                        goto unreg_dev;
1201                v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1202                                          video_device_node_name(vfd));
1203        }
1204
1205        if (dev->has_vid_out) {
1206#ifdef CONFIG_VIDEO_VIVID_CEC
1207                unsigned int bus_cnt = 0;
1208#endif
1209
1210                vfd = &dev->vid_out_dev;
1211                snprintf(vfd->name, sizeof(vfd->name),
1212                         "vivid-%03d-vid-out", inst);
1213                vfd->vfl_dir = VFL_DIR_TX;
1214                vfd->fops = &vivid_fops;
1215                vfd->ioctl_ops = &vivid_ioctl_ops;
1216                vfd->device_caps = dev->vid_out_caps;
1217                vfd->release = video_device_release_empty;
1218                vfd->v4l2_dev = &dev->v4l2_dev;
1219                vfd->queue = &dev->vb_vid_out_q;
1220                vfd->tvnorms = tvnorms_out;
1221
1222                /*
1223                 * Provide a mutex to v4l2 core. It will be used to protect
1224                 * all fops and v4l2 ioctls.
1225                 */
1226                vfd->lock = &dev->mutex;
1227                video_set_drvdata(vfd, dev);
1228
1229#ifdef CONFIG_VIDEO_VIVID_CEC
1230                for (i = 0; i < dev->num_outputs; i++) {
1231                        struct cec_adapter *adap;
1232
1233                        if (dev->output_type[i] != HDMI)
1234                                continue;
1235                        dev->cec_output2bus_map[i] = bus_cnt;
1236                        adap = vivid_cec_alloc_adap(dev, bus_cnt, true);
1237                        ret = PTR_ERR_OR_ZERO(adap);
1238                        if (ret < 0)
1239                                goto unreg_dev;
1240                        dev->cec_tx_adap[bus_cnt] = adap;
1241                        ret = cec_register_adapter(adap, &pdev->dev);
1242                        if (ret < 0) {
1243                                cec_delete_adapter(adap);
1244                                dev->cec_tx_adap[bus_cnt] = NULL;
1245                                goto unreg_dev;
1246                        }
1247                        v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI output %d\n",
1248                                  dev_name(&adap->devnode.dev), bus_cnt);
1249                        bus_cnt++;
1250                        if (bus_cnt <= out_type_counter[HDMI])
1251                                cec_s_phys_addr(adap, bus_cnt << 12, false);
1252                        else
1253                                cec_s_phys_addr(adap, 0x1000, false);
1254                }
1255#endif
1256
1257                ret = video_register_device(vfd, VFL_TYPE_GRABBER, vid_out_nr[inst]);
1258                if (ret < 0)
1259                        goto unreg_dev;
1260                v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s\n",
1261                                          video_device_node_name(vfd));
1262        }
1263
1264        if (dev->has_vbi_cap) {
1265                vfd = &dev->vbi_cap_dev;
1266                snprintf(vfd->name, sizeof(vfd->name),
1267                         "vivid-%03d-vbi-cap", inst);
1268                vfd->fops = &vivid_fops;
1269                vfd->ioctl_ops = &vivid_ioctl_ops;
1270                vfd->device_caps = dev->vbi_cap_caps;
1271                vfd->release = video_device_release_empty;
1272                vfd->v4l2_dev = &dev->v4l2_dev;
1273                vfd->queue = &dev->vb_vbi_cap_q;
1274                vfd->lock = &dev->mutex;
1275                vfd->tvnorms = tvnorms_cap;
1276                video_set_drvdata(vfd, dev);
1277
1278                ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_cap_nr[inst]);
1279                if (ret < 0)
1280                        goto unreg_dev;
1281                v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s, supports %s VBI\n",
1282                                          video_device_node_name(vfd),
1283                                          (dev->has_raw_vbi_cap && dev->has_sliced_vbi_cap) ?
1284                                          "raw and sliced" :
1285                                          (dev->has_raw_vbi_cap ? "raw" : "sliced"));
1286        }
1287
1288        if (dev->has_vbi_out) {
1289                vfd = &dev->vbi_out_dev;
1290                snprintf(vfd->name, sizeof(vfd->name),
1291                         "vivid-%03d-vbi-out", inst);
1292                vfd->vfl_dir = VFL_DIR_TX;
1293                vfd->fops = &vivid_fops;
1294                vfd->ioctl_ops = &vivid_ioctl_ops;
1295                vfd->device_caps = dev->vbi_out_caps;
1296                vfd->release = video_device_release_empty;
1297                vfd->v4l2_dev = &dev->v4l2_dev;
1298                vfd->queue = &dev->vb_vbi_out_q;
1299                vfd->lock = &dev->mutex;
1300                vfd->tvnorms = tvnorms_out;
1301                video_set_drvdata(vfd, dev);
1302
1303                ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_out_nr[inst]);
1304                if (ret < 0)
1305                        goto unreg_dev;
1306                v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s, supports %s VBI\n",
1307                                          video_device_node_name(vfd),
1308                                          (dev->has_raw_vbi_out && dev->has_sliced_vbi_out) ?
1309                                          "raw and sliced" :
1310                                          (dev->has_raw_vbi_out ? "raw" : "sliced"));
1311        }
1312
1313        if (dev->has_sdr_cap) {
1314                vfd = &dev->sdr_cap_dev;
1315                snprintf(vfd->name, sizeof(vfd->name),
1316                         "vivid-%03d-sdr-cap", inst);
1317                vfd->fops = &vivid_fops;
1318                vfd->ioctl_ops = &vivid_ioctl_ops;
1319                vfd->device_caps = dev->sdr_cap_caps;
1320                vfd->release = video_device_release_empty;
1321                vfd->v4l2_dev = &dev->v4l2_dev;
1322                vfd->queue = &dev->vb_sdr_cap_q;
1323                vfd->lock = &dev->mutex;
1324                video_set_drvdata(vfd, dev);
1325
1326                ret = video_register_device(vfd, VFL_TYPE_SDR, sdr_cap_nr[inst]);
1327                if (ret < 0)
1328                        goto unreg_dev;
1329                v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1330                                          video_device_node_name(vfd));
1331        }
1332
1333        if (dev->has_radio_rx) {
1334                vfd = &dev->radio_rx_dev;
1335                snprintf(vfd->name, sizeof(vfd->name),
1336                         "vivid-%03d-rad-rx", inst);
1337                vfd->fops = &vivid_radio_fops;
1338                vfd->ioctl_ops = &vivid_ioctl_ops;
1339                vfd->device_caps = dev->radio_rx_caps;
1340                vfd->release = video_device_release_empty;
1341                vfd->v4l2_dev = &dev->v4l2_dev;
1342                vfd->lock = &dev->mutex;
1343                video_set_drvdata(vfd, dev);
1344
1345                ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_rx_nr[inst]);
1346                if (ret < 0)
1347                        goto unreg_dev;
1348                v4l2_info(&dev->v4l2_dev, "V4L2 receiver device registered as %s\n",
1349                                          video_device_node_name(vfd));
1350        }
1351
1352        if (dev->has_radio_tx) {
1353                vfd = &dev->radio_tx_dev;
1354                snprintf(vfd->name, sizeof(vfd->name),
1355                         "vivid-%03d-rad-tx", inst);
1356                vfd->vfl_dir = VFL_DIR_TX;
1357                vfd->fops = &vivid_radio_fops;
1358                vfd->ioctl_ops = &vivid_ioctl_ops;
1359                vfd->device_caps = dev->radio_tx_caps;
1360                vfd->release = video_device_release_empty;
1361                vfd->v4l2_dev = &dev->v4l2_dev;
1362                vfd->lock = &dev->mutex;
1363                video_set_drvdata(vfd, dev);
1364
1365                ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_tx_nr[inst]);
1366                if (ret < 0)
1367                        goto unreg_dev;
1368                v4l2_info(&dev->v4l2_dev, "V4L2 transmitter device registered as %s\n",
1369                                          video_device_node_name(vfd));
1370        }
1371
1372        /* Now that everything is fine, let's add it to device list */
1373        vivid_devs[inst] = dev;
1374
1375        return 0;
1376
1377unreg_dev:
1378        video_unregister_device(&dev->radio_tx_dev);
1379        video_unregister_device(&dev->radio_rx_dev);
1380        video_unregister_device(&dev->sdr_cap_dev);
1381        video_unregister_device(&dev->vbi_out_dev);
1382        video_unregister_device(&dev->vbi_cap_dev);
1383        video_unregister_device(&dev->vid_out_dev);
1384        video_unregister_device(&dev->vid_cap_dev);
1385        cec_unregister_adapter(dev->cec_rx_adap);
1386        for (i = 0; i < MAX_OUTPUTS; i++)
1387                cec_unregister_adapter(dev->cec_tx_adap[i]);
1388        if (dev->cec_workqueue) {
1389                vivid_cec_bus_free_work(dev);
1390                destroy_workqueue(dev->cec_workqueue);
1391        }
1392free_dev:
1393        v4l2_device_put(&dev->v4l2_dev);
1394        return ret;
1395}
1396
1397/* This routine allocates from 1 to n_devs virtual drivers.
1398
1399   The real maximum number of virtual drivers will depend on how many drivers
1400   will succeed. This is limited to the maximum number of devices that
1401   videodev supports, which is equal to VIDEO_NUM_DEVICES.
1402 */
1403static int vivid_probe(struct platform_device *pdev)
1404{
1405        const struct font_desc *font = find_font("VGA8x16");
1406        int ret = 0, i;
1407
1408        if (font == NULL) {
1409                pr_err("vivid: could not find font\n");
1410                return -ENODEV;
1411        }
1412
1413        tpg_set_font(font->data);
1414
1415        n_devs = clamp_t(unsigned, n_devs, 1, VIVID_MAX_DEVS);
1416
1417        for (i = 0; i < n_devs; i++) {
1418                ret = vivid_create_instance(pdev, i);
1419                if (ret) {
1420                        /* If some instantiations succeeded, keep driver */
1421                        if (i)
1422                                ret = 0;
1423                        break;
1424                }
1425        }
1426
1427        if (ret < 0) {
1428                pr_err("vivid: error %d while loading driver\n", ret);
1429                return ret;
1430        }
1431
1432        /* n_devs will reflect the actual number of allocated devices */
1433        n_devs = i;
1434
1435        return ret;
1436}
1437
1438static int vivid_remove(struct platform_device *pdev)
1439{
1440        struct vivid_dev *dev;
1441        unsigned int i, j;
1442
1443        for (i = 0; i < n_devs; i++) {
1444                dev = vivid_devs[i];
1445                if (!dev)
1446                        continue;
1447
1448                if (dev->has_vid_cap) {
1449                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1450                                video_device_node_name(&dev->vid_cap_dev));
1451                        video_unregister_device(&dev->vid_cap_dev);
1452                }
1453                if (dev->has_vid_out) {
1454                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1455                                video_device_node_name(&dev->vid_out_dev));
1456                        video_unregister_device(&dev->vid_out_dev);
1457                }
1458                if (dev->has_vbi_cap) {
1459                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1460                                video_device_node_name(&dev->vbi_cap_dev));
1461                        video_unregister_device(&dev->vbi_cap_dev);
1462                }
1463                if (dev->has_vbi_out) {
1464                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1465                                video_device_node_name(&dev->vbi_out_dev));
1466                        video_unregister_device(&dev->vbi_out_dev);
1467                }
1468                if (dev->has_sdr_cap) {
1469                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1470                                video_device_node_name(&dev->sdr_cap_dev));
1471                        video_unregister_device(&dev->sdr_cap_dev);
1472                }
1473                if (dev->has_radio_rx) {
1474                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1475                                video_device_node_name(&dev->radio_rx_dev));
1476                        video_unregister_device(&dev->radio_rx_dev);
1477                }
1478                if (dev->has_radio_tx) {
1479                        v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1480                                video_device_node_name(&dev->radio_tx_dev));
1481                        video_unregister_device(&dev->radio_tx_dev);
1482                }
1483                if (dev->has_fb) {
1484                        v4l2_info(&dev->v4l2_dev, "unregistering fb%d\n",
1485                                dev->fb_info.node);
1486                        unregister_framebuffer(&dev->fb_info);
1487                        vivid_fb_release_buffers(dev);
1488                }
1489                cec_unregister_adapter(dev->cec_rx_adap);
1490                for (j = 0; j < MAX_OUTPUTS; j++)
1491                        cec_unregister_adapter(dev->cec_tx_adap[j]);
1492                if (dev->cec_workqueue) {
1493                        vivid_cec_bus_free_work(dev);
1494                        destroy_workqueue(dev->cec_workqueue);
1495                }
1496                v4l2_device_put(&dev->v4l2_dev);
1497                vivid_devs[i] = NULL;
1498        }
1499        return 0;
1500}
1501
1502static void vivid_pdev_release(struct device *dev)
1503{
1504}
1505
1506static struct platform_device vivid_pdev = {
1507        .name           = "vivid",
1508        .dev.release    = vivid_pdev_release,
1509};
1510
1511static struct platform_driver vivid_pdrv = {
1512        .probe          = vivid_probe,
1513        .remove         = vivid_remove,
1514        .driver         = {
1515                .name   = "vivid",
1516        },
1517};
1518
1519static int __init vivid_init(void)
1520{
1521        int ret;
1522
1523        ret = platform_device_register(&vivid_pdev);
1524        if (ret)
1525                return ret;
1526
1527        ret = platform_driver_register(&vivid_pdrv);
1528        if (ret)
1529                platform_device_unregister(&vivid_pdev);
1530
1531        return ret;
1532}
1533
1534static void __exit vivid_exit(void)
1535{
1536        platform_driver_unregister(&vivid_pdrv);
1537        platform_device_unregister(&vivid_pdev);
1538}
1539
1540module_init(vivid_init);
1541module_exit(vivid_exit);
1542