Lines Matching refs:res
117 __resizer_get_format(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg, in __resizer_get_format() argument
121 return v4l2_subdev_get_try_format(&res->subdev, cfg, pad); in __resizer_get_format()
123 return &res->formats[pad]; in __resizer_get_format()
133 __resizer_get_crop(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg, in __resizer_get_crop() argument
137 return v4l2_subdev_get_try_crop(&res->subdev, cfg, RESZ_PAD_SINK); in __resizer_get_crop()
139 return &res->crop.request; in __resizer_get_crop()
149 static void resizer_set_filters(struct isp_res_device *res, const u16 *h_coeff, in resizer_set_filters() argument
152 struct isp_device *isp = to_isp_device(res); in resizer_set_filters()
180 static void resizer_set_bilinear(struct isp_res_device *res, in resizer_set_bilinear() argument
183 struct isp_device *isp = to_isp_device(res); in resizer_set_bilinear()
198 static void resizer_set_ycpos(struct isp_res_device *res, u32 pixelcode) in resizer_set_ycpos() argument
200 struct isp_device *isp = to_isp_device(res); in resizer_set_ycpos()
224 static void resizer_set_phase(struct isp_res_device *res, u32 h_phase, in resizer_set_phase() argument
227 struct isp_device *isp = to_isp_device(res); in resizer_set_phase()
260 static void resizer_set_luma(struct isp_res_device *res, in resizer_set_luma() argument
263 struct isp_device *isp = to_isp_device(res); in resizer_set_luma()
286 static void resizer_set_source(struct isp_res_device *res, in resizer_set_source() argument
289 struct isp_device *isp = to_isp_device(res); in resizer_set_source()
306 static void resizer_set_ratio(struct isp_res_device *res, in resizer_set_ratio() argument
309 struct isp_device *isp = to_isp_device(res); in resizer_set_ratio()
333 resizer_set_filters(res, h_filter, v_filter); in resizer_set_ratio()
350 static void resizer_set_output_size(struct isp_res_device *res, in resizer_set_output_size() argument
353 struct isp_device *isp = to_isp_device(res); in resizer_set_output_size()
372 static void resizer_set_output_offset(struct isp_res_device *res, u32 offset) in resizer_set_output_offset() argument
374 struct isp_device *isp = to_isp_device(res); in resizer_set_output_offset()
394 static void resizer_set_start(struct isp_res_device *res, u32 left, u32 top) in resizer_set_start() argument
396 struct isp_device *isp = to_isp_device(res); in resizer_set_start()
413 static void resizer_set_input_size(struct isp_res_device *res, in resizer_set_input_size() argument
416 struct isp_device *isp = to_isp_device(res); in resizer_set_input_size()
436 static void resizer_set_input_offset(struct isp_res_device *res, u32 offset) in resizer_set_input_offset() argument
438 struct isp_device *isp = to_isp_device(res); in resizer_set_input_offset()
448 static void resizer_set_intype(struct isp_res_device *res, in resizer_set_intype() argument
451 struct isp_device *isp = to_isp_device(res); in resizer_set_intype()
467 static void __resizer_set_inaddr(struct isp_res_device *res, u32 addr) in __resizer_set_inaddr() argument
469 struct isp_device *isp = to_isp_device(res); in __resizer_set_inaddr()
497 void omap3isp_resizer_max_rate(struct isp_res_device *res, in omap3isp_resizer_max_rate() argument
500 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in omap3isp_resizer_max_rate()
501 const struct v4l2_mbus_framefmt *ofmt = &res->formats[RESZ_PAD_SOURCE]; in omap3isp_resizer_max_rate()
505 clock = div_u64((u64)limit * res->crop.active.height, ofmt->height); in omap3isp_resizer_max_rate()
507 *max_rate = div_u64((u64)clock * res->crop.active.width, ofmt->width); in omap3isp_resizer_max_rate()
539 static void resizer_adjust_bandwidth(struct isp_res_device *res) in resizer_adjust_bandwidth() argument
541 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in resizer_adjust_bandwidth()
542 struct isp_device *isp = to_isp_device(res); in resizer_adjust_bandwidth()
553 if (res->input != RESIZER_INPUT_MEMORY) { in resizer_adjust_bandwidth()
586 requests_per_frame = DIV_ROUND_UP(res->crop.active.width * 2, 256) in resizer_adjust_bandwidth()
587 * res->crop.active.height; in resizer_adjust_bandwidth()
607 int omap3isp_resizer_busy(struct isp_res_device *res) in omap3isp_resizer_busy() argument
609 struct isp_device *isp = to_isp_device(res); in omap3isp_resizer_busy()
619 static void resizer_set_inaddr(struct isp_res_device *res, u32 addr) in resizer_set_inaddr() argument
621 res->addr_base = addr; in resizer_set_inaddr()
624 if (res->crop_offset) in resizer_set_inaddr()
625 addr += res->crop_offset & ~0x1f; in resizer_set_inaddr()
627 __resizer_set_inaddr(res, addr); in resizer_set_inaddr()
636 static void resizer_set_outaddr(struct isp_res_device *res, u32 addr) in resizer_set_outaddr() argument
638 struct isp_device *isp = to_isp_device(res); in resizer_set_outaddr()
655 static void resizer_print_status(struct isp_res_device *res) in resizer_print_status() argument
657 struct isp_device *isp = to_isp_device(res); in resizer_print_status()
777 static void resizer_calc_ratios(struct isp_res_device *res, in resizer_calc_ratios() argument
782 struct isp_device *isp = to_isp_device(res); in resizer_calc_ratios()
908 static void resizer_set_crop_params(struct isp_res_device *res, in resizer_set_crop_params() argument
912 resizer_set_ratio(res, &res->ratio); in resizer_set_crop_params()
915 if (res->ratio.horz >= RESIZE_DIVISOR) in resizer_set_crop_params()
916 resizer_set_bilinear(res, RSZ_THE_SAME); in resizer_set_crop_params()
918 resizer_set_bilinear(res, RSZ_BILINEAR); in resizer_set_crop_params()
920 resizer_adjust_bandwidth(res); in resizer_set_crop_params()
922 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_set_crop_params()
924 res->crop_offset = (res->crop.active.top * input->width + in resizer_set_crop_params()
925 res->crop.active.left) * 2; in resizer_set_crop_params()
930 resizer_set_start(res, (res->crop_offset / 2) & 0xf, 0); in resizer_set_crop_params()
936 __resizer_set_inaddr(res, in resizer_set_crop_params()
937 res->addr_base + (res->crop_offset & ~0x1f)); in resizer_set_crop_params()
944 resizer_set_start(res, res->crop.active.left * 2, in resizer_set_crop_params()
945 res->crop.active.top); in resizer_set_crop_params()
947 __resizer_set_inaddr(res, 0); in resizer_set_crop_params()
948 resizer_set_input_offset(res, 0); in resizer_set_crop_params()
952 resizer_set_input_size(res, res->crop.active.width, in resizer_set_crop_params()
953 res->crop.active.height); in resizer_set_crop_params()
956 static void resizer_configure(struct isp_res_device *res) in resizer_configure() argument
961 resizer_set_source(res, res->input); in resizer_configure()
963 informat = &res->formats[RESZ_PAD_SINK]; in resizer_configure()
964 outformat = &res->formats[RESZ_PAD_SOURCE]; in resizer_configure()
967 if (res->input == RESIZER_INPUT_VP) in resizer_configure()
968 resizer_set_input_offset(res, 0); in resizer_configure()
970 resizer_set_input_offset(res, ALIGN(informat->width, 0x10) * 2); in resizer_configure()
973 resizer_set_intype(res, RSZ_YUV422); in resizer_configure()
974 resizer_set_ycpos(res, informat->code); in resizer_configure()
975 resizer_set_phase(res, DEFAULT_PHASE, DEFAULT_PHASE); in resizer_configure()
976 resizer_set_luma(res, &luma); in resizer_configure()
979 resizer_set_output_offset(res, ALIGN(outformat->width * 2, 32)); in resizer_configure()
980 resizer_set_output_size(res, outformat->width, outformat->height); in resizer_configure()
982 resizer_set_crop_params(res, informat, outformat); in resizer_configure()
989 static void resizer_enable_oneshot(struct isp_res_device *res) in resizer_enable_oneshot() argument
991 struct isp_device *isp = to_isp_device(res); in resizer_enable_oneshot()
997 void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res) in omap3isp_resizer_isr_frame_sync() argument
1005 if (res->state == ISP_PIPELINE_STREAM_CONTINUOUS && in omap3isp_resizer_isr_frame_sync()
1006 res->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) { in omap3isp_resizer_isr_frame_sync()
1007 resizer_enable_oneshot(res); in omap3isp_resizer_isr_frame_sync()
1008 isp_video_dmaqueue_flags_clr(&res->video_out); in omap3isp_resizer_isr_frame_sync()
1012 static void resizer_isr_buffer(struct isp_res_device *res) in resizer_isr_buffer() argument
1014 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in resizer_isr_buffer()
1018 if (res->state == ISP_PIPELINE_STREAM_STOPPED) in resizer_isr_buffer()
1024 buffer = omap3isp_video_buffer_next(&res->video_out); in resizer_isr_buffer()
1026 resizer_set_outaddr(res, buffer->dma); in resizer_isr_buffer()
1032 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_isr_buffer()
1033 buffer = omap3isp_video_buffer_next(&res->video_in); in resizer_isr_buffer()
1035 resizer_set_inaddr(res, buffer->dma); in resizer_isr_buffer()
1039 if (res->state == ISP_PIPELINE_STREAM_SINGLESHOT) { in resizer_isr_buffer()
1048 resizer_enable_oneshot(res); in resizer_isr_buffer()
1058 void omap3isp_resizer_isr(struct isp_res_device *res) in omap3isp_resizer_isr() argument
1063 if (omap3isp_module_sync_is_stopping(&res->wait, &res->stopping)) in omap3isp_resizer_isr()
1066 spin_lock_irqsave(&res->lock, flags); in omap3isp_resizer_isr()
1068 if (res->applycrop) { in omap3isp_resizer_isr()
1069 outformat = __resizer_get_format(res, NULL, RESZ_PAD_SOURCE, in omap3isp_resizer_isr()
1071 informat = __resizer_get_format(res, NULL, RESZ_PAD_SINK, in omap3isp_resizer_isr()
1073 resizer_set_crop_params(res, informat, outformat); in omap3isp_resizer_isr()
1074 res->applycrop = 0; in omap3isp_resizer_isr()
1077 spin_unlock_irqrestore(&res->lock, flags); in omap3isp_resizer_isr()
1079 resizer_isr_buffer(res); in omap3isp_resizer_isr()
1089 struct isp_res_device *res = &video->isp->isp_res; in resizer_video_queue() local
1092 resizer_set_inaddr(res, buffer->dma); in resizer_video_queue()
1107 resizer_set_outaddr(res, buffer->dma); in resizer_video_queue()
1132 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_stream() local
1133 struct isp_video *video_out = &res->video_out; in resizer_set_stream()
1134 struct isp_device *isp = to_isp_device(res); in resizer_set_stream()
1135 struct device *dev = to_device(res); in resizer_set_stream()
1137 if (res->state == ISP_PIPELINE_STREAM_STOPPED) { in resizer_set_stream()
1142 resizer_configure(res); in resizer_set_stream()
1143 resizer_print_status(res); in resizer_set_stream()
1150 resizer_enable_oneshot(res); in resizer_set_stream()
1156 if (res->input == RESIZER_INPUT_MEMORY) in resizer_set_stream()
1160 resizer_enable_oneshot(res); in resizer_set_stream()
1164 if (omap3isp_module_sync_idle(&sd->entity, &res->wait, in resizer_set_stream()
1165 &res->stopping)) in resizer_set_stream()
1174 res->state = enable; in resizer_set_stream()
1226 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_get_selection() local
1234 format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_get_selection()
1236 format_source = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_get_selection()
1247 resizer_calc_ratios(res, &sel->r, format_source, &ratio); in resizer_get_selection()
1251 sel->r = *__resizer_get_crop(res, cfg, sel->which); in resizer_get_selection()
1252 resizer_calc_ratios(res, &sel->r, format_source, &ratio); in resizer_get_selection()
1279 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_selection() local
1280 struct isp_device *isp = to_isp_device(res); in resizer_set_selection()
1290 format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_set_selection()
1292 format_source = *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_set_selection()
1310 *__resizer_get_crop(res, cfg, sel->which) = sel->r; in resizer_set_selection()
1311 resizer_calc_ratios(res, &sel->r, &format_source, &ratio); in resizer_set_selection()
1320 *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) = in resizer_set_selection()
1329 spin_lock_irqsave(&res->lock, flags); in resizer_set_selection()
1331 *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) = in resizer_set_selection()
1334 res->ratio = ratio; in resizer_set_selection()
1335 res->crop.active = sel->r; in resizer_set_selection()
1337 if (res->state != ISP_PIPELINE_STREAM_STOPPED) in resizer_set_selection()
1338 res->applycrop = 1; in resizer_set_selection()
1340 spin_unlock_irqrestore(&res->lock, flags); in resizer_set_selection()
1351 static unsigned int resizer_max_in_width(struct isp_res_device *res) in resizer_max_in_width() argument
1353 struct isp_device *isp = to_isp_device(res); in resizer_max_in_width()
1355 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_max_in_width()
1373 static void resizer_try_format(struct isp_res_device *res, in resizer_try_format() argument
1389 resizer_max_in_width(res)); in resizer_try_format()
1395 format = __resizer_get_format(res, cfg, RESZ_PAD_SINK, which); in resizer_try_format()
1398 crop = *__resizer_get_crop(res, cfg, which); in resizer_try_format()
1399 resizer_calc_ratios(res, &crop, fmt, &ratio); in resizer_try_format()
1418 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_enum_mbus_code() local
1430 format = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_enum_mbus_code()
1442 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_enum_frame_size() local
1451 resizer_try_format(res, cfg, fse->pad, &format, fse->which); in resizer_enum_frame_size()
1461 resizer_try_format(res, cfg, fse->pad, &format, fse->which); in resizer_enum_frame_size()
1478 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_get_format() local
1481 format = __resizer_get_format(res, cfg, fmt->pad, fmt->which); in resizer_get_format()
1499 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_format() local
1503 format = __resizer_get_format(res, cfg, fmt->pad, fmt->which); in resizer_set_format()
1507 resizer_try_format(res, cfg, fmt->pad, &fmt->format, fmt->which); in resizer_set_format()
1512 crop = __resizer_get_crop(res, cfg, fmt->which); in resizer_set_format()
1519 format = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_set_format()
1522 resizer_try_format(res, cfg, RESZ_PAD_SOURCE, format, in resizer_set_format()
1531 res->crop.active = res->crop.request; in resizer_set_format()
1532 resizer_calc_ratios(res, &res->crop.active, format, in resizer_set_format()
1533 &res->ratio); in resizer_set_format()
1544 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_link_validate() local
1547 omap3isp_resizer_max_rate(res, &pipe->max_rate); in resizer_link_validate()
1622 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_link_setup() local
1633 if (res->input == RESIZER_INPUT_VP) in resizer_link_setup()
1635 res->input = RESIZER_INPUT_MEMORY; in resizer_link_setup()
1637 if (res->input == RESIZER_INPUT_MEMORY) in resizer_link_setup()
1638 res->input = RESIZER_INPUT_NONE; in resizer_link_setup()
1645 if (res->input == RESIZER_INPUT_MEMORY) in resizer_link_setup()
1647 res->input = RESIZER_INPUT_VP; in resizer_link_setup()
1649 if (res->input == RESIZER_INPUT_VP) in resizer_link_setup()
1650 res->input = RESIZER_INPUT_NONE; in resizer_link_setup()
1671 void omap3isp_resizer_unregister_entities(struct isp_res_device *res) in omap3isp_resizer_unregister_entities() argument
1673 v4l2_device_unregister_subdev(&res->subdev); in omap3isp_resizer_unregister_entities()
1674 omap3isp_video_unregister(&res->video_in); in omap3isp_resizer_unregister_entities()
1675 omap3isp_video_unregister(&res->video_out); in omap3isp_resizer_unregister_entities()
1678 int omap3isp_resizer_register_entities(struct isp_res_device *res, in omap3isp_resizer_register_entities() argument
1684 res->subdev.dev = vdev->mdev->dev; in omap3isp_resizer_register_entities()
1685 ret = v4l2_device_register_subdev(vdev, &res->subdev); in omap3isp_resizer_register_entities()
1689 ret = omap3isp_video_register(&res->video_in, vdev); in omap3isp_resizer_register_entities()
1693 ret = omap3isp_video_register(&res->video_out, vdev); in omap3isp_resizer_register_entities()
1700 omap3isp_resizer_unregister_entities(res); in omap3isp_resizer_register_entities()
1713 static int resizer_init_entities(struct isp_res_device *res) in resizer_init_entities() argument
1715 struct v4l2_subdev *sd = &res->subdev; in resizer_init_entities()
1716 struct media_pad *pads = res->pads; in resizer_init_entities()
1720 res->input = RESIZER_INPUT_NONE; in resizer_init_entities()
1726 v4l2_set_subdevdata(sd, res); in resizer_init_entities()
1740 res->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in resizer_init_entities()
1741 res->video_in.ops = &resizer_video_ops; in resizer_init_entities()
1742 res->video_in.isp = to_isp_device(res); in resizer_init_entities()
1743 res->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3; in resizer_init_entities()
1744 res->video_in.bpl_alignment = 32; in resizer_init_entities()
1745 res->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in resizer_init_entities()
1746 res->video_out.ops = &resizer_video_ops; in resizer_init_entities()
1747 res->video_out.isp = to_isp_device(res); in resizer_init_entities()
1748 res->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3; in resizer_init_entities()
1749 res->video_out.bpl_alignment = 32; in resizer_init_entities()
1751 ret = omap3isp_video_init(&res->video_in, "resizer"); in resizer_init_entities()
1755 ret = omap3isp_video_init(&res->video_out, "resizer"); in resizer_init_entities()
1759 res->video_out.video.entity.flags |= MEDIA_ENT_FL_DEFAULT; in resizer_init_entities()
1764 omap3isp_video_cleanup(&res->video_in); in resizer_init_entities()
1766 media_entity_cleanup(&res->subdev.entity); in resizer_init_entities()
1777 struct isp_res_device *res = &isp->isp_res; in omap3isp_resizer_init() local
1779 init_waitqueue_head(&res->wait); in omap3isp_resizer_init()
1780 atomic_set(&res->stopping, 0); in omap3isp_resizer_init()
1781 spin_lock_init(&res->lock); in omap3isp_resizer_init()
1783 return resizer_init_entities(res); in omap3isp_resizer_init()
1788 struct isp_res_device *res = &isp->isp_res; in omap3isp_resizer_cleanup() local
1790 omap3isp_video_cleanup(&res->video_in); in omap3isp_resizer_cleanup()
1791 omap3isp_video_cleanup(&res->video_out); in omap3isp_resizer_cleanup()
1792 media_entity_cleanup(&res->subdev.entity); in omap3isp_resizer_cleanup()