pluto2.c (818b930bc15077fc00ff16bb22c5df1857f05afa) | pluto2.c (4c62e9764ab403d42f9b8871b1241fe7812f19d4) |
---|---|
1/* 2 * pluto2.c - Satelco Easywatch Mobile Terrestrial Receiver [DVB-T] 3 * 4 * Copyright (C) 2005 Andreas Oberritter <obi@linuxtv.org> 5 * 6 * based on pluto2.c 1.10 - http://instinct-wp8.no-ip.org/pluto/ 7 * by Dany Salman <salmandany@yahoo.fr> 8 * Copyright (c) 2004 TDF --- 226 unchanged lines hidden (view full) --- 235 } 236} 237 238static void pluto_set_dma_addr(struct pluto *pluto) 239{ 240 pluto_writereg(pluto, REG_PCAR, pluto->dma_addr); 241} 242 | 1/* 2 * pluto2.c - Satelco Easywatch Mobile Terrestrial Receiver [DVB-T] 3 * 4 * Copyright (C) 2005 Andreas Oberritter <obi@linuxtv.org> 5 * 6 * based on pluto2.c 1.10 - http://instinct-wp8.no-ip.org/pluto/ 7 * by Dany Salman <salmandany@yahoo.fr> 8 * Copyright (c) 2004 TDF --- 226 unchanged lines hidden (view full) --- 235 } 236} 237 238static void pluto_set_dma_addr(struct pluto *pluto) 239{ 240 pluto_writereg(pluto, REG_PCAR, pluto->dma_addr); 241} 242 |
243static int __devinit pluto_dma_map(struct pluto *pluto) | 243static int pluto_dma_map(struct pluto *pluto) |
244{ 245 pluto->dma_addr = pci_map_single(pluto->pdev, pluto->dma_buf, 246 TS_DMA_BYTES, PCI_DMA_FROMDEVICE); 247 248 return pci_dma_mapping_error(pluto->pdev, pluto->dma_addr); 249} 250 251static void pluto_dma_unmap(struct pluto *pluto) --- 111 unchanged lines hidden (view full) --- 363 } 364 365 /* ACK the interrupt */ 366 pluto_write_tscr(pluto, tscr | TSCR_IACK); 367 368 return IRQ_HANDLED; 369} 370 | 244{ 245 pluto->dma_addr = pci_map_single(pluto->pdev, pluto->dma_buf, 246 TS_DMA_BYTES, PCI_DMA_FROMDEVICE); 247 248 return pci_dma_mapping_error(pluto->pdev, pluto->dma_addr); 249} 250 251static void pluto_dma_unmap(struct pluto *pluto) --- 111 unchanged lines hidden (view full) --- 363 } 364 365 /* ACK the interrupt */ 366 pluto_write_tscr(pluto, tscr | TSCR_IACK); 367 368 return IRQ_HANDLED; 369} 370 |
371static void __devinit pluto_enable_irqs(struct pluto *pluto) | 371static void pluto_enable_irqs(struct pluto *pluto) |
372{ 373 u32 val = pluto_readreg(pluto, REG_TSCR); 374 375 /* disable AFUL and LOCK interrupts */ 376 val |= (TSCR_MSKA | TSCR_MSKL); 377 /* enable DMA and OVERFLOW interrupts */ 378 val &= ~(TSCR_DEM | TSCR_MSKO); 379 /* clear pending interrupts */ --- 9 unchanged lines hidden (view full) --- 389 /* disable all interrupts */ 390 val |= (TSCR_DEM | TSCR_MSKO | TSCR_MSKA | TSCR_MSKL); 391 /* clear pending interrupts */ 392 val |= TSCR_IACK; 393 394 pluto_write_tscr(pluto, val); 395} 396 | 372{ 373 u32 val = pluto_readreg(pluto, REG_TSCR); 374 375 /* disable AFUL and LOCK interrupts */ 376 val |= (TSCR_MSKA | TSCR_MSKL); 377 /* enable DMA and OVERFLOW interrupts */ 378 val &= ~(TSCR_DEM | TSCR_MSKO); 379 /* clear pending interrupts */ --- 9 unchanged lines hidden (view full) --- 389 /* disable all interrupts */ 390 val |= (TSCR_DEM | TSCR_MSKO | TSCR_MSKA | TSCR_MSKL); 391 /* clear pending interrupts */ 392 val |= TSCR_IACK; 393 394 pluto_write_tscr(pluto, val); 395} 396 |
397static int __devinit pluto_hw_init(struct pluto *pluto) | 397static int pluto_hw_init(struct pluto *pluto) |
398{ 399 pluto_reset_frontend(pluto, 1); 400 401 /* set automatic LED control by FPGA */ 402 pluto_rw(pluto, REG_MISC, MISC_ALED, MISC_ALED); 403 404 /* set data endianess */ 405#ifdef __LITTLE_ENDIAN --- 94 unchanged lines hidden (view full) --- 500static int pluto2_request_firmware(struct dvb_frontend *fe, 501 const struct firmware **fw, char *name) 502{ 503 struct pluto *pluto = frontend_to_pluto(fe); 504 505 return request_firmware(fw, name, &pluto->pdev->dev); 506} 507 | 398{ 399 pluto_reset_frontend(pluto, 1); 400 401 /* set automatic LED control by FPGA */ 402 pluto_rw(pluto, REG_MISC, MISC_ALED, MISC_ALED); 403 404 /* set data endianess */ 405#ifdef __LITTLE_ENDIAN --- 94 unchanged lines hidden (view full) --- 500static int pluto2_request_firmware(struct dvb_frontend *fe, 501 const struct firmware **fw, char *name) 502{ 503 struct pluto *pluto = frontend_to_pluto(fe); 504 505 return request_firmware(fw, name, &pluto->pdev->dev); 506} 507 |
508static struct tda1004x_config pluto2_fe_config __devinitdata = { | 508static struct tda1004x_config pluto2_fe_config = { |
509 .demod_address = I2C_ADDR_TDA10046 >> 1, 510 .invert = 1, 511 .invert_oclk = 0, 512 .xtal_freq = TDA10046_XTAL_16M, 513 .agc_config = TDA10046_AGC_DEFAULT, 514 .if_freq = TDA10046_FREQ_3617, 515 .request_firmware = pluto2_request_firmware, 516}; 517 | 509 .demod_address = I2C_ADDR_TDA10046 >> 1, 510 .invert = 1, 511 .invert_oclk = 0, 512 .xtal_freq = TDA10046_XTAL_16M, 513 .agc_config = TDA10046_AGC_DEFAULT, 514 .if_freq = TDA10046_FREQ_3617, 515 .request_firmware = pluto2_request_firmware, 516}; 517 |
518static int __devinit frontend_init(struct pluto *pluto) | 518static int frontend_init(struct pluto *pluto) |
519{ 520 int ret; 521 522 pluto->fe = tda10046_attach(&pluto2_fe_config, &pluto->i2c_adap); 523 if (!pluto->fe) { 524 dev_err(&pluto->pdev->dev, "could not attach frontend\n"); 525 return -ENODEV; 526 } --- 4 unchanged lines hidden (view full) --- 531 if (pluto->fe->ops.release) 532 pluto->fe->ops.release(pluto->fe); 533 return ret; 534 } 535 536 return 0; 537} 538 | 519{ 520 int ret; 521 522 pluto->fe = tda10046_attach(&pluto2_fe_config, &pluto->i2c_adap); 523 if (!pluto->fe) { 524 dev_err(&pluto->pdev->dev, "could not attach frontend\n"); 525 return -ENODEV; 526 } --- 4 unchanged lines hidden (view full) --- 531 if (pluto->fe->ops.release) 532 pluto->fe->ops.release(pluto->fe); 533 return ret; 534 } 535 536 return 0; 537} 538 |
539static void __devinit pluto_read_rev(struct pluto *pluto) | 539static void pluto_read_rev(struct pluto *pluto) |
540{ 541 u32 val = pluto_readreg(pluto, REG_MISC) & MISC_DVR; 542 dev_info(&pluto->pdev->dev, "board revision %d.%d\n", 543 (val >> 12) & 0x0f, (val >> 4) & 0xff); 544} 545 | 540{ 541 u32 val = pluto_readreg(pluto, REG_MISC) & MISC_DVR; 542 dev_info(&pluto->pdev->dev, "board revision %d.%d\n", 543 (val >> 12) & 0x0f, (val >> 4) & 0xff); 544} 545 |
546static void __devinit pluto_read_mac(struct pluto *pluto, u8 *mac) | 546static void pluto_read_mac(struct pluto *pluto, u8 *mac) |
547{ 548 u32 val = pluto_readreg(pluto, REG_MMAC); 549 mac[0] = (val >> 8) & 0xff; 550 mac[1] = (val >> 0) & 0xff; 551 552 val = pluto_readreg(pluto, REG_IMAC); 553 mac[2] = (val >> 8) & 0xff; 554 mac[3] = (val >> 0) & 0xff; 555 556 val = pluto_readreg(pluto, REG_LMAC); 557 mac[4] = (val >> 8) & 0xff; 558 mac[5] = (val >> 0) & 0xff; 559 560 dev_info(&pluto->pdev->dev, "MAC %pM\n", mac); 561} 562 | 547{ 548 u32 val = pluto_readreg(pluto, REG_MMAC); 549 mac[0] = (val >> 8) & 0xff; 550 mac[1] = (val >> 0) & 0xff; 551 552 val = pluto_readreg(pluto, REG_IMAC); 553 mac[2] = (val >> 8) & 0xff; 554 mac[3] = (val >> 0) & 0xff; 555 556 val = pluto_readreg(pluto, REG_LMAC); 557 mac[4] = (val >> 8) & 0xff; 558 mac[5] = (val >> 0) & 0xff; 559 560 dev_info(&pluto->pdev->dev, "MAC %pM\n", mac); 561} 562 |
563static int __devinit pluto_read_serial(struct pluto *pluto) | 563static int pluto_read_serial(struct pluto *pluto) |
564{ 565 struct pci_dev *pdev = pluto->pdev; 566 unsigned int i, j; 567 u8 __iomem *cis; 568 569 cis = pci_iomap(pdev, 1, 0); 570 if (!cis) 571 return -EIO; --- 11 unchanged lines hidden (view full) --- 583 } 584out: 585 printk("\n"); 586 pci_iounmap(pdev, cis); 587 588 return 0; 589} 590 | 564{ 565 struct pci_dev *pdev = pluto->pdev; 566 unsigned int i, j; 567 u8 __iomem *cis; 568 569 cis = pci_iomap(pdev, 1, 0); 570 if (!cis) 571 return -EIO; --- 11 unchanged lines hidden (view full) --- 583 } 584out: 585 printk("\n"); 586 pci_iounmap(pdev, cis); 587 588 return 0; 589} 590 |
591static int __devinit pluto2_probe(struct pci_dev *pdev, 592 const struct pci_device_id *ent) | 591static int pluto2_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
593{ 594 struct pluto *pluto; 595 struct dvb_adapter *dvb_adapter; 596 struct dvb_demux *dvbdemux; 597 struct dmx_demux *dmx; 598 int ret = -ENOMEM; 599 600 pluto = kzalloc(sizeof(struct pluto), GFP_KERNEL); --- 136 unchanged lines hidden (view full) --- 737err_pci_disable_device: 738 pci_disable_device(pdev); 739err_kfree: 740 pci_set_drvdata(pdev, NULL); 741 kfree(pluto); 742 goto out; 743} 744 | 592{ 593 struct pluto *pluto; 594 struct dvb_adapter *dvb_adapter; 595 struct dvb_demux *dvbdemux; 596 struct dmx_demux *dmx; 597 int ret = -ENOMEM; 598 599 pluto = kzalloc(sizeof(struct pluto), GFP_KERNEL); --- 136 unchanged lines hidden (view full) --- 736err_pci_disable_device: 737 pci_disable_device(pdev); 738err_kfree: 739 pci_set_drvdata(pdev, NULL); 740 kfree(pluto); 741 goto out; 742} 743 |
745static void __devexit pluto2_remove(struct pci_dev *pdev) | 744static void pluto2_remove(struct pci_dev *pdev) |
746{ 747 struct pluto *pluto = pci_get_drvdata(pdev); 748 struct dvb_adapter *dvb_adapter = &pluto->dvb_adapter; 749 struct dvb_demux *dvbdemux = &pluto->demux; 750 struct dmx_demux *dmx = &dvbdemux->dmx; 751 752 dmx->close(dmx); 753 dvb_net_release(&pluto->dvbnet); --- 18 unchanged lines hidden (view full) --- 772 773#ifndef PCI_VENDOR_ID_SCM 774#define PCI_VENDOR_ID_SCM 0x0432 775#endif 776#ifndef PCI_DEVICE_ID_PLUTO2 777#define PCI_DEVICE_ID_PLUTO2 0x0001 778#endif 779 | 745{ 746 struct pluto *pluto = pci_get_drvdata(pdev); 747 struct dvb_adapter *dvb_adapter = &pluto->dvb_adapter; 748 struct dvb_demux *dvbdemux = &pluto->demux; 749 struct dmx_demux *dmx = &dvbdemux->dmx; 750 751 dmx->close(dmx); 752 dvb_net_release(&pluto->dvbnet); --- 18 unchanged lines hidden (view full) --- 771 772#ifndef PCI_VENDOR_ID_SCM 773#define PCI_VENDOR_ID_SCM 0x0432 774#endif 775#ifndef PCI_DEVICE_ID_PLUTO2 776#define PCI_DEVICE_ID_PLUTO2 0x0001 777#endif 778 |
780static struct pci_device_id pluto2_id_table[] __devinitdata = { | 779static struct pci_device_id pluto2_id_table[] = { |
781 { 782 .vendor = PCI_VENDOR_ID_SCM, 783 .device = PCI_DEVICE_ID_PLUTO2, 784 .subvendor = PCI_ANY_ID, 785 .subdevice = PCI_ANY_ID, 786 }, { 787 /* empty */ 788 }, 789}; 790 791MODULE_DEVICE_TABLE(pci, pluto2_id_table); 792 793static struct pci_driver pluto2_driver = { 794 .name = DRIVER_NAME, 795 .id_table = pluto2_id_table, 796 .probe = pluto2_probe, | 780 { 781 .vendor = PCI_VENDOR_ID_SCM, 782 .device = PCI_DEVICE_ID_PLUTO2, 783 .subvendor = PCI_ANY_ID, 784 .subdevice = PCI_ANY_ID, 785 }, { 786 /* empty */ 787 }, 788}; 789 790MODULE_DEVICE_TABLE(pci, pluto2_id_table); 791 792static struct pci_driver pluto2_driver = { 793 .name = DRIVER_NAME, 794 .id_table = pluto2_id_table, 795 .probe = pluto2_probe, |
797 .remove = __devexit_p(pluto2_remove), | 796 .remove = pluto2_remove, |
798}; 799 800static int __init pluto2_init(void) 801{ 802 return pci_register_driver(&pluto2_driver); 803} 804 805static void __exit pluto2_exit(void) 806{ 807 pci_unregister_driver(&pluto2_driver); 808} 809 810module_init(pluto2_init); 811module_exit(pluto2_exit); 812 813MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>"); 814MODULE_DESCRIPTION("Pluto2 driver"); 815MODULE_LICENSE("GPL"); | 797}; 798 799static int __init pluto2_init(void) 800{ 801 return pci_register_driver(&pluto2_driver); 802} 803 804static void __exit pluto2_exit(void) 805{ 806 pci_unregister_driver(&pluto2_driver); 807} 808 809module_init(pluto2_init); 810module_exit(pluto2_exit); 811 812MODULE_AUTHOR("Andreas Oberritter <obi@linuxtv.org>"); 813MODULE_DESCRIPTION("Pluto2 driver"); 814MODULE_LICENSE("GPL"); |