Lines Matching refs:dev

327 	struct rc_dev		*dev;  member
374 #define dm_io_mem(reg) ((unsigned long)(&dev->io_mem[reg]))
396 static void dm1105_gpio_set(struct dm1105_dev *dev, u32 mask) in dm1105_gpio_set() argument
406 static void dm1105_gpio_clear(struct dm1105_dev *dev, u32 mask) in dm1105_gpio_clear() argument
416 static void dm1105_gpio_andor(struct dm1105_dev *dev, u32 mask, u32 val) in dm1105_gpio_andor() argument
426 static u32 dm1105_gpio_get(struct dm1105_dev *dev, u32 mask) in dm1105_gpio_get() argument
437 static void dm1105_gpio_enable(struct dm1105_dev *dev, u32 mask, int asoutput) in dm1105_gpio_enable() argument
449 static void dm1105_setline(struct dm1105_dev *dev, u32 line, int state) in dm1105_setline() argument
452 dm1105_gpio_enable(dev, line, 0); in dm1105_setline()
454 dm1105_gpio_enable(dev, line, 1); in dm1105_setline()
455 dm1105_gpio_clear(dev, line); in dm1105_setline()
461 struct dm1105_dev *dev = data; in dm1105_setsda() local
463 dm1105_setline(dev, dm1105_boards[dev->boardnr].gpio_sda, state); in dm1105_setsda()
468 struct dm1105_dev *dev = data; in dm1105_setscl() local
470 dm1105_setline(dev, dm1105_boards[dev->boardnr].gpio_scl, state); in dm1105_setscl()
475 struct dm1105_dev *dev = data; in dm1105_getsda() local
477 return dm1105_gpio_get(dev, dm1105_boards[dev->boardnr].gpio_sda) in dm1105_getsda()
483 struct dm1105_dev *dev = data; in dm1105_getscl() local
485 return dm1105_gpio_get(dev, dm1105_boards[dev->boardnr].gpio_scl) in dm1105_getscl()
492 struct dm1105_dev *dev ; in dm1105_i2c_xfer() local
497 dev = i2c_adap->algo_data; in dm1105_i2c_xfer()
596 struct dm1105_dev *dev = frontend_to_dm1105_dev(fe); in dm1105_set_voltage() local
598 dm1105_gpio_enable(dev, dm1105_boards[dev->boardnr].lnb.mask, 1); in dm1105_set_voltage()
600 dm1105_gpio_andor(dev, in dm1105_set_voltage()
601 dm1105_boards[dev->boardnr].lnb.mask, in dm1105_set_voltage()
602 dm1105_boards[dev->boardnr].lnb.v18); in dm1105_set_voltage()
604 dm1105_gpio_andor(dev, in dm1105_set_voltage()
605 dm1105_boards[dev->boardnr].lnb.mask, in dm1105_set_voltage()
606 dm1105_boards[dev->boardnr].lnb.v13); in dm1105_set_voltage()
608 dm1105_gpio_andor(dev, in dm1105_set_voltage()
609 dm1105_boards[dev->boardnr].lnb.mask, in dm1105_set_voltage()
610 dm1105_boards[dev->boardnr].lnb.off); in dm1105_set_voltage()
615 static void dm1105_set_dma_addr(struct dm1105_dev *dev) in dm1105_set_dma_addr() argument
617 dm_writel(DM1105_STADR, (__force u32)cpu_to_le32(dev->dma_addr)); in dm1105_set_dma_addr()
620 static int dm1105_dma_map(struct dm1105_dev *dev) in dm1105_dma_map() argument
622 dev->ts_buf = pci_alloc_consistent(dev->pdev, in dm1105_dma_map()
624 &dev->dma_addr); in dm1105_dma_map()
626 return !dev->ts_buf; in dm1105_dma_map()
629 static void dm1105_dma_unmap(struct dm1105_dev *dev) in dm1105_dma_unmap() argument
631 pci_free_consistent(dev->pdev, in dm1105_dma_unmap()
633 dev->ts_buf, in dm1105_dma_unmap()
634 dev->dma_addr); in dm1105_dma_unmap()
637 static void dm1105_enable_irqs(struct dm1105_dev *dev) in dm1105_enable_irqs() argument
643 static void dm1105_disable_irqs(struct dm1105_dev *dev) in dm1105_disable_irqs() argument
651 struct dm1105_dev *dev = feed_to_dm1105_dev(f); in dm1105_start_feed() local
653 if (dev->full_ts_users++ == 0) in dm1105_start_feed()
654 dm1105_enable_irqs(dev); in dm1105_start_feed()
661 struct dm1105_dev *dev = feed_to_dm1105_dev(f); in dm1105_stop_feed() local
663 if (--dev->full_ts_users == 0) in dm1105_stop_feed()
664 dm1105_disable_irqs(dev); in dm1105_stop_feed()
682 rc_keydown(ir->dev, RC_TYPE_UNKNOWN, data, 0); in dm1105_emit_key()
688 struct dm1105_dev *dev = container_of(work, struct dm1105_dev, work); in dm1105_dmx_buffer() local
690 u32 oldwrp = dev->wrp; in dm1105_dmx_buffer()
691 u32 nextwrp = dev->nextwrp; in dm1105_dmx_buffer()
693 if (!((dev->ts_buf[oldwrp] == 0x47) && in dm1105_dmx_buffer()
694 (dev->ts_buf[oldwrp + 188] == 0x47) && in dm1105_dmx_buffer()
695 (dev->ts_buf[oldwrp + 188 * 2] == 0x47))) { in dm1105_dmx_buffer()
696 dev->PacketErrorCount++; in dm1105_dmx_buffer()
698 if ((dev->PacketErrorCount >= 2) && in dm1105_dmx_buffer()
699 (dev->dmarst == 0)) { in dm1105_dmx_buffer()
701 dev->wrp = 0; in dm1105_dmx_buffer()
702 dev->PacketErrorCount = 0; in dm1105_dmx_buffer()
703 dev->dmarst = 0; in dm1105_dmx_buffer()
709 memcpy(dev->ts_buf + dev->buffer_size, dev->ts_buf, nextwrp); in dm1105_dmx_buffer()
710 nbpackets = ((dev->buffer_size - oldwrp) + nextwrp) / 188; in dm1105_dmx_buffer()
714 dev->wrp = nextwrp; in dm1105_dmx_buffer()
715 dvb_dmx_swfilter_packets(&dev->demux, &dev->ts_buf[oldwrp], nbpackets); in dm1105_dmx_buffer()
720 struct dm1105_dev *dev = dev_id; in dm1105_irq() local
729 dev->nextwrp = dm_readl(DM1105_WRP) - dm_readl(DM1105_STADR); in dm1105_irq()
730 queue_work(dev->wq, &dev->work); in dm1105_irq()
733 dev->ir.ir_command = dm_readl(DM1105_IRCODE); in dm1105_irq()
734 schedule_work(&dev->ir.work); in dm1105_irq()
743 struct rc_dev *dev; in dm1105_ir_init() local
746 dev = rc_allocate_device(); in dm1105_ir_init()
747 if (!dev) in dm1105_ir_init()
753 dev->driver_name = MODULE_NAME; in dm1105_ir_init()
754 dev->map_name = RC_MAP_DM1105_NEC; in dm1105_ir_init()
755 dev->driver_type = RC_DRIVER_SCANCODE; in dm1105_ir_init()
756 dev->input_name = "DVB on-card IR receiver"; in dm1105_ir_init()
757 dev->input_phys = dm1105->ir.input_phys; in dm1105_ir_init()
758 dev->input_id.bustype = BUS_PCI; in dm1105_ir_init()
759 dev->input_id.version = 1; in dm1105_ir_init()
761 dev->input_id.vendor = dm1105->pdev->subsystem_vendor; in dm1105_ir_init()
762 dev->input_id.product = dm1105->pdev->subsystem_device; in dm1105_ir_init()
764 dev->input_id.vendor = dm1105->pdev->vendor; in dm1105_ir_init()
765 dev->input_id.product = dm1105->pdev->device; in dm1105_ir_init()
767 dev->dev.parent = &dm1105->pdev->dev; in dm1105_ir_init()
771 err = rc_register_device(dev); in dm1105_ir_init()
773 rc_free_device(dev); in dm1105_ir_init()
777 dm1105->ir.dev = dev; in dm1105_ir_init()
783 rc_unregister_device(dm1105->ir.dev); in dm1105_ir_exit()
786 static int dm1105_hw_init(struct dm1105_dev *dev) in dm1105_hw_init() argument
788 dm1105_disable_irqs(dev); in dm1105_hw_init()
798 dm1105_dma_map(dev); in dm1105_hw_init()
799 dm1105_set_dma_addr(dev); in dm1105_hw_init()
812 static void dm1105_hw_exit(struct dm1105_dev *dev) in dm1105_hw_exit() argument
814 dm1105_disable_irqs(dev); in dm1105_hw_exit()
820 dm1105_dma_unmap(dev); in dm1105_hw_exit()
859 static int frontend_init(struct dm1105_dev *dev) in frontend_init() argument
863 switch (dev->boardnr) { in frontend_init()
865 dm1105_gpio_enable(dev, GPIO15, 1); in frontend_init()
866 dm1105_gpio_clear(dev, GPIO15); in frontend_init()
868 dm1105_gpio_set(dev, GPIO15); in frontend_init()
870 dev->fe = dvb_attach( in frontend_init()
872 &dev->i2c_bb_adap); in frontend_init()
873 if (dev->fe) { in frontend_init()
874 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
875 dvb_attach(dvb_pll_attach, dev->fe, 0x60, in frontend_init()
876 &dev->i2c_bb_adap, DVB_PLL_OPERA1); in frontend_init()
880 dev->fe = dvb_attach( in frontend_init()
882 &dev->i2c_bb_adap); in frontend_init()
883 if (dev->fe) { in frontend_init()
884 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
885 dvb_attach(stb6000_attach, dev->fe, 0x61, in frontend_init()
886 &dev->i2c_bb_adap); in frontend_init()
890 dev->fe = dvb_attach( in frontend_init()
892 &dev->i2c_bb_adap); in frontend_init()
893 if (dev->fe) in frontend_init()
894 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
897 dev->fe = dvb_attach( in frontend_init()
899 &dev->i2c_adap); in frontend_init()
900 if (dev->fe) { in frontend_init()
901 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
905 dev->fe = dvb_attach( in frontend_init()
907 &dev->i2c_adap); in frontend_init()
908 if (dev->fe) { in frontend_init()
909 dvb_attach(ts2020_attach, dev->fe, in frontend_init()
910 &dvbworld_ts2020_config, &dev->i2c_adap); in frontend_init()
911 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
918 dev->fe = dvb_attach( in frontend_init()
920 &dev->i2c_adap); in frontend_init()
921 if (dev->fe) { in frontend_init()
922 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
923 dvb_attach(dvb_pll_attach, dev->fe, 0x60, in frontend_init()
924 &dev->i2c_adap, DVB_PLL_OPERA1); in frontend_init()
928 dev->fe = dvb_attach( in frontend_init()
930 &dev->i2c_adap); in frontend_init()
931 if (dev->fe) { in frontend_init()
932 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
933 dvb_attach(stb6000_attach, dev->fe, 0x61, in frontend_init()
934 &dev->i2c_adap); in frontend_init()
938 dev->fe = dvb_attach( in frontend_init()
940 &dev->i2c_adap); in frontend_init()
941 if (dev->fe) in frontend_init()
942 dev->fe->ops.set_voltage = dm1105_set_voltage; in frontend_init()
946 if (!dev->fe) { in frontend_init()
947 dev_err(&dev->pdev->dev, "could not attach frontend\n"); in frontend_init()
951 ret = dvb_register_frontend(&dev->dvb_adapter, dev->fe); in frontend_init()
953 if (dev->fe->ops.release) in frontend_init()
954 dev->fe->ops.release(dev->fe); in frontend_init()
955 dev->fe = NULL; in frontend_init()
962 static void dm1105_read_mac(struct dm1105_dev *dev, u8 *mac) in dm1105_read_mac() argument
980 dm1105_i2c_xfer(&dev->i2c_adap, msg , 2); in dm1105_read_mac()
981 dev_info(&dev->pdev->dev, "MAC %pM\n", mac); in dm1105_read_mac()
987 struct dm1105_dev *dev; in dm1105_probe() local
994 dev = kzalloc(sizeof(struct dm1105_dev), GFP_KERNEL); in dm1105_probe()
995 if (!dev) in dm1105_probe()
999 dev->nr = dm1105_devcount; in dm1105_probe()
1000 dev->boardnr = UNSET; in dm1105_probe()
1001 if (card[dev->nr] < ARRAY_SIZE(dm1105_boards)) in dm1105_probe()
1002 dev->boardnr = card[dev->nr]; in dm1105_probe()
1003 for (i = 0; UNSET == dev->boardnr && in dm1105_probe()
1009 dev->boardnr = dm1105_subids[i].card; in dm1105_probe()
1011 if (UNSET == dev->boardnr) { in dm1105_probe()
1012 dev->boardnr = DM1105_BOARD_UNKNOWN; in dm1105_probe()
1017 dev->pdev = pdev; in dm1105_probe()
1018 dev->buffer_size = 5 * DM1105_DMA_BYTES; in dm1105_probe()
1019 dev->PacketErrorCount = 0; in dm1105_probe()
1020 dev->dmarst = 0; in dm1105_probe()
1036 dev->io_mem = pci_iomap(pdev, 0, pci_resource_len(pdev, 0)); in dm1105_probe()
1037 if (!dev->io_mem) { in dm1105_probe()
1042 spin_lock_init(&dev->lock); in dm1105_probe()
1043 pci_set_drvdata(pdev, dev); in dm1105_probe()
1045 ret = dm1105_hw_init(dev); in dm1105_probe()
1050 i2c_set_adapdata(&dev->i2c_adap, dev); in dm1105_probe()
1051 strcpy(dev->i2c_adap.name, DRIVER_NAME); in dm1105_probe()
1052 dev->i2c_adap.owner = THIS_MODULE; in dm1105_probe()
1053 dev->i2c_adap.dev.parent = &pdev->dev; in dm1105_probe()
1054 dev->i2c_adap.algo = &dm1105_algo; in dm1105_probe()
1055 dev->i2c_adap.algo_data = dev; in dm1105_probe()
1056 ret = i2c_add_adapter(&dev->i2c_adap); in dm1105_probe()
1061 i2c_set_adapdata(&dev->i2c_bb_adap, dev); in dm1105_probe()
1062 strcpy(dev->i2c_bb_adap.name, DM1105_I2C_GPIO_NAME); in dm1105_probe()
1063 dev->i2c_bb_adap.owner = THIS_MODULE; in dm1105_probe()
1064 dev->i2c_bb_adap.dev.parent = &pdev->dev; in dm1105_probe()
1065 dev->i2c_bb_adap.algo_data = &dev->i2c_bit; in dm1105_probe()
1066 dev->i2c_bit.data = dev; in dm1105_probe()
1067 dev->i2c_bit.setsda = dm1105_setsda; in dm1105_probe()
1068 dev->i2c_bit.setscl = dm1105_setscl; in dm1105_probe()
1069 dev->i2c_bit.getsda = dm1105_getsda; in dm1105_probe()
1070 dev->i2c_bit.getscl = dm1105_getscl; in dm1105_probe()
1071 dev->i2c_bit.udelay = 10; in dm1105_probe()
1072 dev->i2c_bit.timeout = 10; in dm1105_probe()
1075 dm1105_setsda(dev, 1); in dm1105_probe()
1076 dm1105_setscl(dev, 1); in dm1105_probe()
1078 ret = i2c_bit_add_bus(&dev->i2c_bb_adap); in dm1105_probe()
1083 ret = dvb_register_adapter(&dev->dvb_adapter, DRIVER_NAME, in dm1105_probe()
1084 THIS_MODULE, &pdev->dev, adapter_nr); in dm1105_probe()
1088 dvb_adapter = &dev->dvb_adapter; in dm1105_probe()
1090 dm1105_read_mac(dev, dvb_adapter->proposed_mac); in dm1105_probe()
1092 dvbdemux = &dev->demux; in dm1105_probe()
1104 dev->dmxdev.filternum = 256; in dm1105_probe()
1105 dev->dmxdev.demux = dmx; in dm1105_probe()
1106 dev->dmxdev.capabilities = 0; in dm1105_probe()
1108 ret = dvb_dmxdev_init(&dev->dmxdev, dvb_adapter); in dm1105_probe()
1112 dev->hw_frontend.source = DMX_FRONTEND_0; in dm1105_probe()
1114 ret = dmx->add_frontend(dmx, &dev->hw_frontend); in dm1105_probe()
1118 dev->mem_frontend.source = DMX_MEMORY_FE; in dm1105_probe()
1120 ret = dmx->add_frontend(dmx, &dev->mem_frontend); in dm1105_probe()
1124 ret = dmx->connect_frontend(dmx, &dev->hw_frontend); in dm1105_probe()
1128 ret = dvb_net_init(dvb_adapter, &dev->dvbnet, dmx); in dm1105_probe()
1132 ret = frontend_init(dev); in dm1105_probe()
1136 dm1105_ir_init(dev); in dm1105_probe()
1138 INIT_WORK(&dev->work, dm1105_dmx_buffer); in dm1105_probe()
1139 sprintf(dev->wqn, "%s/%d", dvb_adapter->name, dvb_adapter->num); in dm1105_probe()
1140 dev->wq = create_singlethread_workqueue(dev->wqn); in dm1105_probe()
1141 if (!dev->wq) { in dm1105_probe()
1147 DRIVER_NAME, dev); in dm1105_probe()
1154 destroy_workqueue(dev->wq); in dm1105_probe()
1156 dvb_net_release(&dev->dvbnet); in dm1105_probe()
1160 dmx->remove_frontend(dmx, &dev->mem_frontend); in dm1105_probe()
1162 dmx->remove_frontend(dmx, &dev->hw_frontend); in dm1105_probe()
1164 dvb_dmxdev_release(&dev->dmxdev); in dm1105_probe()
1170 i2c_del_adapter(&dev->i2c_bb_adap); in dm1105_probe()
1172 i2c_del_adapter(&dev->i2c_adap); in dm1105_probe()
1174 dm1105_hw_exit(dev); in dm1105_probe()
1176 pci_iounmap(pdev, dev->io_mem); in dm1105_probe()
1182 kfree(dev); in dm1105_probe()
1188 struct dm1105_dev *dev = pci_get_drvdata(pdev); in dm1105_remove() local
1189 struct dvb_adapter *dvb_adapter = &dev->dvb_adapter; in dm1105_remove()
1190 struct dvb_demux *dvbdemux = &dev->demux; in dm1105_remove()
1193 dm1105_ir_exit(dev); in dm1105_remove()
1195 dvb_net_release(&dev->dvbnet); in dm1105_remove()
1196 if (dev->fe) in dm1105_remove()
1197 dvb_unregister_frontend(dev->fe); in dm1105_remove()
1200 dmx->remove_frontend(dmx, &dev->mem_frontend); in dm1105_remove()
1201 dmx->remove_frontend(dmx, &dev->hw_frontend); in dm1105_remove()
1202 dvb_dmxdev_release(&dev->dmxdev); in dm1105_remove()
1205 i2c_del_adapter(&dev->i2c_adap); in dm1105_remove()
1207 dm1105_hw_exit(dev); in dm1105_remove()
1209 free_irq(pdev->irq, dev); in dm1105_remove()
1210 pci_iounmap(pdev, dev->io_mem); in dm1105_remove()
1214 kfree(dev); in dm1105_remove()