Lines Matching refs:pipe

262 void vsp1_pipeline_reset(struct vsp1_pipeline *pipe)  in vsp1_pipeline_reset()  argument
267 if (pipe->brx) { in vsp1_pipeline_reset()
268 struct vsp1_brx *brx = to_brx(&pipe->brx->subdev); in vsp1_pipeline_reset()
274 for (i = 0; i < ARRAY_SIZE(pipe->inputs); ++i) in vsp1_pipeline_reset()
275 pipe->inputs[i] = NULL; in vsp1_pipeline_reset()
277 pipe->output = NULL; in vsp1_pipeline_reset()
279 list_for_each_entry(entity, &pipe->entities, list_pipe) in vsp1_pipeline_reset()
280 entity->pipe = NULL; in vsp1_pipeline_reset()
282 INIT_LIST_HEAD(&pipe->entities); in vsp1_pipeline_reset()
283 pipe->state = VSP1_PIPELINE_STOPPED; in vsp1_pipeline_reset()
284 pipe->buffers_ready = 0; in vsp1_pipeline_reset()
285 pipe->num_inputs = 0; in vsp1_pipeline_reset()
286 pipe->brx = NULL; in vsp1_pipeline_reset()
287 pipe->hgo = NULL; in vsp1_pipeline_reset()
288 pipe->hgt = NULL; in vsp1_pipeline_reset()
289 pipe->lif = NULL; in vsp1_pipeline_reset()
290 pipe->uds = NULL; in vsp1_pipeline_reset()
293 void vsp1_pipeline_init(struct vsp1_pipeline *pipe) in vsp1_pipeline_init() argument
295 mutex_init(&pipe->lock); in vsp1_pipeline_init()
296 spin_lock_init(&pipe->irqlock); in vsp1_pipeline_init()
297 init_waitqueue_head(&pipe->wq); in vsp1_pipeline_init()
298 kref_init(&pipe->kref); in vsp1_pipeline_init()
300 INIT_LIST_HEAD(&pipe->entities); in vsp1_pipeline_init()
301 pipe->state = VSP1_PIPELINE_STOPPED; in vsp1_pipeline_init()
305 void vsp1_pipeline_run(struct vsp1_pipeline *pipe) in vsp1_pipeline_run() argument
307 struct vsp1_device *vsp1 = pipe->output->entity.vsp1; in vsp1_pipeline_run()
309 if (pipe->state == VSP1_PIPELINE_STOPPED) { in vsp1_pipeline_run()
310 vsp1_write(vsp1, VI6_CMD(pipe->output->entity.index), in vsp1_pipeline_run()
312 pipe->state = VSP1_PIPELINE_RUNNING; in vsp1_pipeline_run()
315 pipe->buffers_ready = 0; in vsp1_pipeline_run()
318 bool vsp1_pipeline_stopped(struct vsp1_pipeline *pipe) in vsp1_pipeline_stopped() argument
323 spin_lock_irqsave(&pipe->irqlock, flags); in vsp1_pipeline_stopped()
324 stopped = pipe->state == VSP1_PIPELINE_STOPPED; in vsp1_pipeline_stopped()
325 spin_unlock_irqrestore(&pipe->irqlock, flags); in vsp1_pipeline_stopped()
330 int vsp1_pipeline_stop(struct vsp1_pipeline *pipe) in vsp1_pipeline_stop() argument
332 struct vsp1_device *vsp1 = pipe->output->entity.vsp1; in vsp1_pipeline_stop()
337 if (pipe->lif) { in vsp1_pipeline_stop()
342 ret = vsp1_reset_wpf(vsp1, pipe->output->entity.index); in vsp1_pipeline_stop()
344 spin_lock_irqsave(&pipe->irqlock, flags); in vsp1_pipeline_stop()
345 pipe->state = VSP1_PIPELINE_STOPPED; in vsp1_pipeline_stop()
346 spin_unlock_irqrestore(&pipe->irqlock, flags); in vsp1_pipeline_stop()
350 spin_lock_irqsave(&pipe->irqlock, flags); in vsp1_pipeline_stop()
351 if (pipe->state == VSP1_PIPELINE_RUNNING) in vsp1_pipeline_stop()
352 pipe->state = VSP1_PIPELINE_STOPPING; in vsp1_pipeline_stop()
353 spin_unlock_irqrestore(&pipe->irqlock, flags); in vsp1_pipeline_stop()
355 ret = wait_event_timeout(pipe->wq, vsp1_pipeline_stopped(pipe), in vsp1_pipeline_stop()
360 list_for_each_entry(entity, &pipe->entities, list_pipe) { in vsp1_pipeline_stop()
366 if (pipe->hgo) in vsp1_pipeline_stop()
371 if (pipe->hgt) in vsp1_pipeline_stop()
376 v4l2_subdev_call(&pipe->output->entity.subdev, video, s_stream, 0); in vsp1_pipeline_stop()
381 bool vsp1_pipeline_ready(struct vsp1_pipeline *pipe) in vsp1_pipeline_ready() argument
385 mask = ((1 << pipe->num_inputs) - 1) << 1; in vsp1_pipeline_ready()
386 if (!pipe->lif) in vsp1_pipeline_ready()
389 return pipe->buffers_ready == mask; in vsp1_pipeline_ready()
392 void vsp1_pipeline_frame_end(struct vsp1_pipeline *pipe) in vsp1_pipeline_frame_end() argument
396 if (pipe == NULL) in vsp1_pipeline_frame_end()
404 flags = vsp1_dlm_irq_frame_end(pipe->output->dlm); in vsp1_pipeline_frame_end()
406 if (pipe->hgo) in vsp1_pipeline_frame_end()
407 vsp1_hgo_frame_end(pipe->hgo); in vsp1_pipeline_frame_end()
409 if (pipe->hgt) in vsp1_pipeline_frame_end()
410 vsp1_hgt_frame_end(pipe->hgt); in vsp1_pipeline_frame_end()
416 if (pipe->frame_end) in vsp1_pipeline_frame_end()
417 pipe->frame_end(pipe, flags); in vsp1_pipeline_frame_end()
419 pipe->sequence++; in vsp1_pipeline_frame_end()
430 void vsp1_pipeline_propagate_alpha(struct vsp1_pipeline *pipe, in vsp1_pipeline_propagate_alpha() argument
433 if (!pipe->uds) in vsp1_pipeline_propagate_alpha()
440 if (pipe->uds_input->type == VSP1_ENTITY_BRU || in vsp1_pipeline_propagate_alpha()
441 pipe->uds_input->type == VSP1_ENTITY_BRS) in vsp1_pipeline_propagate_alpha()
444 vsp1_uds_set_alpha(pipe->uds, dlb, alpha); in vsp1_pipeline_propagate_alpha()
455 void vsp1_pipeline_propagate_partition(struct vsp1_pipeline *pipe, in vsp1_pipeline_propagate_partition() argument
462 list_for_each_entry_reverse(entity, &pipe->entities, list_pipe) { in vsp1_pipeline_propagate_partition()
464 entity->ops->partition(entity, pipe, partition, index, in vsp1_pipeline_propagate_partition()