linux/drivers/media/pci/cx18/cx18-driver.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *  cx18 driver initialization and card probing
   4 *
   5 *  Derived from ivtv-driver.c
   6 *
   7 *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>
   8 *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>
   9 */
  10
  11#include "cx18-driver.h"
  12#include "cx18-io.h"
  13#include "cx18-version.h"
  14#include "cx18-cards.h"
  15#include "cx18-i2c.h"
  16#include "cx18-irq.h"
  17#include "cx18-gpio.h"
  18#include "cx18-firmware.h"
  19#include "cx18-queue.h"
  20#include "cx18-streams.h"
  21#include "cx18-av-core.h"
  22#include "cx18-scb.h"
  23#include "cx18-mailbox.h"
  24#include "cx18-ioctl.h"
  25#include "cx18-controls.h"
  26#include "tuner-xc2028.h"
  27#include <linux/dma-mapping.h>
  28#include <media/tveeprom.h>
  29
  30/* If you have already X v4l cards, then set this to X. This way
  31   the device numbers stay matched. Example: you have a WinTV card
  32   without radio and a Compro H900 with. Normally this would give a
  33   video1 device together with a radio0 device for the Compro. By
  34   setting this to 1 you ensure that radio0 is now also radio1. */
  35int cx18_first_minor;
  36
  37/* Callback for registering extensions */
  38int (*cx18_ext_init)(struct cx18 *);
  39EXPORT_SYMBOL(cx18_ext_init);
  40
  41/* add your revision and whatnot here */
  42static const struct pci_device_id cx18_pci_tbl[] = {
  43        {PCI_VENDOR_ID_CX, PCI_DEVICE_ID_CX23418,
  44         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  45        {0,}
  46};
  47
  48MODULE_DEVICE_TABLE(pci, cx18_pci_tbl);
  49
  50static atomic_t cx18_instance = ATOMIC_INIT(0);
  51
  52/* Parameter declarations */
  53static int cardtype[CX18_MAX_CARDS];
  54static int tuner[CX18_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
  55                                     -1, -1, -1, -1, -1, -1, -1, -1,
  56                                     -1, -1, -1, -1, -1, -1, -1, -1,
  57                                     -1, -1, -1, -1, -1, -1, -1, -1 };
  58static int radio[CX18_MAX_CARDS] = { -1, -1, -1, -1, -1, -1, -1, -1,
  59                                     -1, -1, -1, -1, -1, -1, -1, -1,
  60                                     -1, -1, -1, -1, -1, -1, -1, -1,
  61                                     -1, -1, -1, -1, -1, -1, -1, -1 };
  62static unsigned cardtype_c = 1;
  63static unsigned tuner_c = 1;
  64static unsigned radio_c = 1;
  65static char pal[] = "--";
  66static char secam[] = "--";
  67static char ntsc[] = "-";
  68
  69/* Buffers */
  70static int enc_ts_buffers = CX18_DEFAULT_ENC_TS_BUFFERS;
  71static int enc_mpg_buffers = CX18_DEFAULT_ENC_MPG_BUFFERS;
  72static int enc_idx_buffers = CX18_DEFAULT_ENC_IDX_BUFFERS;
  73static int enc_yuv_buffers = CX18_DEFAULT_ENC_YUV_BUFFERS;
  74static int enc_vbi_buffers = CX18_DEFAULT_ENC_VBI_BUFFERS;
  75static int enc_pcm_buffers = CX18_DEFAULT_ENC_PCM_BUFFERS;
  76
  77static int enc_ts_bufsize = CX18_DEFAULT_ENC_TS_BUFSIZE;
  78static int enc_mpg_bufsize = CX18_DEFAULT_ENC_MPG_BUFSIZE;
  79static int enc_idx_bufsize = CX18_DEFAULT_ENC_IDX_BUFSIZE;
  80static int enc_yuv_bufsize = CX18_DEFAULT_ENC_YUV_BUFSIZE;
  81static int enc_pcm_bufsize = CX18_DEFAULT_ENC_PCM_BUFSIZE;
  82
  83static int enc_ts_bufs = -1;
  84static int enc_mpg_bufs = -1;
  85static int enc_idx_bufs = CX18_MAX_FW_MDLS_PER_STREAM;
  86static int enc_yuv_bufs = -1;
  87static int enc_vbi_bufs = -1;
  88static int enc_pcm_bufs = -1;
  89
  90
  91static int cx18_pci_latency = 1;
  92
  93static int mmio_ndelay;
  94static int retry_mmio = 1;
  95
  96int cx18_debug;
  97
  98module_param_array(tuner, int, &tuner_c, 0644);
  99module_param_array(radio, int, &radio_c, 0644);
 100module_param_array(cardtype, int, &cardtype_c, 0644);
 101module_param_string(pal, pal, sizeof(pal), 0644);
 102module_param_string(secam, secam, sizeof(secam), 0644);
 103module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
 104module_param_named(debug, cx18_debug, int, 0644);
 105module_param(mmio_ndelay, int, 0644);
 106module_param(retry_mmio, int, 0644);
 107module_param(cx18_pci_latency, int, 0644);
 108module_param(cx18_first_minor, int, 0644);
 109
 110module_param(enc_ts_buffers, int, 0644);
 111module_param(enc_mpg_buffers, int, 0644);
 112module_param(enc_idx_buffers, int, 0644);
 113module_param(enc_yuv_buffers, int, 0644);
 114module_param(enc_vbi_buffers, int, 0644);
 115module_param(enc_pcm_buffers, int, 0644);
 116
 117module_param(enc_ts_bufsize, int, 0644);
 118module_param(enc_mpg_bufsize, int, 0644);
 119module_param(enc_idx_bufsize, int, 0644);
 120module_param(enc_yuv_bufsize, int, 0644);
 121module_param(enc_pcm_bufsize, int, 0644);
 122
 123module_param(enc_ts_bufs, int, 0644);
 124module_param(enc_mpg_bufs, int, 0644);
 125module_param(enc_idx_bufs, int, 0644);
 126module_param(enc_yuv_bufs, int, 0644);
 127module_param(enc_vbi_bufs, int, 0644);
 128module_param(enc_pcm_bufs, int, 0644);
 129
 130MODULE_PARM_DESC(tuner, "Tuner type selection,\n"
 131                        "\t\t\tsee tuner.h for values");
 132MODULE_PARM_DESC(radio,
 133                 "Enable or disable the radio. Use only if autodetection\n"
 134                 "\t\t\tfails. 0 = disable, 1 = enable");
 135MODULE_PARM_DESC(cardtype,
 136                 "Only use this option if your card is not detected properly.\n"
 137                 "\t\tSpecify card type:\n"
 138                 "\t\t\t 1 = Hauppauge HVR 1600 (ESMT memory)\n"
 139                 "\t\t\t 2 = Hauppauge HVR 1600 (Samsung memory)\n"
 140                 "\t\t\t 3 = Compro VideoMate H900\n"
 141                 "\t\t\t 4 = Yuan MPC718\n"
 142                 "\t\t\t 5 = Conexant Raptor PAL/SECAM\n"
 143                 "\t\t\t 6 = Toshiba Qosmio DVB-T/Analog\n"
 144                 "\t\t\t 7 = Leadtek WinFast PVR2100\n"
 145                 "\t\t\t 8 = Leadtek WinFast DVR3100 H\n"
 146                 "\t\t\t 9 = GoTView PCI DVD3 Hybrid\n"
 147                 "\t\t\t 10 = Hauppauge HVR 1600 (S5H1411)\n"
 148                 "\t\t\t 0 = Autodetect (default)\n"
 149                 "\t\t\t-1 = Ignore this card\n\t\t");
 150MODULE_PARM_DESC(pal, "Set PAL standard: B, G, H, D, K, I, M, N, Nc, 60");
 151MODULE_PARM_DESC(secam, "Set SECAM standard: B, G, H, D, K, L, LC");
 152MODULE_PARM_DESC(ntsc, "Set NTSC standard: M, J, K");
 153MODULE_PARM_DESC(debug,
 154                 "Debug level (bitmask). Default: 0\n"
 155                 "\t\t\t  1/0x0001: warning\n"
 156                 "\t\t\t  2/0x0002: info\n"
 157                 "\t\t\t  4/0x0004: mailbox\n"
 158                 "\t\t\t  8/0x0008: dma\n"
 159                 "\t\t\t 16/0x0010: ioctl\n"
 160                 "\t\t\t 32/0x0020: file\n"
 161                 "\t\t\t 64/0x0040: i2c\n"
 162                 "\t\t\t128/0x0080: irq\n"
 163                 "\t\t\t256/0x0100: high volume\n");
 164MODULE_PARM_DESC(cx18_pci_latency,
 165                 "Change the PCI latency to 64 if lower: 0 = No, 1 = Yes,\n"
 166                 "\t\t\tDefault: Yes");
 167MODULE_PARM_DESC(retry_mmio,
 168                 "(Deprecated) MMIO writes are now always checked and retried\n"
 169                 "\t\t\tEffectively: 1 [Yes]");
 170MODULE_PARM_DESC(mmio_ndelay,
 171                 "(Deprecated) MMIO accesses are now never purposely delayed\n"
 172                 "\t\t\tEffectively: 0 ns");
 173MODULE_PARM_DESC(enc_ts_buffers,
 174                 "Encoder TS buffer memory (MB). (enc_ts_bufs can override)\n"
 175                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_TS_BUFFERS));
 176MODULE_PARM_DESC(enc_ts_bufsize,
 177                 "Size of an encoder TS buffer (kB)\n"
 178                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_TS_BUFSIZE));
 179MODULE_PARM_DESC(enc_ts_bufs,
 180                 "Number of encoder TS buffers\n"
 181                 "\t\t\tDefault is computed from other enc_ts_* parameters");
 182MODULE_PARM_DESC(enc_mpg_buffers,
 183                 "Encoder MPG buffer memory (MB). (enc_mpg_bufs can override)\n"
 184                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_MPG_BUFFERS));
 185MODULE_PARM_DESC(enc_mpg_bufsize,
 186                 "Size of an encoder MPG buffer (kB)\n"
 187                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_MPG_BUFSIZE));
 188MODULE_PARM_DESC(enc_mpg_bufs,
 189                 "Number of encoder MPG buffers\n"
 190                 "\t\t\tDefault is computed from other enc_mpg_* parameters");
 191MODULE_PARM_DESC(enc_idx_buffers,
 192                 "(Deprecated) Encoder IDX buffer memory (MB)\n"
 193                 "\t\t\tIgnored, except 0 disables IDX buffer allocations\n"
 194                 "\t\t\tDefault: 1 [Enabled]");
 195MODULE_PARM_DESC(enc_idx_bufsize,
 196                 "Size of an encoder IDX buffer (kB)\n"
 197                 "\t\t\tAllowed values are multiples of 1.5 kB rounded up\n"
 198                 "\t\t\t(multiples of size required for 64 index entries)\n"
 199                 "\t\t\tDefault: 2");
 200MODULE_PARM_DESC(enc_idx_bufs,
 201                 "Number of encoder IDX buffers\n"
 202                 "\t\t\tDefault: " __stringify(CX18_MAX_FW_MDLS_PER_STREAM));
 203MODULE_PARM_DESC(enc_yuv_buffers,
 204                 "Encoder YUV buffer memory (MB). (enc_yuv_bufs can override)\n"
 205                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_YUV_BUFFERS));
 206MODULE_PARM_DESC(enc_yuv_bufsize,
 207                 "Size of an encoder YUV buffer (kB)\n"
 208                 "\t\t\tAllowed values are multiples of 33.75 kB rounded up\n"
 209                 "\t\t\t(multiples of size required for 32 screen lines)\n"
 210                 "\t\t\tDefault: 102");
 211MODULE_PARM_DESC(enc_yuv_bufs,
 212                 "Number of encoder YUV buffers\n"
 213                 "\t\t\tDefault is computed from other enc_yuv_* parameters");
 214MODULE_PARM_DESC(enc_vbi_buffers,
 215                 "Encoder VBI buffer memory (MB). (enc_vbi_bufs can override)\n"
 216                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_VBI_BUFFERS));
 217MODULE_PARM_DESC(enc_vbi_bufs,
 218                 "Number of encoder VBI buffers\n"
 219                 "\t\t\tDefault is computed from enc_vbi_buffers");
 220MODULE_PARM_DESC(enc_pcm_buffers,
 221                 "Encoder PCM buffer memory (MB). (enc_pcm_bufs can override)\n"
 222                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_PCM_BUFFERS));
 223MODULE_PARM_DESC(enc_pcm_bufsize,
 224                 "Size of an encoder PCM buffer (kB)\n"
 225                 "\t\t\tDefault: " __stringify(CX18_DEFAULT_ENC_PCM_BUFSIZE));
 226MODULE_PARM_DESC(enc_pcm_bufs,
 227                 "Number of encoder PCM buffers\n"
 228                 "\t\t\tDefault is computed from other enc_pcm_* parameters");
 229
 230MODULE_PARM_DESC(cx18_first_minor,
 231                 "Set device node number assigned to first card");
 232
 233MODULE_AUTHOR("Hans Verkuil");
 234MODULE_DESCRIPTION("CX23418 driver");
 235MODULE_SUPPORTED_DEVICE("CX23418 MPEG2 encoder");
 236MODULE_LICENSE("GPL");
 237
 238MODULE_VERSION(CX18_VERSION);
 239
 240#if defined(CONFIG_MODULES) && defined(MODULE)
 241static void request_module_async(struct work_struct *work)
 242{
 243        struct cx18 *dev = container_of(work, struct cx18, request_module_wk);
 244
 245        /* Make sure cx18-alsa module is loaded */
 246        request_module("cx18-alsa");
 247
 248        /* Initialize cx18-alsa for this instance of the cx18 device */
 249        if (cx18_ext_init)
 250                cx18_ext_init(dev);
 251}
 252
 253static void request_modules(struct cx18 *dev)
 254{
 255        INIT_WORK(&dev->request_module_wk, request_module_async);
 256        schedule_work(&dev->request_module_wk);
 257}
 258
 259static void flush_request_modules(struct cx18 *dev)
 260{
 261        flush_work(&dev->request_module_wk);
 262}
 263#else
 264#define request_modules(dev)
 265#define flush_request_modules(dev)
 266#endif /* CONFIG_MODULES */
 267
 268/* Generic utility functions */
 269int cx18_msleep_timeout(unsigned int msecs, int intr)
 270{
 271        long int timeout = msecs_to_jiffies(msecs);
 272        int sig;
 273
 274        do {
 275                set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
 276                timeout = schedule_timeout(timeout);
 277                sig = intr ? signal_pending(current) : 0;
 278        } while (!sig && timeout);
 279        return sig;
 280}
 281
 282/* Release ioremapped memory */
 283static void cx18_iounmap(struct cx18 *cx)
 284{
 285        if (!cx)
 286                return;
 287
 288        /* Release io memory */
 289        if (cx->enc_mem) {
 290                CX18_DEBUG_INFO("releasing enc_mem\n");
 291                iounmap(cx->enc_mem);
 292                cx->enc_mem = NULL;
 293        }
 294}
 295
 296static void cx18_eeprom_dump(struct cx18 *cx, unsigned char *eedata, int len)
 297{
 298        int i;
 299
 300        CX18_INFO("eeprom dump:\n");
 301        for (i = 0; i < len; i++) {
 302                if (0 == (i % 16))
 303                        CX18_INFO("eeprom %02x:", i);
 304                printk(KERN_CONT " %02x", eedata[i]);
 305                if (15 == (i % 16))
 306                        printk(KERN_CONT "\n");
 307        }
 308}
 309
 310/* Hauppauge card? get values from tveeprom */
 311void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv)
 312{
 313        struct i2c_client *c;
 314        u8 eedata[256];
 315
 316        memset(tv, 0, sizeof(*tv));
 317
 318        c = kzalloc(sizeof(*c), GFP_KERNEL);
 319        if (!c)
 320                return;
 321
 322        strscpy(c->name, "cx18 tveeprom tmp", sizeof(c->name));
 323        c->adapter = &cx->i2c_adap[0];
 324        c->addr = 0xa0 >> 1;
 325
 326        if (tveeprom_read(c, eedata, sizeof(eedata)))
 327                goto ret;
 328
 329        switch (cx->card->type) {
 330        case CX18_CARD_HVR_1600_ESMT:
 331        case CX18_CARD_HVR_1600_SAMSUNG:
 332        case CX18_CARD_HVR_1600_S5H1411:
 333                tveeprom_hauppauge_analog(tv, eedata);
 334                break;
 335        case CX18_CARD_YUAN_MPC718:
 336        case CX18_CARD_GOTVIEW_PCI_DVD3:
 337                tv->model = 0x718;
 338                cx18_eeprom_dump(cx, eedata, sizeof(eedata));
 339                CX18_INFO("eeprom PCI ID: %02x%02x:%02x%02x\n",
 340                          eedata[2], eedata[1], eedata[4], eedata[3]);
 341                break;
 342        default:
 343                tv->model = 0xffffffff;
 344                cx18_eeprom_dump(cx, eedata, sizeof(eedata));
 345                break;
 346        }
 347
 348ret:
 349        kfree(c);
 350}
 351
 352static void cx18_process_eeprom(struct cx18 *cx)
 353{
 354        struct tveeprom tv;
 355
 356        cx18_read_eeprom(cx, &tv);
 357
 358        /* Many thanks to Steven Toth from Hauppauge for providing the
 359           model numbers */
 360        /* Note: the Samsung memory models cannot be reliably determined
 361           from the model number. Use the cardtype module option if you
 362           have one of these preproduction models. */
 363        switch (tv.model) {
 364        case 74301: /* Retail models */
 365        case 74321:
 366        case 74351: /* OEM models */
 367        case 74361:
 368                /* Digital side is s5h1411/tda18271 */
 369                cx->card = cx18_get_card(CX18_CARD_HVR_1600_S5H1411);
 370                break;
 371        case 74021: /* Retail models */
 372        case 74031:
 373        case 74041:
 374        case 74141:
 375        case 74541: /* OEM models */
 376        case 74551:
 377        case 74591:
 378        case 74651:
 379        case 74691:
 380        case 74751:
 381        case 74891:
 382                /* Digital side is s5h1409/mxl5005s */
 383                cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT);
 384                break;
 385        case 0x718:
 386                return;
 387        case 0xffffffff:
 388                CX18_INFO("Unknown EEPROM encoding\n");
 389                return;
 390        case 0:
 391                CX18_ERR("Invalid EEPROM\n");
 392                return;
 393        default:
 394                CX18_ERR("Unknown model %d, defaulting to original HVR-1600 (cardtype=1)\n",
 395                         tv.model);
 396                cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT);
 397                break;
 398        }
 399
 400        cx->v4l2_cap = cx->card->v4l2_capabilities;
 401        cx->card_name = cx->card->name;
 402        cx->card_i2c = cx->card->i2c;
 403
 404        CX18_INFO("Autodetected %s\n", cx->card_name);
 405
 406        if (tv.tuner_type == TUNER_ABSENT)
 407                CX18_ERR("tveeprom cannot autodetect tuner!\n");
 408
 409        if (cx->options.tuner == -1)
 410                cx->options.tuner = tv.tuner_type;
 411        if (cx->options.radio == -1)
 412                cx->options.radio = (tv.has_radio != 0);
 413
 414        if (cx->std != 0)
 415                /* user specified tuner standard */
 416                return;
 417
 418        /* autodetect tuner standard */
 419#define TVEEPROM_TUNER_FORMAT_ALL (V4L2_STD_B  | V4L2_STD_GH | \
 420                                   V4L2_STD_MN | \
 421                                   V4L2_STD_PAL_I | \
 422                                   V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC | \
 423                                   V4L2_STD_DK)
 424        if ((tv.tuner_formats & TVEEPROM_TUNER_FORMAT_ALL)
 425                                        == TVEEPROM_TUNER_FORMAT_ALL) {
 426                CX18_DEBUG_INFO("Worldwide tuner detected\n");
 427                cx->std = V4L2_STD_ALL;
 428        } else if (tv.tuner_formats & V4L2_STD_PAL) {
 429                CX18_DEBUG_INFO("PAL tuner detected\n");
 430                cx->std |= V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
 431        } else if (tv.tuner_formats & V4L2_STD_NTSC) {
 432                CX18_DEBUG_INFO("NTSC tuner detected\n");
 433                cx->std |= V4L2_STD_NTSC_M;
 434        } else if (tv.tuner_formats & V4L2_STD_SECAM) {
 435                CX18_DEBUG_INFO("SECAM tuner detected\n");
 436                cx->std |= V4L2_STD_SECAM_L;
 437        } else {
 438                CX18_INFO("No tuner detected, default to NTSC-M\n");
 439                cx->std |= V4L2_STD_NTSC_M;
 440        }
 441}
 442
 443static v4l2_std_id cx18_parse_std(struct cx18 *cx)
 444{
 445        switch (pal[0]) {
 446        case '6':
 447                return V4L2_STD_PAL_60;
 448        case 'b':
 449        case 'B':
 450        case 'g':
 451        case 'G':
 452                return V4L2_STD_PAL_BG;
 453        case 'h':
 454        case 'H':
 455                return V4L2_STD_PAL_H;
 456        case 'n':
 457        case 'N':
 458                if (pal[1] == 'c' || pal[1] == 'C')
 459                        return V4L2_STD_PAL_Nc;
 460                return V4L2_STD_PAL_N;
 461        case 'i':
 462        case 'I':
 463                return V4L2_STD_PAL_I;
 464        case 'd':
 465        case 'D':
 466        case 'k':
 467        case 'K':
 468                return V4L2_STD_PAL_DK;
 469        case 'M':
 470        case 'm':
 471                return V4L2_STD_PAL_M;
 472        case '-':
 473                break;
 474        default:
 475                CX18_WARN("pal= argument not recognised\n");
 476                return 0;
 477        }
 478
 479        switch (secam[0]) {
 480        case 'b':
 481        case 'B':
 482        case 'g':
 483        case 'G':
 484        case 'h':
 485        case 'H':
 486                return V4L2_STD_SECAM_B | V4L2_STD_SECAM_G | V4L2_STD_SECAM_H;
 487        case 'd':
 488        case 'D':
 489        case 'k':
 490        case 'K':
 491                return V4L2_STD_SECAM_DK;
 492        case 'l':
 493        case 'L':
 494                if (secam[1] == 'C' || secam[1] == 'c')
 495                        return V4L2_STD_SECAM_LC;
 496                return V4L2_STD_SECAM_L;
 497        case '-':
 498                break;
 499        default:
 500                CX18_WARN("secam= argument not recognised\n");
 501                return 0;
 502        }
 503
 504        switch (ntsc[0]) {
 505        case 'm':
 506        case 'M':
 507                return V4L2_STD_NTSC_M;
 508        case 'j':
 509        case 'J':
 510                return V4L2_STD_NTSC_M_JP;
 511        case 'k':
 512        case 'K':
 513                return V4L2_STD_NTSC_M_KR;
 514        case '-':
 515                break;
 516        default:
 517                CX18_WARN("ntsc= argument not recognised\n");
 518                return 0;
 519        }
 520
 521        /* no match found */
 522        return 0;
 523}
 524
 525static void cx18_process_options(struct cx18 *cx)
 526{
 527        int i, j;
 528
 529        cx->options.megabytes[CX18_ENC_STREAM_TYPE_TS] = enc_ts_buffers;
 530        cx->options.megabytes[CX18_ENC_STREAM_TYPE_MPG] = enc_mpg_buffers;
 531        cx->options.megabytes[CX18_ENC_STREAM_TYPE_IDX] = enc_idx_buffers;
 532        cx->options.megabytes[CX18_ENC_STREAM_TYPE_YUV] = enc_yuv_buffers;
 533        cx->options.megabytes[CX18_ENC_STREAM_TYPE_VBI] = enc_vbi_buffers;
 534        cx->options.megabytes[CX18_ENC_STREAM_TYPE_PCM] = enc_pcm_buffers;
 535        cx->options.megabytes[CX18_ENC_STREAM_TYPE_RAD] = 0; /* control only */
 536
 537        cx->stream_buffers[CX18_ENC_STREAM_TYPE_TS] = enc_ts_bufs;
 538        cx->stream_buffers[CX18_ENC_STREAM_TYPE_MPG] = enc_mpg_bufs;
 539        cx->stream_buffers[CX18_ENC_STREAM_TYPE_IDX] = enc_idx_bufs;
 540        cx->stream_buffers[CX18_ENC_STREAM_TYPE_YUV] = enc_yuv_bufs;
 541        cx->stream_buffers[CX18_ENC_STREAM_TYPE_VBI] = enc_vbi_bufs;
 542        cx->stream_buffers[CX18_ENC_STREAM_TYPE_PCM] = enc_pcm_bufs;
 543        cx->stream_buffers[CX18_ENC_STREAM_TYPE_RAD] = 0; /* control, no data */
 544
 545        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_TS] = enc_ts_bufsize;
 546        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_MPG] = enc_mpg_bufsize;
 547        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_IDX] = enc_idx_bufsize;
 548        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_YUV] = enc_yuv_bufsize;
 549        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_VBI] = VBI_ACTIVE_SAMPLES * 36;
 550        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_PCM] = enc_pcm_bufsize;
 551        cx->stream_buf_size[CX18_ENC_STREAM_TYPE_RAD] = 0; /* control no data */
 552
 553        /* Ensure stream_buffers & stream_buf_size are valid */
 554        for (i = 0; i < CX18_MAX_STREAMS; i++) {
 555                if (cx->stream_buffers[i] == 0 ||     /* User said 0 buffers */
 556                    cx->options.megabytes[i] <= 0 ||  /* User said 0 MB total */
 557                    cx->stream_buf_size[i] <= 0) {    /* User said buf size 0 */
 558                        cx->options.megabytes[i] = 0;
 559                        cx->stream_buffers[i] = 0;
 560                        cx->stream_buf_size[i] = 0;
 561                        continue;
 562                }
 563                /*
 564                 * YUV is a special case where the stream_buf_size needs to be
 565                 * an integral multiple of 33.75 kB (storage for 32 screens
 566                 * lines to maintain alignment in case of lost buffers).
 567                 *
 568                 * IDX is a special case where the stream_buf_size should be
 569                 * an integral multiple of 1.5 kB (storage for 64 index entries
 570                 * to maintain alignment in case of lost buffers).
 571                 *
 572                 */
 573                if (i == CX18_ENC_STREAM_TYPE_YUV) {
 574                        cx->stream_buf_size[i] *= 1024;
 575                        cx->stream_buf_size[i] -=
 576                           (cx->stream_buf_size[i] % CX18_UNIT_ENC_YUV_BUFSIZE);
 577
 578                        if (cx->stream_buf_size[i] < CX18_UNIT_ENC_YUV_BUFSIZE)
 579                                cx->stream_buf_size[i] =
 580                                                CX18_UNIT_ENC_YUV_BUFSIZE;
 581                } else if (i == CX18_ENC_STREAM_TYPE_IDX) {
 582                        cx->stream_buf_size[i] *= 1024;
 583                        cx->stream_buf_size[i] -=
 584                           (cx->stream_buf_size[i] % CX18_UNIT_ENC_IDX_BUFSIZE);
 585
 586                        if (cx->stream_buf_size[i] < CX18_UNIT_ENC_IDX_BUFSIZE)
 587                                cx->stream_buf_size[i] =
 588                                                CX18_UNIT_ENC_IDX_BUFSIZE;
 589                }
 590                /*
 591                 * YUV and IDX are special cases where the stream_buf_size is
 592                 * now in bytes.
 593                 * VBI is a special case where the stream_buf_size is fixed
 594                 * and already in bytes
 595                 */
 596                if (i == CX18_ENC_STREAM_TYPE_VBI ||
 597                    i == CX18_ENC_STREAM_TYPE_YUV ||
 598                    i == CX18_ENC_STREAM_TYPE_IDX) {
 599                        if (cx->stream_buffers[i] < 0) {
 600                                cx->stream_buffers[i] =
 601                                        cx->options.megabytes[i] * 1024 * 1024
 602                                        / cx->stream_buf_size[i];
 603                        } else {
 604                                /* N.B. This might round down to 0 */
 605                                cx->options.megabytes[i] =
 606                                        cx->stream_buffers[i]
 607                                        * cx->stream_buf_size[i]/(1024 * 1024);
 608                        }
 609                } else {
 610                        /* All other streams have stream_buf_size in kB here */
 611                        if (cx->stream_buffers[i] < 0) {
 612                                cx->stream_buffers[i] =
 613                                                cx->options.megabytes[i] * 1024
 614                                                / cx->stream_buf_size[i];
 615                        } else {
 616                                /* N.B. This might round down to 0 */
 617                                cx->options.megabytes[i] =
 618                                                cx->stream_buffers[i]
 619                                                * cx->stream_buf_size[i] / 1024;
 620                        }
 621                        /* convert from kB to bytes */
 622                        cx->stream_buf_size[i] *= 1024;
 623                }
 624                CX18_DEBUG_INFO("Stream type %d options: %d MB, %d buffers, %d bytes\n",
 625                                i, cx->options.megabytes[i],
 626                                cx->stream_buffers[i], cx->stream_buf_size[i]);
 627        }
 628
 629        cx->options.cardtype = cardtype[cx->instance];
 630        cx->options.tuner = tuner[cx->instance];
 631        cx->options.radio = radio[cx->instance];
 632
 633        cx->std = cx18_parse_std(cx);
 634        if (cx->options.cardtype == -1) {
 635                CX18_INFO("Ignore card\n");
 636                return;
 637        }
 638        cx->card = cx18_get_card(cx->options.cardtype - 1);
 639        if (cx->card)
 640                CX18_INFO("User specified %s card\n", cx->card->name);
 641        else if (cx->options.cardtype != 0)
 642                CX18_ERR("Unknown user specified type, trying to autodetect card\n");
 643        if (!cx->card) {
 644                if (cx->pci_dev->subsystem_vendor == CX18_PCI_ID_HAUPPAUGE) {
 645                        cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT);
 646                        CX18_INFO("Autodetected Hauppauge card\n");
 647                }
 648        }
 649        if (!cx->card) {
 650                for (i = 0; (cx->card = cx18_get_card(i)); i++) {
 651                        if (!cx->card->pci_list)
 652                                continue;
 653                        for (j = 0; cx->card->pci_list[j].device; j++) {
 654                                if (cx->pci_dev->device !=
 655                                    cx->card->pci_list[j].device)
 656                                        continue;
 657                                if (cx->pci_dev->subsystem_vendor !=
 658                                    cx->card->pci_list[j].subsystem_vendor)
 659                                        continue;
 660                                if (cx->pci_dev->subsystem_device !=
 661                                    cx->card->pci_list[j].subsystem_device)
 662                                        continue;
 663                                CX18_INFO("Autodetected %s card\n", cx->card->name);
 664                                goto done;
 665                        }
 666                }
 667        }
 668done:
 669
 670        if (!cx->card) {
 671                cx->card = cx18_get_card(CX18_CARD_HVR_1600_ESMT);
 672                CX18_ERR("Unknown card: vendor/device: [%04x:%04x]\n",
 673                         cx->pci_dev->vendor, cx->pci_dev->device);
 674                CX18_ERR("              subsystem vendor/device: [%04x:%04x]\n",
 675                         cx->pci_dev->subsystem_vendor,
 676                         cx->pci_dev->subsystem_device);
 677                CX18_ERR("Defaulting to %s card\n", cx->card->name);
 678                CX18_ERR("Please mail the vendor/device and subsystem vendor/device IDs and what kind of\n");
 679                CX18_ERR("card you have to the linux-media mailinglist (www.linuxtv.org)\n");
 680                CX18_ERR("Prefix your subject line with [UNKNOWN CX18 CARD].\n");
 681        }
 682        cx->v4l2_cap = cx->card->v4l2_capabilities;
 683        cx->card_name = cx->card->name;
 684        cx->card_i2c = cx->card->i2c;
 685}
 686
 687static int cx18_create_in_workq(struct cx18 *cx)
 688{
 689        snprintf(cx->in_workq_name, sizeof(cx->in_workq_name), "%s-in",
 690                 cx->v4l2_dev.name);
 691        cx->in_work_queue = alloc_ordered_workqueue("%s", 0, cx->in_workq_name);
 692        if (!cx->in_work_queue) {
 693                CX18_ERR("Unable to create incoming mailbox handler thread\n");
 694                return -ENOMEM;
 695        }
 696        return 0;
 697}
 698
 699static void cx18_init_in_work_orders(struct cx18 *cx)
 700{
 701        int i;
 702        for (i = 0; i < CX18_MAX_IN_WORK_ORDERS; i++) {
 703                cx->in_work_order[i].cx = cx;
 704                cx->in_work_order[i].str = cx->epu_debug_str;
 705                INIT_WORK(&cx->in_work_order[i].work, cx18_in_work_handler);
 706        }
 707}
 708
 709/* Precondition: the cx18 structure has been memset to 0. Only
 710   the dev and instance fields have been filled in.
 711   No assumptions on the card type may be made here (see cx18_init_struct2
 712   for that).
 713 */
 714static int cx18_init_struct1(struct cx18 *cx)
 715{
 716        int ret;
 717
 718        cx->base_addr = pci_resource_start(cx->pci_dev, 0);
 719
 720        mutex_init(&cx->serialize_lock);
 721        mutex_init(&cx->gpio_lock);
 722        mutex_init(&cx->epu2apu_mb_lock);
 723        mutex_init(&cx->epu2cpu_mb_lock);
 724
 725        ret = cx18_create_in_workq(cx);
 726        if (ret)
 727                return ret;
 728
 729        cx18_init_in_work_orders(cx);
 730
 731        /* start counting open_id at 1 */
 732        cx->open_id = 1;
 733
 734        /* Initial settings */
 735        cx->cxhdl.port = CX2341X_PORT_MEMORY;
 736        cx->cxhdl.capabilities = CX2341X_CAP_HAS_TS | CX2341X_CAP_HAS_SLICED_VBI;
 737        cx->cxhdl.ops = &cx18_cxhdl_ops;
 738        cx->cxhdl.func = cx18_api_func;
 739        cx->cxhdl.priv = &cx->streams[CX18_ENC_STREAM_TYPE_MPG];
 740        ret = cx2341x_handler_init(&cx->cxhdl, 50);
 741        if (ret)
 742                return ret;
 743        cx->v4l2_dev.ctrl_handler = &cx->cxhdl.hdl;
 744
 745        cx->temporal_strength = cx->cxhdl.video_temporal_filter->cur.val;
 746        cx->spatial_strength = cx->cxhdl.video_spatial_filter->cur.val;
 747        cx->filter_mode = cx->cxhdl.video_spatial_filter_mode->cur.val |
 748                (cx->cxhdl.video_temporal_filter_mode->cur.val << 1) |
 749                (cx->cxhdl.video_median_filter_type->cur.val << 2);
 750
 751        init_waitqueue_head(&cx->cap_w);
 752        init_waitqueue_head(&cx->mb_apu_waitq);
 753        init_waitqueue_head(&cx->mb_cpu_waitq);
 754        init_waitqueue_head(&cx->dma_waitq);
 755
 756        /* VBI */
 757        cx->vbi.in.type = V4L2_BUF_TYPE_VBI_CAPTURE;
 758        cx->vbi.sliced_in = &cx->vbi.in.fmt.sliced;
 759
 760        /* IVTV style VBI insertion into MPEG streams */
 761        INIT_LIST_HEAD(&cx->vbi.sliced_mpeg_buf.list);
 762        INIT_LIST_HEAD(&cx->vbi.sliced_mpeg_mdl.list);
 763        INIT_LIST_HEAD(&cx->vbi.sliced_mpeg_mdl.buf_list);
 764        list_add(&cx->vbi.sliced_mpeg_buf.list,
 765                 &cx->vbi.sliced_mpeg_mdl.buf_list);
 766        return 0;
 767}
 768
 769/* Second initialization part. Here the card type has been
 770   autodetected. */
 771static void cx18_init_struct2(struct cx18 *cx)
 772{
 773        int i;
 774
 775        for (i = 0; i < CX18_CARD_MAX_VIDEO_INPUTS - 1; i++)
 776                if (cx->card->video_inputs[i].video_type == 0)
 777                        break;
 778        cx->nof_inputs = i;
 779        for (i = 0; i < CX18_CARD_MAX_AUDIO_INPUTS - 1; i++)
 780                if (cx->card->audio_inputs[i].audio_type == 0)
 781                        break;
 782        cx->nof_audio_inputs = i;
 783
 784        /* Find tuner input */
 785        for (i = 0; i < cx->nof_inputs; i++) {
 786                if (cx->card->video_inputs[i].video_type ==
 787                                CX18_CARD_INPUT_VID_TUNER)
 788                        break;
 789        }
 790        if (i == cx->nof_inputs)
 791                i = 0;
 792        cx->active_input = i;
 793        cx->audio_input = cx->card->video_inputs[i].audio_index;
 794}
 795
 796static int cx18_setup_pci(struct cx18 *cx, struct pci_dev *pci_dev,
 797                          const struct pci_device_id *pci_id)
 798{
 799        u16 cmd;
 800        unsigned char pci_latency;
 801
 802        CX18_DEBUG_INFO("Enabling pci device\n");
 803
 804        if (pci_enable_device(pci_dev)) {
 805                CX18_ERR("Can't enable device %d!\n", cx->instance);
 806                return -EIO;
 807        }
 808        if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
 809                CX18_ERR("No suitable DMA available, card %d\n", cx->instance);
 810                return -EIO;
 811        }
 812        if (!request_mem_region(cx->base_addr, CX18_MEM_SIZE, "cx18 encoder")) {
 813                CX18_ERR("Cannot request encoder memory region, card %d\n",
 814                         cx->instance);
 815                return -EIO;
 816        }
 817
 818        /* Enable bus mastering and memory mapped IO for the CX23418 */
 819        pci_read_config_word(pci_dev, PCI_COMMAND, &cmd);
 820        cmd |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER;
 821        pci_write_config_word(pci_dev, PCI_COMMAND, cmd);
 822
 823        cx->card_rev = pci_dev->revision;
 824        pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &pci_latency);
 825
 826        if (pci_latency < 64 && cx18_pci_latency) {
 827                CX18_INFO("Unreasonably low latency timer, setting to 64 (was %d)\n",
 828                          pci_latency);
 829                pci_write_config_byte(pci_dev, PCI_LATENCY_TIMER, 64);
 830                pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &pci_latency);
 831        }
 832
 833        CX18_DEBUG_INFO("cx%d (rev %d) at %02x:%02x.%x, irq: %d, latency: %d, memory: 0x%llx\n",
 834                   cx->pci_dev->device, cx->card_rev, pci_dev->bus->number,
 835                   PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn),
 836                   cx->pci_dev->irq, pci_latency, (u64)cx->base_addr);
 837
 838        return 0;
 839}
 840
 841static void cx18_init_subdevs(struct cx18 *cx)
 842{
 843        u32 hw = cx->card->hw_all;
 844        u32 device;
 845        int i;
 846
 847        for (i = 0, device = 1; i < 32; i++, device <<= 1) {
 848
 849                if (!(device & hw))
 850                        continue;
 851
 852                switch (device) {
 853                case CX18_HW_DVB:
 854                case CX18_HW_TVEEPROM:
 855                        /* These subordinate devices do not use probing */
 856                        cx->hw_flags |= device;
 857                        break;
 858                case CX18_HW_418_AV:
 859                        /* The A/V decoder gets probed earlier to set PLLs */
 860                        /* Just note that the card uses it (i.e. has analog) */
 861                        cx->hw_flags |= device;
 862                        break;
 863                case CX18_HW_GPIO_RESET_CTRL:
 864                        /*
 865                         * The Reset Controller gets probed and added to
 866                         * hw_flags earlier for i2c adapter/bus initialization
 867                         */
 868                        break;
 869                case CX18_HW_GPIO_MUX:
 870                        if (cx18_gpio_register(cx, device) == 0)
 871                                cx->hw_flags |= device;
 872                        break;
 873                default:
 874                        if (cx18_i2c_register(cx, i) == 0)
 875                                cx->hw_flags |= device;
 876                        break;
 877                }
 878        }
 879
 880        if (cx->hw_flags & CX18_HW_418_AV)
 881                cx->sd_av = cx18_find_hw(cx, CX18_HW_418_AV);
 882
 883        if (cx->card->hw_muxer != 0)
 884                cx->sd_extmux = cx18_find_hw(cx, cx->card->hw_muxer);
 885}
 886
 887static int cx18_probe(struct pci_dev *pci_dev,
 888                      const struct pci_device_id *pci_id)
 889{
 890        int retval = 0;
 891        int i;
 892        u32 devtype;
 893        struct cx18 *cx;
 894
 895        /* FIXME - module parameter arrays constrain max instances */
 896        i = atomic_inc_return(&cx18_instance) - 1;
 897        if (i >= CX18_MAX_CARDS) {
 898                printk(KERN_ERR "cx18: cannot manage card %d, driver has a limit of 0 - %d\n",
 899                       i, CX18_MAX_CARDS - 1);
 900                return -ENOMEM;
 901        }
 902
 903        cx = kzalloc(sizeof(*cx), GFP_ATOMIC);
 904        if (!cx)
 905                return -ENOMEM;
 906
 907        cx->pci_dev = pci_dev;
 908        cx->instance = i;
 909
 910        retval = v4l2_device_register(&pci_dev->dev, &cx->v4l2_dev);
 911        if (retval) {
 912                printk(KERN_ERR "cx18: v4l2_device_register of card %d failed\n",
 913                       cx->instance);
 914                kfree(cx);
 915                return retval;
 916        }
 917        snprintf(cx->v4l2_dev.name, sizeof(cx->v4l2_dev.name), "cx18-%d",
 918                 cx->instance);
 919        CX18_INFO("Initializing card %d\n", cx->instance);
 920
 921        cx18_process_options(cx);
 922        if (cx->options.cardtype == -1) {
 923                retval = -ENODEV;
 924                goto err;
 925        }
 926
 927        retval = cx18_init_struct1(cx);
 928        if (retval)
 929                goto err;
 930
 931        CX18_DEBUG_INFO("base addr: 0x%llx\n", (u64)cx->base_addr);
 932
 933        /* PCI Device Setup */
 934        retval = cx18_setup_pci(cx, pci_dev, pci_id);
 935        if (retval != 0)
 936                goto free_workqueues;
 937
 938        /* map io memory */
 939        CX18_DEBUG_INFO("attempting ioremap at 0x%llx len 0x%08x\n",
 940                   (u64)cx->base_addr + CX18_MEM_OFFSET, CX18_MEM_SIZE);
 941        cx->enc_mem = ioremap(cx->base_addr + CX18_MEM_OFFSET,
 942                                       CX18_MEM_SIZE);
 943        if (!cx->enc_mem) {
 944                CX18_ERR("ioremap failed. Can't get a window into CX23418 memory and register space\n");
 945                CX18_ERR("Each capture card with a CX23418 needs 64 MB of vmalloc address space for the window\n");
 946                CX18_ERR("Check the output of 'grep Vmalloc /proc/meminfo'\n");
 947                CX18_ERR("Use the vmalloc= kernel command line option to set VmallocTotal to a larger value\n");
 948                retval = -ENOMEM;
 949                goto free_mem;
 950        }
 951        cx->reg_mem = cx->enc_mem + CX18_REG_OFFSET;
 952        devtype = cx18_read_reg(cx, 0xC72028);
 953        switch (devtype & 0xff000000) {
 954        case 0xff000000:
 955                CX18_INFO("cx23418 revision %08x (A)\n", devtype);
 956                break;
 957        case 0x01000000:
 958                CX18_INFO("cx23418 revision %08x (B)\n", devtype);
 959                break;
 960        default:
 961                CX18_INFO("cx23418 revision %08x (Unknown)\n", devtype);
 962                break;
 963        }
 964
 965        cx18_init_power(cx, 1);
 966        cx18_init_memory(cx);
 967
 968        cx->scb = (struct cx18_scb __iomem *)(cx->enc_mem + SCB_OFFSET);
 969        cx18_init_scb(cx);
 970
 971        cx18_gpio_init(cx);
 972
 973        /* Initialize integrated A/V decoder early to set PLLs, just in case */
 974        retval = cx18_av_probe(cx);
 975        if (retval) {
 976                CX18_ERR("Could not register A/V decoder subdevice\n");
 977                goto free_map;
 978        }
 979
 980        /* Initialize GPIO Reset Controller to do chip resets during i2c init */
 981        if (cx->card->hw_all & CX18_HW_GPIO_RESET_CTRL) {
 982                if (cx18_gpio_register(cx, CX18_HW_GPIO_RESET_CTRL) != 0)
 983                        CX18_WARN("Could not register GPIO reset controllersubdevice; proceeding anyway.\n");
 984                else
 985                        cx->hw_flags |= CX18_HW_GPIO_RESET_CTRL;
 986        }
 987
 988        /* active i2c  */
 989        CX18_DEBUG_INFO("activating i2c...\n");
 990        retval = init_cx18_i2c(cx);
 991        if (retval) {
 992                CX18_ERR("Could not initialize i2c\n");
 993                goto free_map;
 994        }
 995
 996        if (cx->card->hw_all & CX18_HW_TVEEPROM) {
 997                /* Based on the model number the cardtype may be changed.
 998                   The PCI IDs are not always reliable. */
 999                const struct cx18_card *orig_card = cx->card;
1000                cx18_process_eeprom(cx);
1001
1002                if (cx->card != orig_card) {
1003                        /* Changed the cardtype; re-reset the I2C chips */
1004                        cx18_gpio_init(cx);
1005                        cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL,
1006                                        core, reset, (u32) CX18_GPIO_RESET_I2C);
1007                }
1008        }
1009        if (cx->card->comment)
1010                CX18_INFO("%s", cx->card->comment);
1011        if (cx->card->v4l2_capabilities == 0) {
1012                retval = -ENODEV;
1013                goto free_i2c;
1014        }
1015        cx18_init_memory(cx);
1016        cx18_init_scb(cx);
1017
1018        /* Register IRQ */
1019        retval = request_irq(cx->pci_dev->irq, cx18_irq_handler,
1020                             IRQF_SHARED, cx->v4l2_dev.name, (void *)cx);
1021        if (retval) {
1022                CX18_ERR("Failed to register irq %d\n", retval);
1023                goto free_i2c;
1024        }
1025
1026        if (cx->std == 0)
1027                cx->std = V4L2_STD_NTSC_M;
1028
1029        if (cx->options.tuner == -1) {
1030                for (i = 0; i < CX18_CARD_MAX_TUNERS; i++) {
1031                        if ((cx->std & cx->card->tuners[i].std) == 0)
1032                                continue;
1033                        cx->options.tuner = cx->card->tuners[i].tuner;
1034                        break;
1035                }
1036        }
1037        /* if no tuner was found, then pick the first tuner in the card list */
1038        if (cx->options.tuner == -1 && cx->card->tuners[0].std) {
1039                cx->std = cx->card->tuners[0].std;
1040                if (cx->std & V4L2_STD_PAL)
1041                        cx->std = V4L2_STD_PAL_BG | V4L2_STD_PAL_H;
1042                else if (cx->std & V4L2_STD_NTSC)
1043                        cx->std = V4L2_STD_NTSC_M;
1044                else if (cx->std & V4L2_STD_SECAM)
1045                        cx->std = V4L2_STD_SECAM_L;
1046                cx->options.tuner = cx->card->tuners[0].tuner;
1047        }
1048        if (cx->options.radio == -1)
1049                cx->options.radio = (cx->card->radio_input.audio_type != 0);
1050
1051        /* The card is now fully identified, continue with card-specific
1052           initialization. */
1053        cx18_init_struct2(cx);
1054
1055        cx18_init_subdevs(cx);
1056
1057        if (cx->std & V4L2_STD_525_60)
1058                cx->is_60hz = 1;
1059        else
1060                cx->is_50hz = 1;
1061
1062        cx2341x_handler_set_50hz(&cx->cxhdl, !cx->is_60hz);
1063
1064        if (cx->options.radio > 0)
1065                cx->v4l2_cap |= V4L2_CAP_RADIO;
1066
1067        if (cx->options.tuner > -1) {
1068                struct tuner_setup setup;
1069
1070                setup.addr = ADDR_UNSET;
1071                setup.type = cx->options.tuner;
1072                setup.mode_mask = T_ANALOG_TV;  /* matches TV tuners */
1073                setup.config = NULL;
1074                if (cx->options.radio > 0)
1075                        setup.mode_mask |= T_RADIO;
1076                setup.tuner_callback = (setup.type == TUNER_XC2028) ?
1077                        cx18_reset_tuner_gpio : NULL;
1078                cx18_call_all(cx, tuner, s_type_addr, &setup);
1079                if (setup.type == TUNER_XC2028) {
1080                        static struct xc2028_ctrl ctrl = {
1081                                .fname = XC2028_DEFAULT_FIRMWARE,
1082                                .max_len = 64,
1083                        };
1084                        struct v4l2_priv_tun_config cfg = {
1085                                .tuner = cx->options.tuner,
1086                                .priv = &ctrl,
1087                        };
1088                        cx18_call_all(cx, tuner, s_config, &cfg);
1089                }
1090        }
1091
1092        /* The tuner is fixed to the standard. The other inputs (e.g. S-Video)
1093           are not. */
1094        cx->tuner_std = cx->std;
1095        if (cx->std == V4L2_STD_ALL)
1096                cx->std = V4L2_STD_NTSC_M;
1097
1098        retval = cx18_streams_setup(cx);
1099        if (retval) {
1100                CX18_ERR("Error %d setting up streams\n", retval);
1101                goto free_irq;
1102        }
1103        retval = cx18_streams_register(cx);
1104        if (retval) {
1105                CX18_ERR("Error %d registering devices\n", retval);
1106                goto free_streams;
1107        }
1108
1109        CX18_INFO("Initialized card: %s\n", cx->card_name);
1110
1111        /* Load cx18 submodules (cx18-alsa) */
1112        request_modules(cx);
1113        return 0;
1114
1115free_streams:
1116        cx18_streams_cleanup(cx, 1);
1117free_irq:
1118        free_irq(cx->pci_dev->irq, (void *)cx);
1119free_i2c:
1120        exit_cx18_i2c(cx);
1121free_map:
1122        cx18_iounmap(cx);
1123free_mem:
1124        release_mem_region(cx->base_addr, CX18_MEM_SIZE);
1125free_workqueues:
1126        destroy_workqueue(cx->in_work_queue);
1127err:
1128        CX18_ERR("Error %d on initialization\n", retval);
1129
1130        v4l2_device_unregister(&cx->v4l2_dev);
1131        kfree(cx);
1132        return retval;
1133}
1134
1135int cx18_init_on_first_open(struct cx18 *cx)
1136{
1137        int video_input;
1138        int fw_retry_count = 3;
1139        struct v4l2_frequency vf;
1140        struct cx18_open_id fh;
1141        v4l2_std_id std;
1142
1143        fh.cx = cx;
1144
1145        if (test_bit(CX18_F_I_FAILED, &cx->i_flags))
1146                return -ENXIO;
1147
1148        if (test_and_set_bit(CX18_F_I_INITED, &cx->i_flags))
1149                return 0;
1150
1151        while (--fw_retry_count > 0) {
1152                /* load firmware */
1153                if (cx18_firmware_init(cx) == 0)
1154                        break;
1155                if (fw_retry_count > 1)
1156                        CX18_WARN("Retry loading firmware\n");
1157        }
1158
1159        if (fw_retry_count == 0) {
1160                set_bit(CX18_F_I_FAILED, &cx->i_flags);
1161                return -ENXIO;
1162        }
1163        set_bit(CX18_F_I_LOADED_FW, &cx->i_flags);
1164
1165        /*
1166         * Init the firmware twice to work around a silicon bug
1167         * with the digital TS.
1168         *
1169         * The second firmware load requires us to normalize the APU state,
1170         * or the audio for the first analog capture will be badly incorrect.
1171         *
1172         * I can't seem to call APU_RESETAI and have it succeed without the
1173         * APU capturing audio, so we start and stop it here to do the reset
1174         */
1175
1176        /* MPEG Encoding, 224 kbps, MPEG Layer II, 48 ksps */
1177        cx18_vapi(cx, CX18_APU_START, 2, CX18_APU_ENCODING_METHOD_MPEG|0xb9, 0);
1178        cx18_vapi(cx, CX18_APU_RESETAI, 0);
1179        cx18_vapi(cx, CX18_APU_STOP, 1, CX18_APU_ENCODING_METHOD_MPEG);
1180
1181        fw_retry_count = 3;
1182        while (--fw_retry_count > 0) {
1183                /* load firmware */
1184                if (cx18_firmware_init(cx) == 0)
1185                        break;
1186                if (fw_retry_count > 1)
1187                        CX18_WARN("Retry loading firmware\n");
1188        }
1189
1190        if (fw_retry_count == 0) {
1191                set_bit(CX18_F_I_FAILED, &cx->i_flags);
1192                return -ENXIO;
1193        }
1194
1195        /*
1196         * The second firmware load requires us to normalize the APU state,
1197         * or the audio for the first analog capture will be badly incorrect.
1198         *
1199         * I can't seem to call APU_RESETAI and have it succeed without the
1200         * APU capturing audio, so we start and stop it here to do the reset
1201         */
1202
1203        /* MPEG Encoding, 224 kbps, MPEG Layer II, 48 ksps */
1204        cx18_vapi(cx, CX18_APU_START, 2, CX18_APU_ENCODING_METHOD_MPEG|0xb9, 0);
1205        cx18_vapi(cx, CX18_APU_RESETAI, 0);
1206        cx18_vapi(cx, CX18_APU_STOP, 1, CX18_APU_ENCODING_METHOD_MPEG);
1207
1208        /* Init the A/V decoder, if it hasn't been already */
1209        v4l2_subdev_call(cx->sd_av, core, load_fw);
1210
1211        vf.tuner = 0;
1212        vf.type = V4L2_TUNER_ANALOG_TV;
1213        vf.frequency = 6400; /* the tuner 'baseline' frequency */
1214
1215        /* Set initial frequency. For PAL/SECAM broadcasts no
1216           'default' channel exists AFAIK. */
1217        if (cx->std == V4L2_STD_NTSC_M_JP)
1218                vf.frequency = 1460;    /* ch. 1 91250*16/1000 */
1219        else if (cx->std & V4L2_STD_NTSC_M)
1220                vf.frequency = 1076;    /* ch. 4 67250*16/1000 */
1221
1222        video_input = cx->active_input;
1223        cx->active_input++;     /* Force update of input */
1224        cx18_s_input(NULL, &fh, video_input);
1225
1226        /* Let the VIDIOC_S_STD ioctl do all the work, keeps the code
1227           in one place. */
1228        cx->std++;              /* Force full standard initialization */
1229        std = (cx->tuner_std == V4L2_STD_ALL) ? V4L2_STD_NTSC_M : cx->tuner_std;
1230        cx18_s_std(NULL, &fh, std);
1231        cx18_s_frequency(NULL, &fh, &vf);
1232        return 0;
1233}
1234
1235static void cx18_cancel_in_work_orders(struct cx18 *cx)
1236{
1237        int i;
1238        for (i = 0; i < CX18_MAX_IN_WORK_ORDERS; i++)
1239                cancel_work_sync(&cx->in_work_order[i].work);
1240}
1241
1242static void cx18_cancel_out_work_orders(struct cx18 *cx)
1243{
1244        int i;
1245        for (i = 0; i < CX18_MAX_STREAMS; i++)
1246                if (cx->streams[i].video_dev.v4l2_dev)
1247                        cancel_work_sync(&cx->streams[i].out_work_order);
1248}
1249
1250static void cx18_remove(struct pci_dev *pci_dev)
1251{
1252        struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
1253        struct cx18 *cx = to_cx18(v4l2_dev);
1254        int i;
1255
1256        CX18_DEBUG_INFO("Removing Card\n");
1257
1258        flush_request_modules(cx);
1259
1260        /* Stop all captures */
1261        CX18_DEBUG_INFO("Stopping all streams\n");
1262        if (atomic_read(&cx->tot_capturing) > 0)
1263                cx18_stop_all_captures(cx);
1264
1265        /* Stop interrupts that cause incoming work to be queued */
1266        cx18_sw1_irq_disable(cx, IRQ_CPU_TO_EPU | IRQ_APU_TO_EPU);
1267
1268        /* Incoming work can cause outgoing work, so clean up incoming first */
1269        cx18_cancel_in_work_orders(cx);
1270        cx18_cancel_out_work_orders(cx);
1271
1272        /* Stop ack interrupts that may have been needed for work to finish */
1273        cx18_sw2_irq_disable(cx, IRQ_CPU_TO_EPU_ACK | IRQ_APU_TO_EPU_ACK);
1274
1275        cx18_halt_firmware(cx);
1276
1277        destroy_workqueue(cx->in_work_queue);
1278
1279        cx18_streams_cleanup(cx, 1);
1280
1281        exit_cx18_i2c(cx);
1282
1283        free_irq(cx->pci_dev->irq, (void *)cx);
1284
1285        cx18_iounmap(cx);
1286
1287        release_mem_region(cx->base_addr, CX18_MEM_SIZE);
1288
1289        pci_disable_device(cx->pci_dev);
1290
1291        if (cx->vbi.sliced_mpeg_data[0])
1292                for (i = 0; i < CX18_VBI_FRAMES; i++)
1293                        kfree(cx->vbi.sliced_mpeg_data[i]);
1294
1295        v4l2_ctrl_handler_free(&cx->av_state.hdl);
1296
1297        CX18_INFO("Removed %s\n", cx->card_name);
1298
1299        v4l2_device_unregister(v4l2_dev);
1300        kfree(cx);
1301}
1302
1303
1304/* define a pci_driver for card detection */
1305static struct pci_driver cx18_pci_driver = {
1306      .name =     "cx18",
1307      .id_table = cx18_pci_tbl,
1308      .probe =    cx18_probe,
1309      .remove =   cx18_remove,
1310};
1311
1312static int __init module_start(void)
1313{
1314        printk(KERN_INFO "cx18:  Start initialization, version %s\n",
1315               CX18_VERSION);
1316
1317        /* Validate parameters */
1318        if (cx18_first_minor < 0 || cx18_first_minor >= CX18_MAX_CARDS) {
1319                printk(KERN_ERR "cx18:  Exiting, cx18_first_minor must be between 0 and %d\n",
1320                     CX18_MAX_CARDS - 1);
1321                return -1;
1322        }
1323
1324        if (cx18_debug < 0 || cx18_debug > 511) {
1325                cx18_debug = 0;
1326                printk(KERN_INFO "cx18:   Debug value must be >= 0 and <= 511!\n");
1327        }
1328
1329        if (pci_register_driver(&cx18_pci_driver)) {
1330                printk(KERN_ERR "cx18:   Error detecting PCI card\n");
1331                return -ENODEV;
1332        }
1333        printk(KERN_INFO "cx18:  End initialization\n");
1334        return 0;
1335}
1336
1337static void __exit module_cleanup(void)
1338{
1339        pci_unregister_driver(&cx18_pci_driver);
1340}
1341
1342module_init(module_start);
1343module_exit(module_cleanup);
1344MODULE_FIRMWARE(XC2028_DEFAULT_FIRMWARE);
1345