Lines Matching refs:cio2
109 static void cio2_fbpt_exit_dummy(struct cio2_device *cio2) in cio2_fbpt_exit_dummy() argument
111 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_exit_dummy()
113 if (cio2->dummy_lop) { in cio2_fbpt_exit_dummy()
114 dma_free_coherent(dev, PAGE_SIZE, cio2->dummy_lop, in cio2_fbpt_exit_dummy()
115 cio2->dummy_lop_bus_addr); in cio2_fbpt_exit_dummy()
116 cio2->dummy_lop = NULL; in cio2_fbpt_exit_dummy()
118 if (cio2->dummy_page) { in cio2_fbpt_exit_dummy()
119 dma_free_coherent(dev, PAGE_SIZE, cio2->dummy_page, in cio2_fbpt_exit_dummy()
120 cio2->dummy_page_bus_addr); in cio2_fbpt_exit_dummy()
121 cio2->dummy_page = NULL; in cio2_fbpt_exit_dummy()
125 static int cio2_fbpt_init_dummy(struct cio2_device *cio2) in cio2_fbpt_init_dummy() argument
127 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_init_dummy()
130 cio2->dummy_page = dma_alloc_coherent(dev, PAGE_SIZE, in cio2_fbpt_init_dummy()
131 &cio2->dummy_page_bus_addr, in cio2_fbpt_init_dummy()
133 cio2->dummy_lop = dma_alloc_coherent(dev, PAGE_SIZE, in cio2_fbpt_init_dummy()
134 &cio2->dummy_lop_bus_addr, in cio2_fbpt_init_dummy()
136 if (!cio2->dummy_page || !cio2->dummy_lop) { in cio2_fbpt_init_dummy()
137 cio2_fbpt_exit_dummy(cio2); in cio2_fbpt_init_dummy()
145 cio2->dummy_lop[i] = PFN_DOWN(cio2->dummy_page_bus_addr); in cio2_fbpt_init_dummy()
150 static void cio2_fbpt_entry_enable(struct cio2_device *cio2, in cio2_fbpt_entry_enable() argument
170 static void cio2_fbpt_entry_init_dummy(struct cio2_device *cio2, in cio2_fbpt_entry_init_dummy() argument
181 entry[i].lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr); in cio2_fbpt_entry_init_dummy()
183 cio2_fbpt_entry_enable(cio2, entry); in cio2_fbpt_entry_init_dummy()
187 static void cio2_fbpt_entry_init_buf(struct cio2_device *cio2, in cio2_fbpt_entry_init_buf() argument
222 entry->lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr); in cio2_fbpt_entry_init_buf()
224 cio2_fbpt_entry_enable(cio2, entry); in cio2_fbpt_entry_init_buf()
227 static int cio2_fbpt_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_fbpt_init() argument
229 struct device *dev = &cio2->pci_dev->dev; in cio2_fbpt_init()
304 static int cio2_csi2_calc_timing(struct cio2_device *cio2, struct cio2_queue *q, in cio2_csi2_calc_timing() argument
308 struct device *dev = &cio2->pci_dev->dev; in cio2_csi2_calc_timing()
345 static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_hw_init() argument
354 void __iomem *const base = cio2->base; in cio2_hw_init()
366 r = cio2_csi2_calc_timing(cio2, q, &timing, fmt->bpp, lanes); in cio2_hw_init()
507 static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q) in cio2_hw_exit() argument
509 struct device *dev = &cio2->pci_dev->dev; in cio2_hw_exit()
510 void __iomem *const base = cio2->base; in cio2_hw_exit()
537 static void cio2_buffer_done(struct cio2_device *cio2, unsigned int dma_chan) in cio2_buffer_done() argument
539 struct device *dev = &cio2->pci_dev->dev; in cio2_buffer_done()
540 struct cio2_queue *q = cio2->cur_queue; in cio2_buffer_done()
580 cio2_fbpt_entry_init_dummy(cio2, entry); in cio2_buffer_done()
586 static void cio2_queue_event_sof(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_event_sof() argument
655 static void cio2_irq_handle_once(struct cio2_device *cio2, u32 int_status) in cio2_irq_handle_once() argument
657 struct device *dev = &cio2->pci_dev->dev; in cio2_irq_handle_once()
658 void __iomem *const base = cio2->base; in cio2_irq_handle_once()
698 cio2_buffer_done(cio2, d); in cio2_irq_handle_once()
712 cio2_queue_event_sof(cio2, in cio2_irq_handle_once()
713 cio2->cur_queue); in cio2_irq_handle_once()
756 struct cio2_device *cio2 = cio2_ptr; in cio2_irq() local
757 void __iomem *const base = cio2->base; in cio2_irq()
758 struct device *dev = &cio2->pci_dev->dev; in cio2_irq()
768 cio2_irq_handle_once(cio2, int_status); in cio2_irq()
800 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_queue_setup() local
801 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_queue_setup()
821 cio2_fbpt_entry_init_dummy(cio2, &q->fbpt[i * CIO2_MAX_LOPS]); in cio2_vb2_queue_setup()
833 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_init() local
834 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_init()
877 b->lop[i][j] = PFN_DOWN(cio2->dummy_page_bus_addr); in cio2_vb2_buf_init()
888 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_queue() local
889 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_queue()
916 fbpt_rp = (readl(cio2->base + CIO2_REG_CDMARI(CIO2_DMA_CHAN)) in cio2_vb2_buf_queue()
941 cio2_fbpt_entry_init_buf(cio2, b, entry); in cio2_vb2_buf_queue()
963 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue); in cio2_vb2_buf_cleanup() local
964 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_buf_cleanup()
979 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_start_streaming() local
980 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_start_streaming()
983 cio2->cur_queue = q; in cio2_vb2_start_streaming()
996 r = cio2_hw_init(cio2, q); in cio2_vb2_start_streaming()
1005 cio2->streaming = true; in cio2_vb2_start_streaming()
1010 cio2_hw_exit(cio2, q); in cio2_vb2_start_streaming()
1024 struct cio2_device *cio2 = vb2_get_drv_priv(vq); in cio2_vb2_stop_streaming() local
1025 struct device *dev = &cio2->pci_dev->dev; in cio2_vb2_stop_streaming()
1030 cio2_hw_exit(cio2, q); in cio2_vb2_stop_streaming()
1031 synchronize_irq(cio2->pci_dev->irq); in cio2_vb2_stop_streaming()
1035 cio2->streaming = false; in cio2_vb2_stop_streaming()
1321 struct cio2_device *cio2 = video_get_drvdata(vd); in cio2_video_link_validate() local
1322 struct device *dev = &cio2->pci_dev->dev; in cio2_video_link_validate()
1384 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_bound() local
1388 if (cio2->queue[s_asd->csi2.port].sensor) in cio2_notifier_bound()
1391 q = &cio2->queue[s_asd->csi2.port]; in cio2_notifier_bound()
1395 q->csi_rx_base = cio2->base + CIO2_REG_PIPE_BASE(q->csi2.port); in cio2_notifier_bound()
1405 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_unbind() local
1408 cio2->queue[s_asd->csi2.port].sensor = NULL; in cio2_notifier_unbind()
1414 struct cio2_device *cio2 = to_cio2_device(notifier); in cio2_notifier_complete() local
1415 struct device *dev = &cio2->pci_dev->dev; in cio2_notifier_complete()
1422 list_for_each_entry(asd, &cio2->notifier.asd_list, asd_list) { in cio2_notifier_complete()
1424 q = &cio2->queue[s_asd->csi2.port]; in cio2_notifier_complete()
1448 return v4l2_device_register_subdev_nodes(&cio2->v4l2_dev); in cio2_notifier_complete()
1457 static int cio2_parse_firmware(struct cio2_device *cio2) in cio2_parse_firmware() argument
1459 struct device *dev = &cio2->pci_dev->dev; in cio2_parse_firmware()
1479 s_asd = v4l2_async_nf_add_fwnode_remote(&cio2->notifier, ep, in cio2_parse_firmware()
1503 cio2->notifier.ops = &cio2_async_ops; in cio2_parse_firmware()
1504 ret = v4l2_async_nf_register(&cio2->v4l2_dev, &cio2->notifier); in cio2_parse_firmware()
1520 static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_init() argument
1525 struct device *dev = &cio2->pci_dev->dev; in cio2_queue_init()
1555 r = cio2_fbpt_init(cio2, q); in cio2_queue_init()
1585 CIO2_ENTITY_NAME " %td", q - cio2->queue); in cio2_queue_init()
1587 v4l2_set_subdevdata(subdev, cio2); in cio2_queue_init()
1588 r = v4l2_device_register_subdev(&cio2->v4l2_dev, subdev); in cio2_queue_init()
1602 vbq->drv_priv = cio2; in cio2_queue_init()
1612 "%s %td", CIO2_NAME, q - cio2->queue); in cio2_queue_init()
1616 vdev->lock = &cio2->lock; in cio2_queue_init()
1617 vdev->v4l2_dev = &cio2->v4l2_dev; in cio2_queue_init()
1620 video_set_drvdata(vdev, cio2); in cio2_queue_init()
1653 static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q) in cio2_queue_exit() argument
1659 cio2_fbpt_exit(q, &cio2->pci_dev->dev); in cio2_queue_exit()
1664 static int cio2_queues_init(struct cio2_device *cio2) in cio2_queues_init() argument
1669 r = cio2_queue_init(cio2, &cio2->queue[i]); in cio2_queues_init()
1678 cio2_queue_exit(cio2, &cio2->queue[i]); in cio2_queues_init()
1683 static void cio2_queues_exit(struct cio2_device *cio2) in cio2_queues_exit() argument
1688 cio2_queue_exit(cio2, &cio2->queue[i]); in cio2_queues_exit()
1714 struct cio2_device *cio2; in cio2_pci_probe() local
1734 cio2 = devm_kzalloc(dev, sizeof(*cio2), GFP_KERNEL); in cio2_pci_probe()
1735 if (!cio2) in cio2_pci_probe()
1737 cio2->pci_dev = pci_dev; in cio2_pci_probe()
1754 cio2->base = pcim_iomap_table(pci_dev)[CIO2_PCI_BAR]; in cio2_pci_probe()
1756 pci_set_drvdata(pci_dev, cio2); in cio2_pci_probe()
1772 r = cio2_fbpt_init_dummy(cio2); in cio2_pci_probe()
1776 mutex_init(&cio2->lock); in cio2_pci_probe()
1778 cio2->media_dev.dev = dev; in cio2_pci_probe()
1779 strscpy(cio2->media_dev.model, CIO2_DEVICE_NAME, in cio2_pci_probe()
1780 sizeof(cio2->media_dev.model)); in cio2_pci_probe()
1781 cio2->media_dev.hw_revision = 0; in cio2_pci_probe()
1783 media_device_init(&cio2->media_dev); in cio2_pci_probe()
1784 r = media_device_register(&cio2->media_dev); in cio2_pci_probe()
1788 cio2->v4l2_dev.mdev = &cio2->media_dev; in cio2_pci_probe()
1789 r = v4l2_device_register(dev, &cio2->v4l2_dev); in cio2_pci_probe()
1795 r = cio2_queues_init(cio2); in cio2_pci_probe()
1799 v4l2_async_nf_init(&cio2->notifier); in cio2_pci_probe()
1802 r = cio2_parse_firmware(cio2); in cio2_pci_probe()
1807 CIO2_NAME, cio2); in cio2_pci_probe()
1819 v4l2_async_nf_unregister(&cio2->notifier); in cio2_pci_probe()
1820 v4l2_async_nf_cleanup(&cio2->notifier); in cio2_pci_probe()
1821 cio2_queues_exit(cio2); in cio2_pci_probe()
1823 v4l2_device_unregister(&cio2->v4l2_dev); in cio2_pci_probe()
1825 media_device_unregister(&cio2->media_dev); in cio2_pci_probe()
1826 media_device_cleanup(&cio2->media_dev); in cio2_pci_probe()
1828 mutex_destroy(&cio2->lock); in cio2_pci_probe()
1829 cio2_fbpt_exit_dummy(cio2); in cio2_pci_probe()
1836 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_pci_remove() local
1838 media_device_unregister(&cio2->media_dev); in cio2_pci_remove()
1839 v4l2_async_nf_unregister(&cio2->notifier); in cio2_pci_remove()
1840 v4l2_async_nf_cleanup(&cio2->notifier); in cio2_pci_remove()
1841 cio2_queues_exit(cio2); in cio2_pci_remove()
1842 cio2_fbpt_exit_dummy(cio2); in cio2_pci_remove()
1843 v4l2_device_unregister(&cio2->v4l2_dev); in cio2_pci_remove()
1844 media_device_cleanup(&cio2->media_dev); in cio2_pci_remove()
1845 mutex_destroy(&cio2->lock); in cio2_pci_remove()
1851 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_runtime_suspend() local
1852 void __iomem *const base = cio2->base; in cio2_runtime_suspend()
1869 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_runtime_resume() local
1870 void __iomem *const base = cio2->base; in cio2_runtime_resume()
1933 static void cio2_fbpt_rearrange(struct cio2_device *cio2, struct cio2_queue *q) in cio2_fbpt_rearrange() argument
1960 cio2_fbpt_entry_enable(cio2, q->fbpt + i * CIO2_MAX_LOPS); in cio2_fbpt_rearrange()
1966 struct cio2_device *cio2 = pci_get_drvdata(pci_dev); in cio2_suspend() local
1967 struct cio2_queue *q = cio2->cur_queue; in cio2_suspend()
1971 if (!cio2->streaming) in cio2_suspend()
1981 cio2_hw_exit(cio2, q); in cio2_suspend()
1990 cio2_fbpt_rearrange(cio2, q); in cio2_suspend()
1999 struct cio2_device *cio2 = dev_get_drvdata(dev); in cio2_resume() local
2000 struct cio2_queue *q = cio2->cur_queue; in cio2_resume()
2004 if (!cio2->streaming) in cio2_resume()
2013 r = cio2_hw_init(cio2, q); in cio2_resume()
2022 cio2_hw_exit(cio2, q); in cio2_resume()