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