1/* 2 DVB device driver for em28xx 3 4 (c) 2008-2011 Mauro Carvalho Chehab <mchehab@infradead.org> 5 6 (c) 2008 Devin Heitmueller <devin.heitmueller@gmail.com> 7 - Fixes for the driver to properly work with HVR-950 8 - Fixes for the driver to properly work with Pinnacle PCTV HD Pro Stick 9 - Fixes for the driver to properly work with AMD ATI TV Wonder HD 600 10 11 (c) 2008 Aidan Thornton <makosoft@googlemail.com> 12 13 Based on cx88-dvb, saa7134-dvb and videobuf-dvb originally written by: 14 (c) 2004, 2005 Chris Pascoe <c.pascoe@itee.uq.edu.au> 15 (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 16 17 This program is free software; you can redistribute it and/or modify 18 it under the terms of the GNU General Public License as published by 19 the Free Software Foundation; either version 2 of the License. 20 */ 21 22#include <linux/kernel.h> 23#include <linux/slab.h> 24#include <linux/usb.h> 25 26#include "em28xx.h" 27#include <media/v4l2-common.h> 28#include <media/videobuf-vmalloc.h> 29#include <media/tuner.h> 30#include "tuner-simple.h" 31 32#include "lgdt330x.h" 33#include "lgdt3305.h" 34#include "zl10353.h" 35#include "s5h1409.h" 36#include "mt352.h" 37#include "mt352_priv.h" /* FIXME */ 38#include "tda1002x.h" 39#include "tda18271.h" 40#include "s921.h" 41#include "drxd.h" 42#include "cxd2820r.h" 43#include "tda18271c2dd.h" 44#include "drxk.h" 45#include "tda10071.h" 46#include "a8293.h" 47#include "qt1010.h" 48 49MODULE_DESCRIPTION("driver for em28xx based DVB cards"); 50MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>"); 51MODULE_LICENSE("GPL"); 52 53static unsigned int debug; 54module_param(debug, int, 0644); 55MODULE_PARM_DESC(debug, "enable debug messages [dvb]"); 56 57DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 58 59#define dprintk(level, fmt, arg...) do { \ 60if (debug >= level) \ 61 printk(KERN_DEBUG "%s/2-dvb: " fmt, dev->name, ## arg); \ 62} while (0) 63 64#define EM28XX_DVB_NUM_BUFS 5 65#define EM28XX_DVB_MAX_PACKETS 64 66 67struct em28xx_dvb { 68 struct dvb_frontend *fe[2]; 69 70 /* feed count management */ 71 struct mutex lock; 72 int nfeeds; 73 74 /* general boilerplate stuff */ 75 struct dvb_adapter adapter; 76 struct dvb_demux demux; 77 struct dmxdev dmxdev; 78 struct dmx_frontend fe_hw; 79 struct dmx_frontend fe_mem; 80 struct dvb_net net; 81 82 /* Due to DRX-K - probably need changes */ 83 int (*gate_ctrl)(struct dvb_frontend *, int); 84 struct semaphore pll_mutex; 85 bool dont_attach_fe1; 86}; 87 88 89static inline void print_err_status(struct em28xx *dev, 90 int packet, int status) 91{ 92 char *errmsg = "Unknown"; 93 94 switch (status) { 95 case -ENOENT: 96 errmsg = "unlinked synchronuously"; 97 break; 98 case -ECONNRESET: 99 errmsg = "unlinked asynchronuously"; 100 break; 101 case -ENOSR: 102 errmsg = "Buffer error (overrun)"; 103 break; 104 case -EPIPE: 105 errmsg = "Stalled (device not responding)"; 106 break; 107 case -EOVERFLOW: 108 errmsg = "Babble (bad cable?)"; 109 break; 110 case -EPROTO: 111 errmsg = "Bit-stuff error (bad cable?)"; 112 break; 113 case -EILSEQ: 114 errmsg = "CRC/Timeout (could be anything)"; 115 break; 116 case -ETIME: 117 errmsg = "Device does not respond"; 118 break; 119 } 120 if (packet < 0) { 121 dprintk(1, "URB status %d [%s].\n", status, errmsg); 122 } else { 123 dprintk(1, "URB packet %d, status %d [%s].\n", 124 packet, status, errmsg); 125 } 126} 127 128static inline int em28xx_dvb_isoc_copy(struct em28xx *dev, struct urb *urb) 129{ 130 int i; 131 132 if (!dev) 133 return 0; 134 135 if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED)) 136 return 0; 137 138 if (urb->status < 0) { 139 print_err_status(dev, -1, urb->status); 140 if (urb->status == -ENOENT) 141 return 0; 142 } 143 144 for (i = 0; i < urb->number_of_packets; i++) { 145 int status = urb->iso_frame_desc[i].status; 146 147 if (status < 0) { 148 print_err_status(dev, i, status); 149 if (urb->iso_frame_desc[i].status != -EPROTO) 150 continue; 151 } 152 153 dvb_dmx_swfilter(&dev->dvb->demux, urb->transfer_buffer + 154 urb->iso_frame_desc[i].offset, 155 urb->iso_frame_desc[i].actual_length); 156 } 157 158 return 0; 159} 160 161static int em28xx_start_streaming(struct em28xx_dvb *dvb) 162{ 163 int rc; 164 struct em28xx *dev = dvb->adapter.priv; 165 int max_dvb_packet_size; 166 167 usb_set_interface(dev->udev, 0, dev->dvb_alt); 168 rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); 169 if (rc < 0) 170 return rc; 171 172 max_dvb_packet_size = dev->dvb_max_pkt_size; 173 if (max_dvb_packet_size < 0) 174 return max_dvb_packet_size; 175 dprintk(1, "Using %d buffers each with %d bytes\n", 176 EM28XX_DVB_NUM_BUFS, 177 max_dvb_packet_size); 178 179 return em28xx_init_isoc(dev, EM28XX_DVB_MAX_PACKETS, 180 EM28XX_DVB_NUM_BUFS, max_dvb_packet_size, 181 em28xx_dvb_isoc_copy); 182} 183 184static int em28xx_stop_streaming(struct em28xx_dvb *dvb) 185{ 186 struct em28xx *dev = dvb->adapter.priv; 187 188 em28xx_uninit_isoc(dev); 189 190 em28xx_set_mode(dev, EM28XX_SUSPEND); 191 192 return 0; 193} 194 195static int em28xx_start_feed(struct dvb_demux_feed *feed) 196{ 197 struct dvb_demux *demux = feed->demux; 198 struct em28xx_dvb *dvb = demux->priv; 199 int rc, ret; 200 201 if (!demux->dmx.frontend) 202 return -EINVAL; 203 204 mutex_lock(&dvb->lock); 205 dvb->nfeeds++; 206 rc = dvb->nfeeds; 207 208 if (dvb->nfeeds == 1) { 209 ret = em28xx_start_streaming(dvb); 210 if (ret < 0) 211 rc = ret; 212 } 213 214 mutex_unlock(&dvb->lock); 215 return rc; 216} 217 218static int em28xx_stop_feed(struct dvb_demux_feed *feed) 219{ 220 struct dvb_demux *demux = feed->demux; 221 struct em28xx_dvb *dvb = demux->priv; 222 int err = 0; 223 224 mutex_lock(&dvb->lock); 225 dvb->nfeeds--; 226 227 if (0 == dvb->nfeeds) 228 err = em28xx_stop_streaming(dvb); 229 230 mutex_unlock(&dvb->lock); 231 return err; 232} 233 234 235 236/* ------------------------------------------------------------------ */ 237static int em28xx_dvb_bus_ctrl(struct dvb_frontend *fe, int acquire) 238{ 239 struct em28xx *dev = fe->dvb->priv; 240 241 if (acquire) 242 return em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); 243 else 244 return em28xx_set_mode(dev, EM28XX_SUSPEND); 245} 246 247/* ------------------------------------------------------------------ */ 248 249static struct lgdt330x_config em2880_lgdt3303_dev = { 250 .demod_address = 0x0e, 251 .demod_chip = LGDT3303, 252}; 253 254static struct lgdt3305_config em2870_lgdt3304_dev = { 255 .i2c_addr = 0x0e, 256 .demod_chip = LGDT3304, 257 .spectral_inversion = 1, 258 .deny_i2c_rptr = 1, 259 .mpeg_mode = LGDT3305_MPEG_PARALLEL, 260 .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE, 261 .tpvalid_polarity = LGDT3305_TP_VALID_HIGH, 262 .vsb_if_khz = 3250, 263 .qam_if_khz = 4000, 264}; 265 266static struct s921_config sharp_isdbt = { 267 .demod_address = 0x30 >> 1 268}; 269 270static struct zl10353_config em28xx_zl10353_with_xc3028 = { 271 .demod_address = (0x1e >> 1), 272 .no_tuner = 1, 273 .parallel_ts = 1, 274 .if2 = 45600, 275}; 276 277static struct s5h1409_config em28xx_s5h1409_with_xc3028 = { 278 .demod_address = 0x32 >> 1, 279 .output_mode = S5H1409_PARALLEL_OUTPUT, 280 .gpio = S5H1409_GPIO_OFF, 281 .inversion = S5H1409_INVERSION_OFF, 282 .status_mode = S5H1409_DEMODLOCKING, 283 .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK 284}; 285 286static struct tda18271_std_map kworld_a340_std_map = { 287 .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 0, 288 .if_lvl = 1, .rfagc_top = 0x37, }, 289 .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 1, 290 .if_lvl = 1, .rfagc_top = 0x37, }, 291}; 292 293static struct tda18271_config kworld_a340_config = { 294 .std_map = &kworld_a340_std_map, 295}; 296 297static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { 298 .demod_address = (0x1e >> 1), 299 .no_tuner = 1, 300 .disable_i2c_gate_ctrl = 1, 301 .parallel_ts = 1, 302 .if2 = 45600, 303}; 304 305static struct drxd_config em28xx_drxd = { 306 .demod_address = 0x70, 307 .demod_revision = 0xa2, 308 .pll_type = DRXD_PLL_NONE, 309 .clock = 12000, 310 .insert_rs_byte = 1, 311 .IF = 42800000, 312 .disable_i2c_gate_ctrl = 1, 313}; 314 315struct drxk_config terratec_h5_drxk = { 316 .adr = 0x29, 317 .single_master = 1, 318 .no_i2c_bridge = 1, 319 .microcode_name = "dvb-usb-terratec-h5-drxk.fw", 320}; 321 322struct drxk_config hauppauge_930c_drxk = { 323 .adr = 0x29, 324 .single_master = 1, 325 .no_i2c_bridge = 1, 326 .microcode_name = "dvb-usb-hauppauge-hvr930c-drxk.fw", 327 .chunk_size = 56, 328}; 329 330static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable) 331{ 332 struct em28xx_dvb *dvb = fe->sec_priv; 333 int status; 334 335 if (!dvb) 336 return -EINVAL; 337 338 if (enable) { 339 down(&dvb->pll_mutex); 340 status = dvb->gate_ctrl(fe, 1); 341 } else { 342 status = dvb->gate_ctrl(fe, 0); 343 up(&dvb->pll_mutex); 344 } 345 return status; 346} 347 348static void hauppauge_hvr930c_init(struct em28xx *dev) 349{ 350 int i; 351 352 struct em28xx_reg_seq hauppauge_hvr930c_init[] = { 353 {EM2874_R80_GPIO, 0xff, 0xff, 0x65}, 354 {EM2874_R80_GPIO, 0xfb, 0xff, 0x32}, 355 {EM2874_R80_GPIO, 0xff, 0xff, 0xb8}, 356 { -1, -1, -1, -1}, 357 }; 358 struct em28xx_reg_seq hauppauge_hvr930c_end[] = { 359 {EM2874_R80_GPIO, 0xef, 0xff, 0x01}, 360 {EM2874_R80_GPIO, 0xaf, 0xff, 0x65}, 361 {EM2874_R80_GPIO, 0xef, 0xff, 0x76}, 362 {EM2874_R80_GPIO, 0xef, 0xff, 0x01}, 363 {EM2874_R80_GPIO, 0xcf, 0xff, 0x0b}, 364 {EM2874_R80_GPIO, 0xef, 0xff, 0x40}, 365 366 {EM2874_R80_GPIO, 0xcf, 0xff, 0x65}, 367 {EM2874_R80_GPIO, 0xef, 0xff, 0x65}, 368 {EM2874_R80_GPIO, 0xcf, 0xff, 0x0b}, 369 {EM2874_R80_GPIO, 0xef, 0xff, 0x65}, 370 371 { -1, -1, -1, -1}, 372 }; 373 374 struct { 375 unsigned char r[4]; 376 int len; 377 } regs[] = { 378 {{ 0x06, 0x02, 0x00, 0x31 }, 4}, 379 {{ 0x01, 0x02 }, 2}, 380 {{ 0x01, 0x02, 0x00, 0xc6 }, 4}, 381 {{ 0x01, 0x00 }, 2}, 382 {{ 0x01, 0x00, 0xff, 0xaf }, 4}, 383 {{ 0x01, 0x00, 0x03, 0xa0 }, 4}, 384 {{ 0x01, 0x00 }, 2}, 385 {{ 0x01, 0x00, 0x73, 0xaf }, 4}, 386 {{ 0x04, 0x00 }, 2}, 387 {{ 0x00, 0x04 }, 2}, 388 {{ 0x00, 0x04, 0x00, 0x0a }, 4}, 389 {{ 0x04, 0x14 }, 2}, 390 {{ 0x04, 0x14, 0x00, 0x00 }, 4}, 391 }; 392 393 em28xx_gpio_set(dev, hauppauge_hvr930c_init); 394 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x40); 395 msleep(10); 396 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x44); 397 msleep(10); 398 399 dev->i2c_client.addr = 0x82 >> 1; 400 401 for (i = 0; i < ARRAY_SIZE(regs); i++) 402 i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len); 403 em28xx_gpio_set(dev, hauppauge_hvr930c_end); 404 405 msleep(100); 406 407 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x44); 408 msleep(30); 409 410 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x45); 411 msleep(10); 412 413} 414 415static void terratec_h5_init(struct em28xx *dev) 416{ 417 int i; 418 struct em28xx_reg_seq terratec_h5_init[] = { 419 {EM28XX_R08_GPIO, 0xff, 0xff, 10}, 420 {EM2874_R80_GPIO, 0xf6, 0xff, 100}, 421 {EM2874_R80_GPIO, 0xf2, 0xff, 50}, 422 {EM2874_R80_GPIO, 0xf6, 0xff, 100}, 423 { -1, -1, -1, -1}, 424 }; 425 struct em28xx_reg_seq terratec_h5_end[] = { 426 {EM2874_R80_GPIO, 0xe6, 0xff, 100}, 427 {EM2874_R80_GPIO, 0xa6, 0xff, 50}, 428 {EM2874_R80_GPIO, 0xe6, 0xff, 100}, 429 { -1, -1, -1, -1}, 430 }; 431 struct { 432 unsigned char r[4]; 433 int len; 434 } regs[] = { 435 {{ 0x06, 0x02, 0x00, 0x31 }, 4}, 436 {{ 0x01, 0x02 }, 2}, 437 {{ 0x01, 0x02, 0x00, 0xc6 }, 4}, 438 {{ 0x01, 0x00 }, 2}, 439 {{ 0x01, 0x00, 0xff, 0xaf }, 4}, 440 {{ 0x01, 0x00, 0x03, 0xa0 }, 4}, 441 {{ 0x01, 0x00 }, 2}, 442 {{ 0x01, 0x00, 0x73, 0xaf }, 4}, 443 {{ 0x04, 0x00 }, 2}, 444 {{ 0x00, 0x04 }, 2}, 445 {{ 0x00, 0x04, 0x00, 0x0a }, 4}, 446 {{ 0x04, 0x14 }, 2}, 447 {{ 0x04, 0x14, 0x00, 0x00 }, 4}, 448 }; 449 450 em28xx_gpio_set(dev, terratec_h5_init); 451 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x40); 452 msleep(10); 453 em28xx_write_reg(dev, EM28XX_R06_I2C_CLK, 0x45); 454 msleep(10); 455 456 dev->i2c_client.addr = 0x82 >> 1; 457 458 for (i = 0; i < ARRAY_SIZE(regs); i++) 459 i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len); 460 em28xx_gpio_set(dev, terratec_h5_end); 461}; 462 463static int em28xx_mt352_terratec_xs_init(struct dvb_frontend *fe) 464{ 465 /* Values extracted from a USB trace of the Terratec Windows driver */ 466 static u8 clock_config[] = { CLOCK_CTL, 0x38, 0x2c }; 467 static u8 reset[] = { RESET, 0x80 }; 468 static u8 adc_ctl_1_cfg[] = { ADC_CTL_1, 0x40 }; 469 static u8 agc_cfg[] = { AGC_TARGET, 0x28, 0xa0 }; 470 static u8 input_freq_cfg[] = { INPUT_FREQ_1, 0x31, 0xb8 }; 471 static u8 rs_err_cfg[] = { RS_ERR_PER_1, 0x00, 0x4d }; 472 static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 }; 473 static u8 trl_nom_cfg[] = { TRL_NOMINAL_RATE_1, 0x64, 0x00 }; 474 static u8 tps_given_cfg[] = { TPS_GIVEN_1, 0x40, 0x80, 0x50 }; 475 static u8 tuner_go[] = { TUNER_GO, 0x01}; 476 477 mt352_write(fe, clock_config, sizeof(clock_config)); 478 udelay(200); 479 mt352_write(fe, reset, sizeof(reset)); 480 mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg)); 481 mt352_write(fe, agc_cfg, sizeof(agc_cfg)); 482 mt352_write(fe, input_freq_cfg, sizeof(input_freq_cfg)); 483 mt352_write(fe, rs_err_cfg, sizeof(rs_err_cfg)); 484 mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg)); 485 mt352_write(fe, trl_nom_cfg, sizeof(trl_nom_cfg)); 486 mt352_write(fe, tps_given_cfg, sizeof(tps_given_cfg)); 487 mt352_write(fe, tuner_go, sizeof(tuner_go)); 488 return 0; 489} 490 491static struct mt352_config terratec_xs_mt352_cfg = { 492 .demod_address = (0x1e >> 1), 493 .no_tuner = 1, 494 .if2 = 45600, 495 .demod_init = em28xx_mt352_terratec_xs_init, 496}; 497 498static struct tda10023_config em28xx_tda10023_config = { 499 .demod_address = 0x0c, 500 .invert = 1, 501}; 502 503static struct cxd2820r_config em28xx_cxd2820r_config = { 504 .i2c_address = (0xd8 >> 1), 505 .ts_mode = CXD2820R_TS_SERIAL, 506 507 /* enable LNA for DVB-T2 and DVB-C */ 508 .gpio_dvbt2[0] = CXD2820R_GPIO_E | CXD2820R_GPIO_O | CXD2820R_GPIO_L, 509 .gpio_dvbc[0] = CXD2820R_GPIO_E | CXD2820R_GPIO_O | CXD2820R_GPIO_L, 510}; 511 512static struct tda18271_config em28xx_cxd2820r_tda18271_config = { 513 .output_opt = TDA18271_OUTPUT_LT_OFF, 514 .gate = TDA18271_GATE_DIGITAL, 515}; 516 517static const struct tda10071_config em28xx_tda10071_config = { 518 .i2c_address = 0x55, /* (0xaa >> 1) */ 519 .i2c_wr_max = 64, 520 .ts_mode = TDA10071_TS_SERIAL, 521 .spec_inv = 0, 522 .xtal = 40444000, /* 40.444 MHz */ 523 .pll_multiplier = 20, 524}; 525 526static const struct a8293_config em28xx_a8293_config = { 527 .i2c_addr = 0x08, /* (0x10 >> 1) */ 528}; 529 530static struct zl10353_config em28xx_zl10353_no_i2c_gate_dev = { 531 .demod_address = (0x1e >> 1), 532 .disable_i2c_gate_ctrl = 1, 533 .no_tuner = 1, 534 .parallel_ts = 1, 535}; 536static struct qt1010_config em28xx_qt1010_config = { 537 .i2c_address = 0x62 538 539}; 540 541/* ------------------------------------------------------------------ */ 542 543static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev) 544{ 545 struct dvb_frontend *fe; 546 struct xc2028_config cfg; 547 548 memset(&cfg, 0, sizeof(cfg)); 549 cfg.i2c_adap = &dev->i2c_adap; 550 cfg.i2c_addr = addr; 551 552 if (!dev->dvb->fe[0]) { 553 em28xx_errdev("/2: dvb frontend not attached. " 554 "Can't attach xc3028\n"); 555 return -EINVAL; 556 } 557 558 fe = dvb_attach(xc2028_attach, dev->dvb->fe[0], &cfg); 559 if (!fe) { 560 em28xx_errdev("/2: xc3028 attach failed\n"); 561 dvb_frontend_detach(dev->dvb->fe[0]); 562 dev->dvb->fe[0] = NULL; 563 return -EINVAL; 564 } 565 566 em28xx_info("%s/2: xc3028 attached\n", dev->name); 567 568 return 0; 569} 570 571/* ------------------------------------------------------------------ */ 572 573static int em28xx_register_dvb(struct em28xx_dvb *dvb, struct module *module, 574 struct em28xx *dev, struct device *device) 575{ 576 int result; 577 578 mutex_init(&dvb->lock); 579 580 /* register adapter */ 581 result = dvb_register_adapter(&dvb->adapter, dev->name, module, device, 582 adapter_nr); 583 if (result < 0) { 584 printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n", 585 dev->name, result); 586 goto fail_adapter; 587 } 588 589 /* Ensure all frontends negotiate bus access */ 590 dvb->fe[0]->ops.ts_bus_ctrl = em28xx_dvb_bus_ctrl; 591 if (dvb->fe[1]) 592 dvb->fe[1]->ops.ts_bus_ctrl = em28xx_dvb_bus_ctrl; 593 594 dvb->adapter.priv = dev; 595 596 /* register frontend */ 597 result = dvb_register_frontend(&dvb->adapter, dvb->fe[0]); 598 if (result < 0) { 599 printk(KERN_WARNING "%s: dvb_register_frontend failed (errno = %d)\n", 600 dev->name, result); 601 goto fail_frontend0; 602 } 603 604 /* register 2nd frontend */ 605 if (dvb->fe[1]) { 606 result = dvb_register_frontend(&dvb->adapter, dvb->fe[1]); 607 if (result < 0) { 608 printk(KERN_WARNING "%s: 2nd dvb_register_frontend failed (errno = %d)\n", 609 dev->name, result); 610 goto fail_frontend1; 611 } 612 } 613 614 /* register demux stuff */ 615 dvb->demux.dmx.capabilities = 616 DMX_TS_FILTERING | DMX_SECTION_FILTERING | 617 DMX_MEMORY_BASED_FILTERING; 618 dvb->demux.priv = dvb; 619 dvb->demux.filternum = 256; 620 dvb->demux.feednum = 256; 621 dvb->demux.start_feed = em28xx_start_feed; 622 dvb->demux.stop_feed = em28xx_stop_feed; 623 624 result = dvb_dmx_init(&dvb->demux); 625 if (result < 0) { 626 printk(KERN_WARNING "%s: dvb_dmx_init failed (errno = %d)\n", 627 dev->name, result); 628 goto fail_dmx; 629 } 630 631 dvb->dmxdev.filternum = 256; 632 dvb->dmxdev.demux = &dvb->demux.dmx; 633 dvb->dmxdev.capabilities = 0; 634 result = dvb_dmxdev_init(&dvb->dmxdev, &dvb->adapter); 635 if (result < 0) { 636 printk(KERN_WARNING "%s: dvb_dmxdev_init failed (errno = %d)\n", 637 dev->name, result); 638 goto fail_dmxdev; 639 } 640 641 dvb->fe_hw.source = DMX_FRONTEND_0; 642 result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_hw); 643 if (result < 0) { 644 printk(KERN_WARNING "%s: add_frontend failed (DMX_FRONTEND_0, errno = %d)\n", 645 dev->name, result); 646 goto fail_fe_hw; 647 } 648 649 dvb->fe_mem.source = DMX_MEMORY_FE; 650 result = dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->fe_mem); 651 if (result < 0) { 652 printk(KERN_WARNING "%s: add_frontend failed (DMX_MEMORY_FE, errno = %d)\n", 653 dev->name, result); 654 goto fail_fe_mem; 655 } 656 657 result = dvb->demux.dmx.connect_frontend(&dvb->demux.dmx, &dvb->fe_hw); 658 if (result < 0) { 659 printk(KERN_WARNING "%s: connect_frontend failed (errno = %d)\n", 660 dev->name, result); 661 goto fail_fe_conn; 662 } 663 664 /* register network adapter */ 665 dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx); 666 return 0; 667 668fail_fe_conn: 669 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); 670fail_fe_mem: 671 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw); 672fail_fe_hw: 673 dvb_dmxdev_release(&dvb->dmxdev); 674fail_dmxdev: 675 dvb_dmx_release(&dvb->demux); 676fail_dmx: 677 if (dvb->fe[1]) 678 dvb_unregister_frontend(dvb->fe[1]); 679 dvb_unregister_frontend(dvb->fe[0]); 680fail_frontend1: 681 if (dvb->fe[1]) 682 dvb_frontend_detach(dvb->fe[1]); 683fail_frontend0: 684 dvb_frontend_detach(dvb->fe[0]); 685 dvb_unregister_adapter(&dvb->adapter); 686fail_adapter: 687 return result; 688} 689 690static void em28xx_unregister_dvb(struct em28xx_dvb *dvb) 691{ 692 dvb_net_release(&dvb->net); 693 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem); 694 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw); 695 dvb_dmxdev_release(&dvb->dmxdev); 696 dvb_dmx_release(&dvb->demux); 697 if (dvb->fe[1]) 698 dvb_unregister_frontend(dvb->fe[1]); 699 dvb_unregister_frontend(dvb->fe[0]); 700 if (dvb->fe[1] && !dvb->dont_attach_fe1) 701 dvb_frontend_detach(dvb->fe[1]); 702 dvb_frontend_detach(dvb->fe[0]); 703 dvb_unregister_adapter(&dvb->adapter); 704} 705 706static int em28xx_dvb_init(struct em28xx *dev) 707{ 708 int result = 0, mfe_shared = 0; 709 struct em28xx_dvb *dvb; 710 711 if (!dev->board.has_dvb) { 712 /* This device does not support the extension */ 713 printk(KERN_INFO "em28xx_dvb: This device does not support the extension\n"); 714 return 0; 715 } 716 717 dvb = kzalloc(sizeof(struct em28xx_dvb), GFP_KERNEL); 718 719 if (dvb == NULL) { 720 em28xx_info("em28xx_dvb: memory allocation failed\n"); 721 return -ENOMEM; 722 } 723 dev->dvb = dvb; 724 dvb->fe[0] = dvb->fe[1] = NULL; 725 726 mutex_lock(&dev->lock); 727 em28xx_set_mode(dev, EM28XX_DIGITAL_MODE); 728 /* init frontend */ 729 switch (dev->model) { 730 case EM2874_BOARD_LEADERSHIP_ISDBT: 731 dvb->fe[0] = dvb_attach(s921_attach, 732 &sharp_isdbt, &dev->i2c_adap); 733 734 if (!dvb->fe[0]) { 735 result = -EINVAL; 736 goto out_free; 737 } 738 739 break; 740 case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850: 741 case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: 742 case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: 743 case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: 744 dvb->fe[0] = dvb_attach(lgdt330x_attach, 745 &em2880_lgdt3303_dev, 746 &dev->i2c_adap); 747 if (em28xx_attach_xc3028(0x61, dev) < 0) { 748 result = -EINVAL; 749 goto out_free; 750 } 751 break; 752 case EM2880_BOARD_KWORLD_DVB_310U: 753 dvb->fe[0] = dvb_attach(zl10353_attach, 754 &em28xx_zl10353_with_xc3028, 755 &dev->i2c_adap); 756 if (em28xx_attach_xc3028(0x61, dev) < 0) { 757 result = -EINVAL; 758 goto out_free; 759 } 760 break; 761 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: 762 case EM2882_BOARD_TERRATEC_HYBRID_XS: 763 case EM2880_BOARD_EMPIRE_DUAL_TV: 764 dvb->fe[0] = dvb_attach(zl10353_attach, 765 &em28xx_zl10353_xc3028_no_i2c_gate, 766 &dev->i2c_adap); 767 if (em28xx_attach_xc3028(0x61, dev) < 0) { 768 result = -EINVAL; 769 goto out_free; 770 } 771 break; 772 case EM2880_BOARD_TERRATEC_HYBRID_XS: 773 case EM2880_BOARD_TERRATEC_HYBRID_XS_FR: 774 case EM2881_BOARD_PINNACLE_HYBRID_PRO: 775 case EM2882_BOARD_DIKOM_DK300: 776 case EM2882_BOARD_KWORLD_VS_DVBT: 777 dvb->fe[0] = dvb_attach(zl10353_attach, 778 &em28xx_zl10353_xc3028_no_i2c_gate, 779 &dev->i2c_adap); 780 if (dvb->fe[0] == NULL) { 781 /* This board could have either a zl10353 or a mt352. 782 If the chip id isn't for zl10353, try mt352 */ 783 dvb->fe[0] = dvb_attach(mt352_attach, 784 &terratec_xs_mt352_cfg, 785 &dev->i2c_adap); 786 } 787 788 if (em28xx_attach_xc3028(0x61, dev) < 0) { 789 result = -EINVAL; 790 goto out_free; 791 } 792 break; 793 case EM2870_BOARD_KWORLD_355U: 794 dvb->fe[0] = dvb_attach(zl10353_attach, 795 &em28xx_zl10353_no_i2c_gate_dev, 796 &dev->i2c_adap); 797 if (dvb->fe[0] != NULL) 798 dvb_attach(qt1010_attach, dvb->fe[0], 799 &dev->i2c_adap, &em28xx_qt1010_config); 800 break; 801 case EM2883_BOARD_KWORLD_HYBRID_330U: 802 case EM2882_BOARD_EVGA_INDTUBE: 803 dvb->fe[0] = dvb_attach(s5h1409_attach, 804 &em28xx_s5h1409_with_xc3028, 805 &dev->i2c_adap); 806 if (em28xx_attach_xc3028(0x61, dev) < 0) { 807 result = -EINVAL; 808 goto out_free; 809 } 810 break; 811 case EM2882_BOARD_KWORLD_ATSC_315U: 812 dvb->fe[0] = dvb_attach(lgdt330x_attach, 813 &em2880_lgdt3303_dev, 814 &dev->i2c_adap); 815 if (dvb->fe[0] != NULL) { 816 if (!dvb_attach(simple_tuner_attach, dvb->fe[0], 817 &dev->i2c_adap, 0x61, TUNER_THOMSON_DTT761X)) { 818 result = -EINVAL; 819 goto out_free; 820 } 821 } 822 break; 823 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: 824 case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E: 825 dvb->fe[0] = dvb_attach(drxd_attach, &em28xx_drxd, NULL, 826 &dev->i2c_adap, &dev->udev->dev); 827 if (em28xx_attach_xc3028(0x61, dev) < 0) { 828 result = -EINVAL; 829 goto out_free; 830 } 831 break; 832 case EM2870_BOARD_REDDO_DVB_C_USB_BOX: 833 /* Philips CU1216L NIM (Philips TDA10023 + Infineon TUA6034) */ 834 dvb->fe[0] = dvb_attach(tda10023_attach, 835 &em28xx_tda10023_config, 836 &dev->i2c_adap, 0x48); 837 if (dvb->fe[0]) { 838 if (!dvb_attach(simple_tuner_attach, dvb->fe[0], 839 &dev->i2c_adap, 0x60, TUNER_PHILIPS_CU1216L)) { 840 result = -EINVAL; 841 goto out_free; 842 } 843 } 844 break; 845 case EM2870_BOARD_KWORLD_A340: 846 dvb->fe[0] = dvb_attach(lgdt3305_attach, 847 &em2870_lgdt3304_dev, 848 &dev->i2c_adap); 849 if (dvb->fe[0] != NULL) 850 dvb_attach(tda18271_attach, dvb->fe[0], 0x60, 851 &dev->i2c_adap, &kworld_a340_config); 852 break; 853 case EM28174_BOARD_PCTV_290E: 854 dvb->fe[0] = dvb_attach(cxd2820r_attach, 855 &em28xx_cxd2820r_config, 856 &dev->i2c_adap); 857 if (dvb->fe[0]) { 858 /* FE 0 attach tuner */ 859 if (!dvb_attach(tda18271_attach, 860 dvb->fe[0], 861 0x60, 862 &dev->i2c_adap, 863 &em28xx_cxd2820r_tda18271_config)) { 864 865 dvb_frontend_detach(dvb->fe[0]); 866 result = -EINVAL; 867 goto out_free; 868 } 869 } 870 break; 871 case EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C: 872 { 873 struct xc5000_config cfg; 874 hauppauge_hvr930c_init(dev); 875 876 dvb->fe[0] = dvb_attach(drxk_attach, 877 &hauppauge_930c_drxk, &dev->i2c_adap); 878 if (!dvb->fe[0]) { 879 result = -EINVAL; 880 goto out_free; 881 } 882 /* FIXME: do we need a pll semaphore? */ 883 dvb->fe[0]->sec_priv = dvb; 884 sema_init(&dvb->pll_mutex, 1); 885 dvb->gate_ctrl = dvb->fe[0]->ops.i2c_gate_ctrl; 886 dvb->fe[0]->ops.i2c_gate_ctrl = drxk_gate_ctrl; 887 888 /* Attach xc5000 */ 889 memset(&cfg, 0, sizeof(cfg)); 890 cfg.i2c_address = 0x61; 891 cfg.if_khz = 4000; 892 893 if (dvb->fe[0]->ops.i2c_gate_ctrl) 894 dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 1); 895 if (!dvb_attach(xc5000_attach, dvb->fe[0], &dev->i2c_adap, 896 &cfg)) { 897 result = -EINVAL; 898 goto out_free; 899 } 900 if (dvb->fe[0]->ops.i2c_gate_ctrl) 901 dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 0); 902 903 break; 904 } 905 case EM2884_BOARD_TERRATEC_H5: 906 case EM2884_BOARD_CINERGY_HTC_STICK: 907 terratec_h5_init(dev); 908 909 dvb->fe[0] = dvb_attach(drxk_attach, &terratec_h5_drxk, &dev->i2c_adap); 910 if (!dvb->fe[0]) { 911 result = -EINVAL; 912 goto out_free; 913 } 914 /* FIXME: do we need a pll semaphore? */ 915 dvb->fe[0]->sec_priv = dvb; 916 sema_init(&dvb->pll_mutex, 1); 917 dvb->gate_ctrl = dvb->fe[0]->ops.i2c_gate_ctrl; 918 dvb->fe[0]->ops.i2c_gate_ctrl = drxk_gate_ctrl; 919 920 /* Attach tda18271 to DVB-C frontend */ 921 if (dvb->fe[0]->ops.i2c_gate_ctrl) 922 dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 1); 923 if (!dvb_attach(tda18271c2dd_attach, dvb->fe[0], &dev->i2c_adap, 0x60)) { 924 result = -EINVAL; 925 goto out_free; 926 } 927 if (dvb->fe[0]->ops.i2c_gate_ctrl) 928 dvb->fe[0]->ops.i2c_gate_ctrl(dvb->fe[0], 0); 929 930 break; 931 case EM28174_BOARD_PCTV_460E: 932 /* attach demod */ 933 dvb->fe[0] = dvb_attach(tda10071_attach, 934 &em28xx_tda10071_config, &dev->i2c_adap); 935 936 /* attach SEC */ 937 if (dvb->fe[0]) 938 dvb_attach(a8293_attach, dvb->fe[0], &dev->i2c_adap, 939 &em28xx_a8293_config); 940 break; 941 default: 942 em28xx_errdev("/2: The frontend of your DVB/ATSC card" 943 " isn't supported yet\n"); 944 break; 945 } 946 if (NULL == dvb->fe[0]) { 947 em28xx_errdev("/2: frontend initialization failed\n"); 948 result = -EINVAL; 949 goto out_free; 950 } 951 /* define general-purpose callback pointer */ 952 dvb->fe[0]->callback = em28xx_tuner_callback; 953 if (dvb->fe[1]) 954 dvb->fe[1]->callback = em28xx_tuner_callback; 955 956 /* register everything */ 957 result = em28xx_register_dvb(dvb, THIS_MODULE, dev, &dev->udev->dev); 958 959 if (result < 0) 960 goto out_free; 961 962 /* MFE lock */ 963 dvb->adapter.mfe_shared = mfe_shared; 964 965 em28xx_info("Successfully loaded em28xx-dvb\n"); 966ret: 967 em28xx_set_mode(dev, EM28XX_SUSPEND); 968 mutex_unlock(&dev->lock); 969 return result; 970 971out_free: 972 kfree(dvb); 973 dev->dvb = NULL; 974 goto ret; 975} 976 977static inline void prevent_sleep(struct dvb_frontend_ops *ops) 978{ 979 ops->set_voltage = NULL; 980 ops->sleep = NULL; 981 ops->tuner_ops.sleep = NULL; 982} 983 984static int em28xx_dvb_fini(struct em28xx *dev) 985{ 986 if (!dev->board.has_dvb) { 987 /* This device does not support the extension */ 988 return 0; 989 } 990 991 if (dev->dvb) { 992 struct em28xx_dvb *dvb = dev->dvb; 993 994 if (dev->state & DEV_DISCONNECTED) { 995 /* We cannot tell the device to sleep 996 * once it has been unplugged. */ 997 if (dvb->fe[0]) 998 prevent_sleep(&dvb->fe[0]->ops); 999 if (dvb->fe[1]) 1000 prevent_sleep(&dvb->fe[1]->ops); 1001 } 1002 1003 em28xx_unregister_dvb(dvb); 1004 kfree(dvb); 1005 dev->dvb = NULL; 1006 } 1007 1008 return 0; 1009} 1010 1011static struct em28xx_ops dvb_ops = { 1012 .id = EM28XX_DVB, 1013 .name = "Em28xx dvb Extension", 1014 .init = em28xx_dvb_init, 1015 .fini = em28xx_dvb_fini, 1016}; 1017 1018static int __init em28xx_dvb_register(void) 1019{ 1020 return em28xx_register_extension(&dvb_ops); 1021} 1022 1023static void __exit em28xx_dvb_unregister(void) 1024{ 1025 em28xx_unregister_extension(&dvb_ops); 1026} 1027 1028module_init(em28xx_dvb_register); 1029module_exit(em28xx_dvb_unregister); 1030