linux/drivers/media/pci/ivtv/ivtv-driver.c
<<
>>
Prefs
   1/*
   2    ivtv driver initialization and card probing
   3    Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
   4    Copyright (C) 2004  Chris Kennedy <c@groovy.org>
   5    Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
   6
   7    This program is free software; you can redistribute it and/or modify
   8    it under the terms of the GNU General Public License as published by
   9    the Free Software Foundation; either version 2 of the License, or
  10    (at your option) any later version.
  11
  12    This program is distributed in the hope that it will be useful,
  13    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15    GNU General Public License for more details.
  16
  17    You should have received a copy of the GNU General Public License
  18    along with this program; if not, write to the Free Software
  19    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20 */
  21
  22/* Main Driver file for the ivtv project:
  23 * Driver for the Conexant CX23415/CX23416 chip.
  24 * Author: Kevin Thayer (nufan_wfk at yahoo.com)
  25 * License: GPL
  26 * http://www.ivtvdriver.org
  27 *
  28 * -----
  29 * MPG600/MPG160 support by  T.Adachi <tadachi@tadachi-net.com>
  30 *                      and Takeru KOMORIYA<komoriya@paken.org>
  31 *
  32 * AVerMedia M179 GPIO info by Chris Pinkham <cpinkham@bc2va.org>
  33 *                using information provided by Jiun-Kuei Jung @ AVerMedia.
  34 *
  35 * Kurouto Sikou CX23416GYC-STVLP tested by K.Ohta <alpha292@bremen.or.jp>
  36 *                using information from T.Adachi,Takeru KOMORIYA and others :-)
  37 *
  38 * Nagase TRANSGEAR 5000TV, Aopen VA2000MAX-STN6 and I/O data GV-MVP/RX
  39 *                version by T.Adachi. Special thanks  Mr.Suzuki
  40 */
  41
  42#include "ivtv-driver.h"
  43#include "ivtv-version.h"
  44#include "ivtv-fileops.h"
  45#include "ivtv-i2c.h"
  46#include "ivtv-firmware.h"
  47#include "ivtv-queue.h"
  48#include "ivtv-udma.h"
  49#include "ivtv-irq.h"
  50#include "ivtv-mailbox.h"
  51#include "ivtv-streams.h"
  52#include "ivtv-ioctl.h"
  53#include "ivtv-cards.h"
  54#include "ivtv-vbi.h"
  55#include "ivtv-routing.h"
  56#include "ivtv-controls.h"
  57#include "ivtv-gpio.h"
  58#include <linux/dma-mapping.h>
  59#include <media/tveeprom.h>
  60#include <media/i2c/saa7115.h>
  61#include "tuner-xc2028.h"
  62#include <uapi/linux/sched/types.h>
  63
  64/* If you have already X v4l cards, then set this to X. This way
  65   the device numbers stay matched. Example: you have a WinTV card
  66   without radio and a PVR-350 with. Normally this would give a
  67   video1 device together with a radio0 device for the PVR. By
  68   setting this to 1 you ensure that radio0 is now also radio1. */
  69int ivtv_first_minor;
  70
  71/* Callback for registering extensions */
  72int (*ivtv_ext_init)(struct ivtv *);
  73EXPORT_SYMBOL(ivtv_ext_init);
  74
  75/* add your revision and whatnot here */
  76static const struct pci_device_id ivtv_pci_tbl[] = {
  77        {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV15,
  78         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  79        {PCI_VENDOR_ID_ICOMP, PCI_DEVICE_ID_IVTV16,
  80         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  81        {0,}
  82};
  83
  84MODULE_DEVICE_TABLE(pci,ivtv_pci_tbl);
  85
  86/* ivtv instance counter */
  87static atomic_t ivtv_instance = ATOMIC_INIT(0);
  88
  89/* Parameter declarations */
  90static int cardtype[IVTV_MAX_CARDS];
  91static int tuner[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
  92                                     -1, -1, -1, -1, -1, -1, -1, -1,
  93                                     -1, -1, -1, -1, -1, -1, -1, -1,
  94                                     -1, -1, -1, -1, -1, -1, -1, -1 };
  95static int radio[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
  96                                     -1, -1, -1, -1, -1, -1, -1, -1,
  97                                     -1, -1, -1, -1, -1, -1, -1, -1,
  98                                     -1, -1, -1, -1, -1, -1, -1, -1 };
  99static int i2c_clock_period[IVTV_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
 100                                               -1, -1, -1, -1, -1, -1, -1, -1,
 101                                               -1, -1, -1, -1, -1, -1, -1, -1,
 102                                               -1, -1, -1, -1, -1, -1, -1, -1 };
 103
 104static unsigned int cardtype_c = 1;
 105static unsigned int tuner_c = 1;
 106static int radio_c = 1;
 107static unsigned int i2c_clock_period_c = 1;
 108static char pal[] = "---";
 109static char secam[] = "--";
 110static char ntsc[] = "-";
 111
 112/* Buffers */
 113
 114/* DMA Buffers, Default size in MB allocated */
 115#define IVTV_DEFAULT_ENC_MPG_BUFFERS 4
 116#define IVTV_DEFAULT_ENC_YUV_BUFFERS 2
 117#define IVTV_DEFAULT_ENC_VBI_BUFFERS 1
 118/* Exception: size in kB for this stream (MB is overkill) */
 119#define IVTV_DEFAULT_ENC_PCM_BUFFERS 320
 120#define IVTV_DEFAULT_DEC_MPG_BUFFERS 1
 121#define IVTV_DEFAULT_DEC_YUV_BUFFERS 1
 122/* Exception: size in kB for this stream (MB is way overkill) */
 123#define IVTV_DEFAULT_DEC_VBI_BUFFERS 64
 124
 125static int enc_mpg_buffers = IVTV_DEFAULT_ENC_MPG_BUFFERS;
 126static int enc_yuv_buffers = IVTV_DEFAULT_ENC_YUV_BUFFERS;
 127static int enc_vbi_buffers = IVTV_DEFAULT_ENC_VBI_BUFFERS;
 128static int enc_pcm_buffers = IVTV_DEFAULT_ENC_PCM_BUFFERS;
 129static int dec_mpg_buffers = IVTV_DEFAULT_DEC_MPG_BUFFERS;
 130static int dec_yuv_buffers = IVTV_DEFAULT_DEC_YUV_BUFFERS;
 131static int dec_vbi_buffers = IVTV_DEFAULT_DEC_VBI_BUFFERS;
 132
 133static int ivtv_yuv_mode;
 134static int ivtv_yuv_threshold = -1;
 135static int ivtv_pci_latency = 1;
 136
 137int ivtv_debug;
 138#ifdef CONFIG_VIDEO_ADV_DEBUG
 139int ivtv_fw_debug;
 140#endif
 141
 142static int tunertype = -1;
 143static int newi2c = -1;
 144
 145module_param_array(tuner, int, &tuner_c, 0644);
 146module_param_array(radio, int, &radio_c, 0644);
 147module_param_array(cardtype, int, &cardtype_c, 0644);
 148module_param_string(pal, pal, sizeof(pal), 0644);
 149module_param_string(secam, secam, sizeof(secam), 0644);
 150module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
 151module_param_named(debug,ivtv_debug, int, 0644);
 152#ifdef CONFIG_VIDEO_ADV_DEBUG
 153module_param_named(fw_debug, ivtv_fw_debug, int, 0644);
 154#endif
 155module_param(ivtv_pci_latency, int, 0644);
 156module_param(ivtv_yuv_mode, int, 0644);
 157module_param(ivtv_yuv_threshold, int, 0644);
 158module_param(ivtv_first_minor, int, 0644);
 159
 160module_param(enc_mpg_buffers, int, 0644);
 161module_param(enc_yuv_buffers, int, 0644);
 162module_param(enc_vbi_buffers, int, 0644);
 163module_param(enc_pcm_buffers, int, 0644);
 164module_param(dec_mpg_buffers, int, 0644);
 165module_param(dec_yuv_buffers, int, 0644);
 166module_param(dec_vbi_buffers, int, 0644);
 167
 168module_param(tunertype, int, 0644);
 169module_param(newi2c, int, 0644);
 170module_param_array(i2c_clock_period, int, &i2c_clock_period_c, 0644);
 171
 172MODULE_PARM_DESC(tuner, "Tuner type selection,\n"
 173                        "\t\t\tsee tuner.h for values");
 174MODULE_PARM_DESC(radio,
 175                 "Enable or disable the radio. Use only if autodetection\n"
 176                 "\t\t\tfails. 0 = disable, 1 = enable");
 177MODULE_PARM_DESC(cardtype,
 178                 "Only use this option if your card is not detected properly.\n"
 179                 "\t\tSpecify card type:\n"
 180                 "\t\t\t 1 = WinTV PVR 250\n"
 181                 "\t\t\t 2 = WinTV PVR 350\n"
 182                 "\t\t\t 3 = WinTV PVR-150 or PVR-500\n"
 183                 "\t\t\t 4 = AVerMedia M179\n"
 184                 "\t\t\t 5 = YUAN MPG600/Kuroutoshikou iTVC16-STVLP\n"
 185                 "\t\t\t 6 = YUAN MPG160/Kuroutoshikou iTVC15-STVLP\n"
 186                 "\t\t\t 7 = YUAN PG600/DIAMONDMM PVR-550 (CX Falcon 2)\n"
 187                 "\t\t\t 8 = Adaptec AVC-2410\n"
 188                 "\t\t\t 9 = Adaptec AVC-2010\n"
 189                 "\t\t\t10 = NAGASE TRANSGEAR 5000TV\n"
 190                 "\t\t\t11 = AOpen VA2000MAX-STN6\n"
 191                 "\t\t\t12 = YUAN MPG600GR/Kuroutoshikou CX23416GYC-STVLP\n"
 192                 "\t\t\t13 = I/O Data GV-MVP/RX\n"
 193                 "\t\t\t14 = I/O Data GV-MVP/RX2E\n"
 194                 "\t\t\t15 = GOTVIEW PCI DVD\n"
 195                 "\t\t\t16 = GOTVIEW PCI DVD2 Deluxe\n"
 196                 "\t\t\t17 = Yuan MPC622\n"
 197                 "\t\t\t18 = Digital Cowboy DCT-MTVP1\n"
 198                 "\t\t\t19 = Yuan PG600V2/GotView PCI DVD Lite\n"
 199                 "\t\t\t20 = Club3D ZAP-TV1x01\n"
 200                 "\t\t\t21 = AverTV MCE 116 Plus\n"
 201                 "\t\t\t22 = ASUS Falcon2\n"
 202                 "\t\t\t23 = AverMedia PVR-150 Plus\n"
 203                 "\t\t\t24 = AverMedia EZMaker PCI Deluxe\n"
 204                 "\t\t\t25 = AverMedia M104 (not yet working)\n"
 205                 "\t\t\t26 = Buffalo PC-MV5L/PCI\n"
 206                 "\t\t\t27 = AVerMedia UltraTV 1500 MCE\n"
 207                 "\t\t\t28 = Sony VAIO Giga Pocket (ENX Kikyou)\n"
 208                 "\t\t\t 0 = Autodetect (default)\n"
 209                 "\t\t\t-1 = Ignore this card\n\t\t");
 210MODULE_PARM_DESC(pal, "Set PAL standard: BGH, DK, I, M, N, Nc, 60");
 211MODULE_PARM_DESC(secam, "Set SECAM standard: BGH, DK, L, LC");
 212MODULE_PARM_DESC(ntsc, "Set NTSC standard: M, J (Japan), K (South Korea)");
 213MODULE_PARM_DESC(tunertype,
 214                "Specify tuner type:\n"
 215                "\t\t\t 0 = tuner for PAL-B/G/H/D/K/I, SECAM-B/G/H/D/K/L/Lc\n"
 216                "\t\t\t 1 = tuner for NTSC-M/J/K, PAL-M/N/Nc\n"
 217                "\t\t\t-1 = Autodetect (default)\n");
 218MODULE_PARM_DESC(debug,
 219                 "Debug level (bitmask). Default: 0\n"
 220                 "\t\t\t   1/0x0001: warning\n"
 221                 "\t\t\t   2/0x0002: info\n"
 222                 "\t\t\t   4/0x0004: mailbox\n"
 223                 "\t\t\t   8/0x0008: ioctl\n"
 224                 "\t\t\t  16/0x0010: file\n"
 225                 "\t\t\t  32/0x0020: dma\n"
 226                 "\t\t\t  64/0x0040: irq\n"
 227                 "\t\t\t 128/0x0080: decoder\n"
 228                 "\t\t\t 256/0x0100: yuv\n"
 229                 "\t\t\t 512/0x0200: i2c\n"
 230                 "\t\t\t1024/0x0400: high volume\n");
 231#ifdef CONFIG_VIDEO_ADV_DEBUG
 232MODULE_PARM_DESC(fw_debug,
 233                 "Enable code for debugging firmware problems.  Default: 0\n");
 234#endif
 235MODULE_PARM_DESC(ivtv_pci_latency,
 236                 "Change the PCI latency to 64 if lower: 0 = No, 1 = Yes,\n"
 237                 "\t\t\tDefault: Yes");
 238MODULE_PARM_DESC(ivtv_yuv_mode,
 239                 "Specify the yuv playback mode:\n"
 240                 "\t\t\t0 = interlaced\n\t\t\t1 = progressive\n\t\t\t2 = auto\n"
 241                 "\t\t\tDefault: 0 (interlaced)");
 242MODULE_PARM_DESC(ivtv_yuv_threshold,
 243                 "If ivtv_yuv_mode is 2 (auto) then playback content as\n\t\tprogressive if src height <= ivtv_yuvthreshold\n"
 244                 "\t\t\tDefault: 480");
 245MODULE_PARM_DESC(enc_mpg_buffers,
 246                 "Encoder MPG Buffers (in MB)\n"
 247                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_MPG_BUFFERS));
 248MODULE_PARM_DESC(enc_yuv_buffers,
 249                 "Encoder YUV Buffers (in MB)\n"
 250                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_YUV_BUFFERS));
 251MODULE_PARM_DESC(enc_vbi_buffers,
 252                 "Encoder VBI Buffers (in MB)\n"
 253                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_VBI_BUFFERS));
 254MODULE_PARM_DESC(enc_pcm_buffers,
 255                 "Encoder PCM buffers (in kB)\n"
 256                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_ENC_PCM_BUFFERS));
 257MODULE_PARM_DESC(dec_mpg_buffers,
 258                 "Decoder MPG buffers (in MB)\n"
 259                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_MPG_BUFFERS));
 260MODULE_PARM_DESC(dec_yuv_buffers,
 261                 "Decoder YUV buffers (in MB)\n"
 262                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_YUV_BUFFERS));
 263MODULE_PARM_DESC(dec_vbi_buffers,
 264                 "Decoder VBI buffers (in kB)\n"
 265                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_DEC_VBI_BUFFERS));
 266MODULE_PARM_DESC(newi2c,
 267                 "Use new I2C implementation\n"
 268                 "\t\t\t-1 is autodetect, 0 is off, 1 is on\n"
 269                 "\t\t\tDefault is autodetect");
 270MODULE_PARM_DESC(i2c_clock_period,
 271                 "Period of SCL for the I2C bus controlled by the CX23415/6\n"
 272                 "\t\t\tMin: 10 usec (100 kHz), Max: 4500 usec (222 Hz)\n"
 273                 "\t\t\tDefault: " __stringify(IVTV_DEFAULT_I2C_CLOCK_PERIOD));
 274
 275MODULE_PARM_DESC(ivtv_first_minor, "Set device node number assigned to first card");
 276
 277MODULE_AUTHOR("Kevin Thayer, Chris Kennedy, Hans Verkuil");
 278MODULE_DESCRIPTION("CX23415/CX23416 driver");
 279MODULE_SUPPORTED_DEVICE
 280    ("CX23415/CX23416 MPEG2 encoder (WinTV PVR-150/250/350/500,\n"
 281                "\t\t\tYuan MPG series and similar)");
 282MODULE_LICENSE("GPL");
 283
 284MODULE_VERSION(IVTV_VERSION);
 285
 286#if defined(CONFIG_MODULES) && defined(MODULE)
 287static void request_module_async(struct work_struct *work)
 288{
 289        struct ivtv *dev = container_of(work, struct ivtv, request_module_wk);
 290
 291        /* Make sure ivtv-alsa module is loaded */
 292        request_module("ivtv-alsa");
 293
 294        /* Initialize ivtv-alsa for this instance of the cx18 device */
 295        if (ivtv_ext_init != NULL)
 296                ivtv_ext_init(dev);
 297}
 298
 299static void request_modules(struct ivtv *dev)
 300{
 301        INIT_WORK(&dev->request_module_wk, request_module_async);
 302        schedule_work(&dev->request_module_wk);
 303}
 304
 305static void flush_request_modules(struct ivtv *dev)
 306{
 307        flush_work(&dev->request_module_wk);
 308}
 309#else
 310#define request_modules(dev)
 311#define flush_request_modules(dev)
 312#endif /* CONFIG_MODULES */
 313
 314void ivtv_clear_irq_mask(struct ivtv *itv, u32 mask)
 315{
 316        itv->irqmask &= ~mask;
 317        write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
 318}
 319
 320void ivtv_set_irq_mask(struct ivtv *itv, u32 mask)
 321{
 322        itv->irqmask |= mask;
 323        write_reg_sync(itv->irqmask, IVTV_REG_IRQMASK);
 324}
 325
 326int ivtv_set_output_mode(struct ivtv *itv, int mode)
 327{
 328    int old_mode;
 329
 330    spin_lock(&itv->lock);
 331    old_mode = itv->output_mode;
 332    if (old_mode == 0)
 333        itv->output_mode = old_mode = mode;
 334    spin_unlock(&itv->lock);
 335    return old_mode;
 336}
 337
 338struct ivtv_stream *ivtv_get_output_stream(struct ivtv *itv)
 339{
 340        switch (itv->output_mode) {
 341        case OUT_MPG:
 342                return &itv->streams[IVTV_DEC_STREAM_TYPE_MPG];
 343        case OUT_YUV:
 344                return &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
 345        default:
 346                return NULL;
 347        }
 348}
 349
 350int ivtv_waitq(wait_queue_head_t *waitq)
 351{
 352        DEFINE_WAIT(wait);
 353
 354        prepare_to_wait(waitq, &wait, TASK_INTERRUPTIBLE);
 355        schedule();
 356        finish_wait(waitq, &wait);
 357        return signal_pending(current) ? -EINTR : 0;
 358}
 359
 360/* Generic utility functions */
 361int ivtv_msleep_timeout(unsigned int msecs, int intr)
 362{
 363        int timeout = msecs_to_jiffies(msecs);
 364
 365        do {
 366                set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
 367                timeout = schedule_timeout(timeout);
 368                if (intr) {
 369                        int ret = signal_pending(current);
 370
 371                        if (ret)
 372                                return ret;
 373                }
 374        } while (timeout);
 375        return 0;
 376}
 377
 378/* Release ioremapped memory */
 379static void ivtv_iounmap(struct ivtv *itv)
 380{
 381        if (itv == NULL)
 382                return;
 383
 384        /* Release registers memory */
 385        if (itv->reg_mem != NULL) {
 386                IVTV_DEBUG_INFO("releasing reg_mem\n");
 387                iounmap(itv->reg_mem);
 388                itv->reg_mem = NULL;
 389        }
 390        /* Release io memory */
 391        if (itv->has_cx23415 && itv->dec_mem != NULL) {
 392                IVTV_DEBUG_INFO("releasing dec_mem\n");
 393                iounmap(itv->dec_mem);
 394        }
 395        itv->dec_mem = NULL;
 396
 397        /* Release io memory */
 398        if (itv->enc_mem != NULL) {
 399                IVTV_DEBUG_INFO("releasing enc_mem\n");
 400                iounmap(itv->enc_mem);
 401                itv->enc_mem = NULL;
 402        }
 403}
 404
 405/* Hauppauge card? get values from tveeprom */
 406void ivtv_read_eeprom(struct ivtv *itv, struct tveeprom *tv)
 407{
 408        u8 eedata[256];
 409
 410        itv->i2c_client.addr = 0xA0 >> 1;
 411        tveeprom_read(&itv->i2c_client, eedata, sizeof(eedata));
 412        tveeprom_hauppauge_analog(tv, eedata);
 413}
 414
 415static void ivtv_process_eeprom(struct ivtv *itv)
 416{
 417        struct tveeprom tv;
 418        int pci_slot = PCI_SLOT(itv->pdev->devfn);
 419
 420        ivtv_read_eeprom(itv, &tv);
 421
 422        /* Many thanks to Steven Toth from Hauppauge for providing the
 423           model numbers */
 424        switch (tv.model) {
 425                /* In a few cases the PCI subsystem IDs do not correctly
 426                   identify the card. A better method is to check the
 427                   model number from the eeprom instead. */
 428                case 30012 ... 30039:  /* Low profile PVR250 */
 429                case 32000 ... 32999:
 430                case 48000 ... 48099:  /* 48??? range are PVR250s with a cx23415 */
 431                case 48400 ... 48599:
 432                        itv->card = ivtv_get_card(IVTV_CARD_PVR_250);
 433                        break;
 434                case 48100 ... 48399:
 435                case 48600 ... 48999:
 436                        itv->card = ivtv_get_card(IVTV_CARD_PVR_350);
 437                        break;
 438                case 23000 ... 23999:  /* PVR500 */
 439                case 25000 ... 25999:  /* Low profile PVR150 */
 440                case 26000 ... 26999:  /* Regular PVR150 */
 441                        itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
 442                        break;
 443                case 0:
 444                        IVTV_ERR("Invalid EEPROM\n");
 445                        return;
 446                default:
 447                        IVTV_ERR("Unknown model %d, defaulting to PVR-150\n", tv.model);
 448                        itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
 449                        break;
 450        }
 451
 452        switch (tv.model) {
 453                /* Old style PVR350 (with an saa7114) uses this input for
 454                   the tuner. */
 455                case 48254:
 456                        itv->card = ivtv_get_card(IVTV_CARD_PVR_350_V1);
 457                        break;
 458                default:
 459                        break;
 460        }
 461
 462        itv->v4l2_cap = itv->card->v4l2_capabilities;
 463        itv->card_name = itv->card->name;
 464        itv->card_i2c = itv->card->i2c;
 465
 466        /* If this is a PVR500 then it should be possible to detect whether it is the
 467           first or second unit by looking at the subsystem device ID: is bit 4 is
 468           set, then it is the second unit (according to info from Hauppauge).
 469
 470           However, while this works for most cards, I have seen a few PVR500 cards
 471           where both units have the same subsystem ID.
 472
 473           So instead I look at the reported 'PCI slot' (which is the slot on the PVR500
 474           PCI bridge) and if it is 8, then it is assumed to be the first unit, otherwise
 475           it is the second unit. It is possible that it is a different slot when ivtv is
 476           used in Xen, in that case I ignore this card here. The worst that can happen
 477           is that the card presents itself with a non-working radio device.
 478
 479           This detection is needed since the eeprom reports incorrectly that a radio is
 480           present on the second unit. */
 481        if (tv.model / 1000 == 23) {
 482                static const struct ivtv_card_tuner_i2c ivtv_i2c_radio = {
 483                        .radio = { 0x60, I2C_CLIENT_END },
 484                        .demod = { 0x43, I2C_CLIENT_END },
 485                        .tv = { 0x61, I2C_CLIENT_END },
 486                };
 487
 488                itv->card_name = "WinTV PVR 500";
 489                itv->card_i2c = &ivtv_i2c_radio;
 490                if (pci_slot == 8 || pci_slot == 9) {
 491                        int is_first = (pci_slot & 1) == 0;
 492
 493                        itv->card_name = is_first ? "WinTV PVR 500 (unit #1)" :
 494                                                    "WinTV PVR 500 (unit #2)";
 495                        if (!is_first) {
 496                                IVTV_INFO("Correcting tveeprom data: no radio present on second unit\n");
 497                                tv.has_radio = 0;
 498                        }
 499                }
 500        }
 501        IVTV_INFO("Autodetected %s\n", itv->card_name);
 502
 503        switch (tv.tuner_hauppauge_model) {
 504                case 85:
 505                case 99:
 506                case 112:
 507                        itv->pvr150_workaround = 1;
 508                        break;
 509                default:
 510                        break;
 511        }
 512        if (tv.tuner_type == TUNER_ABSENT)
 513                IVTV_ERR("tveeprom cannot autodetect tuner!\n");
 514
 515        if (itv->options.tuner == -1)
 516                itv->options.tuner = tv.tuner_type;
 517        if (itv->options.radio == -1)
 518                itv->options.radio = (tv.has_radio != 0);
 519        /* only enable newi2c if an IR blaster is present */
 520        if (itv->options.newi2c == -1 && tv.has_ir) {
 521                itv->options.newi2c = (tv.has_ir & 4) ? 1 : 0;
 522                if (itv->options.newi2c) {
 523                    IVTV_INFO("Reopen i2c bus for IR-blaster support\n");
 524                    exit_ivtv_i2c(itv);
 525                    init_ivtv_i2c(itv);
 526                }
 527        }
 528
 529        if (itv->std != 0)
 530                /* user specified tuner standard */
 531                return;
 532
 533        /* autodetect tuner standard */
 534        if (tv.tuner_formats & V4L2_STD_PAL) {
 535                IVTV_DEBUG_INFO("PAL tuner detected\n");
 536                itv->std |= V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
 537        } else if (tv.tuner_formats & V4L2_STD_NTSC) {
 538                IVTV_DEBUG_INFO("NTSC tuner detected\n");
 539                itv->std |= V4L2_STD_NTSC_M;
 540        } else if (tv.tuner_formats & V4L2_STD_SECAM) {
 541                IVTV_DEBUG_INFO("SECAM tuner detected\n");
 542                itv->std |= V4L2_STD_SECAM_L;
 543        } else {
 544                IVTV_INFO("No tuner detected, default to NTSC-M\n");
 545                itv->std |= V4L2_STD_NTSC_M;
 546        }
 547}
 548
 549static v4l2_std_id ivtv_parse_std(struct ivtv *itv)
 550{
 551        switch (pal[0]) {
 552                case '6':
 553                        tunertype = 0;
 554                        return V4L2_STD_PAL_60;
 555                case 'b':
 556                case 'B':
 557                case 'g':
 558                case 'G':
 559                case 'h':
 560                case 'H':
 561                        tunertype = 0;
 562                        return V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
 563                case 'n':
 564                case 'N':
 565                        tunertype = 1;
 566                        if (pal[1] == 'c' || pal[1] == 'C')
 567                                return V4L2_STD_PAL_Nc;
 568                        return V4L2_STD_PAL_N;
 569                case 'i':
 570                case 'I':
 571                        tunertype = 0;
 572                        return V4L2_STD_PAL_I;
 573                case 'd':
 574                case 'D':
 575                case 'k':
 576                case 'K':
 577                        tunertype = 0;
 578                        return V4L2_STD_PAL_DK;
 579                case 'M':
 580                case 'm':
 581                        tunertype = 1;
 582                        return V4L2_STD_PAL_M;
 583                case '-':
 584                        break;
 585                default:
 586                        IVTV_WARN("pal= argument not recognised\n");
 587                        return 0;
 588        }
 589
 590        switch (secam[0]) {
 591                case 'b':
 592                case 'B':
 593                case 'g':
 594                case 'G':
 595                case 'h':
 596                case 'H':
 597                        tunertype = 0;
 598                        return V4L2_STD_SECAM_B | V4L2_STD_SECAM_G | V4L2_STD_SECAM_H;
 599                case 'd':
 600                case 'D':
 601                case 'k':
 602                case 'K':
 603                        tunertype = 0;
 604                        return V4L2_STD_SECAM_DK;
 605                case 'l':
 606                case 'L':
 607                        tunertype = 0;
 608                        if (secam[1] == 'C' || secam[1] == 'c')
 609                                return V4L2_STD_SECAM_LC;
 610                        return V4L2_STD_SECAM_L;
 611                case '-':
 612                        break;
 613                default:
 614                        IVTV_WARN("secam= argument not recognised\n");
 615                        return 0;
 616        }
 617
 618        switch (ntsc[0]) {
 619                case 'm':
 620                case 'M':
 621                        tunertype = 1;
 622                        return V4L2_STD_NTSC_M;
 623                case 'j':
 624                case 'J':
 625                        tunertype = 1;
 626                        return V4L2_STD_NTSC_M_JP;
 627                case 'k':
 628                case 'K':
 629                        tunertype = 1;
 630                        return V4L2_STD_NTSC_M_KR;
 631                case '-':
 632                        break;
 633                default:
 634                        IVTV_WARN("ntsc= argument not recognised\n");
 635                        return 0;
 636        }
 637
 638        /* no match found */
 639        return 0;
 640}
 641
 642static void ivtv_process_options(struct ivtv *itv)
 643{
 644        const char *chipname;
 645        int i, j;
 646
 647        itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_MPG] = enc_mpg_buffers * 1024;
 648        itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_YUV] = enc_yuv_buffers * 1024;
 649        itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_VBI] = enc_vbi_buffers * 1024;
 650        itv->options.kilobytes[IVTV_ENC_STREAM_TYPE_PCM] = enc_pcm_buffers;
 651        itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_MPG] = dec_mpg_buffers * 1024;
 652        itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_YUV] = dec_yuv_buffers * 1024;
 653        itv->options.kilobytes[IVTV_DEC_STREAM_TYPE_VBI] = dec_vbi_buffers;
 654        itv->options.cardtype = cardtype[itv->instance];
 655        itv->options.tuner = tuner[itv->instance];
 656        itv->options.radio = radio[itv->instance];
 657
 658        itv->options.i2c_clock_period = i2c_clock_period[itv->instance];
 659        if (itv->options.i2c_clock_period == -1)
 660                itv->options.i2c_clock_period = IVTV_DEFAULT_I2C_CLOCK_PERIOD;
 661        else if (itv->options.i2c_clock_period < 10)
 662                itv->options.i2c_clock_period = 10;
 663        else if (itv->options.i2c_clock_period > 4500)
 664                itv->options.i2c_clock_period = 4500;
 665
 666        itv->options.newi2c = newi2c;
 667        if (tunertype < -1 || tunertype > 1) {
 668                IVTV_WARN("Invalid tunertype argument, will autodetect instead\n");
 669                tunertype = -1;
 670        }
 671        itv->std = ivtv_parse_std(itv);
 672        if (itv->std == 0 && tunertype >= 0)
 673                itv->std = tunertype ? V4L2_STD_MN : (V4L2_STD_ALL & ~V4L2_STD_MN);
 674        itv->has_cx23415 = (itv->pdev->device == PCI_DEVICE_ID_IVTV15);
 675        chipname = itv->has_cx23415 ? "cx23415" : "cx23416";
 676        if (itv->options.cardtype == -1) {
 677                IVTV_INFO("Ignore card (detected %s based chip)\n", chipname);
 678                return;
 679        }
 680        if ((itv->card = ivtv_get_card(itv->options.cardtype - 1))) {
 681                IVTV_INFO("User specified %s card (detected %s based chip)\n",
 682                                itv->card->name, chipname);
 683        } else if (itv->options.cardtype != 0) {
 684                IVTV_ERR("Unknown user specified type, trying to autodetect card\n");
 685        }
 686        if (itv->card == NULL) {
 687                if (itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE ||
 688                    itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT1 ||
 689                    itv->pdev->subsystem_vendor == IVTV_PCI_ID_HAUPPAUGE_ALT2) {
 690                        itv->card = ivtv_get_card(itv->has_cx23415 ? IVTV_CARD_PVR_350 : IVTV_CARD_PVR_150);
 691                        IVTV_INFO("Autodetected Hauppauge card (%s based)\n",
 692                                        chipname);
 693                }
 694        }
 695        if (itv->card == NULL) {
 696                for (i = 0; (itv->card = ivtv_get_card(i)); i++) {
 697                        if (itv->card->pci_list == NULL)
 698                                continue;
 699                        for (j = 0; itv->card->pci_list[j].device; j++) {
 700                                if (itv->pdev->device !=
 701                                    itv->card->pci_list[j].device)
 702                                        continue;
 703                                if (itv->pdev->subsystem_vendor !=
 704                                    itv->card->pci_list[j].subsystem_vendor)
 705                                        continue;
 706                                if (itv->pdev->subsystem_device !=
 707                                    itv->card->pci_list[j].subsystem_device)
 708                                        continue;
 709                                IVTV_INFO("Autodetected %s card (%s based)\n",
 710                                                itv->card->name, chipname);
 711                                goto done;
 712                        }
 713                }
 714        }
 715done:
 716
 717        if (itv->card == NULL) {
 718                itv->card = ivtv_get_card(IVTV_CARD_PVR_150);
 719                IVTV_ERR("Unknown card: vendor/device: [%04x:%04x]\n",
 720                     itv->pdev->vendor, itv->pdev->device);
 721                IVTV_ERR("              subsystem vendor/device: [%04x:%04x]\n",
 722                     itv->pdev->subsystem_vendor, itv->pdev->subsystem_device);
 723                IVTV_ERR("              %s based\n", chipname);
 724                IVTV_ERR("Defaulting to %s card\n", itv->card->name);
 725                IVTV_ERR("Please mail the vendor/device and subsystem vendor/device IDs and what kind of\n");
 726                IVTV_ERR("card you have to the ivtv-devel mailinglist (www.ivtvdriver.org)\n");
 727                IVTV_ERR("Prefix your subject line with [UNKNOWN IVTV CARD].\n");
 728        }
 729        itv->v4l2_cap = itv->card->v4l2_capabilities;
 730        itv->card_name = itv->card->name;
 731        itv->card_i2c = itv->card->i2c;
 732}
 733
 734/* Precondition: the ivtv structure has been memset to 0. Only
 735   the dev and num fields have been filled in.
 736   No assumptions on the card type may be made here (see ivtv_init_struct2
 737   for that).
 738 */
 739static int ivtv_init_struct1(struct ivtv *itv)
 740{
 741        struct sched_param param = { .sched_priority = 99 };
 742
 743        itv->base_addr = pci_resource_start(itv->pdev, 0);
 744        itv->enc_mbox.max_mbox = 2; /* the encoder has 3 mailboxes (0-2) */
 745        itv->dec_mbox.max_mbox = 1; /* the decoder has 2 mailboxes (0-1) */
 746
 747        mutex_init(&itv->serialize_lock);
 748        mutex_init(&itv->i2c_bus_lock);
 749        mutex_init(&itv->udma.lock);
 750
 751        spin_lock_init(&itv->lock);
 752        spin_lock_init(&itv->dma_reg_lock);
 753
 754        kthread_init_worker(&itv->irq_worker);
 755        itv->irq_worker_task = kthread_run(kthread_worker_fn, &itv->irq_worker,
 756                                           "%s", itv->v4l2_dev.name);
 757        if (IS_ERR(itv->irq_worker_task)) {
 758                IVTV_ERR("Could not create ivtv task\n");
 759                return -1;
 760        }
 761        /* must use the FIFO scheduler as it is realtime sensitive */
 762        sched_setscheduler(itv->irq_worker_task, SCHED_FIFO, &param);
 763
 764        kthread_init_work(&itv->irq_work, ivtv_irq_work_handler);
 765
 766        /* Initial settings */
 767        itv->cxhdl.port = CX2341X_PORT_MEMORY;
 768        itv->cxhdl.capabilities = CX2341X_CAP_HAS_SLICED_VBI;
 769        init_waitqueue_head(&itv->eos_waitq);
 770        init_waitqueue_head(&itv->event_waitq);
 771        init_waitqueue_head(&itv->vsync_waitq);
 772        init_waitqueue_head(&itv->dma_waitq);
 773        timer_setup(&itv->dma_timer, ivtv_unfinished_dma, 0);
 774
 775        itv->cur_dma_stream = -1;
 776        itv->cur_pio_stream = -1;
 777
 778        /* Ctrls */
 779        itv->speed = 1000;
 780
 781        /* VBI */
 782        itv->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
 783        itv->vbi.sliced_in = &itv->vbi.in.fmt.sliced;
 784
 785        /* Init the sg table for osd/yuv output */
 786        sg_init_table(itv->udma.SGlist, IVTV_DMA_SG_OSD_ENT);
 787
 788        /* OSD */
 789        itv->osd_global_alpha_state = 1;
 790        itv->osd_global_alpha = 255;
 791
 792        /* YUV */
 793        atomic_set(&itv->yuv_info.next_dma_frame, -1);
 794        itv->yuv_info.lace_mode = ivtv_yuv_mode;
 795        itv->yuv_info.lace_threshold = ivtv_yuv_threshold;
 796        itv->yuv_info.max_frames_buffered = 3;
 797        itv->yuv_info.track_osd = 1;
 798        return 0;
 799}
 800
 801/* Second initialization part. Here the card type has been
 802   autodetected. */
 803static void ivtv_init_struct2(struct ivtv *itv)
 804{
 805        int i;
 806
 807        for (i = 0; i < IVTV_CARD_MAX_VIDEO_INPUTS; i++)
 808                if (itv->card->video_inputs[i].video_type == 0)
 809                        break;
 810        itv->nof_inputs = i;
 811        for (i = 0; i < IVTV_CARD_MAX_AUDIO_INPUTS; i++)
 812                if (itv->card->audio_inputs[i].audio_type == 0)
 813                        break;
 814        itv->nof_audio_inputs = i;
 815
 816        if (itv->card->hw_all & IVTV_HW_CX25840) {
 817                itv->vbi.sliced_size = 288;  /* multiple of 16, real size = 284 */
 818        } else {
 819                itv->vbi.sliced_size = 64;   /* multiple of 16, real size = 52 */
 820        }
 821
 822        /* Find tuner input */
 823        for (i = 0; i < itv->nof_inputs; i++) {
 824                if (itv->card->video_inputs[i].video_type ==
 825                                IVTV_CARD_INPUT_VID_TUNER)
 826                        break;
 827        }
 828        if (i >= itv->nof_inputs)
 829                i = 0;
 830        itv->active_input = i;
 831        itv->audio_input = itv->card->video_inputs[i].audio_index;
 832}
 833
 834static int ivtv_setup_pci(struct ivtv *itv, struct pci_dev *pdev,
 835                          const struct pci_device_id *pci_id)
 836{
 837        u16 cmd;
 838        unsigned char pci_latency;
 839
 840        IVTV_DEBUG_INFO("Enabling pci device\n");
 841
 842        if (pci_enable_device(pdev)) {
 843                IVTV_ERR("Can't enable device!\n");
 844                return -EIO;
 845        }
 846        if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
 847                IVTV_ERR("No suitable DMA available.\n");
 848                return -EIO;
 849        }
 850        if (!request_mem_region(itv->base_addr, IVTV_ENCODER_SIZE, "ivtv encoder")) {
 851                IVTV_ERR("Cannot request encoder memory region.\n");
 852                return -EIO;
 853        }
 854
 855        if (!request_mem_region(itv->base_addr + IVTV_REG_OFFSET,
 856                                IVTV_REG_SIZE, "ivtv registers")) {
 857                IVTV_ERR("Cannot request register memory region.\n");
 858                release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
 859                return -EIO;
 860        }
 861
 862        if (itv->has_cx23415 &&
 863            !request_mem_region(itv->base_addr + IVTV_DECODER_OFFSET,
 864                                IVTV_DECODER_SIZE, "ivtv decoder")) {
 865                IVTV_ERR("Cannot request decoder memory region.\n");
 866                release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
 867                release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
 868                return -EIO;
 869        }
 870
 871        /* Check for bus mastering */
 872        pci_read_config_word(pdev, PCI_COMMAND, &cmd);
 873        if (!(cmd & PCI_COMMAND_MASTER)) {
 874                IVTV_DEBUG_INFO("Attempting to enable Bus Mastering\n");
 875                pci_set_master(pdev);
 876                pci_read_config_word(pdev, PCI_COMMAND, &cmd);
 877                if (!(cmd & PCI_COMMAND_MASTER)) {
 878                        IVTV_ERR("Bus Mastering is not enabled\n");
 879                        return -ENXIO;
 880                }
 881        }
 882        IVTV_DEBUG_INFO("Bus Mastering Enabled.\n");
 883
 884        pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
 885
 886        if (pci_latency < 64 && ivtv_pci_latency) {
 887                IVTV_INFO("Unreasonably low latency timer, setting to 64 (was %d)\n",
 888                          pci_latency);
 889                pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 64);
 890                pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
 891        }
 892        /* This config space value relates to DMA latencies. The
 893           default value 0x8080 is too low however and will lead
 894           to DMA errors. 0xffff is the max value which solves
 895           these problems. */
 896        pci_write_config_dword(pdev, 0x40, 0xffff);
 897
 898        IVTV_DEBUG_INFO("%d (rev %d) at %02x:%02x.%x, irq: %d, latency: %d, memory: 0x%llx\n",
 899                   pdev->device, pdev->revision, pdev->bus->number,
 900                   PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn),
 901                   pdev->irq, pci_latency, (u64)itv->base_addr);
 902
 903        return 0;
 904}
 905
 906static void ivtv_load_and_init_modules(struct ivtv *itv)
 907{
 908        u32 hw = itv->card->hw_all;
 909        unsigned i;
 910
 911        /* check which i2c devices are actually found */
 912        for (i = 0; i < 32; i++) {
 913                u32 device = 1 << i;
 914
 915                if (!(device & hw))
 916                        continue;
 917                if (device == IVTV_HW_GPIO || device == IVTV_HW_TVEEPROM) {
 918                        /* GPIO and TVEEPROM do not use i2c probing */
 919                        itv->hw_flags |= device;
 920                        continue;
 921                }
 922                if (ivtv_i2c_register(itv, i) == 0)
 923                        itv->hw_flags |= device;
 924        }
 925
 926        /* probe for legacy IR controllers that aren't in card definitions */
 927        if ((itv->hw_flags & IVTV_HW_IR_ANY) == 0)
 928                ivtv_i2c_new_ir_legacy(itv);
 929
 930        if (itv->card->hw_all & IVTV_HW_CX25840)
 931                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_CX25840);
 932        else if (itv->card->hw_all & IVTV_HW_SAA717X)
 933                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA717X);
 934        else if (itv->card->hw_all & IVTV_HW_SAA7114)
 935                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7114);
 936        else
 937                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7115);
 938        itv->sd_audio = ivtv_find_hw(itv, itv->card->hw_audio_ctrl);
 939        itv->sd_muxer = ivtv_find_hw(itv, itv->card->hw_muxer);
 940
 941        hw = itv->hw_flags;
 942
 943        if (itv->card->type == IVTV_CARD_CX23416GYC) {
 944                /* Several variations of this card exist, detect which card
 945                   type should be used. */
 946                if ((hw & (IVTV_HW_UPD64031A | IVTV_HW_UPD6408X)) == 0)
 947                        itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGRYCS);
 948                else if ((hw & IVTV_HW_UPD64031A) == 0)
 949                        itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGR);
 950        }
 951        else if (itv->card->type == IVTV_CARD_GV_MVPRX ||
 952                 itv->card->type == IVTV_CARD_GV_MVPRX2E) {
 953                /* The crystal frequency of GVMVPRX is 24.576MHz */
 954                v4l2_subdev_call(itv->sd_video, video, s_crystal_freq,
 955                        SAA7115_FREQ_24_576_MHZ, SAA7115_FREQ_FL_UCGC);
 956        }
 957
 958        if (hw & IVTV_HW_CX25840) {
 959                itv->vbi.raw_decoder_line_size = 1444;
 960                itv->vbi.raw_decoder_sav_odd_field = 0x20;
 961                itv->vbi.raw_decoder_sav_even_field = 0x60;
 962                itv->vbi.sliced_decoder_line_size = 272;
 963                itv->vbi.sliced_decoder_sav_odd_field = 0xB0;
 964                itv->vbi.sliced_decoder_sav_even_field = 0xF0;
 965        }
 966
 967        if (hw & IVTV_HW_SAA711X) {
 968                /* determine the exact saa711x model */
 969                itv->hw_flags &= ~IVTV_HW_SAA711X;
 970
 971                if (strstr(itv->sd_video->name, "saa7114")) {
 972                        itv->hw_flags |= IVTV_HW_SAA7114;
 973                        /* VBI is not yet supported by the saa7114 driver. */
 974                        itv->v4l2_cap &= ~(V4L2_CAP_SLICED_VBI_CAPTURE|V4L2_CAP_VBI_CAPTURE);
 975                } else {
 976                        itv->hw_flags |= IVTV_HW_SAA7115;
 977                }
 978                itv->vbi.raw_decoder_line_size = 1443;
 979                itv->vbi.raw_decoder_sav_odd_field = 0x25;
 980                itv->vbi.raw_decoder_sav_even_field = 0x62;
 981                itv->vbi.sliced_decoder_line_size = 51;
 982                itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
 983                itv->vbi.sliced_decoder_sav_even_field = 0xEC;
 984        }
 985
 986        if (hw & IVTV_HW_SAA717X) {
 987                itv->vbi.raw_decoder_line_size = 1443;
 988                itv->vbi.raw_decoder_sav_odd_field = 0x25;
 989                itv->vbi.raw_decoder_sav_even_field = 0x62;
 990                itv->vbi.sliced_decoder_line_size = 51;
 991                itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
 992                itv->vbi.sliced_decoder_sav_even_field = 0xEC;
 993        }
 994}
 995
 996static int ivtv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
 997{
 998        int retval = 0;
 999        int vbi_buf_size;
1000        struct ivtv *itv;
1001
1002        itv = kzalloc(sizeof(struct ivtv), GFP_KERNEL);
1003        if (itv == NULL)
1004                return -ENOMEM;
1005        itv->pdev = pdev;
1006        itv->instance = v4l2_device_set_name(&itv->v4l2_dev, "ivtv",
1007                                                &ivtv_instance);
1008
1009        retval = v4l2_device_register(&pdev->dev, &itv->v4l2_dev);
1010        if (retval) {
1011                kfree(itv);
1012                return retval;
1013        }
1014        IVTV_INFO("Initializing card %d\n", itv->instance);
1015
1016        ivtv_process_options(itv);
1017        if (itv->options.cardtype == -1) {
1018                retval = -ENODEV;
1019                goto err;
1020        }
1021        if (ivtv_init_struct1(itv)) {
1022                retval = -ENOMEM;
1023                goto err;
1024        }
1025        retval = cx2341x_handler_init(&itv->cxhdl, 50);
1026        if (retval)
1027                goto err;
1028        itv->v4l2_dev.ctrl_handler = &itv->cxhdl.hdl;
1029        itv->cxhdl.ops = &ivtv_cxhdl_ops;
1030        itv->cxhdl.priv = itv;
1031        itv->cxhdl.func = ivtv_api_func;
1032
1033        IVTV_DEBUG_INFO("base addr: 0x%llx\n", (u64)itv->base_addr);
1034
1035        /* PCI Device Setup */
1036        retval = ivtv_setup_pci(itv, pdev, pci_id);
1037        if (retval == -EIO)
1038                goto free_worker;
1039        if (retval == -ENXIO)
1040                goto free_mem;
1041
1042        /* map io memory */
1043        IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1044                   (u64)itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
1045        itv->enc_mem = ioremap_nocache(itv->base_addr + IVTV_ENCODER_OFFSET,
1046                                       IVTV_ENCODER_SIZE);
1047        if (!itv->enc_mem) {
1048                IVTV_ERR("ioremap failed. Can't get a window into CX23415/6 encoder memory\n");
1049                IVTV_ERR("Each capture card with a CX23415/6 needs 8 MB of vmalloc address space for this window\n");
1050                IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1051                IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1052                retval = -ENOMEM;
1053                goto free_mem;
1054        }
1055
1056        if (itv->has_cx23415) {
1057                IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1058                                (u64)itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1059                itv->dec_mem = ioremap_nocache(itv->base_addr + IVTV_DECODER_OFFSET,
1060                                IVTV_DECODER_SIZE);
1061                if (!itv->dec_mem) {
1062                        IVTV_ERR("ioremap failed. Can't get a window into CX23415 decoder memory\n");
1063                        IVTV_ERR("Each capture card with a CX23415 needs 8 MB of vmalloc address space for this window\n");
1064                        IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1065                        IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1066                        retval = -ENOMEM;
1067                        goto free_mem;
1068                }
1069        }
1070        else {
1071                itv->dec_mem = itv->enc_mem;
1072        }
1073
1074        /* map registers memory */
1075        IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1076                   (u64)itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1077        itv->reg_mem =
1078            ioremap_nocache(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1079        if (!itv->reg_mem) {
1080                IVTV_ERR("ioremap failed. Can't get a window into CX23415/6 register space\n");
1081                IVTV_ERR("Each capture card with a CX23415/6 needs 64 kB of vmalloc address space for this window\n");
1082                IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1083                IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1084                retval = -ENOMEM;
1085                goto free_io;
1086        }
1087
1088        retval = ivtv_gpio_init(itv);
1089        if (retval)
1090                goto free_io;
1091
1092        /* active i2c  */
1093        IVTV_DEBUG_INFO("activating i2c...\n");
1094        if (init_ivtv_i2c(itv)) {
1095                IVTV_ERR("Could not initialize i2c\n");
1096                goto free_io;
1097        }
1098
1099        if (itv->card->hw_all & IVTV_HW_TVEEPROM) {
1100                /* Based on the model number the cardtype may be changed.
1101                   The PCI IDs are not always reliable. */
1102                ivtv_process_eeprom(itv);
1103        }
1104        if (itv->card->comment)
1105                IVTV_INFO("%s", itv->card->comment);
1106        if (itv->card->v4l2_capabilities == 0) {
1107                /* card was detected but is not supported */
1108                retval = -ENODEV;
1109                goto free_i2c;
1110        }
1111
1112        if (itv->std == 0) {
1113                itv->std = V4L2_STD_NTSC_M;
1114        }
1115
1116        if (itv->options.tuner == -1) {
1117                int i;
1118
1119                for (i = 0; i < IVTV_CARD_MAX_TUNERS; i++) {
1120                        if ((itv->std & itv->card->tuners[i].std) == 0)
1121                                continue;
1122                        itv->options.tuner = itv->card->tuners[i].tuner;
1123                        break;
1124                }
1125        }
1126        /* if no tuner was found, then pick the first tuner in the card list */
1127        if (itv->options.tuner == -1 && itv->card->tuners[0].std) {
1128                itv->std = itv->card->tuners[0].std;
1129                if (itv->std & V4L2_STD_PAL)
1130                        itv->std = V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
1131                else if (itv->std & V4L2_STD_NTSC)
1132                        itv->std = V4L2_STD_NTSC_M;
1133                else if (itv->std & V4L2_STD_SECAM)
1134                        itv->std = V4L2_STD_SECAM_L;
1135                itv->options.tuner = itv->card->tuners[0].tuner;
1136        }
1137        if (itv->options.radio == -1)
1138                itv->options.radio = (itv->card->radio_input.audio_type != 0);
1139
1140        /* The card is now fully identified, continue with card-specific
1141           initialization. */
1142        ivtv_init_struct2(itv);
1143
1144        ivtv_load_and_init_modules(itv);
1145
1146        if (itv->std & V4L2_STD_525_60) {
1147                itv->is_60hz = 1;
1148                itv->is_out_60hz = 1;
1149        } else {
1150                itv->is_50hz = 1;
1151                itv->is_out_50hz = 1;
1152        }
1153
1154        itv->yuv_info.osd_full_w = 720;
1155        itv->yuv_info.osd_full_h = itv->is_out_50hz ? 576 : 480;
1156        itv->yuv_info.v4l2_src_w = itv->yuv_info.osd_full_w;
1157        itv->yuv_info.v4l2_src_h = itv->yuv_info.osd_full_h;
1158
1159        cx2341x_handler_set_50hz(&itv->cxhdl, itv->is_50hz);
1160
1161        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_MPG] = 0x08000;
1162        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_PCM] = 0x01200;
1163        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_MPG] = 0x10000;
1164        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_YUV] = 0x10000;
1165        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_YUV] = 0x08000;
1166
1167        /* Setup VBI Raw Size. Should be big enough to hold PAL.
1168           It is possible to switch between PAL and NTSC, so we need to
1169           take the largest size here. */
1170        /* 1456 is multiple of 16, real size = 1444 */
1171        itv->vbi.raw_size = 1456;
1172        /* We use a buffer size of 1/2 of the total size needed for a
1173           frame. This is actually very useful, since we now receive
1174           a field at a time and that makes 'compressing' the raw data
1175           down to size by stripping off the SAV codes a lot easier.
1176           Note: having two different buffer sizes prevents standard
1177           switching on the fly. We need to find a better solution... */
1178        vbi_buf_size = itv->vbi.raw_size * (itv->is_60hz ? 24 : 36) / 2;
1179        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_VBI] = vbi_buf_size;
1180        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_VBI] = sizeof(struct v4l2_sliced_vbi_data) * 36;
1181
1182        if (itv->options.radio > 0)
1183                itv->v4l2_cap |= V4L2_CAP_RADIO;
1184
1185        if (itv->options.tuner > -1) {
1186                struct tuner_setup setup;
1187
1188                setup.addr = ADDR_UNSET;
1189                setup.type = itv->options.tuner;
1190                setup.mode_mask = T_ANALOG_TV;  /* matches TV tuners */
1191                if (itv->options.radio > 0)
1192                        setup.mode_mask |= T_RADIO;
1193                setup.tuner_callback = (setup.type == TUNER_XC2028) ?
1194                        ivtv_reset_tuner_gpio : NULL;
1195                ivtv_call_all(itv, tuner, s_type_addr, &setup);
1196                if (setup.type == TUNER_XC2028) {
1197                        static struct xc2028_ctrl ctrl = {
1198                                .fname = XC2028_DEFAULT_FIRMWARE,
1199                                .max_len = 64,
1200                        };
1201                        struct v4l2_priv_tun_config cfg = {
1202                                .tuner = itv->options.tuner,
1203                                .priv = &ctrl,
1204                        };
1205                        ivtv_call_all(itv, tuner, s_config, &cfg);
1206                }
1207        }
1208
1209        /* The tuner is fixed to the standard. The other inputs (e.g. S-Video)
1210           are not. */
1211        itv->tuner_std = itv->std;
1212
1213        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1214                struct v4l2_ctrl_handler *hdl = itv->v4l2_dev.ctrl_handler;
1215
1216                itv->ctrl_pts = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
1217                                V4L2_CID_MPEG_VIDEO_DEC_PTS, 0, 0, 0, 0);
1218                itv->ctrl_frame = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
1219                                V4L2_CID_MPEG_VIDEO_DEC_FRAME, 0, 0, 0, 0);
1220                /* Note: V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO is not supported,
1221                   mask that menu item. */
1222                itv->ctrl_audio_playback =
1223                        v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
1224                                V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK,
1225                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
1226                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
1227                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO);
1228                itv->ctrl_audio_multilingual_playback =
1229                        v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
1230                                V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK,
1231                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
1232                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
1233                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT);
1234                if (hdl->error) {
1235                        retval = hdl->error;
1236                        goto free_i2c;
1237                }
1238                v4l2_ctrl_cluster(2, &itv->ctrl_pts);
1239                v4l2_ctrl_cluster(2, &itv->ctrl_audio_playback);
1240                ivtv_call_all(itv, video, s_std_output, itv->std);
1241                /* Turn off the output signal. The mpeg decoder is not yet
1242                   active so without this you would get a green image until the
1243                   mpeg decoder becomes active. */
1244                ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
1245        }
1246
1247        /* clear interrupt mask, effectively disabling interrupts */
1248        ivtv_set_irq_mask(itv, 0xffffffff);
1249
1250        /* Register IRQ */
1251        retval = request_irq(itv->pdev->irq, ivtv_irq_handler,
1252             IRQF_SHARED, itv->v4l2_dev.name, (void *)itv);
1253        if (retval) {
1254                IVTV_ERR("Failed to register irq %d\n", retval);
1255                goto free_i2c;
1256        }
1257
1258        retval = ivtv_streams_setup(itv);
1259        if (retval) {
1260                IVTV_ERR("Error %d setting up streams\n", retval);
1261                goto free_irq;
1262        }
1263        retval = ivtv_streams_register(itv);
1264        if (retval) {
1265                IVTV_ERR("Error %d registering devices\n", retval);
1266                goto free_streams;
1267        }
1268        IVTV_INFO("Initialized card: %s\n", itv->card_name);
1269
1270        /* Load ivtv submodules (ivtv-alsa) */
1271        request_modules(itv);
1272        return 0;
1273
1274free_streams:
1275        ivtv_streams_cleanup(itv);
1276free_irq:
1277        free_irq(itv->pdev->irq, (void *)itv);
1278free_i2c:
1279        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
1280        exit_ivtv_i2c(itv);
1281free_io:
1282        ivtv_iounmap(itv);
1283free_mem:
1284        release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1285        release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1286        if (itv->has_cx23415)
1287                release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1288free_worker:
1289        kthread_stop(itv->irq_worker_task);
1290err:
1291        if (retval == 0)
1292                retval = -ENODEV;
1293        IVTV_ERR("Error %d on initialization\n", retval);
1294
1295        v4l2_device_unregister(&itv->v4l2_dev);
1296        kfree(itv);
1297        return retval;
1298}
1299
1300int ivtv_init_on_first_open(struct ivtv *itv)
1301{
1302        struct v4l2_frequency vf;
1303        /* Needed to call ioctls later */
1304        struct ivtv_open_id fh;
1305        int fw_retry_count = 3;
1306        int video_input;
1307
1308        fh.itv = itv;
1309        fh.type = IVTV_ENC_STREAM_TYPE_MPG;
1310
1311        if (test_bit(IVTV_F_I_FAILED, &itv->i_flags))
1312                return -ENXIO;
1313
1314        if (test_and_set_bit(IVTV_F_I_INITED, &itv->i_flags))
1315                return 0;
1316
1317        while (--fw_retry_count > 0) {
1318                /* load firmware */
1319                if (ivtv_firmware_init(itv) == 0)
1320                        break;
1321                if (fw_retry_count > 1)
1322                        IVTV_WARN("Retry loading firmware\n");
1323        }
1324
1325        if (fw_retry_count == 0) {
1326                set_bit(IVTV_F_I_FAILED, &itv->i_flags);
1327                return -ENXIO;
1328        }
1329
1330        /* Try and get firmware versions */
1331        IVTV_DEBUG_INFO("Getting firmware version..\n");
1332        ivtv_firmware_versions(itv);
1333
1334        if (itv->card->hw_all & IVTV_HW_CX25840)
1335                v4l2_subdev_call(itv->sd_video, core, load_fw);
1336
1337        vf.tuner = 0;
1338        vf.type = V4L2_TUNER_ANALOG_TV;
1339        vf.frequency = 6400; /* the tuner 'baseline' frequency */
1340
1341        /* Set initial frequency. For PAL/SECAM broadcasts no
1342           'default' channel exists AFAIK. */
1343        if (itv->std == V4L2_STD_NTSC_M_JP) {
1344                vf.frequency = 1460;    /* ch. 1 91250*16/1000 */
1345        }
1346        else if (itv->std & V4L2_STD_NTSC_M) {
1347                vf.frequency = 1076;    /* ch. 4 67250*16/1000 */
1348        }
1349
1350        video_input = itv->active_input;
1351        itv->active_input++;    /* Force update of input */
1352        ivtv_s_input(NULL, &fh, video_input);
1353
1354        /* Let the VIDIOC_S_STD ioctl do all the work, keeps the code
1355           in one place. */
1356        itv->std++;             /* Force full standard initialization */
1357        itv->std_out = itv->std;
1358        ivtv_s_frequency(NULL, &fh, &vf);
1359
1360        if (itv->card->v4l2_capabilities & V4L2_CAP_VIDEO_OUTPUT) {
1361                /* Turn on the TV-out: ivtv_init_mpeg_decoder() initializes
1362                   the mpeg decoder so now the saa7127 receives a proper
1363                   signal. */
1364                ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1);
1365                ivtv_init_mpeg_decoder(itv);
1366        }
1367
1368        /* On a cx23416 this seems to be able to enable DMA to the chip? */
1369        if (!itv->has_cx23415)
1370                write_reg_sync(0x03, IVTV_REG_DMACONTROL);
1371
1372        ivtv_s_std_enc(itv, itv->tuner_std);
1373
1374        /* Default interrupts enabled. For the PVR350 this includes the
1375           decoder VSYNC interrupt, which is always on. It is not only used
1376           during decoding but also by the OSD.
1377           Some old PVR250 cards had a cx23415, so testing for that is too
1378           general. Instead test if the card has video output capability. */
1379        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1380                ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT | IVTV_IRQ_DEC_VSYNC);
1381                ivtv_set_osd_alpha(itv);
1382                ivtv_s_std_dec(itv, itv->tuner_std);
1383        } else {
1384                ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT);
1385        }
1386
1387        /* Setup initial controls */
1388        cx2341x_handler_setup(&itv->cxhdl);
1389        return 0;
1390}
1391
1392static void ivtv_remove(struct pci_dev *pdev)
1393{
1394        struct v4l2_device *v4l2_dev = dev_get_drvdata(&pdev->dev);
1395        struct ivtv *itv = to_ivtv(v4l2_dev);
1396        int i;
1397
1398        IVTV_DEBUG_INFO("Removing card\n");
1399
1400        flush_request_modules(itv);
1401
1402        if (test_bit(IVTV_F_I_INITED, &itv->i_flags)) {
1403                /* Stop all captures */
1404                IVTV_DEBUG_INFO("Stopping all streams\n");
1405                if (atomic_read(&itv->capturing) > 0)
1406                        ivtv_stop_all_captures(itv);
1407
1408                /* Stop all decoding */
1409                IVTV_DEBUG_INFO("Stopping decoding\n");
1410
1411                /* Turn off the TV-out */
1412                if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
1413                        ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
1414                if (atomic_read(&itv->decoding) > 0) {
1415                        int type;
1416
1417                        if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
1418                                type = IVTV_DEC_STREAM_TYPE_YUV;
1419                        else
1420                                type = IVTV_DEC_STREAM_TYPE_MPG;
1421                        ivtv_stop_v4l2_decode_stream(&itv->streams[type],
1422                                V4L2_DEC_CMD_STOP_TO_BLACK | V4L2_DEC_CMD_STOP_IMMEDIATELY, 0);
1423                }
1424                ivtv_halt_firmware(itv);
1425        }
1426
1427        /* Interrupts */
1428        ivtv_set_irq_mask(itv, 0xffffffff);
1429        del_timer_sync(&itv->dma_timer);
1430
1431        /* Kill irq worker */
1432        kthread_flush_worker(&itv->irq_worker);
1433        kthread_stop(itv->irq_worker_task);
1434
1435        ivtv_streams_cleanup(itv);
1436        ivtv_udma_free(itv);
1437
1438        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
1439
1440        exit_ivtv_i2c(itv);
1441
1442        free_irq(itv->pdev->irq, (void *)itv);
1443        ivtv_iounmap(itv);
1444
1445        release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1446        release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1447        if (itv->has_cx23415)
1448                release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1449
1450        pci_disable_device(itv->pdev);
1451        for (i = 0; i < IVTV_VBI_FRAMES; i++)
1452                kfree(itv->vbi.sliced_mpeg_data[i]);
1453
1454        pr_info("Removed %s\n", itv->card_name);
1455
1456        v4l2_device_unregister(&itv->v4l2_dev);
1457        kfree(itv);
1458}
1459
1460/* define a pci_driver for card detection */
1461static struct pci_driver ivtv_pci_driver = {
1462      .name =     "ivtv",
1463      .id_table = ivtv_pci_tbl,
1464      .probe =    ivtv_probe,
1465      .remove =   ivtv_remove,
1466};
1467
1468static int __init module_start(void)
1469{
1470        pr_info("Start initialization, version %s\n", IVTV_VERSION);
1471
1472        /* Validate parameters */
1473        if (ivtv_first_minor < 0 || ivtv_first_minor >= IVTV_MAX_CARDS) {
1474                pr_err("Exiting, ivtv_first_minor must be between 0 and %d\n",
1475                     IVTV_MAX_CARDS - 1);
1476                return -1;
1477        }
1478
1479        if (ivtv_debug < 0 || ivtv_debug > 2047) {
1480                ivtv_debug = 0;
1481                pr_info("Debug value must be >= 0 and <= 2047\n");
1482        }
1483
1484        if (pci_register_driver(&ivtv_pci_driver)) {
1485                pr_err("Error detecting PCI card\n");
1486                return -ENODEV;
1487        }
1488        pr_info("End initialization\n");
1489        return 0;
1490}
1491
1492static void __exit module_cleanup(void)
1493{
1494        pci_unregister_driver(&ivtv_pci_driver);
1495}
1496
1497/* Note: These symbols are exported because they are used by the ivtvfb
1498   framebuffer module and an infrared module for the IR-blaster. */
1499EXPORT_SYMBOL(ivtv_set_irq_mask);
1500EXPORT_SYMBOL(ivtv_api);
1501EXPORT_SYMBOL(ivtv_vapi);
1502EXPORT_SYMBOL(ivtv_vapi_result);
1503EXPORT_SYMBOL(ivtv_clear_irq_mask);
1504EXPORT_SYMBOL(ivtv_debug);
1505#ifdef CONFIG_VIDEO_ADV_DEBUG
1506EXPORT_SYMBOL(ivtv_fw_debug);
1507#endif
1508EXPORT_SYMBOL(ivtv_reset_ir_gpio);
1509EXPORT_SYMBOL(ivtv_udma_setup);
1510EXPORT_SYMBOL(ivtv_udma_unmap);
1511EXPORT_SYMBOL(ivtv_udma_alloc);
1512EXPORT_SYMBOL(ivtv_udma_prepare);
1513EXPORT_SYMBOL(ivtv_init_on_first_open);
1514EXPORT_SYMBOL(ivtv_firmware_check);
1515
1516module_init(module_start);
1517module_exit(module_cleanup);
1518