Lines Matching refs:cio2
30 #include "ipu3-cio2.h"
97 static void cio2_fbpt_exit_dummy(struct cio2_device *cio2)
99 if (cio2->dummy_lop) {
100 dma_free_coherent(&cio2->pci_dev->dev, PAGE_SIZE,
101 cio2->dummy_lop, cio2->dummy_lop_bus_addr);
102 cio2->dummy_lop = NULL;
104 if (cio2->dummy_page) {
105 dma_free_coherent(&cio2->pci_dev->dev, PAGE_SIZE,
106 cio2->dummy_page, cio2->dummy_page_bus_addr);
107 cio2->dummy_page = NULL;
111 static int cio2_fbpt_init_dummy(struct cio2_device *cio2)
115 cio2->dummy_page = dma_alloc_coherent(&cio2->pci_dev->dev, PAGE_SIZE,
116 &cio2->dummy_page_bus_addr,
118 cio2->dummy_lop = dma_alloc_coherent(&cio2->pci_dev->dev, PAGE_SIZE,
119 &cio2->dummy_lop_bus_addr,
121 if (!cio2->dummy_page || !cio2->dummy_lop) {
122 cio2_fbpt_exit_dummy(cio2);
130 cio2->dummy_lop[i] = PFN_DOWN(cio2->dummy_page_bus_addr);
135 static void cio2_fbpt_entry_enable(struct cio2_device *cio2,
155 static void cio2_fbpt_entry_init_dummy(struct cio2_device *cio2,
166 entry[i].lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr);
168 cio2_fbpt_entry_enable(cio2, entry);
172 static void cio2_fbpt_entry_init_buf(struct cio2_device *cio2,
208 entry->lop_page_addr = PFN_DOWN(cio2->dummy_lop_bus_addr);
210 cio2_fbpt_entry_enable(cio2, entry);
213 static int cio2_fbpt_init(struct cio2_device *cio2, struct cio2_queue *q)
215 struct device *dev = &cio2->pci_dev->dev;
290 static int cio2_csi2_calc_timing(struct cio2_device *cio2, struct cio2_queue *q,
293 struct device *dev = &cio2->pci_dev->dev;
346 static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q)
355 void __iomem *const base = cio2->base;
367 r = cio2_csi2_calc_timing(cio2, q, &timing);
508 static void cio2_hw_exit(struct cio2_device *cio2, struct cio2_queue *q)
510 void __iomem *const base = cio2->base;
527 dev_err(&cio2->pci_dev->dev,
538 static void cio2_buffer_done(struct cio2_device *cio2, unsigned int dma_chan)
540 struct device *dev = &cio2->pci_dev->dev;
541 struct cio2_queue *q = cio2->cur_queue;
552 dev_warn(&cio2->pci_dev->dev,
568 dev_dbg(&cio2->pci_dev->dev,
581 cio2_fbpt_entry_init_dummy(cio2, entry);
587 static void cio2_queue_event_sof(struct cio2_device *cio2, struct cio2_queue *q)
633 static void cio2_irq_handle_once(struct cio2_device *cio2, u32 int_status)
635 void __iomem *const base = cio2->base;
636 struct device *dev = &cio2->pci_dev->dev;
676 cio2_buffer_done(cio2, d);
690 cio2_queue_event_sof(cio2,
691 cio2->cur_queue);
761 struct cio2_device *cio2 = cio2_ptr;
762 void __iomem *const base = cio2->base;
763 struct device *dev = &cio2->pci_dev->dev;
773 cio2_irq_handle_once(cio2, int_status);
805 struct cio2_device *cio2 = vb2_get_drv_priv(vq);
813 alloc_devs[i] = &cio2->pci_dev->dev;
821 cio2_fbpt_entry_init_dummy(cio2, &q->fbpt[i * CIO2_MAX_LOPS]);
833 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
834 struct device *dev = &cio2->pci_dev->dev;
878 b->lop[i][j] = PFN_DOWN(cio2->dummy_page_bus_addr);
886 /* Transfer buffer ownership to cio2 */
889 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
900 dev_dbg(&cio2->pci_dev->dev, "queue buffer %d\n", vb->index);
917 fbpt_rp = (readl(cio2->base + CIO2_REG_CDMARI(CIO2_DMA_CHAN))
942 cio2_fbpt_entry_init_buf(cio2, b, entry);
951 dev_dbg(&cio2->pci_dev->dev, "entry %i was full!\n", next);
956 dev_err(&cio2->pci_dev->dev, "error: all cio2 entries were full!\n");
964 struct cio2_device *cio2 = vb2_get_drv_priv(vb->vb2_queue);
972 dma_free_coherent(&cio2->pci_dev->dev, PAGE_SIZE,
980 struct cio2_device *cio2 = vb2_get_drv_priv(vq);
983 cio2->cur_queue = q;
986 r = pm_runtime_get_sync(&cio2->pci_dev->dev);
988 dev_info(&cio2->pci_dev->dev, "failed to set power %d\n", r);
989 pm_runtime_put_noidle(&cio2->pci_dev->dev);
997 r = cio2_hw_init(cio2, q);
1006 cio2->streaming = true;
1011 cio2_hw_exit(cio2, q);
1015 dev_dbg(&cio2->pci_dev->dev, "failed to start streaming (%d)\n", r);
1017 pm_runtime_put(&cio2->pci_dev->dev);
1025 struct cio2_device *cio2 = vb2_get_drv_priv(vq);
1028 dev_err(&cio2->pci_dev->dev,
1031 cio2_hw_exit(cio2, q);
1032 synchronize_irq(cio2->pci_dev->irq);
1035 pm_runtime_put(&cio2->pci_dev->dev);
1036 cio2->streaming = false;
1055 struct cio2_device *cio2 = video_drvdata(file);
1060 "PCI:%s", pci_name(cio2->pci_dev));
1329 struct cio2_device *cio2 = video_get_drvdata(vd);
1334 dev_info(&cio2->pci_dev->dev,
1345 dev_err(&cio2->pci_dev->dev,
1391 struct cio2_device *cio2 = container_of(notifier,
1397 if (cio2->queue[s_asd->csi2.port].sensor)
1400 q = &cio2->queue[s_asd->csi2.port];
1404 q->csi_rx_base = cio2->base + CIO2_REG_PIPE_BASE(q->csi2.port);
1414 struct cio2_device *cio2 = container_of(notifier,
1419 cio2->queue[s_asd->csi2.port].sensor = NULL;
1425 struct cio2_device *cio2 = container_of(notifier, struct cio2_device,
1433 list_for_each_entry(asd, &cio2->notifier.asd_list, asd_list) {
1435 q = &cio2->queue[s_asd->csi2.port];
1443 dev_err(&cio2->pci_dev->dev,
1454 dev_err(&cio2->pci_dev->dev,
1461 return v4l2_device_register_subdev_nodes(&cio2->v4l2_dev);
1470 static int cio2_parse_firmware(struct cio2_device *cio2)
1484 dev_fwnode(&cio2->pci_dev->dev), i, 0,
1495 &cio2->notifier, ep, sizeof(*s_asd));
1518 cio2->notifier.ops = &cio2_async_ops;
1519 ret = v4l2_async_notifier_register(&cio2->v4l2_dev, &cio2->notifier);
1521 dev_err(&cio2->pci_dev->dev,
1536 static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q)
1571 r = cio2_fbpt_init(cio2, q);
1583 dev_err(&cio2->pci_dev->dev,
1592 dev_err(&cio2->pci_dev->dev,
1602 CIO2_ENTITY_NAME " %td", q - cio2->queue);
1604 v4l2_set_subdevdata(subdev, cio2);
1605 r = v4l2_device_register_subdev(&cio2->v4l2_dev, subdev);
1607 dev_err(&cio2->pci_dev->dev,
1620 vbq->drv_priv = cio2;
1624 dev_err(&cio2->pci_dev->dev,
1631 "%s %td", CIO2_NAME, q - cio2->queue);
1635 vdev->lock = &cio2->lock;
1636 vdev->v4l2_dev = &cio2->v4l2_dev;
1639 video_set_drvdata(vdev, cio2);
1642 dev_err(&cio2->pci_dev->dev,
1665 cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1673 static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q)
1679 cio2_fbpt_exit(q, &cio2->pci_dev->dev);
1684 static int cio2_queues_init(struct cio2_device *cio2)
1689 r = cio2_queue_init(cio2, &cio2->queue[i]);
1698 cio2_queue_exit(cio2, &cio2->queue[i]);
1703 static void cio2_queues_exit(struct cio2_device *cio2)
1708 cio2_queue_exit(cio2, &cio2->queue[i]);
1716 struct cio2_device *cio2;
1719 cio2 = devm_kzalloc(&pci_dev->dev, sizeof(*cio2), GFP_KERNEL);
1720 if (!cio2)
1722 cio2->pci_dev = pci_dev;
1739 cio2->base = pcim_iomap_table(pci_dev)[CIO2_PCI_BAR];
1741 pci_set_drvdata(pci_dev, cio2);
1757 r = cio2_fbpt_init_dummy(cio2);
1761 mutex_init(&cio2->lock);
1763 cio2->media_dev.dev = &cio2->pci_dev->dev;
1764 strscpy(cio2->media_dev.model, CIO2_DEVICE_NAME,
1765 sizeof(cio2->media_dev.model));
1766 snprintf(cio2->media_dev.bus_info, sizeof(cio2->media_dev.bus_info),
1767 "PCI:%s", pci_name(cio2->pci_dev));
1768 cio2->media_dev.hw_revision = 0;
1770 media_device_init(&cio2->media_dev);
1771 r = media_device_register(&cio2->media_dev);
1775 cio2->v4l2_dev.mdev = &cio2->media_dev;
1776 r = v4l2_device_register(&pci_dev->dev, &cio2->v4l2_dev);
1783 r = cio2_queues_init(cio2);
1787 v4l2_async_notifier_init(&cio2->notifier);
1790 r = cio2_parse_firmware(cio2);
1795 IRQF_SHARED, CIO2_NAME, cio2);
1807 v4l2_async_notifier_unregister(&cio2->notifier);
1808 v4l2_async_notifier_cleanup(&cio2->notifier);
1809 cio2_queues_exit(cio2);
1811 v4l2_device_unregister(&cio2->v4l2_dev);
1813 media_device_unregister(&cio2->media_dev);
1814 media_device_cleanup(&cio2->media_dev);
1816 mutex_destroy(&cio2->lock);
1817 cio2_fbpt_exit_dummy(cio2);
1824 struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1826 media_device_unregister(&cio2->media_dev);
1827 v4l2_async_notifier_unregister(&cio2->notifier);
1828 v4l2_async_notifier_cleanup(&cio2->notifier);
1829 cio2_queues_exit(cio2);
1830 cio2_fbpt_exit_dummy(cio2);
1831 v4l2_device_unregister(&cio2->v4l2_dev);
1832 media_device_cleanup(&cio2->media_dev);
1833 mutex_destroy(&cio2->lock);
1842 struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1843 void __iomem *const base = cio2->base;
1847 dev_dbg(dev, "cio2 runtime suspend.\n");
1860 struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1861 void __iomem *const base = cio2->base;
1865 dev_dbg(dev, "cio2 runtime resume.\n");
1924 static void cio2_fbpt_rearrange(struct cio2_device *cio2, struct cio2_queue *q)
1951 cio2_fbpt_entry_enable(cio2, q->fbpt + i * CIO2_MAX_LOPS);
1957 struct cio2_device *cio2 = pci_get_drvdata(pci_dev);
1958 struct cio2_queue *q = cio2->cur_queue;
1960 dev_dbg(dev, "cio2 suspend\n");
1961 if (!cio2->streaming)
1965 cio2_hw_exit(cio2, q);
1974 cio2_fbpt_rearrange(cio2, q);
1983 struct cio2_device *cio2 = dev_get_drvdata(dev);
1984 struct cio2_queue *q = cio2->cur_queue;
1987 dev_dbg(dev, "cio2 resume\n");
1988 if (!cio2->streaming)
1991 r = pm_runtime_force_resume(&cio2->pci_dev->dev);
1993 dev_err(&cio2->pci_dev->dev,
1998 r = cio2_hw_init(cio2, q);
2000 dev_err(dev, "fail to init cio2 hw\n");