Lines Matching defs:fimc

29 #include "fimc-core.h"
30 #include "fimc-reg.h"
33 static int fimc_capture_hw_init(struct fimc_dev *fimc)
35 struct fimc_source_info *si = &fimc->vid_cap.source_config;
36 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
44 ret = fimc_hw_camblk_cfg_writeback(fimc);
49 spin_lock_irqsave(&fimc->slock, flags);
53 fimc_hw_set_camera_polarity(fimc, si);
54 fimc_hw_set_camera_type(fimc, si);
55 fimc_hw_set_camera_source(fimc, si);
56 fimc_hw_set_camera_offset(fimc, &ctx->s_frame);
68 if (fimc->drv_data->alpha_color)
70 clear_bit(ST_CAPT_APPLY_CFG, &fimc->state);
72 spin_unlock_irqrestore(&fimc->slock, flags);
78 * Set fimc->state to indicate stream off and the hardware shut down state.
84 static int fimc_capture_state_cleanup(struct fimc_dev *fimc, bool suspend)
86 struct fimc_vid_cap *cap = &fimc->vid_cap;
91 spin_lock_irqsave(&fimc->slock, flags);
92 streaming = fimc->state & (1 << ST_CAPT_ISP_STREAM);
94 fimc->state &= ~(1 << ST_CAPT_RUN | 1 << ST_CAPT_SHUT |
97 fimc->state |= (1 << ST_CAPT_SUSPENDED);
99 fimc->state &= ~(1 << ST_CAPT_PEND | 1 << ST_CAPT_SUSPENDED);
115 fimc_hw_reset(fimc);
118 spin_unlock_irqrestore(&fimc->slock, flags);
126 static int fimc_stop_capture(struct fimc_dev *fimc, bool suspend)
130 if (!fimc_capture_active(fimc))
133 spin_lock_irqsave(&fimc->slock, flags);
134 set_bit(ST_CAPT_SHUT, &fimc->state);
135 fimc_deactivate_capture(fimc);
136 spin_unlock_irqrestore(&fimc->slock, flags);
138 wait_event_timeout(fimc->irq_queue,
139 !test_bit(ST_CAPT_SHUT, &fimc->state),
142 return fimc_capture_state_cleanup(fimc, suspend);
149 * To be called from within the interrupt handler with fimc.slock
155 struct fimc_dev *fimc = ctx->fimc_dev;
158 fimc_hw_set_camera_offset(fimc, &ctx->s_frame);
171 if (fimc->drv_data->alpha_color)
174 clear_bit(ST_CAPT_APPLY_CFG, &fimc->state);
178 void fimc_capture_irq_handler(struct fimc_dev *fimc, int deq_buf)
180 struct fimc_vid_cap *cap = &fimc->vid_cap;
186 if (test_and_clear_bit(ST_CAPT_SHUT, &fimc->state)) {
187 wake_up(&fimc->irq_queue);
192 test_bit(ST_CAPT_RUN, &fimc->state) && deq_buf) {
204 fimc_hw_set_output_addr(fimc, &v_buf->paddr, cap->buf_index);
211 fimc_hw_get_frame_index(fimc), v_buf->index);
223 s32 index = fimc_hw_get_frame_index(fimc);
238 clear_bit(ST_CAPT_RUN, &fimc->state);
243 set_bit(ST_CAPT_RUN, &fimc->state);
246 if (test_bit(ST_CAPT_APPLY_CFG, &fimc->state))
250 fimc_deactivate_capture(fimc);
251 clear_bit(ST_CAPT_STREAM, &fimc->state);
255 fimc_hw_get_frame_index(fimc), cap->active_buf_cnt);
262 struct fimc_dev *fimc = ctx->fimc_dev;
263 struct fimc_vid_cap *vid_cap = &fimc->vid_cap;
269 ret = fimc_capture_hw_init(fimc);
271 fimc_capture_state_cleanup(fimc, false);
275 set_bit(ST_CAPT_PEND, &fimc->state);
277 min_bufs = fimc->vid_cap.reqbufs_count > 1 ? 2 : 1;
280 !test_and_set_bit(ST_CAPT_STREAM, &fimc->state)) {
283 if (!test_and_set_bit(ST_CAPT_ISP_STREAM, &fimc->state))
293 struct fimc_dev *fimc = ctx->fimc_dev;
295 if (!fimc_capture_active(fimc))
298 fimc_stop_capture(fimc, false);
301 int fimc_capture_suspend(struct fimc_dev *fimc)
303 bool suspend = fimc_capture_busy(fimc);
305 int ret = fimc_stop_capture(fimc, suspend);
308 return fimc_pipeline_call(&fimc->vid_cap.ve, close);
313 int fimc_capture_resume(struct fimc_dev *fimc)
315 struct fimc_vid_cap *vid_cap = &fimc->vid_cap;
320 if (!test_and_clear_bit(ST_CAPT_SUSPENDED, &fimc->state))
323 INIT_LIST_HEAD(&fimc->vid_cap.active_buf_q);
326 fimc_capture_hw_init(fimc);
328 clear_bit(ST_CAPT_SUSPENDED, &fimc->state);
406 struct fimc_dev *fimc = ctx->fimc_dev;
407 struct fimc_vid_cap *vid_cap = &fimc->vid_cap;
412 spin_lock_irqsave(&fimc->slock, flags);
415 if (!test_bit(ST_CAPT_SUSPENDED, &fimc->state) &&
416 !test_bit(ST_CAPT_STREAM, &fimc->state) &&
422 fimc_hw_set_output_addr(fimc, &buf->paddr, buf_id);
437 !test_and_set_bit(ST_CAPT_STREAM, &fimc->state)) {
441 spin_unlock_irqrestore(&fimc->slock, flags);
443 if (test_and_set_bit(ST_CAPT_ISP_STREAM, &fimc->state))
451 spin_unlock_irqrestore(&fimc->slock, flags);
464 static int fimc_capture_set_default_format(struct fimc_dev *fimc);
468 struct fimc_dev *fimc = video_drvdata(file);
469 struct fimc_vid_cap *vc = &fimc->vid_cap;
473 dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state);
475 mutex_lock(&fimc->lock);
477 if (fimc_m2m_active(fimc))
480 set_bit(ST_CAPT_BUSY, &fimc->state);
481 ret = pm_runtime_resume_and_get(&fimc->pdev->dev);
487 pm_runtime_put_sync(&fimc->pdev->dev);
502 ret = fimc_capture_set_default_format(fimc);
505 clear_bit(ST_CAPT_BUSY, &fimc->state);
506 pm_runtime_put_sync(&fimc->pdev->dev);
511 mutex_unlock(&fimc->lock);
517 struct fimc_dev *fimc = video_drvdata(file);
518 struct fimc_vid_cap *vc = &fimc->vid_cap;
522 dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state);
524 mutex_lock(&fimc->lock);
534 clear_bit(ST_CAPT_BUSY, &fimc->state);
536 clear_bit(ST_CAPT_SUSPENDED, &fimc->state);
543 pm_runtime_put_sync(&fimc->pdev->dev);
544 mutex_unlock(&fimc->lock);
567 struct fimc_dev *fimc = ctx->fimc_dev;
568 const struct fimc_variant *var = fimc->variant;
644 struct fimc_dev *fimc = ctx->fimc_dev;
645 const struct fimc_variant *var = fimc->variant;
716 struct fimc_dev *fimc = video_drvdata(file);
718 __fimc_vidioc_querycap(&fimc->pdev->dev, cap);
755 * @fmt_id: fimc pixel format id corresponding to returned @tfmt (output)
763 struct fimc_dev *fimc = ctx->fimc_dev;
764 struct fimc_pipeline *p = to_fimc_pipeline(fimc->vid_cap.ve.pipe);
796 while (me != &fimc->vid_cap.subdev.entity) {
892 struct fimc_dev *fimc = video_drvdata(file);
894 __fimc_get_format(&fimc->vid_cap.ctx->d_frame, f);
899 * Try or set format on the fimc.X.capture video node and additionally
903 static int __video_try_or_set_format(struct fimc_dev *fimc,
909 struct fimc_vid_cap *vc = &fimc->vid_cap;
947 mf = try ? &mbus_fmt : &fimc->vid_cap.ci_fmt;
987 struct fimc_dev *fimc = video_drvdata(file);
990 return __video_try_or_set_format(fimc, f, true, &inp_fmt, &out_fmt);
1007 static int __fimc_capture_set_format(struct fimc_dev *fimc,
1010 struct fimc_vid_cap *vc = &fimc->vid_cap;
1017 if (vb2_is_busy(&fimc->vid_cap.vbq))
1020 ret = __video_try_or_set_format(fimc, f, false, &inp_fmt, &ff->fmt);
1052 struct fimc_dev *fimc = video_drvdata(file);
1054 return __fimc_capture_set_format(fimc, f);
1060 struct fimc_dev *fimc = video_drvdata(file);
1061 struct exynos_video_entity *ve = &fimc->vid_cap.ve;
1092 * @fimc: the FIMC device this context applies to
1096 static int fimc_pipeline_validate(struct fimc_dev *fimc)
1099 struct fimc_vid_cap *vc = &fimc->vid_cap;
1177 struct fimc_dev *fimc = video_drvdata(file);
1178 struct fimc_vid_cap *vc = &fimc->vid_cap;
1184 if (fimc_capture_active(fimc))
1209 ret = fimc_pipeline_validate(fimc);
1228 struct fimc_dev *fimc = video_drvdata(file);
1229 struct fimc_vid_cap *vc = &fimc->vid_cap;
1247 struct fimc_dev *fimc = video_drvdata(file);
1253 fimc->vid_cap.reqbufs_count = reqbufs->count;
1261 struct fimc_dev *fimc = video_drvdata(file);
1262 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
1298 struct fimc_dev *fimc = video_drvdata(file);
1299 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
1325 spin_lock_irqsave(&fimc->slock, flags);
1328 spin_unlock_irqrestore(&fimc->slock, flags);
1330 set_bit(ST_CAPT_APPLY_CFG, &fimc->state);
1367 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1368 struct fimc_vid_cap *vc = &fimc->vid_cap;
1374 if (WARN_ON(fimc == NULL))
1379 fimc->vid_cap.input);
1382 fimc->vid_cap.input = 0;
1426 struct fimc_dev *fimc;
1437 fimc = si ? source_to_sensor_info(si)->host : NULL;
1439 if (fimc && arg && notification == S5P_FIMC_TX_END_NOTIFY &&
1440 test_bit(ST_CAPT_PEND, &fimc->state)) {
1442 spin_lock_irqsave(&fimc->slock, irq_flags);
1443 if (!list_empty(&fimc->vid_cap.active_buf_q)) {
1444 buf = list_entry(fimc->vid_cap.active_buf_q.next,
1449 fimc_capture_irq_handler(fimc, 1);
1450 fimc_deactivate_capture(fimc);
1451 spin_unlock_irqrestore(&fimc->slock, irq_flags);
1473 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1474 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
1485 mutex_lock(&fimc->lock);
1496 *mf = fimc->vid_cap.wb_fmt;
1500 *mf = fimc->vid_cap.ci_fmt;
1504 mutex_unlock(&fimc->lock);
1514 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1516 struct fimc_vid_cap *vc = &fimc->vid_cap;
1527 mutex_lock(&fimc->lock);
1530 mutex_unlock(&fimc->lock);
1555 mutex_lock(&fimc->lock);
1572 mutex_unlock(&fimc->lock);
1580 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1581 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
1589 mutex_lock(&fimc->lock);
1600 mutex_unlock(&fimc->lock);
1611 mutex_unlock(&fimc->lock);
1628 mutex_unlock(&fimc->lock);
1636 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1637 struct fimc_ctx *ctx = fimc->vid_cap.ctx;
1646 mutex_lock(&fimc->lock);
1658 mutex_unlock(&fimc->lock);
1665 spin_lock_irqsave(&fimc->slock, flags);
1667 set_bit(ST_CAPT_APPLY_CFG, &fimc->state);
1670 spin_unlock_irqrestore(&fimc->slock, flags);
1676 mutex_unlock(&fimc->lock);
1693 static int fimc_capture_set_default_format(struct fimc_dev *fimc)
1706 return __fimc_capture_set_format(fimc, &fmt);
1709 /* fimc->lock must be already initialized */
1710 static int fimc_register_capture_device(struct fimc_dev *fimc,
1713 struct video_device *vfd = &fimc->vid_cap.ve.vdev;
1714 struct vb2_queue *q = &fimc->vid_cap.vbq;
1724 ctx->fimc_dev = fimc;
1732 snprintf(vfd->name, sizeof(vfd->name), "fimc.%d.capture", fimc->id);
1740 vfd->lock = &fimc->lock;
1743 video_set_drvdata(vfd, fimc);
1744 vid_cap = &fimc->vid_cap;
1760 q->lock = &fimc->lock;
1761 q->dev = &fimc->pdev->dev;
1812 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1815 if (fimc == NULL)
1818 ret = fimc_register_m2m_device(fimc, sd->v4l2_dev);
1822 fimc->vid_cap.ve.pipe = v4l2_get_subdev_hostdata(sd);
1824 ret = fimc_register_capture_device(fimc, sd->v4l2_dev);
1826 fimc_unregister_m2m_device(fimc);
1827 fimc->vid_cap.ve.pipe = NULL;
1835 struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
1838 if (fimc == NULL)
1841 mutex_lock(&fimc->lock);
1843 fimc_unregister_m2m_device(fimc);
1844 vdev = &fimc->vid_cap.ve.vdev;
1849 fimc_ctrls_delete(fimc->vid_cap.ctx);
1850 fimc->vid_cap.ve.pipe = NULL;
1852 kfree(fimc->vid_cap.ctx);
1853 fimc->vid_cap.ctx = NULL;
1855 mutex_unlock(&fimc->lock);
1863 int fimc_initialize_capture_subdev(struct fimc_dev *fimc)
1865 struct v4l2_subdev *sd = &fimc->vid_cap.subdev;
1870 snprintf(sd->name, sizeof(sd->name), "FIMC.%d", fimc->id);
1872 fimc->vid_cap.sd_pads[FIMC_SD_PAD_SINK_CAM].flags = MEDIA_PAD_FL_SINK;
1873 fimc->vid_cap.sd_pads[FIMC_SD_PAD_SINK_FIFO].flags = MEDIA_PAD_FL_SINK;
1874 fimc->vid_cap.sd_pads[FIMC_SD_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
1876 fimc->vid_cap.sd_pads);
1883 v4l2_set_subdevdata(sd, fimc);
1887 void fimc_unregister_capture_subdev(struct fimc_dev *fimc)
1889 struct v4l2_subdev *sd = &fimc->vid_cap.subdev;