Lines Matching refs:prev

149 preview_config_luma_enhancement(struct isp_prev_device *prev,
152 struct isp_device *isp = to_isp_device(prev);
168 preview_enable_luma_enhancement(struct isp_prev_device *prev, bool enable)
170 struct isp_device *isp = to_isp_device(prev);
183 static void preview_enable_invalaw(struct isp_prev_device *prev, bool enable)
185 struct isp_device *isp = to_isp_device(prev);
198 static void preview_config_hmed(struct isp_prev_device *prev,
201 struct isp_device *isp = to_isp_device(prev);
213 static void preview_enable_hmed(struct isp_prev_device *prev, bool enable)
215 struct isp_device *isp = to_isp_device(prev);
233 static void preview_config_cfa(struct isp_prev_device *prev,
242 const unsigned int *order = cfa_coef_order[prev->params.cfa_order];
244 struct isp_device *isp = to_isp_device(prev);
269 preview_config_chroma_suppression(struct isp_prev_device *prev,
272 struct isp_device *isp = to_isp_device(prev);
285 preview_enable_chroma_suppression(struct isp_prev_device *prev, bool enable)
287 struct isp_device *isp = to_isp_device(prev);
303 preview_config_whitebalance(struct isp_prev_device *prev,
306 struct isp_device *isp = to_isp_device(prev);
342 preview_config_blkadj(struct isp_prev_device *prev,
345 struct isp_device *isp = to_isp_device(prev);
358 preview_config_rgb_blending(struct isp_prev_device *prev,
361 struct isp_device *isp = to_isp_device(prev);
396 preview_config_csc(struct isp_prev_device *prev,
399 struct isp_device *isp = to_isp_device(prev);
428 preview_config_yc_range(struct isp_prev_device *prev,
431 struct isp_device *isp = to_isp_device(prev);
446 preview_config_dcor(struct isp_prev_device *prev,
449 struct isp_device *isp = to_isp_device(prev);
468 static void preview_enable_dcor(struct isp_prev_device *prev, bool enable)
470 struct isp_device *isp = to_isp_device(prev);
484 preview_enable_drkframe_capture(struct isp_prev_device *prev, bool enable)
486 struct isp_device *isp = to_isp_device(prev);
499 static void preview_enable_drkframe(struct isp_prev_device *prev, bool enable)
501 struct isp_device *isp = to_isp_device(prev);
515 preview_config_noisefilter(struct isp_prev_device *prev,
518 struct isp_device *isp = to_isp_device(prev);
535 preview_enable_noisefilter(struct isp_prev_device *prev, bool enable)
537 struct isp_device *isp = to_isp_device(prev);
551 preview_config_gammacorrn(struct isp_prev_device *prev,
554 struct isp_device *isp = to_isp_device(prev);
584 preview_enable_gammacorrn(struct isp_prev_device *prev, bool enable)
586 struct isp_device *isp = to_isp_device(prev);
602 preview_config_contrast(struct isp_prev_device *prev,
605 struct isp_device *isp = to_isp_device(prev);
616 preview_config_brightness(struct isp_prev_device *prev,
619 struct isp_device *isp = to_isp_device(prev);
633 preview_update_contrast(struct isp_prev_device *prev, u8 contrast)
638 spin_lock_irqsave(&prev->params.lock, flags);
639 params = (prev->params.active & OMAP3ISP_PREV_CONTRAST)
640 ? &prev->params.params[0] : &prev->params.params[1];
646 spin_unlock_irqrestore(&prev->params.lock, flags);
655 preview_update_brightness(struct isp_prev_device *prev, u8 brightness)
660 spin_lock_irqsave(&prev->params.lock, flags);
661 params = (prev->params.active & OMAP3ISP_PREV_BRIGHTNESS)
662 ? &prev->params.params[0] : &prev->params.params[1];
668 spin_unlock_irqrestore(&prev->params.lock, flags);
672 preview_params_lock(struct isp_prev_device *prev, u32 update, bool shadow)
674 u32 active = prev->params.active;
678 prev->params.params[0].busy |= ~active & update;
679 prev->params.params[1].busy |= active & update;
682 update = (prev->params.params[0].update & active)
683 | (prev->params.params[1].update & ~active);
685 prev->params.params[0].busy |= active & update;
686 prev->params.params[1].busy |= ~active & update;
693 preview_params_unlock(struct isp_prev_device *prev, u32 update, bool shadow)
695 u32 active = prev->params.active;
701 prev->params.params[0].update |= (~active & update);
702 prev->params.params[1].update |= (active & update);
703 prev->params.params[0].busy &= active;
704 prev->params.params[1].busy &= ~active;
709 prev->params.params[0].update &= ~(active & update);
710 prev->params.params[1].update &= ~(~active & update);
711 prev->params.params[0].busy &= ~active;
712 prev->params.params[1].busy &= active;
716 static void preview_params_switch(struct isp_prev_device *prev)
724 to_switch = (prev->params.params[0].update & ~prev->params.active)
725 | (prev->params.params[1].update & prev->params.active);
726 to_switch &= ~(prev->params.params[0].busy |
727 prev->params.params[1].busy);
731 prev->params.active ^= to_switch;
736 prev->params.params[0].update &= ~(~prev->params.active & to_switch);
737 prev->params.params[1].update &= ~(prev->params.active & to_switch);
853 * @prev: ISP preview engine
859 static int preview_config(struct isp_prev_device *prev,
872 spin_lock_irqsave(&prev->params.lock, flags);
873 preview_params_lock(prev, cfg->update, true);
874 active = prev->params.active;
875 spin_unlock_irqrestore(&prev->params.lock, flags);
887 params = &prev->params.params[!!(active & bit)];
909 spin_lock_irqsave(&prev->params.lock, flags);
910 preview_params_unlock(prev, update, true);
911 preview_params_switch(prev);
912 spin_unlock_irqrestore(&prev->params.lock, flags);
919 * @prev: pointer to preview private structure
925 static void preview_setup_hw(struct isp_prev_device *prev, u32 update,
941 params = &prev->params.params[!(active & bit)];
945 attr->config(prev, params);
947 attr->enable(prev, true);
950 attr->enable(prev, false);
957 * @prev: pointer to previewer private structure
960 static void preview_config_ycpos(struct isp_prev_device *prev, u32 pixelcode)
962 struct isp_device *isp = to_isp_device(prev);
985 static void preview_config_averager(struct isp_prev_device *prev, u8 average)
987 struct isp_device *isp = to_isp_device(prev);
997 * @prev: The preview engine
1008 static void preview_config_input_format(struct isp_prev_device *prev,
1011 struct isp_device *isp = to_isp_device(prev);
1023 prev->params.cfa_order = 0;
1026 prev->params.cfa_order = 1;
1029 prev->params.cfa_order = 2;
1032 prev->params.cfa_order = 3;
1045 params = (prev->params.active & OMAP3ISP_PREV_CFA)
1046 ? &prev->params.params[0] : &prev->params.params[1];
1048 preview_config_cfa(prev, params);
1062 static void preview_config_input_size(struct isp_prev_device *prev, u32 active)
1064 const struct v4l2_mbus_framefmt *format = &prev->formats[PREV_PAD_SINK];
1065 struct isp_device *isp = to_isp_device(prev);
1066 unsigned int sph = prev->crop.left;
1067 unsigned int eph = prev->crop.left + prev->crop.width - 1;
1068 unsigned int slv = prev->crop.top;
1069 unsigned int elv = prev->crop.top + prev->crop.height - 1;
1080 features = (prev->params.params[0].features & active)
1081 | (prev->params.params[1].features & ~active);
1104 * @prev: Preview module
1113 preview_config_inlineoffset(struct isp_prev_device *prev, u32 offset)
1115 struct isp_device *isp = to_isp_device(prev);
1127 static void preview_set_inaddr(struct isp_prev_device *prev, u32 addr)
1129 struct isp_device *isp = to_isp_device(prev);
1140 static void preview_config_outlineoffset(struct isp_prev_device *prev,
1143 struct isp_device *isp = to_isp_device(prev);
1155 static void preview_set_outaddr(struct isp_prev_device *prev, u32 addr)
1157 struct isp_device *isp = to_isp_device(prev);
1162 static void preview_adjust_bandwidth(struct isp_prev_device *prev)
1164 struct isp_pipeline *pipe = to_isp_pipeline(&prev->subdev.entity);
1165 struct isp_device *isp = to_isp_device(prev);
1166 const struct v4l2_mbus_framefmt *ifmt = &prev->formats[PREV_PAD_SINK];
1176 if (prev->input != PREVIEW_INPUT_MEMORY) {
1215 int omap3isp_preview_busy(struct isp_prev_device *prev)
1217 struct isp_device *isp = to_isp_device(prev);
1228 struct isp_prev_device *prev = &isp->isp_prev;
1231 prev->params.params[0].update = prev->params.active & update;
1232 prev->params.params[1].update = ~prev->params.active & update;
1234 preview_setup_hw(prev, update, prev->params.active);
1236 prev->params.params[0].update = 0;
1237 prev->params.params[1].update = 0;
1247 static void preview_print_status(struct isp_prev_device *prev)
1249 struct isp_device *isp = to_isp_device(prev);
1295 * @prev: pointer to previewer private structure
1297 static void preview_init_params(struct isp_prev_device *prev)
1302 spin_lock_init(&prev->params.lock);
1304 prev->params.active = ~0;
1305 prev->params.params[0].busy = 0;
1306 prev->params.params[0].update = OMAP3ISP_PREV_FEATURES_END - 1;
1307 prev->params.params[1].busy = 0;
1308 prev->params.params[1].update = 0;
1310 params = &prev->params.params[0];
1358 * @prev: pointer to previewer private structure
1361 static unsigned int preview_max_out_width(struct isp_prev_device *prev)
1363 struct isp_device *isp = to_isp_device(prev);
1378 static void preview_configure(struct isp_prev_device *prev)
1380 struct isp_device *isp = to_isp_device(prev);
1387 spin_lock_irqsave(&prev->params.lock, flags);
1389 update = preview_params_lock(prev, 0, false);
1390 active = prev->params.active;
1391 spin_unlock_irqrestore(&prev->params.lock, flags);
1394 format = &prev->formats[PREV_PAD_SINK];
1397 preview_adjust_bandwidth(prev);
1399 preview_config_input_format(prev, info);
1400 preview_config_input_size(prev, active);
1402 if (prev->input == PREVIEW_INPUT_CCDC)
1403 preview_config_inlineoffset(prev, 0);
1405 preview_config_inlineoffset(prev, ALIGN(format->width, 0x20) *
1408 preview_setup_hw(prev, update, active);
1411 format = &prev->formats[PREV_PAD_SOURCE];
1413 if (prev->output & PREVIEW_OUTPUT_MEMORY)
1420 if (prev->output & PREVIEW_OUTPUT_RESIZER)
1427 if (prev->output & PREVIEW_OUTPUT_MEMORY)
1428 preview_config_outlineoffset(prev,
1431 preview_config_averager(prev, 0);
1432 preview_config_ycpos(prev, format->code);
1434 spin_lock_irqsave(&prev->params.lock, flags);
1435 preview_params_unlock(prev, update, false);
1436 spin_unlock_irqrestore(&prev->params.lock, flags);
1443 static void preview_enable_oneshot(struct isp_prev_device *prev)
1445 struct isp_device *isp = to_isp_device(prev);
1451 if (prev->input == PREVIEW_INPUT_MEMORY)
1459 void omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev)
1467 if (prev->state == ISP_PIPELINE_STREAM_CONTINUOUS &&
1468 prev->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) {
1469 preview_enable_oneshot(prev);
1470 isp_video_dmaqueue_flags_clr(&prev->video_out);
1474 static void preview_isr_buffer(struct isp_prev_device *prev)
1476 struct isp_pipeline *pipe = to_isp_pipeline(&prev->subdev.entity);
1480 if (prev->output & PREVIEW_OUTPUT_MEMORY) {
1481 buffer = omap3isp_video_buffer_next(&prev->video_out);
1483 preview_set_outaddr(prev, buffer->dma);
1489 if (prev->input == PREVIEW_INPUT_MEMORY) {
1490 buffer = omap3isp_video_buffer_next(&prev->video_in);
1492 preview_set_inaddr(prev, buffer->dma);
1496 switch (prev->state) {
1508 preview_enable_oneshot(prev);
1522 void omap3isp_preview_isr(struct isp_prev_device *prev)
1528 if (omap3isp_module_sync_is_stopping(&prev->wait, &prev->stopping))
1531 spin_lock_irqsave(&prev->params.lock, flags);
1532 preview_params_switch(prev);
1533 update = preview_params_lock(prev, 0, false);
1534 active = prev->params.active;
1535 spin_unlock_irqrestore(&prev->params.lock, flags);
1537 preview_setup_hw(prev, update, active);
1538 preview_config_input_size(prev, active);
1540 if (prev->input == PREVIEW_INPUT_MEMORY ||
1541 prev->output & PREVIEW_OUTPUT_MEMORY)
1542 preview_isr_buffer(prev);
1543 else if (prev->state == ISP_PIPELINE_STREAM_CONTINUOUS)
1544 preview_enable_oneshot(prev);
1546 spin_lock_irqsave(&prev->params.lock, flags);
1547 preview_params_unlock(prev, update, false);
1548 spin_unlock_irqrestore(&prev->params.lock, flags);
1558 struct isp_prev_device *prev = &video->isp->isp_prev;
1561 preview_set_inaddr(prev, buffer->dma);
1564 preview_set_outaddr(prev, buffer->dma);
1583 struct isp_prev_device *prev =
1588 preview_update_brightness(prev, ctrl->val);
1591 preview_update_contrast(prev, ctrl->val);
1611 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
1615 return preview_config(prev, arg);
1630 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
1631 struct isp_video *video_out = &prev->video_out;
1632 struct isp_device *isp = to_isp_device(prev);
1633 struct device *dev = to_device(prev);
1635 if (prev->state == ISP_PIPELINE_STREAM_STOPPED) {
1640 preview_configure(prev);
1641 atomic_set(&prev->stopping, 0);
1642 preview_print_status(prev);
1647 if (prev->output & PREVIEW_OUTPUT_MEMORY)
1651 !(prev->output & PREVIEW_OUTPUT_MEMORY))
1652 preview_enable_oneshot(prev);
1658 if (prev->input == PREVIEW_INPUT_MEMORY)
1660 if (prev->output & PREVIEW_OUTPUT_MEMORY)
1663 preview_enable_oneshot(prev);
1667 if (omap3isp_module_sync_idle(&sd->entity, &prev->wait,
1668 &prev->stopping))
1677 prev->state = enable;
1682 __preview_get_format(struct isp_prev_device *prev,
1689 return &prev->formats[pad];
1693 __preview_get_crop(struct isp_prev_device *prev,
1700 return &prev->crop;
1724 * @prev: ISP preview engine
1733 static void preview_try_format(struct isp_prev_device *prev,
1754 if (prev->input == PREVIEW_INPUT_MEMORY) {
1756 preview_max_out_width(prev));
1776 *fmt = *__preview_get_format(prev, sd_state, PREV_PAD_SINK,
1795 crop = __preview_get_crop(prev, sd_state, which);
1808 * @prev: ISP preview engine
1818 static void preview_try_crop(struct isp_prev_device *prev,
1832 if (prev->input == PREVIEW_INPUT_CCDC) {
1896 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
1905 preview_try_format(prev, sd_state, fse->pad, &format, fse->which);
1915 preview_try_format(prev, sd_state, fse->pad, &format, fse->which);
1936 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
1949 format = __preview_get_format(prev, sd_state, PREV_PAD_SINK,
1951 preview_try_crop(prev, format, &sel->r);
1955 sel->r = *__preview_get_crop(prev, sd_state, sel->which);
1979 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
1987 if (prev->state != ISP_PIPELINE_STREAM_STOPPED)
1995 sel->r = *__preview_get_crop(prev, sd_state, sel->which);
1999 format = __preview_get_format(prev, sd_state, PREV_PAD_SINK,
2001 preview_try_crop(prev, format, &sel->r);
2002 *__preview_get_crop(prev, sd_state, sel->which) = sel->r;
2005 format = __preview_get_format(prev, sd_state, PREV_PAD_SOURCE,
2007 preview_try_format(prev, sd_state, PREV_PAD_SOURCE, format,
2024 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
2027 format = __preview_get_format(prev, sd_state, fmt->pad, fmt->which);
2046 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
2050 format = __preview_get_format(prev, sd_state, fmt->pad, fmt->which);
2054 preview_try_format(prev, sd_state, fmt->pad, &fmt->format, fmt->which);
2060 crop = __preview_get_crop(prev, sd_state, fmt->which);
2066 preview_try_crop(prev, &fmt->format, crop);
2069 format = __preview_get_format(prev, sd_state, PREV_PAD_SOURCE,
2071 preview_try_format(prev, sd_state, PREV_PAD_SOURCE, format,
2152 struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
2163 if (prev->input == PREVIEW_INPUT_CCDC)
2165 prev->input = PREVIEW_INPUT_MEMORY;
2167 if (prev->input == PREVIEW_INPUT_MEMORY)
2168 prev->input = PREVIEW_INPUT_NONE;
2175 if (prev->input == PREVIEW_INPUT_MEMORY)
2177 prev->input = PREVIEW_INPUT_CCDC;
2179 if (prev->input == PREVIEW_INPUT_CCDC)
2180 prev->input = PREVIEW_INPUT_NONE;
2192 if (prev->output & ~PREVIEW_OUTPUT_MEMORY)
2194 prev->output |= PREVIEW_OUTPUT_MEMORY;
2196 prev->output &= ~PREVIEW_OUTPUT_MEMORY;
2203 if (prev->output & ~PREVIEW_OUTPUT_RESIZER)
2205 prev->output |= PREVIEW_OUTPUT_RESIZER;
2207 prev->output &= ~PREVIEW_OUTPUT_RESIZER;
2224 void omap3isp_preview_unregister_entities(struct isp_prev_device *prev)
2226 v4l2_device_unregister_subdev(&prev->subdev);
2227 omap3isp_video_unregister(&prev->video_in);
2228 omap3isp_video_unregister(&prev->video_out);
2231 int omap3isp_preview_register_entities(struct isp_prev_device *prev,
2237 prev->subdev.dev = vdev->mdev->dev;
2238 ret = v4l2_device_register_subdev(vdev, &prev->subdev);
2242 ret = omap3isp_video_register(&prev->video_in, vdev);
2246 ret = omap3isp_video_register(&prev->video_out, vdev);
2253 omap3isp_preview_unregister_entities(prev);
2263 * @prev : Pointer to preview structure
2266 static int preview_init_entities(struct isp_prev_device *prev)
2268 struct v4l2_subdev *sd = &prev->subdev;
2269 struct media_pad *pads = prev->pads;
2273 prev->input = PREVIEW_INPUT_NONE;
2279 v4l2_set_subdevdata(sd, prev);
2282 v4l2_ctrl_handler_init(&prev->ctrls, 2);
2283 v4l2_ctrl_new_std(&prev->ctrls, &preview_ctrl_ops, V4L2_CID_BRIGHTNESS,
2286 v4l2_ctrl_new_std(&prev->ctrls, &preview_ctrl_ops, V4L2_CID_CONTRAST,
2289 v4l2_ctrl_handler_setup(&prev->ctrls);
2290 sd->ctrl_handler = &prev->ctrls;
2307 prev->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
2308 prev->video_in.ops = &preview_video_ops;
2309 prev->video_in.isp = to_isp_device(prev);
2310 prev->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
2311 prev->video_in.bpl_alignment = 64;
2312 prev->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2313 prev->video_out.ops = &preview_video_ops;
2314 prev->video_out.isp = to_isp_device(prev);
2315 prev->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
2316 prev->video_out.bpl_alignment = 32;
2318 ret = omap3isp_video_init(&prev->video_in, "preview");
2322 ret = omap3isp_video_init(&prev->video_out, "preview");
2329 omap3isp_video_cleanup(&prev->video_in);
2331 media_entity_cleanup(&prev->subdev.entity);
2333 v4l2_ctrl_handler_free(&prev->ctrls);
2344 struct isp_prev_device *prev = &isp->isp_prev;
2346 init_waitqueue_head(&prev->wait);
2348 preview_init_params(prev);
2350 return preview_init_entities(prev);
2355 struct isp_prev_device *prev = &isp->isp_prev;
2357 v4l2_ctrl_handler_free(&prev->ctrls);
2358 omap3isp_video_cleanup(&prev->video_in);
2359 omap3isp_video_cleanup(&prev->video_out);
2360 media_entity_cleanup(&prev->subdev.entity);