aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dm1105/dm1105.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/dm1105/dm1105.c')
-rw-r--r--drivers/media/dvb/dm1105/dm1105.c524
1 files changed, 275 insertions, 249 deletions
diff --git a/drivers/media/dvb/dm1105/dm1105.c b/drivers/media/dvb/dm1105/dm1105.c
index 2d099e271751..b6d46961a99e 100644
--- a/drivers/media/dvb/dm1105/dm1105.c
+++ b/drivers/media/dvb/dm1105/dm1105.c
@@ -27,6 +27,7 @@
27#include <linux/pci.h> 27#include <linux/pci.h>
28#include <linux/dma-mapping.h> 28#include <linux/dma-mapping.h>
29#include <linux/input.h> 29#include <linux/input.h>
30#include <linux/slab.h>
30#include <media/ir-common.h> 31#include <media/ir-common.h>
31 32
32#include "demux.h" 33#include "demux.h"
@@ -43,6 +44,7 @@
43#include "si21xx.h" 44#include "si21xx.h"
44#include "cx24116.h" 45#include "cx24116.h"
45#include "z0194a.h" 46#include "z0194a.h"
47#include "ds3000.h"
46 48
47#define UNSET (-1U) 49#define UNSET (-1U)
48 50
@@ -269,7 +271,7 @@ struct infrared {
269 u32 ir_command; 271 u32 ir_command;
270}; 272};
271 273
272struct dm1105dvb { 274struct dm1105_dev {
273 /* pci */ 275 /* pci */
274 struct pci_dev *pdev; 276 struct pci_dev *pdev;
275 u8 __iomem *io_mem; 277 u8 __iomem *io_mem;
@@ -308,31 +310,47 @@ struct dm1105dvb {
308 spinlock_t lock; 310 spinlock_t lock;
309}; 311};
310 312
311#define dm_io_mem(reg) ((unsigned long)(&dm1105dvb->io_mem[reg])) 313#define dm_io_mem(reg) ((unsigned long)(&dev->io_mem[reg]))
314
315#define dm_readb(reg) inb(dm_io_mem(reg))
316#define dm_writeb(reg, value) outb((value), (dm_io_mem(reg)))
317
318#define dm_readw(reg) inw(dm_io_mem(reg))
319#define dm_writew(reg, value) outw((value), (dm_io_mem(reg)))
320
321#define dm_readl(reg) inl(dm_io_mem(reg))
322#define dm_writel(reg, value) outl((value), (dm_io_mem(reg)))
323
324#define dm_andorl(reg, mask, value) \
325 outl((inl(dm_io_mem(reg)) & ~(mask)) |\
326 ((value) & (mask)), (dm_io_mem(reg)))
327
328#define dm_setl(reg, bit) dm_andorl((reg), (bit), (bit))
329#define dm_clearl(reg, bit) dm_andorl((reg), (bit), 0)
312 330
313static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap, 331static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap,
314 struct i2c_msg *msgs, int num) 332 struct i2c_msg *msgs, int num)
315{ 333{
316 struct dm1105dvb *dm1105dvb ; 334 struct dm1105_dev *dev ;
317 335
318 int addr, rc, i, j, k, len, byte, data; 336 int addr, rc, i, j, k, len, byte, data;
319 u8 status; 337 u8 status;
320 338
321 dm1105dvb = i2c_adap->algo_data; 339 dev = i2c_adap->algo_data;
322 for (i = 0; i < num; i++) { 340 for (i = 0; i < num; i++) {
323 outb(0x00, dm_io_mem(DM1105_I2CCTR)); 341 dm_writeb(DM1105_I2CCTR, 0x00);
324 if (msgs[i].flags & I2C_M_RD) { 342 if (msgs[i].flags & I2C_M_RD) {
325 /* read bytes */ 343 /* read bytes */
326 addr = msgs[i].addr << 1; 344 addr = msgs[i].addr << 1;
327 addr |= 1; 345 addr |= 1;
328 outb(addr, dm_io_mem(DM1105_I2CDAT)); 346 dm_writeb(DM1105_I2CDAT, addr);
329 for (byte = 0; byte < msgs[i].len; byte++) 347 for (byte = 0; byte < msgs[i].len; byte++)
330 outb(0, dm_io_mem(DM1105_I2CDAT + byte + 1)); 348 dm_writeb(DM1105_I2CDAT + byte + 1, 0);
331 349
332 outb(0x81 + msgs[i].len, dm_io_mem(DM1105_I2CCTR)); 350 dm_writeb(DM1105_I2CCTR, 0x81 + msgs[i].len);
333 for (j = 0; j < 55; j++) { 351 for (j = 0; j < 55; j++) {
334 mdelay(10); 352 mdelay(10);
335 status = inb(dm_io_mem(DM1105_I2CSTS)); 353 status = dm_readb(DM1105_I2CSTS);
336 if ((status & 0xc0) == 0x40) 354 if ((status & 0xc0) == 0x40)
337 break; 355 break;
338 } 356 }
@@ -340,56 +358,54 @@ static int dm1105_i2c_xfer(struct i2c_adapter *i2c_adap,
340 return -1; 358 return -1;
341 359
342 for (byte = 0; byte < msgs[i].len; byte++) { 360 for (byte = 0; byte < msgs[i].len; byte++) {
343 rc = inb(dm_io_mem(DM1105_I2CDAT + byte + 1)); 361 rc = dm_readb(DM1105_I2CDAT + byte + 1);
344 if (rc < 0) 362 if (rc < 0)
345 goto err; 363 goto err;
346 msgs[i].buf[byte] = rc; 364 msgs[i].buf[byte] = rc;
347 } 365 }
348 } else { 366 } else if ((msgs[i].buf[0] == 0xf7) && (msgs[i].addr == 0x55)) {
349 if ((msgs[i].buf[0] == 0xf7) && (msgs[i].addr == 0x55)) { 367 /* prepaired for cx24116 firmware */
350 /* prepaired for cx24116 firmware */ 368 /* Write in small blocks */
351 /* Write in small blocks */ 369 len = msgs[i].len - 1;
352 len = msgs[i].len - 1; 370 k = 1;
353 k = 1; 371 do {
354 do { 372 dm_writeb(DM1105_I2CDAT, msgs[i].addr << 1);
355 outb(msgs[i].addr << 1, dm_io_mem(DM1105_I2CDAT)); 373 dm_writeb(DM1105_I2CDAT + 1, 0xf7);
356 outb(0xf7, dm_io_mem(DM1105_I2CDAT + 1)); 374 for (byte = 0; byte < (len > 48 ? 48 : len); byte++) {
357 for (byte = 0; byte < (len > 48 ? 48 : len); byte++) { 375 data = msgs[i].buf[k + byte];
358 data = msgs[i].buf[k+byte]; 376 dm_writeb(DM1105_I2CDAT + byte + 2, data);
359 outb(data, dm_io_mem(DM1105_I2CDAT + byte + 2));
360 }
361 outb(0x82 + (len > 48 ? 48 : len), dm_io_mem(DM1105_I2CCTR));
362 for (j = 0; j < 25; j++) {
363 mdelay(10);
364 status = inb(dm_io_mem(DM1105_I2CSTS));
365 if ((status & 0xc0) == 0x40)
366 break;
367 }
368
369 if (j >= 25)
370 return -1;
371
372 k += 48;
373 len -= 48;
374 } while (len > 0);
375 } else {
376 /* write bytes */
377 outb(msgs[i].addr<<1, dm_io_mem(DM1105_I2CDAT));
378 for (byte = 0; byte < msgs[i].len; byte++) {
379 data = msgs[i].buf[byte];
380 outb(data, dm_io_mem(DM1105_I2CDAT + byte + 1));
381 } 377 }
382 outb(0x81 + msgs[i].len, dm_io_mem(DM1105_I2CCTR)); 378 dm_writeb(DM1105_I2CCTR, 0x82 + (len > 48 ? 48 : len));
383 for (j = 0; j < 25; j++) { 379 for (j = 0; j < 25; j++) {
384 mdelay(10); 380 mdelay(10);
385 status = inb(dm_io_mem(DM1105_I2CSTS)); 381 status = dm_readb(DM1105_I2CSTS);
386 if ((status & 0xc0) == 0x40) 382 if ((status & 0xc0) == 0x40)
387 break; 383 break;
388 } 384 }
389 385
390 if (j >= 25) 386 if (j >= 25)
391 return -1; 387 return -1;
388
389 k += 48;
390 len -= 48;
391 } while (len > 0);
392 } else {
393 /* write bytes */
394 dm_writeb(DM1105_I2CDAT, msgs[i].addr << 1);
395 for (byte = 0; byte < msgs[i].len; byte++) {
396 data = msgs[i].buf[byte];
397 dm_writeb(DM1105_I2CDAT + byte + 1, data);
392 } 398 }
399 dm_writeb(DM1105_I2CCTR, 0x81 + msgs[i].len);
400 for (j = 0; j < 25; j++) {
401 mdelay(10);
402 status = dm_readb(DM1105_I2CSTS);
403 if ((status & 0xc0) == 0x40)
404 break;
405 }
406
407 if (j >= 25)
408 return -1;
393 } 409 }
394 } 410 }
395 return num; 411 return num;
@@ -407,22 +423,22 @@ static struct i2c_algorithm dm1105_algo = {
407 .functionality = functionality, 423 .functionality = functionality,
408}; 424};
409 425
410static inline struct dm1105dvb *feed_to_dm1105dvb(struct dvb_demux_feed *feed) 426static inline struct dm1105_dev *feed_to_dm1105_dev(struct dvb_demux_feed *feed)
411{ 427{
412 return container_of(feed->demux, struct dm1105dvb, demux); 428 return container_of(feed->demux, struct dm1105_dev, demux);
413} 429}
414 430
415static inline struct dm1105dvb *frontend_to_dm1105dvb(struct dvb_frontend *fe) 431static inline struct dm1105_dev *frontend_to_dm1105_dev(struct dvb_frontend *fe)
416{ 432{
417 return container_of(fe->dvb, struct dm1105dvb, dvb_adapter); 433 return container_of(fe->dvb, struct dm1105_dev, dvb_adapter);
418} 434}
419 435
420static int dm1105dvb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage) 436static int dm1105_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
421{ 437{
422 struct dm1105dvb *dm1105dvb = frontend_to_dm1105dvb(fe); 438 struct dm1105_dev *dev = frontend_to_dm1105_dev(fe);
423 u32 lnb_mask, lnb_13v, lnb_18v, lnb_off; 439 u32 lnb_mask, lnb_13v, lnb_18v, lnb_off;
424 440
425 switch (dm1105dvb->boardnr) { 441 switch (dev->boardnr) {
426 case DM1105_BOARD_AXESS_DM05: 442 case DM1105_BOARD_AXESS_DM05:
427 lnb_mask = DM05_LNB_MASK; 443 lnb_mask = DM05_LNB_MASK;
428 lnb_off = DM05_LNB_OFF; 444 lnb_off = DM05_LNB_OFF;
@@ -438,62 +454,67 @@ static int dm1105dvb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t volta
438 lnb_18v = DM1105_LNB_18V; 454 lnb_18v = DM1105_LNB_18V;
439 } 455 }
440 456
441 outl(lnb_mask, dm_io_mem(DM1105_GPIOCTR)); 457 dm_writel(DM1105_GPIOCTR, lnb_mask);
442 if (voltage == SEC_VOLTAGE_18) 458 if (voltage == SEC_VOLTAGE_18)
443 outl(lnb_18v , dm_io_mem(DM1105_GPIOVAL)); 459 dm_writel(DM1105_GPIOVAL, lnb_18v);
444 else if (voltage == SEC_VOLTAGE_13) 460 else if (voltage == SEC_VOLTAGE_13)
445 outl(lnb_13v, dm_io_mem(DM1105_GPIOVAL)); 461 dm_writel(DM1105_GPIOVAL, lnb_13v);
446 else 462 else
447 outl(lnb_off, dm_io_mem(DM1105_GPIOVAL)); 463 dm_writel(DM1105_GPIOVAL, lnb_off);
448 464
449 return 0; 465 return 0;
450} 466}
451 467
452static void dm1105dvb_set_dma_addr(struct dm1105dvb *dm1105dvb) 468static void dm1105_set_dma_addr(struct dm1105_dev *dev)
453{ 469{
454 outl(cpu_to_le32(dm1105dvb->dma_addr), dm_io_mem(DM1105_STADR)); 470 dm_writel(DM1105_STADR, cpu_to_le32(dev->dma_addr));
455} 471}
456 472
457static int __devinit dm1105dvb_dma_map(struct dm1105dvb *dm1105dvb) 473static int __devinit dm1105_dma_map(struct dm1105_dev *dev)
458{ 474{
459 dm1105dvb->ts_buf = pci_alloc_consistent(dm1105dvb->pdev, 6*DM1105_DMA_BYTES, &dm1105dvb->dma_addr); 475 dev->ts_buf = pci_alloc_consistent(dev->pdev,
476 6 * DM1105_DMA_BYTES,
477 &dev->dma_addr);
460 478
461 return !dm1105dvb->ts_buf; 479 return !dev->ts_buf;
462} 480}
463 481
464static void dm1105dvb_dma_unmap(struct dm1105dvb *dm1105dvb) 482static void dm1105_dma_unmap(struct dm1105_dev *dev)
465{ 483{
466 pci_free_consistent(dm1105dvb->pdev, 6*DM1105_DMA_BYTES, dm1105dvb->ts_buf, dm1105dvb->dma_addr); 484 pci_free_consistent(dev->pdev,
485 6 * DM1105_DMA_BYTES,
486 dev->ts_buf,
487 dev->dma_addr);
467} 488}
468 489
469static void dm1105dvb_enable_irqs(struct dm1105dvb *dm1105dvb) 490static void dm1105_enable_irqs(struct dm1105_dev *dev)
470{ 491{
471 outb(INTMAK_ALLMASK, dm_io_mem(DM1105_INTMAK)); 492 dm_writeb(DM1105_INTMAK, INTMAK_ALLMASK);
472 outb(1, dm_io_mem(DM1105_CR)); 493 dm_writeb(DM1105_CR, 1);
473} 494}
474 495
475static void dm1105dvb_disable_irqs(struct dm1105dvb *dm1105dvb) 496static void dm1105_disable_irqs(struct dm1105_dev *dev)
476{ 497{
477 outb(INTMAK_IRM, dm_io_mem(DM1105_INTMAK)); 498 dm_writeb(DM1105_INTMAK, INTMAK_IRM);
478 outb(0, dm_io_mem(DM1105_CR)); 499 dm_writeb(DM1105_CR, 0);
479} 500}
480 501
481static int dm1105dvb_start_feed(struct dvb_demux_feed *f) 502static int dm1105_start_feed(struct dvb_demux_feed *f)
482{ 503{
483 struct dm1105dvb *dm1105dvb = feed_to_dm1105dvb(f); 504 struct dm1105_dev *dev = feed_to_dm1105_dev(f);
484 505
485 if (dm1105dvb->full_ts_users++ == 0) 506 if (dev->full_ts_users++ == 0)
486 dm1105dvb_enable_irqs(dm1105dvb); 507 dm1105_enable_irqs(dev);
487 508
488 return 0; 509 return 0;
489} 510}
490 511
491static int dm1105dvb_stop_feed(struct dvb_demux_feed *f) 512static int dm1105_stop_feed(struct dvb_demux_feed *f)
492{ 513{
493 struct dm1105dvb *dm1105dvb = feed_to_dm1105dvb(f); 514 struct dm1105_dev *dev = feed_to_dm1105_dev(f);
494 515
495 if (--dm1105dvb->full_ts_users == 0) 516 if (--dev->full_ts_users == 0)
496 dm1105dvb_disable_irqs(dm1105dvb); 517 dm1105_disable_irqs(dev);
497 518
498 return 0; 519 return 0;
499} 520}
@@ -510,75 +531,71 @@ static void dm1105_emit_key(struct work_struct *work)
510 531
511 data = (ircom >> 8) & 0x7f; 532 data = (ircom >> 8) & 0x7f;
512 533
513 ir_input_keydown(ir->input_dev, &ir->ir, data, data); 534 ir_input_keydown(ir->input_dev, &ir->ir, data);
514 ir_input_nokey(ir->input_dev, &ir->ir); 535 ir_input_nokey(ir->input_dev, &ir->ir);
515} 536}
516 537
517/* work handler */ 538/* work handler */
518static void dm1105_dmx_buffer(struct work_struct *work) 539static void dm1105_dmx_buffer(struct work_struct *work)
519{ 540{
520 struct dm1105dvb *dm1105dvb = 541 struct dm1105_dev *dev = container_of(work, struct dm1105_dev, work);
521 container_of(work, struct dm1105dvb, work);
522 unsigned int nbpackets; 542 unsigned int nbpackets;
523 u32 oldwrp = dm1105dvb->wrp; 543 u32 oldwrp = dev->wrp;
524 u32 nextwrp = dm1105dvb->nextwrp; 544 u32 nextwrp = dev->nextwrp;
525 545
526 if (!((dm1105dvb->ts_buf[oldwrp] == 0x47) && 546 if (!((dev->ts_buf[oldwrp] == 0x47) &&
527 (dm1105dvb->ts_buf[oldwrp + 188] == 0x47) && 547 (dev->ts_buf[oldwrp + 188] == 0x47) &&
528 (dm1105dvb->ts_buf[oldwrp + 188 * 2] == 0x47))) { 548 (dev->ts_buf[oldwrp + 188 * 2] == 0x47))) {
529 dm1105dvb->PacketErrorCount++; 549 dev->PacketErrorCount++;
530 /* bad packet found */ 550 /* bad packet found */
531 if ((dm1105dvb->PacketErrorCount >= 2) && 551 if ((dev->PacketErrorCount >= 2) &&
532 (dm1105dvb->dmarst == 0)) { 552 (dev->dmarst == 0)) {
533 outb(1, dm_io_mem(DM1105_RST)); 553 dm_writeb(DM1105_RST, 1);
534 dm1105dvb->wrp = 0; 554 dev->wrp = 0;
535 dm1105dvb->PacketErrorCount = 0; 555 dev->PacketErrorCount = 0;
536 dm1105dvb->dmarst = 0; 556 dev->dmarst = 0;
537 return; 557 return;
538 } 558 }
539 } 559 }
540 560
541 if (nextwrp < oldwrp) { 561 if (nextwrp < oldwrp) {
542 memcpy(dm1105dvb->ts_buf + dm1105dvb->buffer_size, 562 memcpy(dev->ts_buf + dev->buffer_size, dev->ts_buf, nextwrp);
543 dm1105dvb->ts_buf, nextwrp); 563 nbpackets = ((dev->buffer_size - oldwrp) + nextwrp) / 188;
544 nbpackets = ((dm1105dvb->buffer_size - oldwrp) + nextwrp) / 188;
545 } else 564 } else
546 nbpackets = (nextwrp - oldwrp) / 188; 565 nbpackets = (nextwrp - oldwrp) / 188;
547 566
548 dm1105dvb->wrp = nextwrp; 567 dev->wrp = nextwrp;
549 dvb_dmx_swfilter_packets(&dm1105dvb->demux, 568 dvb_dmx_swfilter_packets(&dev->demux, &dev->ts_buf[oldwrp], nbpackets);
550 &dm1105dvb->ts_buf[oldwrp], nbpackets);
551} 569}
552 570
553static irqreturn_t dm1105dvb_irq(int irq, void *dev_id) 571static irqreturn_t dm1105_irq(int irq, void *dev_id)
554{ 572{
555 struct dm1105dvb *dm1105dvb = dev_id; 573 struct dm1105_dev *dev = dev_id;
556 574
557 /* Read-Write INSTS Ack's Interrupt for DM1105 chip 16.03.2008 */ 575 /* Read-Write INSTS Ack's Interrupt for DM1105 chip 16.03.2008 */
558 unsigned int intsts = inb(dm_io_mem(DM1105_INTSTS)); 576 unsigned int intsts = dm_readb(DM1105_INTSTS);
559 outb(intsts, dm_io_mem(DM1105_INTSTS)); 577 dm_writeb(DM1105_INTSTS, intsts);
560 578
561 switch (intsts) { 579 switch (intsts) {
562 case INTSTS_TSIRQ: 580 case INTSTS_TSIRQ:
563 case (INTSTS_TSIRQ | INTSTS_IR): 581 case (INTSTS_TSIRQ | INTSTS_IR):
564 dm1105dvb->nextwrp = inl(dm_io_mem(DM1105_WRP)) - 582 dev->nextwrp = dm_readl(DM1105_WRP) - dm_readl(DM1105_STADR);
565 inl(dm_io_mem(DM1105_STADR)); 583 queue_work(dev->wq, &dev->work);
566 queue_work(dm1105dvb->wq, &dm1105dvb->work);
567 break; 584 break;
568 case INTSTS_IR: 585 case INTSTS_IR:
569 dm1105dvb->ir.ir_command = inl(dm_io_mem(DM1105_IRCODE)); 586 dev->ir.ir_command = dm_readl(DM1105_IRCODE);
570 schedule_work(&dm1105dvb->ir.work); 587 schedule_work(&dev->ir.work);
571 break; 588 break;
572 } 589 }
573 590
574 return IRQ_HANDLED; 591 return IRQ_HANDLED;
575} 592}
576 593
577int __devinit dm1105_ir_init(struct dm1105dvb *dm1105) 594int __devinit dm1105_ir_init(struct dm1105_dev *dm1105)
578{ 595{
579 struct input_dev *input_dev; 596 struct input_dev *input_dev;
580 struct ir_scancode_table *ir_codes = &ir_codes_dm1105_nec_table; 597 struct ir_scancode_table *ir_codes = &ir_codes_dm1105_nec_table;
581 int ir_type = IR_TYPE_OTHER; 598 u64 ir_type = IR_TYPE_OTHER;
582 int err = -ENOMEM; 599 int err = -ENOMEM;
583 600
584 input_dev = input_allocate_device(); 601 input_dev = input_allocate_device();
@@ -589,7 +606,12 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)
589 snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys), 606 snprintf(dm1105->ir.input_phys, sizeof(dm1105->ir.input_phys),
590 "pci-%s/ir0", pci_name(dm1105->pdev)); 607 "pci-%s/ir0", pci_name(dm1105->pdev));
591 608
592 ir_input_init(input_dev, &dm1105->ir.ir, ir_type, ir_codes); 609 err = ir_input_init(input_dev, &dm1105->ir.ir, ir_type);
610 if (err < 0) {
611 input_free_device(input_dev);
612 return err;
613 }
614
593 input_dev->name = "DVB on-card IR receiver"; 615 input_dev->name = "DVB on-card IR receiver";
594 input_dev->phys = dm1105->ir.input_phys; 616 input_dev->phys = dm1105->ir.input_phys;
595 input_dev->id.bustype = BUS_PCI; 617 input_dev->id.bustype = BUS_PCI;
@@ -606,56 +628,51 @@ int __devinit dm1105_ir_init(struct dm1105dvb *dm1105)
606 628
607 INIT_WORK(&dm1105->ir.work, dm1105_emit_key); 629 INIT_WORK(&dm1105->ir.work, dm1105_emit_key);
608 630
609 err = input_register_device(input_dev); 631 err = ir_input_register(input_dev, ir_codes, NULL);
610 if (err) {
611 input_free_device(input_dev);
612 return err;
613 }
614 632
615 return 0; 633 return err;
616} 634}
617 635
618void __devexit dm1105_ir_exit(struct dm1105dvb *dm1105) 636void __devexit dm1105_ir_exit(struct dm1105_dev *dm1105)
619{ 637{
620 input_unregister_device(dm1105->ir.input_dev); 638 ir_input_unregister(dm1105->ir.input_dev);
621
622} 639}
623 640
624static int __devinit dm1105dvb_hw_init(struct dm1105dvb *dm1105dvb) 641static int __devinit dm1105_hw_init(struct dm1105_dev *dev)
625{ 642{
626 dm1105dvb_disable_irqs(dm1105dvb); 643 dm1105_disable_irqs(dev);
627 644
628 outb(0, dm_io_mem(DM1105_HOST_CTR)); 645 dm_writeb(DM1105_HOST_CTR, 0);
629 646
630 /*DATALEN 188,*/ 647 /*DATALEN 188,*/
631 outb(188, dm_io_mem(DM1105_DTALENTH)); 648 dm_writeb(DM1105_DTALENTH, 188);
632 /*TS_STRT TS_VALP MSBFIRST TS_MODE ALPAS TSPES*/ 649 /*TS_STRT TS_VALP MSBFIRST TS_MODE ALPAS TSPES*/
633 outw(0xc10a, dm_io_mem(DM1105_TSCTR)); 650 dm_writew(DM1105_TSCTR, 0xc10a);
634 651
635 /* map DMA and set address */ 652 /* map DMA and set address */
636 dm1105dvb_dma_map(dm1105dvb); 653 dm1105_dma_map(dev);
637 dm1105dvb_set_dma_addr(dm1105dvb); 654 dm1105_set_dma_addr(dev);
638 /* big buffer */ 655 /* big buffer */
639 outl(5*DM1105_DMA_BYTES, dm_io_mem(DM1105_RLEN)); 656 dm_writel(DM1105_RLEN, 5 * DM1105_DMA_BYTES);
640 outb(47, dm_io_mem(DM1105_INTCNT)); 657 dm_writeb(DM1105_INTCNT, 47);
641 658
642 /* IR NEC mode enable */ 659 /* IR NEC mode enable */
643 outb((DM1105_IR_EN | DM1105_SYS_CHK), dm_io_mem(DM1105_IRCTR)); 660 dm_writeb(DM1105_IRCTR, (DM1105_IR_EN | DM1105_SYS_CHK));
644 outb(0, dm_io_mem(DM1105_IRMODE)); 661 dm_writeb(DM1105_IRMODE, 0);
645 outw(0, dm_io_mem(DM1105_SYSTEMCODE)); 662 dm_writew(DM1105_SYSTEMCODE, 0);
646 663
647 return 0; 664 return 0;
648} 665}
649 666
650static void dm1105dvb_hw_exit(struct dm1105dvb *dm1105dvb) 667static void dm1105_hw_exit(struct dm1105_dev *dev)
651{ 668{
652 dm1105dvb_disable_irqs(dm1105dvb); 669 dm1105_disable_irqs(dev);
653 670
654 /* IR disable */ 671 /* IR disable */
655 outb(0, dm_io_mem(DM1105_IRCTR)); 672 dm_writeb(DM1105_IRCTR, 0);
656 outb(INTMAK_NONEMASK, dm_io_mem(DM1105_INTMAK)); 673 dm_writeb(DM1105_INTMAK, INTMAK_NONEMASK);
657 674
658 dm1105dvb_dma_unmap(dm1105dvb); 675 dm1105_dma_unmap(dev);
659} 676}
660 677
661static struct stv0299_config sharp_z0194a_config = { 678static struct stv0299_config sharp_z0194a_config = {
@@ -685,70 +702,79 @@ static struct cx24116_config serit_sp2633_config = {
685 .demod_address = 0x55, 702 .demod_address = 0x55,
686}; 703};
687 704
688static int __devinit frontend_init(struct dm1105dvb *dm1105dvb) 705static struct ds3000_config dvbworld_ds3000_config = {
706 .demod_address = 0x68,
707};
708
709static int __devinit frontend_init(struct dm1105_dev *dev)
689{ 710{
690 int ret; 711 int ret;
691 712
692 switch (dm1105dvb->boardnr) { 713 switch (dev->boardnr) {
693 case DM1105_BOARD_DVBWORLD_2004: 714 case DM1105_BOARD_DVBWORLD_2004:
694 dm1105dvb->fe = dvb_attach( 715 dev->fe = dvb_attach(
695 cx24116_attach, &serit_sp2633_config, 716 cx24116_attach, &serit_sp2633_config,
696 &dm1105dvb->i2c_adap); 717 &dev->i2c_adap);
697 if (dm1105dvb->fe) 718 if (dev->fe) {
698 dm1105dvb->fe->ops.set_voltage = dm1105dvb_set_voltage; 719 dev->fe->ops.set_voltage = dm1105_set_voltage;
720 break;
721 }
722
723 dev->fe = dvb_attach(
724 ds3000_attach, &dvbworld_ds3000_config,
725 &dev->i2c_adap);
726 if (dev->fe)
727 dev->fe->ops.set_voltage = dm1105_set_voltage;
699 728
700 break; 729 break;
701 case DM1105_BOARD_DVBWORLD_2002: 730 case DM1105_BOARD_DVBWORLD_2002:
702 case DM1105_BOARD_AXESS_DM05: 731 case DM1105_BOARD_AXESS_DM05:
703 default: 732 default:
704 dm1105dvb->fe = dvb_attach( 733 dev->fe = dvb_attach(
705 stv0299_attach, &sharp_z0194a_config, 734 stv0299_attach, &sharp_z0194a_config,
706 &dm1105dvb->i2c_adap); 735 &dev->i2c_adap);
707 if (dm1105dvb->fe) { 736 if (dev->fe) {
708 dm1105dvb->fe->ops.set_voltage = 737 dev->fe->ops.set_voltage = dm1105_set_voltage;
709 dm1105dvb_set_voltage; 738 dvb_attach(dvb_pll_attach, dev->fe, 0x60,
710 dvb_attach(dvb_pll_attach, dm1105dvb->fe, 0x60, 739 &dev->i2c_adap, DVB_PLL_OPERA1);
711 &dm1105dvb->i2c_adap, DVB_PLL_OPERA1);
712 break; 740 break;
713 } 741 }
714 742
715 dm1105dvb->fe = dvb_attach( 743 dev->fe = dvb_attach(
716 stv0288_attach, &earda_config, 744 stv0288_attach, &earda_config,
717 &dm1105dvb->i2c_adap); 745 &dev->i2c_adap);
718 if (dm1105dvb->fe) { 746 if (dev->fe) {
719 dm1105dvb->fe->ops.set_voltage = 747 dev->fe->ops.set_voltage = dm1105_set_voltage;
720 dm1105dvb_set_voltage; 748 dvb_attach(stb6000_attach, dev->fe, 0x61,
721 dvb_attach(stb6000_attach, dm1105dvb->fe, 0x61, 749 &dev->i2c_adap);
722 &dm1105dvb->i2c_adap);
723 break; 750 break;
724 } 751 }
725 752
726 dm1105dvb->fe = dvb_attach( 753 dev->fe = dvb_attach(
727 si21xx_attach, &serit_config, 754 si21xx_attach, &serit_config,
728 &dm1105dvb->i2c_adap); 755 &dev->i2c_adap);
729 if (dm1105dvb->fe) 756 if (dev->fe)
730 dm1105dvb->fe->ops.set_voltage = 757 dev->fe->ops.set_voltage = dm1105_set_voltage;
731 dm1105dvb_set_voltage;
732 758
733 } 759 }
734 760
735 if (!dm1105dvb->fe) { 761 if (!dev->fe) {
736 dev_err(&dm1105dvb->pdev->dev, "could not attach frontend\n"); 762 dev_err(&dev->pdev->dev, "could not attach frontend\n");
737 return -ENODEV; 763 return -ENODEV;
738 } 764 }
739 765
740 ret = dvb_register_frontend(&dm1105dvb->dvb_adapter, dm1105dvb->fe); 766 ret = dvb_register_frontend(&dev->dvb_adapter, dev->fe);
741 if (ret < 0) { 767 if (ret < 0) {
742 if (dm1105dvb->fe->ops.release) 768 if (dev->fe->ops.release)
743 dm1105dvb->fe->ops.release(dm1105dvb->fe); 769 dev->fe->ops.release(dev->fe);
744 dm1105dvb->fe = NULL; 770 dev->fe = NULL;
745 return ret; 771 return ret;
746 } 772 }
747 773
748 return 0; 774 return 0;
749} 775}
750 776
751static void __devinit dm1105dvb_read_mac(struct dm1105dvb *dm1105dvb, u8 *mac) 777static void __devinit dm1105_read_mac(struct dm1105_dev *dev, u8 *mac)
752{ 778{
753 static u8 command[1] = { 0x28 }; 779 static u8 command[1] = { 0x28 };
754 780
@@ -766,47 +792,47 @@ static void __devinit dm1105dvb_read_mac(struct dm1105dvb *dm1105dvb, u8 *mac)
766 }, 792 },
767 }; 793 };
768 794
769 dm1105_i2c_xfer(&dm1105dvb->i2c_adap, msg , 2); 795 dm1105_i2c_xfer(&dev->i2c_adap, msg , 2);
770 dev_info(&dm1105dvb->pdev->dev, "MAC %pM\n", mac); 796 dev_info(&dev->pdev->dev, "MAC %pM\n", mac);
771} 797}
772 798
773static int __devinit dm1105_probe(struct pci_dev *pdev, 799static int __devinit dm1105_probe(struct pci_dev *pdev,
774 const struct pci_device_id *ent) 800 const struct pci_device_id *ent)
775{ 801{
776 struct dm1105dvb *dm1105dvb; 802 struct dm1105_dev *dev;
777 struct dvb_adapter *dvb_adapter; 803 struct dvb_adapter *dvb_adapter;
778 struct dvb_demux *dvbdemux; 804 struct dvb_demux *dvbdemux;
779 struct dmx_demux *dmx; 805 struct dmx_demux *dmx;
780 int ret = -ENOMEM; 806 int ret = -ENOMEM;
781 int i; 807 int i;
782 808
783 dm1105dvb = kzalloc(sizeof(struct dm1105dvb), GFP_KERNEL); 809 dev = kzalloc(sizeof(struct dm1105_dev), GFP_KERNEL);
784 if (!dm1105dvb) 810 if (!dev)
785 return -ENOMEM; 811 return -ENOMEM;
786 812
787 /* board config */ 813 /* board config */
788 dm1105dvb->nr = dm1105_devcount; 814 dev->nr = dm1105_devcount;
789 dm1105dvb->boardnr = UNSET; 815 dev->boardnr = UNSET;
790 if (card[dm1105dvb->nr] < ARRAY_SIZE(dm1105_boards)) 816 if (card[dev->nr] < ARRAY_SIZE(dm1105_boards))
791 dm1105dvb->boardnr = card[dm1105dvb->nr]; 817 dev->boardnr = card[dev->nr];
792 for (i = 0; UNSET == dm1105dvb->boardnr && 818 for (i = 0; UNSET == dev->boardnr &&
793 i < ARRAY_SIZE(dm1105_subids); i++) 819 i < ARRAY_SIZE(dm1105_subids); i++)
794 if (pdev->subsystem_vendor == 820 if (pdev->subsystem_vendor ==
795 dm1105_subids[i].subvendor && 821 dm1105_subids[i].subvendor &&
796 pdev->subsystem_device == 822 pdev->subsystem_device ==
797 dm1105_subids[i].subdevice) 823 dm1105_subids[i].subdevice)
798 dm1105dvb->boardnr = dm1105_subids[i].card; 824 dev->boardnr = dm1105_subids[i].card;
799 825
800 if (UNSET == dm1105dvb->boardnr) { 826 if (UNSET == dev->boardnr) {
801 dm1105dvb->boardnr = DM1105_BOARD_UNKNOWN; 827 dev->boardnr = DM1105_BOARD_UNKNOWN;
802 dm1105_card_list(pdev); 828 dm1105_card_list(pdev);
803 } 829 }
804 830
805 dm1105_devcount++; 831 dm1105_devcount++;
806 dm1105dvb->pdev = pdev; 832 dev->pdev = pdev;
807 dm1105dvb->buffer_size = 5 * DM1105_DMA_BYTES; 833 dev->buffer_size = 5 * DM1105_DMA_BYTES;
808 dm1105dvb->PacketErrorCount = 0; 834 dev->PacketErrorCount = 0;
809 dm1105dvb->dmarst = 0; 835 dev->dmarst = 0;
810 836
811 ret = pci_enable_device(pdev); 837 ret = pci_enable_device(pdev);
812 if (ret < 0) 838 if (ret < 0)
@@ -822,47 +848,47 @@ static int __devinit dm1105_probe(struct pci_dev *pdev,
822 if (ret < 0) 848 if (ret < 0)
823 goto err_pci_disable_device; 849 goto err_pci_disable_device;
824 850
825 dm1105dvb->io_mem = pci_iomap(pdev, 0, pci_resource_len(pdev, 0)); 851 dev->io_mem = pci_iomap(pdev, 0, pci_resource_len(pdev, 0));
826 if (!dm1105dvb->io_mem) { 852 if (!dev->io_mem) {
827 ret = -EIO; 853 ret = -EIO;
828 goto err_pci_release_regions; 854 goto err_pci_release_regions;
829 } 855 }
830 856
831 spin_lock_init(&dm1105dvb->lock); 857 spin_lock_init(&dev->lock);
832 pci_set_drvdata(pdev, dm1105dvb); 858 pci_set_drvdata(pdev, dev);
833 859
834 ret = dm1105dvb_hw_init(dm1105dvb); 860 ret = dm1105_hw_init(dev);
835 if (ret < 0) 861 if (ret < 0)
836 goto err_pci_iounmap; 862 goto err_pci_iounmap;
837 863
838 /* i2c */ 864 /* i2c */
839 i2c_set_adapdata(&dm1105dvb->i2c_adap, dm1105dvb); 865 i2c_set_adapdata(&dev->i2c_adap, dev);
840 strcpy(dm1105dvb->i2c_adap.name, DRIVER_NAME); 866 strcpy(dev->i2c_adap.name, DRIVER_NAME);
841 dm1105dvb->i2c_adap.owner = THIS_MODULE; 867 dev->i2c_adap.owner = THIS_MODULE;
842 dm1105dvb->i2c_adap.class = I2C_CLASS_TV_DIGITAL; 868 dev->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
843 dm1105dvb->i2c_adap.dev.parent = &pdev->dev; 869 dev->i2c_adap.dev.parent = &pdev->dev;
844 dm1105dvb->i2c_adap.algo = &dm1105_algo; 870 dev->i2c_adap.algo = &dm1105_algo;
845 dm1105dvb->i2c_adap.algo_data = dm1105dvb; 871 dev->i2c_adap.algo_data = dev;
846 ret = i2c_add_adapter(&dm1105dvb->i2c_adap); 872 ret = i2c_add_adapter(&dev->i2c_adap);
847 873
848 if (ret < 0) 874 if (ret < 0)
849 goto err_dm1105dvb_hw_exit; 875 goto err_dm1105_hw_exit;
850 876
851 /* dvb */ 877 /* dvb */
852 ret = dvb_register_adapter(&dm1105dvb->dvb_adapter, DRIVER_NAME, 878 ret = dvb_register_adapter(&dev->dvb_adapter, DRIVER_NAME,
853 THIS_MODULE, &pdev->dev, adapter_nr); 879 THIS_MODULE, &pdev->dev, adapter_nr);
854 if (ret < 0) 880 if (ret < 0)
855 goto err_i2c_del_adapter; 881 goto err_i2c_del_adapter;
856 882
857 dvb_adapter = &dm1105dvb->dvb_adapter; 883 dvb_adapter = &dev->dvb_adapter;
858 884
859 dm1105dvb_read_mac(dm1105dvb, dvb_adapter->proposed_mac); 885 dm1105_read_mac(dev, dvb_adapter->proposed_mac);
860 886
861 dvbdemux = &dm1105dvb->demux; 887 dvbdemux = &dev->demux;
862 dvbdemux->filternum = 256; 888 dvbdemux->filternum = 256;
863 dvbdemux->feednum = 256; 889 dvbdemux->feednum = 256;
864 dvbdemux->start_feed = dm1105dvb_start_feed; 890 dvbdemux->start_feed = dm1105_start_feed;
865 dvbdemux->stop_feed = dm1105dvb_stop_feed; 891 dvbdemux->stop_feed = dm1105_stop_feed;
866 dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | 892 dvbdemux->dmx.capabilities = (DMX_TS_FILTERING |
867 DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING); 893 DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING);
868 ret = dvb_dmx_init(dvbdemux); 894 ret = dvb_dmx_init(dvbdemux);
@@ -870,113 +896,113 @@ static int __devinit dm1105_probe(struct pci_dev *pdev,
870 goto err_dvb_unregister_adapter; 896 goto err_dvb_unregister_adapter;
871 897
872 dmx = &dvbdemux->dmx; 898 dmx = &dvbdemux->dmx;
873 dm1105dvb->dmxdev.filternum = 256; 899 dev->dmxdev.filternum = 256;
874 dm1105dvb->dmxdev.demux = dmx; 900 dev->dmxdev.demux = dmx;
875 dm1105dvb->dmxdev.capabilities = 0; 901 dev->dmxdev.capabilities = 0;
876 902
877 ret = dvb_dmxdev_init(&dm1105dvb->dmxdev, dvb_adapter); 903 ret = dvb_dmxdev_init(&dev->dmxdev, dvb_adapter);
878 if (ret < 0) 904 if (ret < 0)
879 goto err_dvb_dmx_release; 905 goto err_dvb_dmx_release;
880 906
881 dm1105dvb->hw_frontend.source = DMX_FRONTEND_0; 907 dev->hw_frontend.source = DMX_FRONTEND_0;
882 908
883 ret = dmx->add_frontend(dmx, &dm1105dvb->hw_frontend); 909 ret = dmx->add_frontend(dmx, &dev->hw_frontend);
884 if (ret < 0) 910 if (ret < 0)
885 goto err_dvb_dmxdev_release; 911 goto err_dvb_dmxdev_release;
886 912
887 dm1105dvb->mem_frontend.source = DMX_MEMORY_FE; 913 dev->mem_frontend.source = DMX_MEMORY_FE;
888 914
889 ret = dmx->add_frontend(dmx, &dm1105dvb->mem_frontend); 915 ret = dmx->add_frontend(dmx, &dev->mem_frontend);
890 if (ret < 0) 916 if (ret < 0)
891 goto err_remove_hw_frontend; 917 goto err_remove_hw_frontend;
892 918
893 ret = dmx->connect_frontend(dmx, &dm1105dvb->hw_frontend); 919 ret = dmx->connect_frontend(dmx, &dev->hw_frontend);
894 if (ret < 0) 920 if (ret < 0)
895 goto err_remove_mem_frontend; 921 goto err_remove_mem_frontend;
896 922
897 ret = frontend_init(dm1105dvb); 923 ret = frontend_init(dev);
898 if (ret < 0) 924 if (ret < 0)
899 goto err_disconnect_frontend; 925 goto err_disconnect_frontend;
900 926
901 dvb_net_init(dvb_adapter, &dm1105dvb->dvbnet, dmx); 927 dvb_net_init(dvb_adapter, &dev->dvbnet, dmx);
902 dm1105_ir_init(dm1105dvb); 928 dm1105_ir_init(dev);
903 929
904 INIT_WORK(&dm1105dvb->work, dm1105_dmx_buffer); 930 INIT_WORK(&dev->work, dm1105_dmx_buffer);
905 sprintf(dm1105dvb->wqn, "%s/%d", dvb_adapter->name, dvb_adapter->num); 931 sprintf(dev->wqn, "%s/%d", dvb_adapter->name, dvb_adapter->num);
906 dm1105dvb->wq = create_singlethread_workqueue(dm1105dvb->wqn); 932 dev->wq = create_singlethread_workqueue(dev->wqn);
907 if (!dm1105dvb->wq) 933 if (!dev->wq)
908 goto err_dvb_net; 934 goto err_dvb_net;
909 935
910 ret = request_irq(pdev->irq, dm1105dvb_irq, IRQF_SHARED, 936 ret = request_irq(pdev->irq, dm1105_irq, IRQF_SHARED,
911 DRIVER_NAME, dm1105dvb); 937 DRIVER_NAME, dev);
912 if (ret < 0) 938 if (ret < 0)
913 goto err_workqueue; 939 goto err_workqueue;
914 940
915 return 0; 941 return 0;
916 942
917err_workqueue: 943err_workqueue:
918 destroy_workqueue(dm1105dvb->wq); 944 destroy_workqueue(dev->wq);
919err_dvb_net: 945err_dvb_net:
920 dvb_net_release(&dm1105dvb->dvbnet); 946 dvb_net_release(&dev->dvbnet);
921err_disconnect_frontend: 947err_disconnect_frontend:
922 dmx->disconnect_frontend(dmx); 948 dmx->disconnect_frontend(dmx);
923err_remove_mem_frontend: 949err_remove_mem_frontend:
924 dmx->remove_frontend(dmx, &dm1105dvb->mem_frontend); 950 dmx->remove_frontend(dmx, &dev->mem_frontend);
925err_remove_hw_frontend: 951err_remove_hw_frontend:
926 dmx->remove_frontend(dmx, &dm1105dvb->hw_frontend); 952 dmx->remove_frontend(dmx, &dev->hw_frontend);
927err_dvb_dmxdev_release: 953err_dvb_dmxdev_release:
928 dvb_dmxdev_release(&dm1105dvb->dmxdev); 954 dvb_dmxdev_release(&dev->dmxdev);
929err_dvb_dmx_release: 955err_dvb_dmx_release:
930 dvb_dmx_release(dvbdemux); 956 dvb_dmx_release(dvbdemux);
931err_dvb_unregister_adapter: 957err_dvb_unregister_adapter:
932 dvb_unregister_adapter(dvb_adapter); 958 dvb_unregister_adapter(dvb_adapter);
933err_i2c_del_adapter: 959err_i2c_del_adapter:
934 i2c_del_adapter(&dm1105dvb->i2c_adap); 960 i2c_del_adapter(&dev->i2c_adap);
935err_dm1105dvb_hw_exit: 961err_dm1105_hw_exit:
936 dm1105dvb_hw_exit(dm1105dvb); 962 dm1105_hw_exit(dev);
937err_pci_iounmap: 963err_pci_iounmap:
938 pci_iounmap(pdev, dm1105dvb->io_mem); 964 pci_iounmap(pdev, dev->io_mem);
939err_pci_release_regions: 965err_pci_release_regions:
940 pci_release_regions(pdev); 966 pci_release_regions(pdev);
941err_pci_disable_device: 967err_pci_disable_device:
942 pci_disable_device(pdev); 968 pci_disable_device(pdev);
943err_kfree: 969err_kfree:
944 pci_set_drvdata(pdev, NULL); 970 pci_set_drvdata(pdev, NULL);
945 kfree(dm1105dvb); 971 kfree(dev);
946 return ret; 972 return ret;
947} 973}
948 974
949static void __devexit dm1105_remove(struct pci_dev *pdev) 975static void __devexit dm1105_remove(struct pci_dev *pdev)
950{ 976{
951 struct dm1105dvb *dm1105dvb = pci_get_drvdata(pdev); 977 struct dm1105_dev *dev = pci_get_drvdata(pdev);
952 struct dvb_adapter *dvb_adapter = &dm1105dvb->dvb_adapter; 978 struct dvb_adapter *dvb_adapter = &dev->dvb_adapter;
953 struct dvb_demux *dvbdemux = &dm1105dvb->demux; 979 struct dvb_demux *dvbdemux = &dev->demux;
954 struct dmx_demux *dmx = &dvbdemux->dmx; 980 struct dmx_demux *dmx = &dvbdemux->dmx;
955 981
956 dm1105_ir_exit(dm1105dvb); 982 dm1105_ir_exit(dev);
957 dmx->close(dmx); 983 dmx->close(dmx);
958 dvb_net_release(&dm1105dvb->dvbnet); 984 dvb_net_release(&dev->dvbnet);
959 if (dm1105dvb->fe) 985 if (dev->fe)
960 dvb_unregister_frontend(dm1105dvb->fe); 986 dvb_unregister_frontend(dev->fe);
961 987
962 dmx->disconnect_frontend(dmx); 988 dmx->disconnect_frontend(dmx);
963 dmx->remove_frontend(dmx, &dm1105dvb->mem_frontend); 989 dmx->remove_frontend(dmx, &dev->mem_frontend);
964 dmx->remove_frontend(dmx, &dm1105dvb->hw_frontend); 990 dmx->remove_frontend(dmx, &dev->hw_frontend);
965 dvb_dmxdev_release(&dm1105dvb->dmxdev); 991 dvb_dmxdev_release(&dev->dmxdev);
966 dvb_dmx_release(dvbdemux); 992 dvb_dmx_release(dvbdemux);
967 dvb_unregister_adapter(dvb_adapter); 993 dvb_unregister_adapter(dvb_adapter);
968 if (&dm1105dvb->i2c_adap) 994 if (&dev->i2c_adap)
969 i2c_del_adapter(&dm1105dvb->i2c_adap); 995 i2c_del_adapter(&dev->i2c_adap);
970 996
971 dm1105dvb_hw_exit(dm1105dvb); 997 dm1105_hw_exit(dev);
972 synchronize_irq(pdev->irq); 998 synchronize_irq(pdev->irq);
973 free_irq(pdev->irq, dm1105dvb); 999 free_irq(pdev->irq, dev);
974 pci_iounmap(pdev, dm1105dvb->io_mem); 1000 pci_iounmap(pdev, dev->io_mem);
975 pci_release_regions(pdev); 1001 pci_release_regions(pdev);
976 pci_disable_device(pdev); 1002 pci_disable_device(pdev);
977 pci_set_drvdata(pdev, NULL); 1003 pci_set_drvdata(pdev, NULL);
978 dm1105_devcount--; 1004 dm1105_devcount--;
979 kfree(dm1105dvb); 1005 kfree(dev);
980} 1006}
981 1007
982static struct pci_device_id dm1105_id_table[] __devinitdata = { 1008static struct pci_device_id dm1105_id_table[] __devinitdata = {