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");