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        setup_timer(&itv->dma_timer, ivtv_unfinished_dma,
 774                    (unsigned long)itv);
 775
 776        itv->cur_dma_stream = -1;
 777        itv->cur_pio_stream = -1;
 778
 779        /* Ctrls */
 780        itv->speed = 1000;
 781
 782        /* VBI */
 783        itv->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
 784        itv->vbi.sliced_in = &itv->vbi.in.fmt.sliced;
 785
 786        /* Init the sg table for osd/yuv output */
 787        sg_init_table(itv->udma.SGlist, IVTV_DMA_SG_OSD_ENT);
 788
 789        /* OSD */
 790        itv->osd_global_alpha_state = 1;
 791        itv->osd_global_alpha = 255;
 792
 793        /* YUV */
 794        atomic_set(&itv->yuv_info.next_dma_frame, -1);
 795        itv->yuv_info.lace_mode = ivtv_yuv_mode;
 796        itv->yuv_info.lace_threshold = ivtv_yuv_threshold;
 797        itv->yuv_info.max_frames_buffered = 3;
 798        itv->yuv_info.track_osd = 1;
 799        return 0;
 800}
 801
 802/* Second initialization part. Here the card type has been
 803   autodetected. */
 804static void ivtv_init_struct2(struct ivtv *itv)
 805{
 806        int i;
 807
 808        for (i = 0; i < IVTV_CARD_MAX_VIDEO_INPUTS; i++)
 809                if (itv->card->video_inputs[i].video_type == 0)
 810                        break;
 811        itv->nof_inputs = i;
 812        for (i = 0; i < IVTV_CARD_MAX_AUDIO_INPUTS; i++)
 813                if (itv->card->audio_inputs[i].audio_type == 0)
 814                        break;
 815        itv->nof_audio_inputs = i;
 816
 817        if (itv->card->hw_all & IVTV_HW_CX25840) {
 818                itv->vbi.sliced_size = 288;  /* multiple of 16, real size = 284 */
 819        } else {
 820                itv->vbi.sliced_size = 64;   /* multiple of 16, real size = 52 */
 821        }
 822
 823        /* Find tuner input */
 824        for (i = 0; i < itv->nof_inputs; i++) {
 825                if (itv->card->video_inputs[i].video_type ==
 826                                IVTV_CARD_INPUT_VID_TUNER)
 827                        break;
 828        }
 829        if (i >= itv->nof_inputs)
 830                i = 0;
 831        itv->active_input = i;
 832        itv->audio_input = itv->card->video_inputs[i].audio_index;
 833}
 834
 835static int ivtv_setup_pci(struct ivtv *itv, struct pci_dev *pdev,
 836                          const struct pci_device_id *pci_id)
 837{
 838        u16 cmd;
 839        unsigned char pci_latency;
 840
 841        IVTV_DEBUG_INFO("Enabling pci device\n");
 842
 843        if (pci_enable_device(pdev)) {
 844                IVTV_ERR("Can't enable device!\n");
 845                return -EIO;
 846        }
 847        if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
 848                IVTV_ERR("No suitable DMA available.\n");
 849                return -EIO;
 850        }
 851        if (!request_mem_region(itv->base_addr, IVTV_ENCODER_SIZE, "ivtv encoder")) {
 852                IVTV_ERR("Cannot request encoder memory region.\n");
 853                return -EIO;
 854        }
 855
 856        if (!request_mem_region(itv->base_addr + IVTV_REG_OFFSET,
 857                                IVTV_REG_SIZE, "ivtv registers")) {
 858                IVTV_ERR("Cannot request register memory region.\n");
 859                release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
 860                return -EIO;
 861        }
 862
 863        if (itv->has_cx23415 &&
 864            !request_mem_region(itv->base_addr + IVTV_DECODER_OFFSET,
 865                                IVTV_DECODER_SIZE, "ivtv decoder")) {
 866                IVTV_ERR("Cannot request decoder memory region.\n");
 867                release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
 868                release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
 869                return -EIO;
 870        }
 871
 872        /* Check for bus mastering */
 873        pci_read_config_word(pdev, PCI_COMMAND, &cmd);
 874        if (!(cmd & PCI_COMMAND_MASTER)) {
 875                IVTV_DEBUG_INFO("Attempting to enable Bus Mastering\n");
 876                pci_set_master(pdev);
 877                pci_read_config_word(pdev, PCI_COMMAND, &cmd);
 878                if (!(cmd & PCI_COMMAND_MASTER)) {
 879                        IVTV_ERR("Bus Mastering is not enabled\n");
 880                        return -ENXIO;
 881                }
 882        }
 883        IVTV_DEBUG_INFO("Bus Mastering Enabled.\n");
 884
 885        pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
 886
 887        if (pci_latency < 64 && ivtv_pci_latency) {
 888                IVTV_INFO("Unreasonably low latency timer, setting to 64 (was %d)\n",
 889                          pci_latency);
 890                pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 64);
 891                pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &pci_latency);
 892        }
 893        /* This config space value relates to DMA latencies. The
 894           default value 0x8080 is too low however and will lead
 895           to DMA errors. 0xffff is the max value which solves
 896           these problems. */
 897        pci_write_config_dword(pdev, 0x40, 0xffff);
 898
 899        IVTV_DEBUG_INFO("%d (rev %d) at %02x:%02x.%x, irq: %d, latency: %d, memory: 0x%llx\n",
 900                   pdev->device, pdev->revision, pdev->bus->number,
 901                   PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn),
 902                   pdev->irq, pci_latency, (u64)itv->base_addr);
 903
 904        return 0;
 905}
 906
 907static void ivtv_load_and_init_modules(struct ivtv *itv)
 908{
 909        u32 hw = itv->card->hw_all;
 910        unsigned i;
 911
 912        /* check which i2c devices are actually found */
 913        for (i = 0; i < 32; i++) {
 914                u32 device = 1 << i;
 915
 916                if (!(device & hw))
 917                        continue;
 918                if (device == IVTV_HW_GPIO || device == IVTV_HW_TVEEPROM) {
 919                        /* GPIO and TVEEPROM do not use i2c probing */
 920                        itv->hw_flags |= device;
 921                        continue;
 922                }
 923                if (ivtv_i2c_register(itv, i) == 0)
 924                        itv->hw_flags |= device;
 925        }
 926
 927        /* probe for legacy IR controllers that aren't in card definitions */
 928        if ((itv->hw_flags & IVTV_HW_IR_ANY) == 0)
 929                ivtv_i2c_new_ir_legacy(itv);
 930
 931        if (itv->card->hw_all & IVTV_HW_CX25840)
 932                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_CX25840);
 933        else if (itv->card->hw_all & IVTV_HW_SAA717X)
 934                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA717X);
 935        else if (itv->card->hw_all & IVTV_HW_SAA7114)
 936                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7114);
 937        else
 938                itv->sd_video = ivtv_find_hw(itv, IVTV_HW_SAA7115);
 939        itv->sd_audio = ivtv_find_hw(itv, itv->card->hw_audio_ctrl);
 940        itv->sd_muxer = ivtv_find_hw(itv, itv->card->hw_muxer);
 941
 942        hw = itv->hw_flags;
 943
 944        if (itv->card->type == IVTV_CARD_CX23416GYC) {
 945                /* Several variations of this card exist, detect which card
 946                   type should be used. */
 947                if ((hw & (IVTV_HW_UPD64031A | IVTV_HW_UPD6408X)) == 0)
 948                        itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGRYCS);
 949                else if ((hw & IVTV_HW_UPD64031A) == 0)
 950                        itv->card = ivtv_get_card(IVTV_CARD_CX23416GYC_NOGR);
 951        }
 952        else if (itv->card->type == IVTV_CARD_GV_MVPRX ||
 953                 itv->card->type == IVTV_CARD_GV_MVPRX2E) {
 954                /* The crystal frequency of GVMVPRX is 24.576MHz */
 955                v4l2_subdev_call(itv->sd_video, video, s_crystal_freq,
 956                        SAA7115_FREQ_24_576_MHZ, SAA7115_FREQ_FL_UCGC);
 957        }
 958
 959        if (hw & IVTV_HW_CX25840) {
 960                itv->vbi.raw_decoder_line_size = 1444;
 961                itv->vbi.raw_decoder_sav_odd_field = 0x20;
 962                itv->vbi.raw_decoder_sav_even_field = 0x60;
 963                itv->vbi.sliced_decoder_line_size = 272;
 964                itv->vbi.sliced_decoder_sav_odd_field = 0xB0;
 965                itv->vbi.sliced_decoder_sav_even_field = 0xF0;
 966        }
 967
 968        if (hw & IVTV_HW_SAA711X) {
 969                /* determine the exact saa711x model */
 970                itv->hw_flags &= ~IVTV_HW_SAA711X;
 971
 972                if (strstr(itv->sd_video->name, "saa7114")) {
 973                        itv->hw_flags |= IVTV_HW_SAA7114;
 974                        /* VBI is not yet supported by the saa7114 driver. */
 975                        itv->v4l2_cap &= ~(V4L2_CAP_SLICED_VBI_CAPTURE|V4L2_CAP_VBI_CAPTURE);
 976                } else {
 977                        itv->hw_flags |= IVTV_HW_SAA7115;
 978                }
 979                itv->vbi.raw_decoder_line_size = 1443;
 980                itv->vbi.raw_decoder_sav_odd_field = 0x25;
 981                itv->vbi.raw_decoder_sav_even_field = 0x62;
 982                itv->vbi.sliced_decoder_line_size = 51;
 983                itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
 984                itv->vbi.sliced_decoder_sav_even_field = 0xEC;
 985        }
 986
 987        if (hw & IVTV_HW_SAA717X) {
 988                itv->vbi.raw_decoder_line_size = 1443;
 989                itv->vbi.raw_decoder_sav_odd_field = 0x25;
 990                itv->vbi.raw_decoder_sav_even_field = 0x62;
 991                itv->vbi.sliced_decoder_line_size = 51;
 992                itv->vbi.sliced_decoder_sav_odd_field = 0xAB;
 993                itv->vbi.sliced_decoder_sav_even_field = 0xEC;
 994        }
 995}
 996
 997static int ivtv_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
 998{
 999        int retval = 0;
1000        int vbi_buf_size;
1001        struct ivtv *itv;
1002
1003        itv = kzalloc(sizeof(struct ivtv), GFP_ATOMIC);
1004        if (itv == NULL)
1005                return -ENOMEM;
1006        itv->pdev = pdev;
1007        itv->instance = v4l2_device_set_name(&itv->v4l2_dev, "ivtv",
1008                                                &ivtv_instance);
1009
1010        retval = v4l2_device_register(&pdev->dev, &itv->v4l2_dev);
1011        if (retval) {
1012                kfree(itv);
1013                return retval;
1014        }
1015        IVTV_INFO("Initializing card %d\n", itv->instance);
1016
1017        ivtv_process_options(itv);
1018        if (itv->options.cardtype == -1) {
1019                retval = -ENODEV;
1020                goto err;
1021        }
1022        if (ivtv_init_struct1(itv)) {
1023                retval = -ENOMEM;
1024                goto err;
1025        }
1026        retval = cx2341x_handler_init(&itv->cxhdl, 50);
1027        if (retval)
1028                goto err;
1029        itv->v4l2_dev.ctrl_handler = &itv->cxhdl.hdl;
1030        itv->cxhdl.ops = &ivtv_cxhdl_ops;
1031        itv->cxhdl.priv = itv;
1032        itv->cxhdl.func = ivtv_api_func;
1033
1034        IVTV_DEBUG_INFO("base addr: 0x%llx\n", (u64)itv->base_addr);
1035
1036        /* PCI Device Setup */
1037        retval = ivtv_setup_pci(itv, pdev, pci_id);
1038        if (retval == -EIO)
1039                goto free_worker;
1040        if (retval == -ENXIO)
1041                goto free_mem;
1042
1043        /* map io memory */
1044        IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1045                   (u64)itv->base_addr + IVTV_ENCODER_OFFSET, IVTV_ENCODER_SIZE);
1046        itv->enc_mem = ioremap_nocache(itv->base_addr + IVTV_ENCODER_OFFSET,
1047                                       IVTV_ENCODER_SIZE);
1048        if (!itv->enc_mem) {
1049                IVTV_ERR("ioremap failed. Can't get a window into CX23415/6 encoder memory\n");
1050                IVTV_ERR("Each capture card with a CX23415/6 needs 8 MB of vmalloc address space for this window\n");
1051                IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1052                IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1053                retval = -ENOMEM;
1054                goto free_mem;
1055        }
1056
1057        if (itv->has_cx23415) {
1058                IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1059                                (u64)itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1060                itv->dec_mem = ioremap_nocache(itv->base_addr + IVTV_DECODER_OFFSET,
1061                                IVTV_DECODER_SIZE);
1062                if (!itv->dec_mem) {
1063                        IVTV_ERR("ioremap failed. Can't get a window into CX23415 decoder memory\n");
1064                        IVTV_ERR("Each capture card with a CX23415 needs 8 MB of vmalloc address space for this window\n");
1065                        IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1066                        IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1067                        retval = -ENOMEM;
1068                        goto free_mem;
1069                }
1070        }
1071        else {
1072                itv->dec_mem = itv->enc_mem;
1073        }
1074
1075        /* map registers memory */
1076        IVTV_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
1077                   (u64)itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1078        itv->reg_mem =
1079            ioremap_nocache(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1080        if (!itv->reg_mem) {
1081                IVTV_ERR("ioremap failed. Can't get a window into CX23415/6 register space\n");
1082                IVTV_ERR("Each capture card with a CX23415/6 needs 64 kB of vmalloc address space for this window\n");
1083                IVTV_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
1084                IVTV_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
1085                retval = -ENOMEM;
1086                goto free_io;
1087        }
1088
1089        retval = ivtv_gpio_init(itv);
1090        if (retval)
1091                goto free_io;
1092
1093        /* active i2c  */
1094        IVTV_DEBUG_INFO("activating i2c...\n");
1095        if (init_ivtv_i2c(itv)) {
1096                IVTV_ERR("Could not initialize i2c\n");
1097                goto free_io;
1098        }
1099
1100        if (itv->card->hw_all & IVTV_HW_TVEEPROM) {
1101                /* Based on the model number the cardtype may be changed.
1102                   The PCI IDs are not always reliable. */
1103                ivtv_process_eeprom(itv);
1104        }
1105        if (itv->card->comment)
1106                IVTV_INFO("%s", itv->card->comment);
1107        if (itv->card->v4l2_capabilities == 0) {
1108                /* card was detected but is not supported */
1109                retval = -ENODEV;
1110                goto free_i2c;
1111        }
1112
1113        if (itv->std == 0) {
1114                itv->std = V4L2_STD_NTSC_M;
1115        }
1116
1117        if (itv->options.tuner == -1) {
1118                int i;
1119
1120                for (i = 0; i < IVTV_CARD_MAX_TUNERS; i++) {
1121                        if ((itv->std & itv->card->tuners[i].std) == 0)
1122                                continue;
1123                        itv->options.tuner = itv->card->tuners[i].tuner;
1124                        break;
1125                }
1126        }
1127        /* if no tuner was found, then pick the first tuner in the card list */
1128        if (itv->options.tuner == -1 && itv->card->tuners[0].std) {
1129                itv->std = itv->card->tuners[0].std;
1130                if (itv->std & V4L2_STD_PAL)
1131                        itv->std = V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
1132                else if (itv->std & V4L2_STD_NTSC)
1133                        itv->std = V4L2_STD_NTSC_M;
1134                else if (itv->std & V4L2_STD_SECAM)
1135                        itv->std = V4L2_STD_SECAM_L;
1136                itv->options.tuner = itv->card->tuners[0].tuner;
1137        }
1138        if (itv->options.radio == -1)
1139                itv->options.radio = (itv->card->radio_input.audio_type != 0);
1140
1141        /* The card is now fully identified, continue with card-specific
1142           initialization. */
1143        ivtv_init_struct2(itv);
1144
1145        ivtv_load_and_init_modules(itv);
1146
1147        if (itv->std & V4L2_STD_525_60) {
1148                itv->is_60hz = 1;
1149                itv->is_out_60hz = 1;
1150        } else {
1151                itv->is_50hz = 1;
1152                itv->is_out_50hz = 1;
1153        }
1154
1155        itv->yuv_info.osd_full_w = 720;
1156        itv->yuv_info.osd_full_h = itv->is_out_50hz ? 576 : 480;
1157        itv->yuv_info.v4l2_src_w = itv->yuv_info.osd_full_w;
1158        itv->yuv_info.v4l2_src_h = itv->yuv_info.osd_full_h;
1159
1160        cx2341x_handler_set_50hz(&itv->cxhdl, itv->is_50hz);
1161
1162        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_MPG] = 0x08000;
1163        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_PCM] = 0x01200;
1164        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_MPG] = 0x10000;
1165        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_YUV] = 0x10000;
1166        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_YUV] = 0x08000;
1167
1168        /* Setup VBI Raw Size. Should be big enough to hold PAL.
1169           It is possible to switch between PAL and NTSC, so we need to
1170           take the largest size here. */
1171        /* 1456 is multiple of 16, real size = 1444 */
1172        itv->vbi.raw_size = 1456;
1173        /* We use a buffer size of 1/2 of the total size needed for a
1174           frame. This is actually very useful, since we now receive
1175           a field at a time and that makes 'compressing' the raw data
1176           down to size by stripping off the SAV codes a lot easier.
1177           Note: having two different buffer sizes prevents standard
1178           switching on the fly. We need to find a better solution... */
1179        vbi_buf_size = itv->vbi.raw_size * (itv->is_60hz ? 24 : 36) / 2;
1180        itv->stream_buf_size[IVTV_ENC_STREAM_TYPE_VBI] = vbi_buf_size;
1181        itv->stream_buf_size[IVTV_DEC_STREAM_TYPE_VBI] = sizeof(struct v4l2_sliced_vbi_data) * 36;
1182
1183        if (itv->options.radio > 0)
1184                itv->v4l2_cap |= V4L2_CAP_RADIO;
1185
1186        if (itv->options.tuner > -1) {
1187                struct tuner_setup setup;
1188
1189                setup.addr = ADDR_UNSET;
1190                setup.type = itv->options.tuner;
1191                setup.mode_mask = T_ANALOG_TV;  /* matches TV tuners */
1192                if (itv->options.radio > 0)
1193                        setup.mode_mask |= T_RADIO;
1194                setup.tuner_callback = (setup.type == TUNER_XC2028) ?
1195                        ivtv_reset_tuner_gpio : NULL;
1196                ivtv_call_all(itv, tuner, s_type_addr, &setup);
1197                if (setup.type == TUNER_XC2028) {
1198                        static struct xc2028_ctrl ctrl = {
1199                                .fname = XC2028_DEFAULT_FIRMWARE,
1200                                .max_len = 64,
1201                        };
1202                        struct v4l2_priv_tun_config cfg = {
1203                                .tuner = itv->options.tuner,
1204                                .priv = &ctrl,
1205                        };
1206                        ivtv_call_all(itv, tuner, s_config, &cfg);
1207                }
1208        }
1209
1210        /* The tuner is fixed to the standard. The other inputs (e.g. S-Video)
1211           are not. */
1212        itv->tuner_std = itv->std;
1213
1214        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1215                struct v4l2_ctrl_handler *hdl = itv->v4l2_dev.ctrl_handler;
1216
1217                itv->ctrl_pts = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
1218                                V4L2_CID_MPEG_VIDEO_DEC_PTS, 0, 0, 0, 0);
1219                itv->ctrl_frame = v4l2_ctrl_new_std(hdl, &ivtv_hdl_out_ops,
1220                                V4L2_CID_MPEG_VIDEO_DEC_FRAME, 0, 0, 0, 0);
1221                /* Note: V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO is not supported,
1222                   mask that menu item. */
1223                itv->ctrl_audio_playback =
1224                        v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
1225                                V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK,
1226                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
1227                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
1228                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_STEREO);
1229                itv->ctrl_audio_multilingual_playback =
1230                        v4l2_ctrl_new_std_menu(hdl, &ivtv_hdl_out_ops,
1231                                V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK,
1232                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_SWAPPED_STEREO,
1233                                1 << V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO,
1234                                V4L2_MPEG_AUDIO_DEC_PLAYBACK_LEFT);
1235                if (hdl->error) {
1236                        retval = hdl->error;
1237                        goto free_i2c;
1238                }
1239                v4l2_ctrl_cluster(2, &itv->ctrl_pts);
1240                v4l2_ctrl_cluster(2, &itv->ctrl_audio_playback);
1241                ivtv_call_all(itv, video, s_std_output, itv->std);
1242                /* Turn off the output signal. The mpeg decoder is not yet
1243                   active so without this you would get a green image until the
1244                   mpeg decoder becomes active. */
1245                ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
1246        }
1247
1248        /* clear interrupt mask, effectively disabling interrupts */
1249        ivtv_set_irq_mask(itv, 0xffffffff);
1250
1251        /* Register IRQ */
1252        retval = request_irq(itv->pdev->irq, ivtv_irq_handler,
1253             IRQF_SHARED, itv->v4l2_dev.name, (void *)itv);
1254        if (retval) {
1255                IVTV_ERR("Failed to register irq %d\n", retval);
1256                goto free_i2c;
1257        }
1258
1259        retval = ivtv_streams_setup(itv);
1260        if (retval) {
1261                IVTV_ERR("Error %d setting up streams\n", retval);
1262                goto free_irq;
1263        }
1264        retval = ivtv_streams_register(itv);
1265        if (retval) {
1266                IVTV_ERR("Error %d registering devices\n", retval);
1267                goto free_streams;
1268        }
1269        IVTV_INFO("Initialized card: %s\n", itv->card_name);
1270
1271        /* Load ivtv submodules (ivtv-alsa) */
1272        request_modules(itv);
1273        return 0;
1274
1275free_streams:
1276        ivtv_streams_cleanup(itv);
1277free_irq:
1278        free_irq(itv->pdev->irq, (void *)itv);
1279free_i2c:
1280        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
1281        exit_ivtv_i2c(itv);
1282free_io:
1283        ivtv_iounmap(itv);
1284free_mem:
1285        release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1286        release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1287        if (itv->has_cx23415)
1288                release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1289free_worker:
1290        kthread_stop(itv->irq_worker_task);
1291err:
1292        if (retval == 0)
1293                retval = -ENODEV;
1294        IVTV_ERR("Error %d on initialization\n", retval);
1295
1296        v4l2_device_unregister(&itv->v4l2_dev);
1297        kfree(itv);
1298        return retval;
1299}
1300
1301int ivtv_init_on_first_open(struct ivtv *itv)
1302{
1303        struct v4l2_frequency vf;
1304        /* Needed to call ioctls later */
1305        struct ivtv_open_id fh;
1306        int fw_retry_count = 3;
1307        int video_input;
1308
1309        fh.itv = itv;
1310        fh.type = IVTV_ENC_STREAM_TYPE_MPG;
1311
1312        if (test_bit(IVTV_F_I_FAILED, &itv->i_flags))
1313                return -ENXIO;
1314
1315        if (test_and_set_bit(IVTV_F_I_INITED, &itv->i_flags))
1316                return 0;
1317
1318        while (--fw_retry_count > 0) {
1319                /* load firmware */
1320                if (ivtv_firmware_init(itv) == 0)
1321                        break;
1322                if (fw_retry_count > 1)
1323                        IVTV_WARN("Retry loading firmware\n");
1324        }
1325
1326        if (fw_retry_count == 0) {
1327                set_bit(IVTV_F_I_FAILED, &itv->i_flags);
1328                return -ENXIO;
1329        }
1330
1331        /* Try and get firmware versions */
1332        IVTV_DEBUG_INFO("Getting firmware version..\n");
1333        ivtv_firmware_versions(itv);
1334
1335        if (itv->card->hw_all & IVTV_HW_CX25840)
1336                v4l2_subdev_call(itv->sd_video, core, load_fw);
1337
1338        vf.tuner = 0;
1339        vf.type = V4L2_TUNER_ANALOG_TV;
1340        vf.frequency = 6400; /* the tuner 'baseline' frequency */
1341
1342        /* Set initial frequency. For PAL/SECAM broadcasts no
1343           'default' channel exists AFAIK. */
1344        if (itv->std == V4L2_STD_NTSC_M_JP) {
1345                vf.frequency = 1460;    /* ch. 1 91250*16/1000 */
1346        }
1347        else if (itv->std & V4L2_STD_NTSC_M) {
1348                vf.frequency = 1076;    /* ch. 4 67250*16/1000 */
1349        }
1350
1351        video_input = itv->active_input;
1352        itv->active_input++;    /* Force update of input */
1353        ivtv_s_input(NULL, &fh, video_input);
1354
1355        /* Let the VIDIOC_S_STD ioctl do all the work, keeps the code
1356           in one place. */
1357        itv->std++;             /* Force full standard initialization */
1358        itv->std_out = itv->std;
1359        ivtv_s_frequency(NULL, &fh, &vf);
1360
1361        if (itv->card->v4l2_capabilities & V4L2_CAP_VIDEO_OUTPUT) {
1362                /* Turn on the TV-out: ivtv_init_mpeg_decoder() initializes
1363                   the mpeg decoder so now the saa7127 receives a proper
1364                   signal. */
1365                ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 1);
1366                ivtv_init_mpeg_decoder(itv);
1367        }
1368
1369        /* On a cx23416 this seems to be able to enable DMA to the chip? */
1370        if (!itv->has_cx23415)
1371                write_reg_sync(0x03, IVTV_REG_DMACONTROL);
1372
1373        ivtv_s_std_enc(itv, itv->tuner_std);
1374
1375        /* Default interrupts enabled. For the PVR350 this includes the
1376           decoder VSYNC interrupt, which is always on. It is not only used
1377           during decoding but also by the OSD.
1378           Some old PVR250 cards had a cx23415, so testing for that is too
1379           general. Instead test if the card has video output capability. */
1380        if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) {
1381                ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT | IVTV_IRQ_DEC_VSYNC);
1382                ivtv_set_osd_alpha(itv);
1383                ivtv_s_std_dec(itv, itv->tuner_std);
1384        } else {
1385                ivtv_clear_irq_mask(itv, IVTV_IRQ_MASK_INIT);
1386        }
1387
1388        /* Setup initial controls */
1389        cx2341x_handler_setup(&itv->cxhdl);
1390        return 0;
1391}
1392
1393static void ivtv_remove(struct pci_dev *pdev)
1394{
1395        struct v4l2_device *v4l2_dev = dev_get_drvdata(&pdev->dev);
1396        struct ivtv *itv = to_ivtv(v4l2_dev);
1397        int i;
1398
1399        IVTV_DEBUG_INFO("Removing card\n");
1400
1401        flush_request_modules(itv);
1402
1403        if (test_bit(IVTV_F_I_INITED, &itv->i_flags)) {
1404                /* Stop all captures */
1405                IVTV_DEBUG_INFO("Stopping all streams\n");
1406                if (atomic_read(&itv->capturing) > 0)
1407                        ivtv_stop_all_captures(itv);
1408
1409                /* Stop all decoding */
1410                IVTV_DEBUG_INFO("Stopping decoding\n");
1411
1412                /* Turn off the TV-out */
1413                if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)
1414                        ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_stream, 0);
1415                if (atomic_read(&itv->decoding) > 0) {
1416                        int type;
1417
1418                        if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
1419                                type = IVTV_DEC_STREAM_TYPE_YUV;
1420                        else
1421                                type = IVTV_DEC_STREAM_TYPE_MPG;
1422                        ivtv_stop_v4l2_decode_stream(&itv->streams[type],
1423                                V4L2_DEC_CMD_STOP_TO_BLACK | V4L2_DEC_CMD_STOP_IMMEDIATELY, 0);
1424                }
1425                ivtv_halt_firmware(itv);
1426        }
1427
1428        /* Interrupts */
1429        ivtv_set_irq_mask(itv, 0xffffffff);
1430        del_timer_sync(&itv->dma_timer);
1431
1432        /* Kill irq worker */
1433        kthread_flush_worker(&itv->irq_worker);
1434        kthread_stop(itv->irq_worker_task);
1435
1436        ivtv_streams_cleanup(itv);
1437        ivtv_udma_free(itv);
1438
1439        v4l2_ctrl_handler_free(&itv->cxhdl.hdl);
1440
1441        exit_ivtv_i2c(itv);
1442
1443        free_irq(itv->pdev->irq, (void *)itv);
1444        ivtv_iounmap(itv);
1445
1446        release_mem_region(itv->base_addr, IVTV_ENCODER_SIZE);
1447        release_mem_region(itv->base_addr + IVTV_REG_OFFSET, IVTV_REG_SIZE);
1448        if (itv->has_cx23415)
1449                release_mem_region(itv->base_addr + IVTV_DECODER_OFFSET, IVTV_DECODER_SIZE);
1450
1451        pci_disable_device(itv->pdev);
1452        for (i = 0; i < IVTV_VBI_FRAMES; i++)
1453                kfree(itv->vbi.sliced_mpeg_data[i]);
1454
1455        pr_info("Removed %s\n", itv->card_name);
1456
1457        v4l2_device_unregister(&itv->v4l2_dev);
1458        kfree(itv);
1459}
1460
1461/* define a pci_driver for card detection */
1462static struct pci_driver ivtv_pci_driver = {
1463      .name =     "ivtv",
1464      .id_table = ivtv_pci_tbl,
1465      .probe =    ivtv_probe,
1466      .remove =   ivtv_remove,
1467};
1468
1469static int __init module_start(void)
1470{
1471        pr_info("Start initialization, version %s\n", IVTV_VERSION);
1472
1473        /* Validate parameters */
1474        if (ivtv_first_minor < 0 || ivtv_first_minor >= IVTV_MAX_CARDS) {
1475                pr_err("Exiting, ivtv_first_minor must be between 0 and %d\n",
1476                     IVTV_MAX_CARDS - 1);
1477                return -1;
1478        }
1479
1480        if (ivtv_debug < 0 || ivtv_debug > 2047) {
1481                ivtv_debug = 0;
1482                pr_info("Debug value must be >= 0 and <= 2047\n");
1483        }
1484
1485        if (pci_register_driver(&ivtv_pci_driver)) {
1486                pr_err("Error detecting PCI card\n");
1487                return -ENODEV;
1488        }
1489        pr_info("End initialization\n");
1490        return 0;
1491}
1492
1493static void __exit module_cleanup(void)
1494{
1495        pci_unregister_driver(&ivtv_pci_driver);
1496}
1497
1498/* Note: These symbols are exported because they are used by the ivtvfb
1499   framebuffer module and an infrared module for the IR-blaster. */
1500EXPORT_SYMBOL(ivtv_set_irq_mask);
1501EXPORT_SYMBOL(ivtv_api);
1502EXPORT_SYMBOL(ivtv_vapi);
1503EXPORT_SYMBOL(ivtv_vapi_result);
1504EXPORT_SYMBOL(ivtv_clear_irq_mask);
1505EXPORT_SYMBOL(ivtv_debug);
1506#ifdef CONFIG_VIDEO_ADV_DEBUG
1507EXPORT_SYMBOL(ivtv_fw_debug);
1508#endif
1509EXPORT_SYMBOL(ivtv_reset_ir_gpio);
1510EXPORT_SYMBOL(ivtv_udma_setup);
1511EXPORT_SYMBOL(ivtv_udma_unmap);
1512EXPORT_SYMBOL(ivtv_udma_alloc);
1513EXPORT_SYMBOL(ivtv_udma_prepare);
1514EXPORT_SYMBOL(ivtv_init_on_first_open);
1515EXPORT_SYMBOL(ivtv_firmware_check);
1516
1517module_init(module_start);
1518module_exit(module_cleanup);
1519