Lines Matching full:fe

17 #include "pisp-fe.h"
142 #define pisp_fe_dbg(fe, fmt, arg...) dev_dbg((fe)->v4l2_dev->dev, fmt, ##arg) argument
143 #define pisp_fe_info(fe, fmt, arg...) dev_info((fe)->v4l2_dev->dev, fmt, ##arg) argument
144 #define pisp_fe_err(fe, fmt, arg...) dev_err((fe)->v4l2_dev->dev, fmt, ##arg) argument
146 static inline u32 pisp_fe_reg_read(struct pisp_fe_device *fe, u32 offset) in pisp_fe_reg_read() argument
148 return readl(fe->base + offset); in pisp_fe_reg_read()
151 static inline void pisp_fe_reg_write(struct pisp_fe_device *fe, u32 offset, in pisp_fe_reg_write() argument
154 writel(val, fe->base + offset); in pisp_fe_reg_write()
157 static inline void pisp_fe_reg_write_relaxed(struct pisp_fe_device *fe, in pisp_fe_reg_write_relaxed() argument
160 writel_relaxed(val, fe->base + offset); in pisp_fe_reg_write_relaxed()
165 struct pisp_fe_device *fe = s->private; in pisp_fe_regs_show() local
168 ret = pm_runtime_resume_and_get(fe->v4l2_dev->dev); in pisp_fe_regs_show()
172 pisp_fe_reg_write(fe, FE_CONTROL, FE_CONTROL_LATCH_REGS); in pisp_fe_regs_show()
174 #define DUMP(reg) seq_printf(s, #reg " \t0x%08x\n", pisp_fe_reg_read(fe, reg)) in pisp_fe_regs_show()
185 pm_runtime_put(fe->v4l2_dev->dev); in pisp_fe_regs_show()
192 static void pisp_fe_config_write(struct pisp_fe_device *fe, in pisp_fe_config_write() argument
206 pisp_fe_reg_write_relaxed(fe, PISP_FE_CONFIG_BASE_OFFSET + i, in pisp_fe_config_write()
210 void pisp_fe_isr(struct pisp_fe_device *fe, bool *sof, bool *eof) in pisp_fe_isr() argument
214 pisp_fe_reg_write(fe, FE_CONTROL, FE_CONTROL_LATCH_REGS); in pisp_fe_isr()
215 status = pisp_fe_reg_read(fe, FE_STATUS); in pisp_fe_isr()
216 out_status = pisp_fe_reg_read(fe, FE_OUTPUT_STATUS); in pisp_fe_isr()
217 frame_status = pisp_fe_reg_read(fe, FE_FRAME_STATUS); in pisp_fe_isr()
218 error_status = pisp_fe_reg_read(fe, FE_ERROR_STATUS); in pisp_fe_isr()
220 int_status = pisp_fe_reg_read(fe, FE_INT_STATUS); in pisp_fe_isr()
221 pisp_fe_reg_write(fe, FE_INT_STATUS, int_status); in pisp_fe_isr()
274 int pisp_fe_validate_config(struct pisp_fe_device *fe, in pisp_fe_validate_config() argument
287 pisp_fe_err(fe, "%s: Input config not valid", __func__); in pisp_fe_validate_config()
295 pisp_fe_err(fe, "%s: Output %u not valid", in pisp_fe_validate_config()
308 pisp_fe_err(fe, "%s: Stats config not valid", __func__); in pisp_fe_validate_config()
315 void pisp_fe_submit_job(struct pisp_fe_device *fe, struct vb2_buffer **vb2_bufs, in pisp_fe_submit_job() argument
353 status = pisp_fe_reg_read(fe, FE_STATUS); in pisp_fe_submit_job()
363 pisp_fe_config_write(fe, cfg, 0, in pisp_fe_submit_job()
376 pisp_fe_config_write(fe, cfg, p->offset, p->size); in pisp_fe_submit_job()
380 pisp_fe_reg_write(fe, FE_CONTROL, FE_CONTROL_QUEUE); in pisp_fe_submit_job()
383 void pisp_fe_start(struct pisp_fe_device *fe) in pisp_fe_start() argument
385 pisp_fe_reg_write(fe, FE_CONTROL, FE_CONTROL_RESET); in pisp_fe_start()
386 pisp_fe_reg_write(fe, FE_INT_STATUS, ~0); in pisp_fe_start()
387 pisp_fe_reg_write(fe, FE_INT_EN, FE_INT_EOF | FE_INT_SOF | in pisp_fe_start()
389 fe->inframe_count = 0; in pisp_fe_start()
392 void pisp_fe_stop(struct pisp_fe_device *fe) in pisp_fe_stop() argument
394 pisp_fe_reg_write(fe, FE_INT_EN, 0); in pisp_fe_stop()
395 pisp_fe_reg_write(fe, FE_CONTROL, FE_CONTROL_ABORT); in pisp_fe_stop()
397 WARN_ON(pisp_fe_reg_read(fe, FE_STATUS)); in pisp_fe_stop()
398 pisp_fe_reg_write(fe, FE_INT_STATUS, ~0); in pisp_fe_stop()
517 struct pisp_fe_device *fe = container_of(sd, struct pisp_fe_device, sd); in pisp_fe_link_validate() local
519 pisp_fe_dbg(fe, "%s: link \"%s\":%u -> \"%s\":%u\n", __func__, in pisp_fe_link_validate()
544 int pisp_fe_init(struct pisp_fe_device *fe, struct dentry *debugfs) in pisp_fe_init() argument
548 debugfs_create_file("fe_regs", 0440, debugfs, fe, &pisp_fe_regs_fops); in pisp_fe_init()
550 fe->hw_revision = pisp_fe_reg_read(fe, FE_VERSION); in pisp_fe_init()
551 pisp_fe_info(fe, "PiSP FE HW v%u.%u\n", in pisp_fe_init()
552 (fe->hw_revision >> 24) & 0xff, in pisp_fe_init()
553 (fe->hw_revision >> 20) & 0x0f); in pisp_fe_init()
555 fe->pad[FE_STREAM_PAD].flags = in pisp_fe_init()
557 fe->pad[FE_CONFIG_PAD].flags = MEDIA_PAD_FL_SINK; in pisp_fe_init()
558 fe->pad[FE_OUTPUT0_PAD].flags = MEDIA_PAD_FL_SOURCE; in pisp_fe_init()
559 fe->pad[FE_OUTPUT1_PAD].flags = MEDIA_PAD_FL_SOURCE; in pisp_fe_init()
560 fe->pad[FE_STATS_PAD].flags = MEDIA_PAD_FL_SOURCE; in pisp_fe_init()
562 ret = media_entity_pads_init(&fe->sd.entity, ARRAY_SIZE(fe->pad), in pisp_fe_init()
563 fe->pad); in pisp_fe_init()
568 v4l2_subdev_init(&fe->sd, &pisp_fe_subdev_ops); in pisp_fe_init()
569 fe->sd.internal_ops = &pisp_fe_internal_ops; in pisp_fe_init()
570 fe->sd.entity.function = MEDIA_ENT_F_PROC_VIDEO_SCALER; in pisp_fe_init()
571 fe->sd.entity.ops = &pisp_fe_entity_ops; in pisp_fe_init()
572 fe->sd.entity.name = "pisp-fe"; in pisp_fe_init()
573 fe->sd.flags = V4L2_SUBDEV_FL_HAS_DEVNODE; in pisp_fe_init()
574 fe->sd.owner = THIS_MODULE; in pisp_fe_init()
575 snprintf(fe->sd.name, sizeof(fe->sd.name), "pisp-fe"); in pisp_fe_init()
577 ret = v4l2_subdev_init_finalize(&fe->sd); in pisp_fe_init()
581 ret = v4l2_device_register_subdev(fe->v4l2_dev, &fe->sd); in pisp_fe_init()
583 pisp_fe_err(fe, "Failed register pisp fe subdev (%d)\n", ret); in pisp_fe_init()
588 WARN_ON(pisp_fe_reg_read(fe, FE_STATUS)); in pisp_fe_init()
593 v4l2_subdev_cleanup(&fe->sd); in pisp_fe_init()
595 media_entity_cleanup(&fe->sd.entity); in pisp_fe_init()
600 void pisp_fe_uninit(struct pisp_fe_device *fe) in pisp_fe_uninit() argument
602 v4l2_device_unregister_subdev(&fe->sd); in pisp_fe_uninit()
603 v4l2_subdev_cleanup(&fe->sd); in pisp_fe_uninit()
604 media_entity_cleanup(&fe->sd.entity); in pisp_fe_uninit()