Lines Matching refs:node

233 	struct unicam_node node[UNICAM_MAX_NODES];  member
282 static inline bool is_metadata_node(struct unicam_node *node) in is_metadata_node() argument
284 return node->video_dev.device_caps & V4L2_CAP_META_CAPTURE; in is_metadata_node()
287 static inline bool is_image_node(struct unicam_node *node) in is_image_node() argument
289 return node->video_dev.device_caps & V4L2_CAP_VIDEO_CAPTURE; in is_image_node()
640 static void unicam_wr_dma_addr(struct unicam_node *node, in unicam_wr_dma_addr() argument
650 (buf != &node->dummy_buf ? buf->size : 0); in unicam_wr_dma_addr()
652 if (node->id == UNICAM_IMAGE_NODE) { in unicam_wr_dma_addr()
653 unicam_reg_write(node->dev, UNICAM_IBSA0, buf->dma_addr); in unicam_wr_dma_addr()
654 unicam_reg_write(node->dev, UNICAM_IBEA0, endaddr); in unicam_wr_dma_addr()
656 unicam_reg_write(node->dev, UNICAM_DBSA0, buf->dma_addr); in unicam_wr_dma_addr()
657 unicam_reg_write(node->dev, UNICAM_DBEA0, endaddr); in unicam_wr_dma_addr()
663 struct unicam_node *node = &unicam->node[UNICAM_IMAGE_NODE]; in unicam_get_lines_done() local
664 unsigned int stride = node->fmt.fmt.pix.bytesperline; in unicam_get_lines_done()
665 struct unicam_buffer *frm = node->cur_frm; in unicam_get_lines_done()
675 static void unicam_schedule_next_buffer(struct unicam_node *node) in unicam_schedule_next_buffer() argument
679 buf = list_first_entry(&node->dma_queue, struct unicam_buffer, list); in unicam_schedule_next_buffer()
680 node->next_frm = buf; in unicam_schedule_next_buffer()
683 unicam_wr_dma_addr(node, buf); in unicam_schedule_next_buffer()
686 static void unicam_schedule_dummy_buffer(struct unicam_node *node) in unicam_schedule_dummy_buffer() argument
688 int node_id = is_image_node(node) ? UNICAM_IMAGE_NODE : UNICAM_METADATA_NODE; in unicam_schedule_dummy_buffer()
690 dev_dbg(node->dev->dev, "Scheduling dummy buffer for node %d\n", node_id); in unicam_schedule_dummy_buffer()
692 unicam_wr_dma_addr(node, &node->dummy_buf); in unicam_schedule_dummy_buffer()
694 node->next_frm = NULL; in unicam_schedule_dummy_buffer()
697 static void unicam_process_buffer_complete(struct unicam_node *node, in unicam_process_buffer_complete() argument
700 node->cur_frm->vb.field = node->fmt.fmt.pix.field; in unicam_process_buffer_complete()
701 node->cur_frm->vb.sequence = sequence; in unicam_process_buffer_complete()
703 vb2_buffer_done(&node->cur_frm->vb.vb2_buf, VB2_BUF_STATE_DONE); in unicam_process_buffer_complete()
708 struct unicam_node *node = &unicam->node[UNICAM_IMAGE_NODE]; in unicam_queue_event_sof() local
714 v4l2_event_queue(&node->video_dev, &event); in unicam_queue_event_sof()
762 for (i = 0; i < ARRAY_SIZE(unicam->node); i++) { in unicam_isr()
763 struct unicam_node *node = &unicam->node[i]; in unicam_isr() local
765 if (!vb2_start_streaming_called(&node->buffer_queue)) in unicam_isr()
775 if (node->cur_frm && node->cur_frm != node->next_frm) { in unicam_isr()
776 unicam_process_buffer_complete(node, sequence); in unicam_isr()
779 node->cur_frm = node->next_frm; in unicam_isr()
801 for (i = 0; i < ARRAY_SIZE(unicam->node); i++) { in unicam_isr()
802 struct unicam_node *node = &unicam->node[i]; in unicam_isr() local
804 if (!vb2_start_streaming_called(&node->buffer_queue)) in unicam_isr()
807 if (node->cur_frm) in unicam_isr()
808 node->cur_frm->vb.vb2_buf.timestamp = ts; in unicam_isr()
818 unicam_schedule_dummy_buffer(node); in unicam_isr()
831 for (i = 0; i < ARRAY_SIZE(unicam->node); i++) { in unicam_isr()
832 struct unicam_node *node = &unicam->node[i]; in unicam_isr() local
834 if (!vb2_start_streaming_called(&node->buffer_queue)) in unicam_isr()
837 spin_lock(&node->dma_queue_lock); in unicam_isr()
838 if (!list_empty(&node->dma_queue) && !node->next_frm) in unicam_isr()
839 unicam_schedule_next_buffer(node); in unicam_isr()
840 spin_unlock(&node->dma_queue_lock); in unicam_isr()
850 struct unicam_node *node = &unicam->node[UNICAM_IMAGE_NODE]; in unicam_set_packing_config() local
854 if (node->fmt.fmt.pix.pixelformat == fmtinfo->fourcc) { in unicam_set_packing_config()
930 struct unicam_node *node = &unicam->node[UNICAM_IMAGE_NODE]; in unicam_start_rx() local
1095 node->fmt.fmt.pix.bytesperline); in unicam_start_rx()
1096 unicam_wr_dma_addr(node, node->cur_frm); in unicam_start_rx()
1131 struct unicam_node *node = &unicam->node[UNICAM_METADATA_NODE]; in unicam_start_metadata() local
1134 unicam_wr_dma_addr(node, node->cur_frm); in unicam_start_metadata()
1569 struct unicam_node *node = vb2_get_drv_priv(vq); in unicam_queue_setup() local
1570 u32 size = is_image_node(node) ? node->fmt.fmt.pix.sizeimage in unicam_queue_setup()
1571 : node->fmt.fmt.meta.buffersize; in unicam_queue_setup()
1575 dev_dbg(node->dev->dev, "sizes[0] %i < size %u\n", in unicam_queue_setup()
1590 struct unicam_node *node = vb2_get_drv_priv(vb->vb2_queue); in unicam_buffer_prepare() local
1592 u32 size = is_image_node(node) ? node->fmt.fmt.pix.sizeimage in unicam_buffer_prepare()
1593 : node->fmt.fmt.meta.buffersize; in unicam_buffer_prepare()
1596 dev_dbg(node->dev->dev, in unicam_buffer_prepare()
1610 static void unicam_return_buffers(struct unicam_node *node, in unicam_return_buffers() argument
1615 list_for_each_entry_safe(buf, tmp, &node->dma_queue, list) { in unicam_return_buffers()
1620 if (node->cur_frm) in unicam_return_buffers()
1621 vb2_buffer_done(&node->cur_frm->vb.vb2_buf, in unicam_return_buffers()
1623 if (node->next_frm && node->cur_frm != node->next_frm) in unicam_return_buffers()
1624 vb2_buffer_done(&node->next_frm->vb.vb2_buf, in unicam_return_buffers()
1627 node->cur_frm = NULL; in unicam_return_buffers()
1628 node->next_frm = NULL; in unicam_return_buffers()
1672 struct unicam_node *node = vb2_get_drv_priv(vq); in unicam_start_streaming() local
1673 struct unicam_device *unicam = node->dev; in unicam_start_streaming()
1681 is_metadata_node(node) ? "metadata" : "image"); in unicam_start_streaming()
1687 ret = video_device_pipeline_start(&node->video_dev, &unicam->pipe.pipe); in unicam_start_streaming()
1728 spin_lock_irqsave(&node->dma_queue_lock, flags); in unicam_start_streaming()
1729 buf = list_first_entry(&node->dma_queue, struct unicam_buffer, list); in unicam_start_streaming()
1730 node->cur_frm = buf; in unicam_start_streaming()
1731 node->next_frm = buf; in unicam_start_streaming()
1733 spin_unlock_irqrestore(&node->dma_queue_lock, flags); in unicam_start_streaming()
1781 video_device_pipeline_stop(&node->video_dev); in unicam_start_streaming()
1783 unicam_return_buffers(node, VB2_BUF_STATE_QUEUED); in unicam_start_streaming()
1789 struct unicam_node *node = vb2_get_drv_priv(vq); in unicam_stop_streaming() local
1790 struct unicam_device *unicam = node->dev; in unicam_stop_streaming()
1806 video_device_pipeline_stop(&node->video_dev); in unicam_stop_streaming()
1809 unicam_return_buffers(node, VB2_BUF_STATE_ERROR); in unicam_stop_streaming()
1814 struct unicam_node *node = vb2_get_drv_priv(vb->vb2_queue); in unicam_buffer_queue() local
1817 spin_lock_irq(&node->dma_queue_lock); in unicam_buffer_queue()
1818 list_add_tail(&buf->list, &node->dma_queue); in unicam_buffer_queue()
1819 spin_unlock_irq(&node->dma_queue_lock); in unicam_buffer_queue()
1879 struct unicam_node *node = video_drvdata(file); in unicam_g_fmt_vid() local
1881 *f = node->fmt; in unicam_g_fmt_vid()
1886 static void __unicam_try_fmt_vid(struct unicam_node *node, in __unicam_try_fmt_vid() argument
1902 unicam_calc_image_size_bpl(node->dev, fmtinfo, pix); in __unicam_try_fmt_vid()
1911 struct unicam_node *node = video_drvdata(file); in unicam_try_fmt_vid() local
1913 __unicam_try_fmt_vid(node, &f->fmt.pix); in unicam_try_fmt_vid()
1920 struct unicam_node *node = video_drvdata(file); in unicam_s_fmt_vid() local
1922 if (vb2_is_busy(&node->buffer_queue)) in unicam_s_fmt_vid()
1925 __unicam_try_fmt_vid(node, &f->fmt.pix); in unicam_s_fmt_vid()
1926 node->fmt = *f; in unicam_s_fmt_vid()
1956 struct unicam_node *node = video_drvdata(file); in unicam_g_fmt_meta() local
1958 f->fmt.meta = node->fmt.fmt.meta; in unicam_g_fmt_meta()
1964 __unicam_try_fmt_meta(struct unicam_node *node, struct v4l2_meta_format *meta) in __unicam_try_fmt_meta() argument
1979 unicam_calc_meta_size_bpl(node->dev, fmtinfo, meta); in __unicam_try_fmt_meta()
1987 struct unicam_node *node = video_drvdata(file); in unicam_try_fmt_meta() local
1989 __unicam_try_fmt_meta(node, &f->fmt.meta); in unicam_try_fmt_meta()
1996 struct unicam_node *node = video_drvdata(file); in unicam_s_fmt_meta() local
1998 if (vb2_is_busy(&node->buffer_queue)) in unicam_s_fmt_meta()
2001 __unicam_try_fmt_meta(node, &f->fmt.meta); in unicam_s_fmt_meta()
2002 node->fmt = *f; in unicam_s_fmt_meta()
2010 struct unicam_node *node = video_drvdata(file); in unicam_enum_framesizes() local
2016 if (is_image_node(node)) { in unicam_enum_framesizes()
2047 struct unicam_node *node = video_drvdata(file); in unicam_log_status() local
2048 struct unicam_device *unicam = node->dev; in unicam_log_status()
2056 node->fmt.fmt.pix.width, node->fmt.fmt.pix.height); in unicam_log_status()
2058 node->fmt.fmt.pix.pixelformat); in unicam_log_status()
2132 struct unicam_node *node = video_get_drvdata(vdev); in unicam_video_link_validate() local
2133 const u32 pad = is_image_node(node) ? UNICAM_SD_PAD_SOURCE_IMAGE in unicam_video_link_validate()
2147 if (is_image_node(node)) { in unicam_video_link_validate()
2148 const struct v4l2_pix_format *fmt = &node->fmt.fmt.pix; in unicam_video_link_validate()
2162 dev_dbg(node->dev->dev, in unicam_video_link_validate()
2171 const struct v4l2_meta_format *fmt = &node->fmt.fmt.meta; in unicam_video_link_validate()
2185 dev_dbg(node->dev->dev, in unicam_video_link_validate()
2204 struct unicam_node *node = video_get_drvdata(vdev); in unicam_node_release() local
2206 unicam_put(node->dev); in unicam_node_release()
2209 static void unicam_set_default_format(struct unicam_node *node) in unicam_set_default_format() argument
2211 if (is_image_node(node)) { in unicam_set_default_format()
2212 struct v4l2_pix_format *fmt = &node->fmt.fmt.pix; in unicam_set_default_format()
2216 node->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in unicam_set_default_format()
2220 unicam_calc_image_size_bpl(node->dev, fmtinfo, fmt); in unicam_set_default_format()
2222 struct v4l2_meta_format *fmt = &node->fmt.fmt.meta; in unicam_set_default_format()
2226 node->fmt.type = V4L2_BUF_TYPE_META_CAPTURE; in unicam_set_default_format()
2231 unicam_calc_meta_size_bpl(node->dev, fmtinfo, fmt); in unicam_set_default_format()
2241 struct unicam_node *node = &unicam->node[type]; in unicam_register_node() local
2242 struct video_device *vdev = &node->video_dev; in unicam_register_node()
2243 struct vb2_queue *q = &node->buffer_queue; in unicam_register_node()
2246 node->dev = unicam_get(unicam); in unicam_register_node()
2247 node->id = type; in unicam_register_node()
2249 spin_lock_init(&node->dma_queue_lock); in unicam_register_node()
2251 INIT_LIST_HEAD(&node->dma_queue); in unicam_register_node()
2257 q->drv_priv = node; in unicam_register_node()
2288 video_set_drvdata(vdev, node); in unicam_register_node()
2293 node->pad.flags = MEDIA_PAD_FL_SINK; in unicam_register_node()
2295 ret = media_entity_pads_init(&vdev->entity, 1, &node->pad); in unicam_register_node()
2299 node->dummy_buf.size = UNICAM_DUMMY_BUF_SIZE; in unicam_register_node()
2300 node->dummy_buf_cpu_addr = dma_alloc_coherent(unicam->dev, in unicam_register_node()
2301 node->dummy_buf.size, in unicam_register_node()
2302 &node->dummy_buf.dma_addr, in unicam_register_node()
2304 if (!node->dummy_buf_cpu_addr) { in unicam_register_node()
2310 unicam_set_default_format(node); in unicam_register_node()
2319 node->registered = true; in unicam_register_node()
2323 &node->video_dev.entity, in unicam_register_node()
2341 dma_free_coherent(unicam->dev, node->dummy_buf.size, in unicam_register_node()
2342 node->dummy_buf_cpu_addr, in unicam_register_node()
2343 node->dummy_buf.dma_addr); in unicam_register_node()
2355 for (i = 0; i < ARRAY_SIZE(unicam->node); i++) { in unicam_unregister_nodes()
2356 struct unicam_node *node = &unicam->node[i]; in unicam_unregister_nodes() local
2358 if (node->registered) { in unicam_unregister_nodes()
2359 vb2_video_unregister_device(&node->video_dev); in unicam_unregister_nodes()
2360 node->registered = false; in unicam_unregister_nodes()
2363 if (node->dummy_buf_cpu_addr) in unicam_unregister_nodes()
2364 dma_free_coherent(unicam->dev, node->dummy_buf.size, in unicam_unregister_nodes()
2365 node->dummy_buf_cpu_addr, in unicam_unregister_nodes()
2366 node->dummy_buf.dma_addr); in unicam_unregister_nodes()