Lines Matching refs:dev

263 	struct saa7164_dev *dev = port->dev;  in saa7164_work_enchandler_helper()  local
369 struct saa7164_dev *dev = port->dev; in saa7164_work_enchandler() local
446 struct saa7164_dev *dev = port->dev; in saa7164_work_vbihandler() local
520 struct saa7164_dev *dev = container_of(w, struct saa7164_dev, workcmd); in saa7164_work_cmdhandler() local
523 saa7164_irq_dequeue(dev); in saa7164_work_cmdhandler()
538 struct saa7164_dev *dev = port->dev; in saa7164_irq_vbi() local
563 struct saa7164_dev *dev = port->dev; in saa7164_irq_encoder() local
587 struct saa7164_dev *dev = port->dev; in saa7164_irq_ts() local
625 struct saa7164_dev *dev = dev_id; in saa7164_irq() local
631 if (dev == NULL) { in saa7164_irq()
637 porta = &dev->ports[SAA7164_PORT_TS1]; in saa7164_irq()
638 portb = &dev->ports[SAA7164_PORT_TS2]; in saa7164_irq()
639 portc = &dev->ports[SAA7164_PORT_ENC1]; in saa7164_irq()
640 portd = &dev->ports[SAA7164_PORT_ENC2]; in saa7164_irq()
641 porte = &dev->ports[SAA7164_PORT_VBI1]; in saa7164_irq()
642 portf = &dev->ports[SAA7164_PORT_VBI2]; in saa7164_irq()
653 intstat[i] = saa7164_readl(dev->int_status + (i * 4)); in saa7164_irq()
677 if (intid == dev->intfdesc.bInterruptId) { in saa7164_irq()
679 schedule_work(&dev->workcmd); in saa7164_irq()
721 saa7164_writel(dev->int_ack + (i * 4), intstat[i]); in saa7164_irq()
729 void saa7164_getfirmwarestatus(struct saa7164_dev *dev) in saa7164_getfirmwarestatus() argument
731 struct saa7164_fw_status *s = &dev->fw_status; in saa7164_getfirmwarestatus()
733 dev->fw_status.status = saa7164_readl(SAA_DEVICE_SYSINIT_STATUS); in saa7164_getfirmwarestatus()
734 dev->fw_status.mode = saa7164_readl(SAA_DEVICE_SYSINIT_MODE); in saa7164_getfirmwarestatus()
735 dev->fw_status.spec = saa7164_readl(SAA_DEVICE_SYSINIT_SPEC); in saa7164_getfirmwarestatus()
736 dev->fw_status.inst = saa7164_readl(SAA_DEVICE_SYSINIT_INST); in saa7164_getfirmwarestatus()
737 dev->fw_status.cpuload = saa7164_readl(SAA_DEVICE_SYSINIT_CPULOAD); in saa7164_getfirmwarestatus()
738 dev->fw_status.remainheap = in saa7164_getfirmwarestatus()
750 u32 saa7164_getcurrentfirmwareversion(struct saa7164_dev *dev) in saa7164_getcurrentfirmwareversion() argument
766 void saa7164_dumpregs(struct saa7164_dev *dev, u32 addr) in saa7164_dumpregs() argument
796 static void saa7164_dump_hwdesc(struct saa7164_dev *dev) in saa7164_dump_hwdesc() argument
799 &dev->hwdesc, (u32)sizeof(struct tmComResHWDescr)); in saa7164_dump_hwdesc()
801 dprintk(1, " .bLength = 0x%x\n", dev->hwdesc.bLength); in saa7164_dump_hwdesc()
802 dprintk(1, " .bDescriptorType = 0x%x\n", dev->hwdesc.bDescriptorType); in saa7164_dump_hwdesc()
804 dev->hwdesc.bDescriptorSubtype); in saa7164_dump_hwdesc()
806 dprintk(1, " .bcdSpecVersion = 0x%x\n", dev->hwdesc.bcdSpecVersion); in saa7164_dump_hwdesc()
807 dprintk(1, " .dwClockFrequency = 0x%x\n", dev->hwdesc.dwClockFrequency); in saa7164_dump_hwdesc()
808 dprintk(1, " .dwClockUpdateRes = 0x%x\n", dev->hwdesc.dwClockUpdateRes); in saa7164_dump_hwdesc()
809 dprintk(1, " .bCapabilities = 0x%x\n", dev->hwdesc.bCapabilities); in saa7164_dump_hwdesc()
811 dev->hwdesc.dwDeviceRegistersLocation); in saa7164_dump_hwdesc()
814 dev->hwdesc.dwHostMemoryRegion); in saa7164_dump_hwdesc()
817 dev->hwdesc.dwHostMemoryRegionSize); in saa7164_dump_hwdesc()
820 dev->hwdesc.dwHostHibernatMemRegion); in saa7164_dump_hwdesc()
823 dev->hwdesc.dwHostHibernatMemRegionSize); in saa7164_dump_hwdesc()
826 static void saa7164_dump_intfdesc(struct saa7164_dev *dev) in saa7164_dump_intfdesc() argument
830 &dev->intfdesc, (u32)sizeof(struct tmComResInterfaceDescr)); in saa7164_dump_intfdesc()
832 dprintk(1, " .bLength = 0x%x\n", dev->intfdesc.bLength); in saa7164_dump_intfdesc()
833 dprintk(1, " .bDescriptorType = 0x%x\n", dev->intfdesc.bDescriptorType); in saa7164_dump_intfdesc()
835 dev->intfdesc.bDescriptorSubtype); in saa7164_dump_intfdesc()
837 dprintk(1, " .bFlags = 0x%x\n", dev->intfdesc.bFlags); in saa7164_dump_intfdesc()
838 dprintk(1, " .bInterfaceType = 0x%x\n", dev->intfdesc.bInterfaceType); in saa7164_dump_intfdesc()
839 dprintk(1, " .bInterfaceId = 0x%x\n", dev->intfdesc.bInterfaceId); in saa7164_dump_intfdesc()
840 dprintk(1, " .bBaseInterface = 0x%x\n", dev->intfdesc.bBaseInterface); in saa7164_dump_intfdesc()
841 dprintk(1, " .bInterruptId = 0x%x\n", dev->intfdesc.bInterruptId); in saa7164_dump_intfdesc()
843 dev->intfdesc.bDebugInterruptId); in saa7164_dump_intfdesc()
845 dprintk(1, " .BARLocation = 0x%x\n", dev->intfdesc.BARLocation); in saa7164_dump_intfdesc()
848 static void saa7164_dump_busdesc(struct saa7164_dev *dev) in saa7164_dump_busdesc() argument
851 &dev->busdesc, (u32)sizeof(struct tmComResBusDescr)); in saa7164_dump_busdesc()
853 dprintk(1, " .CommandRing = 0x%016Lx\n", dev->busdesc.CommandRing); in saa7164_dump_busdesc()
854 dprintk(1, " .ResponseRing = 0x%016Lx\n", dev->busdesc.ResponseRing); in saa7164_dump_busdesc()
855 dprintk(1, " .CommandWrite = 0x%x\n", dev->busdesc.CommandWrite); in saa7164_dump_busdesc()
856 dprintk(1, " .CommandRead = 0x%x\n", dev->busdesc.CommandRead); in saa7164_dump_busdesc()
857 dprintk(1, " .ResponseWrite = 0x%x\n", dev->busdesc.ResponseWrite); in saa7164_dump_busdesc()
858 dprintk(1, " .ResponseRead = 0x%x\n", dev->busdesc.ResponseRead); in saa7164_dump_busdesc()
866 static void saa7164_get_descriptors(struct saa7164_dev *dev) in saa7164_get_descriptors() argument
868 memcpy_fromio(&dev->hwdesc, dev->bmmio, sizeof(struct tmComResHWDescr)); in saa7164_get_descriptors()
869 memcpy_fromio(&dev->intfdesc, dev->bmmio + sizeof(struct tmComResHWDescr), in saa7164_get_descriptors()
871 memcpy_fromio(&dev->busdesc, dev->bmmio + dev->intfdesc.BARLocation, in saa7164_get_descriptors()
874 if (dev->hwdesc.bLength != sizeof(struct tmComResHWDescr)) { in saa7164_get_descriptors()
876 printk(KERN_ERR "Need %x got %d\n", dev->hwdesc.bLength, in saa7164_get_descriptors()
879 saa7164_dump_hwdesc(dev); in saa7164_get_descriptors()
881 if (dev->intfdesc.bLength != sizeof(struct tmComResInterfaceDescr)) { in saa7164_get_descriptors()
883 printk(KERN_ERR "Need %x got %d\n", dev->intfdesc.bLength, in saa7164_get_descriptors()
886 saa7164_dump_intfdesc(dev); in saa7164_get_descriptors()
888 saa7164_dump_busdesc(dev); in saa7164_get_descriptors()
891 static int saa7164_pci_quirks(struct saa7164_dev *dev) in saa7164_pci_quirks() argument
896 static int get_resources(struct saa7164_dev *dev) in get_resources() argument
898 if (request_mem_region(pci_resource_start(dev->pci, 0), in get_resources()
899 pci_resource_len(dev->pci, 0), dev->name)) { in get_resources()
901 if (request_mem_region(pci_resource_start(dev->pci, 2), in get_resources()
902 pci_resource_len(dev->pci, 2), dev->name)) in get_resources()
907 dev->name, in get_resources()
908 (u64)pci_resource_start(dev->pci, 0), in get_resources()
909 (u64)pci_resource_start(dev->pci, 2)); in get_resources()
914 static int saa7164_port_init(struct saa7164_dev *dev, int portnr) in saa7164_port_init() argument
921 port = &dev->ports[portnr]; in saa7164_port_init()
923 port->dev = dev; in saa7164_port_init()
964 static int saa7164_dev_setup(struct saa7164_dev *dev) in saa7164_dev_setup() argument
968 mutex_init(&dev->lock); in saa7164_dev_setup()
969 atomic_inc(&dev->refcount); in saa7164_dev_setup()
970 dev->nr = saa7164_devcount++; in saa7164_dev_setup()
972 snprintf(dev->name, sizeof(dev->name), "saa7164[%d]", dev->nr); in saa7164_dev_setup()
975 list_add_tail(&dev->devlist, &saa7164_devlist); in saa7164_dev_setup()
979 dev->board = UNSET; in saa7164_dev_setup()
980 if (card[dev->nr] < saa7164_bcount) in saa7164_dev_setup()
981 dev->board = card[dev->nr]; in saa7164_dev_setup()
983 for (i = 0; UNSET == dev->board && i < saa7164_idcount; i++) in saa7164_dev_setup()
984 if (dev->pci->subsystem_vendor == saa7164_subids[i].subvendor && in saa7164_dev_setup()
985 dev->pci->subsystem_device == in saa7164_dev_setup()
987 dev->board = saa7164_subids[i].card; in saa7164_dev_setup()
989 if (UNSET == dev->board) { in saa7164_dev_setup()
990 dev->board = SAA7164_BOARD_UNKNOWN; in saa7164_dev_setup()
991 saa7164_card_list(dev); in saa7164_dev_setup()
994 dev->pci_bus = dev->pci->bus->number; in saa7164_dev_setup()
995 dev->pci_slot = PCI_SLOT(dev->pci->devfn); in saa7164_dev_setup()
998 dev->i2c_bus[0].dev = dev; in saa7164_dev_setup()
999 dev->i2c_bus[0].nr = 0; in saa7164_dev_setup()
1000 dev->i2c_bus[1].dev = dev; in saa7164_dev_setup()
1001 dev->i2c_bus[1].nr = 1; in saa7164_dev_setup()
1002 dev->i2c_bus[2].dev = dev; in saa7164_dev_setup()
1003 dev->i2c_bus[2].nr = 2; in saa7164_dev_setup()
1006 saa7164_port_init(dev, SAA7164_PORT_TS1); in saa7164_dev_setup()
1007 saa7164_port_init(dev, SAA7164_PORT_TS2); in saa7164_dev_setup()
1008 saa7164_port_init(dev, SAA7164_PORT_ENC1); in saa7164_dev_setup()
1009 saa7164_port_init(dev, SAA7164_PORT_ENC2); in saa7164_dev_setup()
1010 saa7164_port_init(dev, SAA7164_PORT_VBI1); in saa7164_dev_setup()
1011 saa7164_port_init(dev, SAA7164_PORT_VBI2); in saa7164_dev_setup()
1013 if (get_resources(dev) < 0) { in saa7164_dev_setup()
1016 dev->name, dev->pci->subsystem_vendor, in saa7164_dev_setup()
1017 dev->pci->subsystem_device); in saa7164_dev_setup()
1024 dev->lmmio = ioremap(pci_resource_start(dev->pci, 0), in saa7164_dev_setup()
1025 pci_resource_len(dev->pci, 0)); in saa7164_dev_setup()
1027 dev->lmmio2 = ioremap(pci_resource_start(dev->pci, 2), in saa7164_dev_setup()
1028 pci_resource_len(dev->pci, 2)); in saa7164_dev_setup()
1030 dev->bmmio = (u8 __iomem *)dev->lmmio; in saa7164_dev_setup()
1031 dev->bmmio2 = (u8 __iomem *)dev->lmmio2; in saa7164_dev_setup()
1034 dev->int_status = 0x183000 + 0xf80; in saa7164_dev_setup()
1035 dev->int_ack = 0x183000 + 0xf90; in saa7164_dev_setup()
1039 dev->name, dev->pci->subsystem_vendor, in saa7164_dev_setup()
1040 dev->pci->subsystem_device, saa7164_boards[dev->board].name, in saa7164_dev_setup()
1041 dev->board, card[dev->nr] == dev->board ? in saa7164_dev_setup()
1044 saa7164_pci_quirks(dev); in saa7164_dev_setup()
1049 static void saa7164_dev_unregister(struct saa7164_dev *dev) in saa7164_dev_unregister() argument
1053 release_mem_region(pci_resource_start(dev->pci, 0), in saa7164_dev_unregister()
1054 pci_resource_len(dev->pci, 0)); in saa7164_dev_unregister()
1056 release_mem_region(pci_resource_start(dev->pci, 2), in saa7164_dev_unregister()
1057 pci_resource_len(dev->pci, 2)); in saa7164_dev_unregister()
1059 if (!atomic_dec_and_test(&dev->refcount)) in saa7164_dev_unregister()
1062 iounmap(dev->lmmio); in saa7164_dev_unregister()
1063 iounmap(dev->lmmio2); in saa7164_dev_unregister()
1071 struct saa7164_dev *dev; in saa7164_proc_show() local
1080 dev = list_entry(list, struct saa7164_dev, devlist); in saa7164_proc_show()
1081 seq_printf(m, "%s = %p\n", dev->name, dev); in saa7164_proc_show()
1084 b = &dev->bus; in saa7164_proc_show()
1161 struct saa7164_dev *dev = data; in saa7164_thread_function() local
1180 saa7164_api_collect_debug(dev); in saa7164_thread_function()
1184 saa7164_api_get_load_info(dev, &fwinfo); in saa7164_thread_function()
1194 static bool saa7164_enable_msi(struct pci_dev *pci_dev, struct saa7164_dev *dev) in saa7164_enable_msi() argument
1214 dev->name, dev); in saa7164_enable_msi()
1230 struct saa7164_dev *dev; in saa7164_initdev() local
1234 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in saa7164_initdev()
1235 if (NULL == dev) in saa7164_initdev()
1238 err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev); in saa7164_initdev()
1240 dev_err(&pci_dev->dev, "v4l2_device_register failed\n"); in saa7164_initdev()
1245 dev->pci = pci_dev; in saa7164_initdev()
1251 if (saa7164_dev_setup(dev) < 0) { in saa7164_initdev()
1257 dev->pci_rev = pci_dev->revision; in saa7164_initdev()
1258 pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat); in saa7164_initdev()
1260 "latency: %d, mmio: 0x%llx\n", dev->name, in saa7164_initdev()
1261 pci_name(pci_dev), dev->pci_rev, pci_dev->irq, in saa7164_initdev()
1262 dev->pci_lat, in saa7164_initdev()
1269 printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name); in saa7164_initdev()
1274 if (saa7164_enable_msi(pci_dev, dev)) { in saa7164_initdev()
1275 dev->msi = true; in saa7164_initdev()
1281 IRQF_SHARED, dev->name, dev); in saa7164_initdev()
1284 printk(KERN_ERR "%s: can't get IRQ %d\n", dev->name, in saa7164_initdev()
1291 pci_set_drvdata(pci_dev, dev); in saa7164_initdev()
1295 dev->cmds[i].seqno = i; in saa7164_initdev()
1296 dev->cmds[i].inuse = 0; in saa7164_initdev()
1297 mutex_init(&dev->cmds[i].lock); in saa7164_initdev()
1298 init_waitqueue_head(&dev->cmds[i].wait); in saa7164_initdev()
1302 INIT_WORK(&dev->workcmd, saa7164_work_cmdhandler); in saa7164_initdev()
1305 if (dev->board != SAA7164_BOARD_UNKNOWN) { in saa7164_initdev()
1307 err = saa7164_downloadfirmware(dev); in saa7164_initdev()
1315 saa7164_get_descriptors(dev); in saa7164_initdev()
1316 saa7164_dumpregs(dev, 0); in saa7164_initdev()
1317 saa7164_getcurrentfirmwareversion(dev); in saa7164_initdev()
1318 saa7164_getfirmwarestatus(dev); in saa7164_initdev()
1319 err = saa7164_bus_setup(dev); in saa7164_initdev()
1323 saa7164_bus_dump(dev); in saa7164_initdev()
1329 if (saa7164_api_get_fw_version(dev, &version) == SAA_OK) in saa7164_initdev()
1342 saa7164_i2c_register(&dev->i2c_bus[0]); in saa7164_initdev()
1343 saa7164_i2c_register(&dev->i2c_bus[1]); in saa7164_initdev()
1344 saa7164_i2c_register(&dev->i2c_bus[2]); in saa7164_initdev()
1345 saa7164_gpio_setup(dev); in saa7164_initdev()
1346 saa7164_card_setup(dev); in saa7164_initdev()
1354 saa7164_api_enum_subdevs(dev); in saa7164_initdev()
1357 if (saa7164_boards[dev->board].porta == SAA7164_MPEG_DVB) { in saa7164_initdev()
1358 if (saa7164_dvb_register(&dev->ports[SAA7164_PORT_TS1]) < 0) { in saa7164_initdev()
1365 if (saa7164_boards[dev->board].portb == SAA7164_MPEG_DVB) { in saa7164_initdev()
1366 if (saa7164_dvb_register(&dev->ports[SAA7164_PORT_TS2]) < 0) { in saa7164_initdev()
1373 if (saa7164_boards[dev->board].portc == SAA7164_MPEG_ENCODER) { in saa7164_initdev()
1374 if (saa7164_encoder_register(&dev->ports[SAA7164_PORT_ENC1]) < 0) { in saa7164_initdev()
1380 if (saa7164_boards[dev->board].portd == SAA7164_MPEG_ENCODER) { in saa7164_initdev()
1381 if (saa7164_encoder_register(&dev->ports[SAA7164_PORT_ENC2]) < 0) { in saa7164_initdev()
1387 if (saa7164_boards[dev->board].porte == SAA7164_MPEG_VBI) { in saa7164_initdev()
1388 if (saa7164_vbi_register(&dev->ports[SAA7164_PORT_VBI1]) < 0) { in saa7164_initdev()
1394 if (saa7164_boards[dev->board].portf == SAA7164_MPEG_VBI) { in saa7164_initdev()
1395 if (saa7164_vbi_register(&dev->ports[SAA7164_PORT_VBI2]) < 0) { in saa7164_initdev()
1400 saa7164_api_set_debug(dev, fw_debug); in saa7164_initdev()
1403 dev->kthread = kthread_run(saa7164_thread_function, dev, in saa7164_initdev()
1405 if (IS_ERR(dev->kthread)) { in saa7164_initdev()
1406 dev->kthread = NULL; in saa7164_initdev()
1424 saa7164_dev_unregister(dev); in saa7164_initdev()
1426 v4l2_device_unregister(&dev->v4l2_dev); in saa7164_initdev()
1427 kfree(dev); in saa7164_initdev()
1431 static void saa7164_shutdown(struct saa7164_dev *dev) in saa7164_shutdown() argument
1438 struct saa7164_dev *dev = pci_get_drvdata(pci_dev); in saa7164_finidev() local
1440 if (dev->board != SAA7164_BOARD_UNKNOWN) { in saa7164_finidev()
1441 if (fw_debug && dev->kthread) { in saa7164_finidev()
1442 kthread_stop(dev->kthread); in saa7164_finidev()
1443 dev->kthread = NULL; in saa7164_finidev()
1445 if (dev->firmwareloaded) in saa7164_finidev()
1446 saa7164_api_set_debug(dev, 0x00); in saa7164_finidev()
1449 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], in saa7164_finidev()
1450 &dev->ports[SAA7164_PORT_ENC1].irq_interval); in saa7164_finidev()
1451 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], in saa7164_finidev()
1452 &dev->ports[SAA7164_PORT_ENC1].svc_interval); in saa7164_finidev()
1453 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], in saa7164_finidev()
1454 &dev->ports[SAA7164_PORT_ENC1].irq_svc_interval); in saa7164_finidev()
1455 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], in saa7164_finidev()
1456 &dev->ports[SAA7164_PORT_ENC1].read_interval); in saa7164_finidev()
1457 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], in saa7164_finidev()
1458 &dev->ports[SAA7164_PORT_ENC1].poll_interval); in saa7164_finidev()
1459 saa7164_histogram_print(&dev->ports[SAA7164_PORT_VBI1], in saa7164_finidev()
1460 &dev->ports[SAA7164_PORT_VBI1].read_interval); in saa7164_finidev()
1461 saa7164_histogram_print(&dev->ports[SAA7164_PORT_VBI2], in saa7164_finidev()
1462 &dev->ports[SAA7164_PORT_VBI2].poll_interval); in saa7164_finidev()
1464 saa7164_shutdown(dev); in saa7164_finidev()
1466 if (saa7164_boards[dev->board].porta == SAA7164_MPEG_DVB) in saa7164_finidev()
1467 saa7164_dvb_unregister(&dev->ports[SAA7164_PORT_TS1]); in saa7164_finidev()
1469 if (saa7164_boards[dev->board].portb == SAA7164_MPEG_DVB) in saa7164_finidev()
1470 saa7164_dvb_unregister(&dev->ports[SAA7164_PORT_TS2]); in saa7164_finidev()
1472 if (saa7164_boards[dev->board].portc == SAA7164_MPEG_ENCODER) in saa7164_finidev()
1473 saa7164_encoder_unregister(&dev->ports[SAA7164_PORT_ENC1]); in saa7164_finidev()
1475 if (saa7164_boards[dev->board].portd == SAA7164_MPEG_ENCODER) in saa7164_finidev()
1476 saa7164_encoder_unregister(&dev->ports[SAA7164_PORT_ENC2]); in saa7164_finidev()
1478 if (saa7164_boards[dev->board].porte == SAA7164_MPEG_VBI) in saa7164_finidev()
1479 saa7164_vbi_unregister(&dev->ports[SAA7164_PORT_VBI1]); in saa7164_finidev()
1481 if (saa7164_boards[dev->board].portf == SAA7164_MPEG_VBI) in saa7164_finidev()
1482 saa7164_vbi_unregister(&dev->ports[SAA7164_PORT_VBI2]); in saa7164_finidev()
1484 saa7164_i2c_unregister(&dev->i2c_bus[0]); in saa7164_finidev()
1485 saa7164_i2c_unregister(&dev->i2c_bus[1]); in saa7164_finidev()
1486 saa7164_i2c_unregister(&dev->i2c_bus[2]); in saa7164_finidev()
1489 free_irq(pci_dev->irq, dev); in saa7164_finidev()
1491 if (dev->msi) { in saa7164_finidev()
1493 dev->msi = false; in saa7164_finidev()
1499 list_del(&dev->devlist); in saa7164_finidev()
1502 saa7164_dev_unregister(dev); in saa7164_finidev()
1503 v4l2_device_unregister(&dev->v4l2_dev); in saa7164_finidev()
1504 kfree(dev); in saa7164_finidev()