Lines Matching refs:cio2

104 static void cio2_fbpt_exit_dummy(struct cio2_device *cio2)  in cio2_fbpt_exit_dummy()  argument
106 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_exit_dummy()
108 if (cio2->dummy_lop) { in cio2_fbpt_exit_dummy()
109 dma_free_coherent(dev, PAGE_SIZE, cio2->dummy_lop, in cio2_fbpt_exit_dummy()
110 cio2->dummy_lop_bus_addr); in cio2_fbpt_exit_dummy()
111 cio2->dummy_lop = NULL; in cio2_fbpt_exit_dummy()
113 if (cio2->dummy_page) { in cio2_fbpt_exit_dummy()
114 dma_free_coherent(dev, PAGE_SIZE, cio2->dummy_page, in cio2_fbpt_exit_dummy()
115 cio2->dummy_page_bus_addr); in cio2_fbpt_exit_dummy()
116 cio2->dummy_page = NULL; in cio2_fbpt_exit_dummy()
120 static int cio2_fbpt_init_dummy(struct cio2_device *cio2) in cio2_fbpt_init_dummy() argument
122 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_init_dummy()
125 cio2->dummy_page = dma_alloc_coherent(dev, PAGE_SIZE, in cio2_fbpt_init_dummy()
126 &cio2->dummy_page_bus_addr, in cio2_fbpt_init_dummy()
128 cio2->dummy_lop = dma_alloc_coherent(dev, PAGE_SIZE, in cio2_fbpt_init_dummy()
129 &cio2->dummy_lop_bus_addr, in cio2_fbpt_init_dummy()
131 if (!cio2->dummy_page || !cio2->dummy_lop) { in cio2_fbpt_init_dummy()
132 cio2_fbpt_exit_dummy(cio2); in cio2_fbpt_init_dummy()
140 cio2->dummy_lop[i] = PFN_DOWN(cio2->dummy_page_bus_addr); in cio2_fbpt_init_dummy()
145 static void cio2_fbpt_entry_enable(struct cio2_device *cio2, in cio2_fbpt_entry_enable() argument
165 static void cio2_fbpt_entry_init_dummy(struct cio2_device *cio2, in cio2_fbpt_entry_init_dummy() argument
176 entry[i].lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr); in cio2_fbpt_entry_init_dummy()
178 cio2_fbpt_entry_enable(cio2, entry); in cio2_fbpt_entry_init_dummy()
182 static void cio2_fbpt_entry_init_buf(struct cio2_device *cio2, in cio2_fbpt_entry_init_buf() argument
217 entry->lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr); in cio2_fbpt_entry_init_buf()
219 cio2_fbpt_entry_enable(cio2, entry); in cio2_fbpt_entry_init_buf()
222 static int cio2_fbpt_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_fbpt_init() argument
224 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_init()
299 static int cio2_csi2_calc_timing(struct cio2_device *cio2, struct cio2_queue *q, in cio2_csi2_calc_timing() argument
303 struct device *dev = &cio2->pci_dev->dev; in cio2_csi2_calc_timing()
340 static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_hw_init() argument
349 void __iomem *const base = cio2->base; in cio2_hw_init()
361 r = cio2_csi2_calc_timing(cio2, q, &timing, fmt->bpp, lanes); in cio2_hw_init()
502 static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q) in cio2_hw_exit() argument
504 struct device *dev = &cio2->pci_dev->dev; in cio2_hw_exit()
505 void __iomem *const base = cio2->base; in cio2_hw_exit()
532 static void cio2_buffer_done(struct cio2_device *cio2, unsigned int dma_chan) in cio2_buffer_done() argument
534 struct device *dev = &cio2->pci_dev->dev; in cio2_buffer_done()
535 struct cio2_queue *q = cio2->cur_queue; in cio2_buffer_done()
575 cio2_fbpt_entry_init_dummy(cio2, entry); in cio2_buffer_done()
581 static void cio2_queue_event_sof(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_event_sof() argument
650 static void cio2_irq_handle_once(struct cio2_device *cio2, u32 int_status) in cio2_irq_handle_once() argument
652 struct device *dev = &cio2->pci_dev->dev; in cio2_irq_handle_once()
653 void __iomem *const base = cio2->base; in cio2_irq_handle_once()
693 cio2_buffer_done(cio2, d); in cio2_irq_handle_once()
707 cio2_queue_event_sof(cio2, in cio2_irq_handle_once()
708 cio2->cur_queue); in cio2_irq_handle_once()
751 struct cio2_device *cio2 = cio2_ptr; in cio2_irq() local
752 void __iomem *const base = cio2->base; in cio2_irq()
753 struct device *dev = &cio2->pci_dev->dev; in cio2_irq()
763 cio2_irq_handle_once(cio2, int_status); in cio2_irq()
795 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_queue_setup() local
796 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_queue_setup()
816 cio2_fbpt_entry_init_dummy(cio2, &q->fbpt[i * CIO2_MAX_LOPS]); in cio2_vb2_queue_setup()
828 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_init() local
829 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_init()
872 b->lop[i][j] = PFN_DOWN(cio2->dummy_page_bus_addr); in cio2_vb2_buf_init()
883 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_queue() local
884 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_queue()
911 fbpt_rp = (readl(cio2->base + CIO2_REG_CDMARI(CIO2_DMA_CHAN)) in cio2_vb2_buf_queue()
936 cio2_fbpt_entry_init_buf(cio2, b, entry); in cio2_vb2_buf_queue()
958 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_cleanup() local
959 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_cleanup()
974 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_start_streaming() local
975 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_start_streaming()
978 cio2->cur_queue = q; in cio2_vb2_start_streaming()
991 r = cio2_hw_init(cio2, q); in cio2_vb2_start_streaming()
1000 cio2->streaming = true; in cio2_vb2_start_streaming()
1005 cio2_hw_exit(cio2, q); in cio2_vb2_start_streaming()
1019 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_stop_streaming() local
1020 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_stop_streaming()
1025 cio2_hw_exit(cio2, q); in cio2_vb2_stop_streaming()
1026 synchronize_irq(cio2->pci_dev->irq); in cio2_vb2_stop_streaming()
1030 cio2->streaming = false; in cio2_vb2_stop_streaming()
1049 struct cio2_device *cio2 = video_drvdata(file); in cio2_v4l2_querycap() local
1054 "PCI:%s", pci_name(cio2->pci_dev)); in cio2_v4l2_querycap()
1320 struct cio2_device *cio2 = video_get_drvdata(vd); in cio2_video_link_validate() local
1321 struct device *dev = &cio2->pci_dev->dev; in cio2_video_link_validate()
1383 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_bound() local
1387 if (cio2->queue[s_asd->csi2.port].sensor) in cio2_notifier_bound()
1390 q = &cio2->queue[s_asd->csi2.port]; in cio2_notifier_bound()
1394 q->csi_rx_base = cio2->base + CIO2_REG_PIPE_BASE(q->csi2.port); in cio2_notifier_bound()
1404 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_unbind() local
1407 cio2->queue[s_asd->csi2.port].sensor = NULL; in cio2_notifier_unbind()
1413 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_complete() local
1414 struct device *dev = &cio2->pci_dev->dev; in cio2_notifier_complete()
1421 list_for_each_entry(asd, &cio2->notifier.asd_list, asd_list) { in cio2_notifier_complete()
1423 q = &cio2->queue[s_asd->csi2.port]; in cio2_notifier_complete()
1447 return v4l2_device_register_subdev_nodes(&cio2->v4l2_dev); in cio2_notifier_complete()
1456 static int cio2_parse_firmware(struct cio2_device *cio2) in cio2_parse_firmware() argument
1458 struct device *dev = &cio2->pci_dev->dev; in cio2_parse_firmware()
1478 s_asd = v4l2_async_nf_add_fwnode_remote(&cio2->notifier, ep, in cio2_parse_firmware()
1502 cio2->notifier.ops = &cio2_async_ops; in cio2_parse_firmware()
1503 ret = v4l2_async_nf_register(&cio2->v4l2_dev, &cio2->notifier); in cio2_parse_firmware()
1519 static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_init() argument
1524 struct device *dev = &cio2->pci_dev->dev; in cio2_queue_init()
1554 r = cio2_fbpt_init(cio2, q); in cio2_queue_init()
1584 CIO2_ENTITY_NAME " %td", q - cio2->queue); in cio2_queue_init()
1586 v4l2_set_subdevdata(subdev, cio2); in cio2_queue_init()
1587 r = v4l2_device_register_subdev(&cio2->v4l2_dev, subdev); in cio2_queue_init()
1601 vbq->drv_priv = cio2; in cio2_queue_init()
1611 "%s %td", CIO2_NAME, q - cio2->queue); in cio2_queue_init()
1615 vdev->lock = &cio2->lock; in cio2_queue_init()
1616 vdev->v4l2_dev = &cio2->v4l2_dev; in cio2_queue_init()
1619 video_set_drvdata(vdev, cio2); in cio2_queue_init()
1652 static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_exit() argument
1658 cio2_fbpt_exit(q, &cio2->pci_dev->dev); in cio2_queue_exit()
1663 static int cio2_queues_init(struct cio2_device *cio2) in cio2_queues_init() argument
1668 r = cio2_queue_init(cio2, &cio2->queue[i]); in cio2_queues_init()
1677 cio2_queue_exit(cio2, &cio2->queue[i]); in cio2_queues_init()
1682 static void cio2_queues_exit(struct cio2_device *cio2) in cio2_queues_exit() argument
1687 cio2_queue_exit(cio2, &cio2->queue[i]); in cio2_queues_exit()
1713 struct cio2_device *cio2; in cio2_pci_probe() local
1716 cio2 = devm_kzalloc(dev, sizeof(*cio2), GFP_KERNEL); in cio2_pci_probe()
1717 if (!cio2) in cio2_pci_probe()
1719 cio2->pci_dev = pci_dev; in cio2_pci_probe()
1753 cio2->base = pcim_iomap_table(pci_dev)[CIO2_PCI_BAR]; in cio2_pci_probe()
1755 pci_set_drvdata(pci_dev, cio2); in cio2_pci_probe()
1771 r = cio2_fbpt_init_dummy(cio2); in cio2_pci_probe()
1775 mutex_init(&cio2->lock); in cio2_pci_probe()
1777 cio2->media_dev.dev = dev; in cio2_pci_probe()
1778 strscpy(cio2->media_dev.model, CIO2_DEVICE_NAME, in cio2_pci_probe()
1779 sizeof(cio2->media_dev.model)); in cio2_pci_probe()
1780 snprintf(cio2->media_dev.bus_info, sizeof(cio2->media_dev.bus_info), in cio2_pci_probe()
1781 "PCI:%s", pci_name(cio2->pci_dev)); in cio2_pci_probe()
1782 cio2->media_dev.hw_revision = 0; in cio2_pci_probe()
1784 media_device_init(&cio2->media_dev); in cio2_pci_probe()
1785 r = media_device_register(&cio2->media_dev); in cio2_pci_probe()
1789 cio2->v4l2_dev.mdev = &cio2->media_dev; in cio2_pci_probe()
1790 r = v4l2_device_register(dev, &cio2->v4l2_dev); in cio2_pci_probe()
1796 r = cio2_queues_init(cio2); in cio2_pci_probe()
1800 v4l2_async_nf_init(&cio2->notifier); in cio2_pci_probe()
1803 r = cio2_parse_firmware(cio2); in cio2_pci_probe()
1808 CIO2_NAME, cio2); in cio2_pci_probe()
1820 v4l2_async_nf_unregister(&cio2->notifier); in cio2_pci_probe()
1821 v4l2_async_nf_cleanup(&cio2->notifier); in cio2_pci_probe()
1822 cio2_queues_exit(cio2); in cio2_pci_probe()
1824 v4l2_device_unregister(&cio2->v4l2_dev); in cio2_pci_probe()
1826 media_device_unregister(&cio2->media_dev); in cio2_pci_probe()
1827 media_device_cleanup(&cio2->media_dev); in cio2_pci_probe()
1829 mutex_destroy(&cio2->lock); in cio2_pci_probe()
1830 cio2_fbpt_exit_dummy(cio2); in cio2_pci_probe()
1837 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_pci_remove() local
1839 media_device_unregister(&cio2->media_dev); in cio2_pci_remove()
1840 v4l2_async_nf_unregister(&cio2->notifier); in cio2_pci_remove()
1841 v4l2_async_nf_cleanup(&cio2->notifier); in cio2_pci_remove()
1842 cio2_queues_exit(cio2); in cio2_pci_remove()
1843 cio2_fbpt_exit_dummy(cio2); in cio2_pci_remove()
1844 v4l2_device_unregister(&cio2->v4l2_dev); in cio2_pci_remove()
1845 media_device_cleanup(&cio2->media_dev); in cio2_pci_remove()
1846 mutex_destroy(&cio2->lock); in cio2_pci_remove()
1852 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_runtime_suspend() local
1853 void __iomem *const base = cio2->base; in cio2_runtime_suspend()
1870 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_runtime_resume() local
1871 void __iomem *const base = cio2->base; in cio2_runtime_resume()
1934 static void cio2_fbpt_rearrange(struct cio2_device *cio2, struct cio2_queue *q) in cio2_fbpt_rearrange() argument
1961 cio2_fbpt_entry_enable(cio2, q->fbpt + i * CIO2_MAX_LOPS); in cio2_fbpt_rearrange()
1967 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_suspend() local
1968 struct cio2_queue *q = cio2->cur_queue; in cio2_suspend()
1971 if (!cio2->streaming) in cio2_suspend()
1975 cio2_hw_exit(cio2, q); in cio2_suspend()
1984 cio2_fbpt_rearrange(cio2, q); in cio2_suspend()
1993 struct cio2_device *cio2 = dev_get_drvdata(dev); in cio2_resume() local
1994 struct cio2_queue *q = cio2->cur_queue; in cio2_resume()
1998 if (!cio2->streaming) in cio2_resume()
2007 r = cio2_hw_init(cio2, q); in cio2_resume()