Lines Matching refs:vfe

18 int vfe_gen1_halt(struct vfe_device *vfe)  in vfe_gen1_halt()  argument
22 reinit_completion(&vfe->halt_complete); in vfe_gen1_halt()
24 vfe->ops_gen1->halt_request(vfe); in vfe_gen1_halt()
26 time = wait_for_completion_timeout(&vfe->halt_complete, in vfe_gen1_halt()
29 dev_err(vfe->camss->dev, "VFE halt timeout\n"); in vfe_gen1_halt()
38 struct vfe_device *vfe = to_vfe(line); in vfe_disable_output() local
40 const struct vfe_hw_ops *ops = vfe->res->hw_ops; in vfe_disable_output()
45 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_disable_output()
48 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_disable_output()
52 dev_err(vfe->camss->dev, "VFE sof timeout\n"); in vfe_disable_output()
54 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_disable_output()
56 vfe->ops_gen1->wm_enable(vfe, output->wm_idx[i], 0); in vfe_disable_output()
58 ops->reg_update(vfe, line->id); in vfe_disable_output()
60 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_disable_output()
64 dev_err(vfe->camss->dev, "VFE reg update timeout\n"); in vfe_disable_output()
66 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_disable_output()
69 vfe->ops_gen1->wm_frame_based(vfe, output->wm_idx[0], 0); in vfe_disable_output()
70 vfe->ops_gen1->bus_disconnect_wm_from_rdi(vfe, output->wm_idx[0], line->id); in vfe_disable_output()
71 vfe->ops_gen1->enable_irq_wm_line(vfe, output->wm_idx[0], line->id, 0); in vfe_disable_output()
72 vfe->ops_gen1->set_cgc_override(vfe, output->wm_idx[0], 0); in vfe_disable_output()
73 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_disable_output()
76 vfe->ops_gen1->wm_line_based(vfe, output->wm_idx[i], NULL, i, 0); in vfe_disable_output()
77 vfe->ops_gen1->set_cgc_override(vfe, output->wm_idx[i], 0); in vfe_disable_output()
80 vfe->ops_gen1->enable_irq_pix_line(vfe, 0, line->id, 0); in vfe_disable_output()
81 vfe->ops_gen1->set_module_cfg(vfe, 0); in vfe_disable_output()
82 vfe->ops_gen1->set_realign_cfg(vfe, line, 0); in vfe_disable_output()
83 vfe->ops_gen1->set_xbar_cfg(vfe, output, 0); in vfe_disable_output()
84 vfe->ops_gen1->set_camif_cmd(vfe, 0); in vfe_disable_output()
86 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_disable_output()
88 vfe->ops_gen1->camif_wait_for_stop(vfe, vfe->camss->dev); in vfe_disable_output()
102 struct vfe_device *vfe = to_vfe(line); in vfe_gen1_disable() local
108 mutex_lock(&vfe->stream_lock); in vfe_gen1_disable()
110 if (vfe->stream_count == 1) in vfe_gen1_disable()
111 vfe->ops_gen1->bus_enable_wr_if(vfe, 0); in vfe_gen1_disable()
113 vfe->stream_count--; in vfe_gen1_disable()
115 mutex_unlock(&vfe->stream_lock); in vfe_gen1_disable()
120 static void vfe_output_init_addrs(struct vfe_device *vfe, in vfe_output_init_addrs() argument
141 vfe->ops_gen1->wm_set_ping_addr(vfe, output->wm_idx[i], ping_addr); in vfe_output_init_addrs()
142 vfe->ops_gen1->wm_set_pong_addr(vfe, output->wm_idx[i], pong_addr); in vfe_output_init_addrs()
144 vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[i]); in vfe_output_init_addrs()
148 static void vfe_output_frame_drop(struct vfe_device *vfe, in vfe_output_frame_drop() argument
161 vfe->ops_gen1->wm_set_framedrop_period(vfe, output->wm_idx[i], drop_period); in vfe_output_frame_drop()
162 vfe->ops_gen1->wm_set_framedrop_pattern(vfe, output->wm_idx[i], drop_pattern); in vfe_output_frame_drop()
165 vfe->res->hw_ops->reg_update(vfe, container_of(output, struct vfe_line, output)->id); in vfe_output_frame_drop()
170 struct vfe_device *vfe = to_vfe(line); in vfe_enable_output() local
172 const struct vfe_hw_ops *ops = vfe->res->hw_ops; in vfe_enable_output()
179 ub_size = vfe->ops_gen1->get_ub_size(vfe->id); in vfe_enable_output()
193 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_enable_output()
195 ops->reg_update_clear(vfe, line->id); in vfe_enable_output()
198 dev_err(vfe->camss->dev, "Output is not in reserved state %d\n", output->state); in vfe_enable_output()
199 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_enable_output()
220 vfe_output_frame_drop(vfe, output, 1 << frame_skip); in vfe_enable_output()
223 vfe_output_frame_drop(vfe, output, 3 << frame_skip); in vfe_enable_output()
226 vfe_output_frame_drop(vfe, output, 0); in vfe_enable_output()
236 vfe_output_init_addrs(vfe, output, 0, line); in vfe_enable_output()
239 vfe->ops_gen1->set_cgc_override(vfe, output->wm_idx[0], 1); in vfe_enable_output()
240 vfe->ops_gen1->enable_irq_wm_line(vfe, output->wm_idx[0], line->id, 1); in vfe_enable_output()
241 vfe->ops_gen1->bus_connect_wm_to_rdi(vfe, output->wm_idx[0], line->id); in vfe_enable_output()
242 vfe->ops_gen1->wm_set_subsample(vfe, output->wm_idx[0]); in vfe_enable_output()
243 vfe->ops_gen1->set_rdi_cid(vfe, line->id, 0); in vfe_enable_output()
244 vfe->ops_gen1->wm_set_ub_cfg(vfe, output->wm_idx[0], in vfe_enable_output()
246 vfe->ops_gen1->wm_frame_based(vfe, output->wm_idx[0], 1); in vfe_enable_output()
247 vfe->ops_gen1->wm_enable(vfe, output->wm_idx[0], 1); in vfe_enable_output()
248 vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[0]); in vfe_enable_output()
252 vfe->ops_gen1->set_cgc_override(vfe, output->wm_idx[i], 1); in vfe_enable_output()
253 vfe->ops_gen1->wm_set_subsample(vfe, output->wm_idx[i]); in vfe_enable_output()
254 vfe->ops_gen1->wm_set_ub_cfg(vfe, output->wm_idx[i], in vfe_enable_output()
256 vfe->ops_gen1->wm_line_based(vfe, output->wm_idx[i], in vfe_enable_output()
258 vfe->ops_gen1->wm_enable(vfe, output->wm_idx[i], 1); in vfe_enable_output()
259 vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[i]); in vfe_enable_output()
261 vfe->ops_gen1->enable_irq_pix_line(vfe, 0, line->id, 1); in vfe_enable_output()
262 vfe->ops_gen1->set_module_cfg(vfe, 1); in vfe_enable_output()
263 vfe->ops_gen1->set_camif_cfg(vfe, line); in vfe_enable_output()
264 vfe->ops_gen1->set_realign_cfg(vfe, line, 1); in vfe_enable_output()
265 vfe->ops_gen1->set_xbar_cfg(vfe, output, 1); in vfe_enable_output()
266 vfe->ops_gen1->set_demux_cfg(vfe, line); in vfe_enable_output()
267 vfe->ops_gen1->set_scale_cfg(vfe, line); in vfe_enable_output()
268 vfe->ops_gen1->set_crop_cfg(vfe, line); in vfe_enable_output()
269 vfe->ops_gen1->set_clamp_cfg(vfe); in vfe_enable_output()
270 vfe->ops_gen1->set_camif_cmd(vfe, 1); in vfe_enable_output()
273 ops->reg_update(vfe, line->id); in vfe_enable_output()
275 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_enable_output()
282 struct vfe_device *vfe = to_vfe(line); in vfe_get_output() local
289 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_get_output()
293 dev_err(vfe->camss->dev, "Output is running\n"); in vfe_get_output()
313 wm_idx = vfe_reserve_wm(vfe, line->id); in vfe_get_output()
315 dev_err(vfe->camss->dev, "Can not reserve wm\n"); in vfe_get_output()
323 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_get_output()
329 vfe_release_wm(vfe, output->wm_idx[i]); in vfe_get_output()
332 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_get_output()
339 struct vfe_device *vfe = to_vfe(line); in vfe_gen1_enable() local
342 mutex_lock(&vfe->stream_lock); in vfe_gen1_enable()
344 if (!vfe->stream_count) { in vfe_gen1_enable()
345 vfe->ops_gen1->enable_irq_common(vfe); in vfe_gen1_enable()
346 vfe->ops_gen1->bus_enable_wr_if(vfe, 1); in vfe_gen1_enable()
347 vfe->ops_gen1->set_qos(vfe); in vfe_gen1_enable()
348 vfe->ops_gen1->set_ds(vfe); in vfe_gen1_enable()
351 vfe->stream_count++; in vfe_gen1_enable()
353 mutex_unlock(&vfe->stream_lock); in vfe_gen1_enable()
363 vfe->was_streaming = 1; in vfe_gen1_enable()
371 mutex_lock(&vfe->stream_lock); in vfe_gen1_enable()
373 if (vfe->stream_count == 1) in vfe_gen1_enable()
374 vfe->ops_gen1->bus_enable_wr_if(vfe, 0); in vfe_gen1_enable()
376 vfe->stream_count--; in vfe_gen1_enable()
378 mutex_unlock(&vfe->stream_lock); in vfe_gen1_enable()
383 static void vfe_output_update_ping_addr(struct vfe_device *vfe, in vfe_output_update_ping_addr() argument
396 vfe->ops_gen1->wm_set_ping_addr(vfe, output->wm_idx[i], addr); in vfe_output_update_ping_addr()
398 vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[i]); in vfe_output_update_ping_addr()
402 static void vfe_output_update_pong_addr(struct vfe_device *vfe, in vfe_output_update_pong_addr() argument
415 vfe->ops_gen1->wm_set_pong_addr(vfe, output->wm_idx[i], addr); in vfe_output_update_pong_addr()
417 vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[i]); in vfe_output_update_pong_addr()
421 static void vfe_buf_update_wm_on_next(struct vfe_device *vfe, in vfe_buf_update_wm_on_next() argument
426 vfe_output_frame_drop(vfe, output, 3); in vfe_buf_update_wm_on_next()
430 dev_err_ratelimited(vfe->camss->dev, in vfe_buf_update_wm_on_next()
437 static void vfe_buf_update_wm_on_last(struct vfe_device *vfe, in vfe_buf_update_wm_on_last() argument
443 vfe_output_frame_drop(vfe, output, 1); in vfe_buf_update_wm_on_last()
447 vfe_output_frame_drop(vfe, output, 0); in vfe_buf_update_wm_on_last()
450 dev_err_ratelimited(vfe->camss->dev, in vfe_buf_update_wm_on_last()
457 static void vfe_buf_update_wm_on_new(struct vfe_device *vfe, in vfe_buf_update_wm_on_new() argument
472 vfe_output_update_pong_addr(vfe, output, 0, line); in vfe_buf_update_wm_on_new()
474 vfe_output_update_ping_addr(vfe, output, 0, line); in vfe_buf_update_wm_on_new()
476 vfe_output_frame_drop(vfe, output, 3); in vfe_buf_update_wm_on_new()
480 dev_err_ratelimited(vfe->camss->dev, in vfe_buf_update_wm_on_new()
489 vfe_output_init_addrs(vfe, output, 1, line); in vfe_buf_update_wm_on_new()
490 vfe_output_frame_drop(vfe, output, 1); in vfe_buf_update_wm_on_new()
495 dev_err_ratelimited(vfe->camss->dev, in vfe_buf_update_wm_on_new()
511 static void vfe_isr_halt_ack(struct vfe_device *vfe) in vfe_isr_halt_ack() argument
513 complete(&vfe->halt_complete); in vfe_isr_halt_ack()
514 vfe->ops_gen1->halt_clear(vfe); in vfe_isr_halt_ack()
522 static void vfe_isr_sof(struct vfe_device *vfe, enum vfe_line_id line_id) in vfe_isr_sof() argument
527 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_isr_sof()
528 output = &vfe->line[line_id].output; in vfe_isr_sof()
533 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_isr_sof()
541 static void vfe_isr_reg_update(struct vfe_device *vfe, enum vfe_line_id line_id) in vfe_isr_reg_update() argument
544 struct vfe_line *line = &vfe->line[line_id]; in vfe_isr_reg_update()
547 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_isr_reg_update()
548 vfe->res->hw_ops->reg_update_clear(vfe, line_id); in vfe_isr_reg_update()
555 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_isr_reg_update()
587 vfe_output_frame_drop(vfe, output, 2); in vfe_isr_reg_update()
590 vfe_output_frame_drop(vfe, output, 3); in vfe_isr_reg_update()
593 vfe_output_frame_drop(vfe, output, 0); in vfe_isr_reg_update()
597 vfe_output_init_addrs(vfe, output, 1, &vfe->line[line_id]); in vfe_isr_reg_update()
600 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_isr_reg_update()
608 static void vfe_isr_wm_done(struct vfe_device *vfe, u8 wm) in vfe_isr_wm_done() argument
618 active_index = vfe->ops_gen1->wm_get_ping_pong_status(vfe, wm); in vfe_isr_wm_done()
620 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_isr_wm_done()
622 if (vfe->wm_output_map[wm] == VFE_LINE_NONE) { in vfe_isr_wm_done()
623 dev_err_ratelimited(vfe->camss->dev, in vfe_isr_wm_done()
627 output = &vfe->line[vfe->wm_output_map[wm]].output; in vfe_isr_wm_done()
630 dev_err_ratelimited(vfe->camss->dev, in vfe_isr_wm_done()
638 dev_err_ratelimited(vfe->camss->dev, in vfe_isr_wm_done()
652 vfe_buf_update_wm_on_last(vfe, output); in vfe_isr_wm_done()
655 vfe_buf_update_wm_on_next(vfe, output); in vfe_isr_wm_done()
660 vfe->ops_gen1->wm_set_ping_addr(vfe, output->wm_idx[i], new_addr[i]); in vfe_isr_wm_done()
663 vfe->ops_gen1->wm_set_pong_addr(vfe, output->wm_idx[i], new_addr[i]); in vfe_isr_wm_done()
665 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_isr_wm_done()
675 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_isr_wm_done()
691 struct vfe_device *vfe = to_vfe(line); in vfe_queue_buffer() local
697 spin_lock_irqsave(&vfe->output_lock, flags); in vfe_queue_buffer()
699 vfe_buf_update_wm_on_new(vfe, output, buf, line); in vfe_queue_buffer()
701 spin_unlock_irqrestore(&vfe->output_lock, flags); in vfe_queue_buffer()