Lines Matching refs:res

120 __resizer_get_format(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg,  in __resizer_get_format()  argument
124 return v4l2_subdev_get_try_format(&res->subdev, cfg, pad); in __resizer_get_format()
126 return &res->formats[pad]; in __resizer_get_format()
136 __resizer_get_crop(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg, in __resizer_get_crop() argument
140 return v4l2_subdev_get_try_crop(&res->subdev, cfg, RESZ_PAD_SINK); in __resizer_get_crop()
142 return &res->crop.request; in __resizer_get_crop()
152 static void resizer_set_filters(struct isp_res_device *res, const u16 *h_coeff, in resizer_set_filters() argument
155 struct isp_device *isp = to_isp_device(res); in resizer_set_filters()
183 static void resizer_set_bilinear(struct isp_res_device *res, in resizer_set_bilinear() argument
186 struct isp_device *isp = to_isp_device(res); in resizer_set_bilinear()
201 static void resizer_set_ycpos(struct isp_res_device *res, u32 pixelcode) in resizer_set_ycpos() argument
203 struct isp_device *isp = to_isp_device(res); in resizer_set_ycpos()
227 static void resizer_set_phase(struct isp_res_device *res, u32 h_phase, in resizer_set_phase() argument
230 struct isp_device *isp = to_isp_device(res); in resizer_set_phase()
263 static void resizer_set_luma(struct isp_res_device *res, in resizer_set_luma() argument
266 struct isp_device *isp = to_isp_device(res); in resizer_set_luma()
289 static void resizer_set_source(struct isp_res_device *res, in resizer_set_source() argument
292 struct isp_device *isp = to_isp_device(res); in resizer_set_source()
309 static void resizer_set_ratio(struct isp_res_device *res, in resizer_set_ratio() argument
312 struct isp_device *isp = to_isp_device(res); in resizer_set_ratio()
336 resizer_set_filters(res, h_filter, v_filter); in resizer_set_ratio()
353 static void resizer_set_output_size(struct isp_res_device *res, in resizer_set_output_size() argument
356 struct isp_device *isp = to_isp_device(res); in resizer_set_output_size()
375 static void resizer_set_output_offset(struct isp_res_device *res, u32 offset) in resizer_set_output_offset() argument
377 struct isp_device *isp = to_isp_device(res); in resizer_set_output_offset()
397 static void resizer_set_start(struct isp_res_device *res, u32 left, u32 top) in resizer_set_start() argument
399 struct isp_device *isp = to_isp_device(res); in resizer_set_start()
416 static void resizer_set_input_size(struct isp_res_device *res, in resizer_set_input_size() argument
419 struct isp_device *isp = to_isp_device(res); in resizer_set_input_size()
439 static void resizer_set_input_offset(struct isp_res_device *res, u32 offset) in resizer_set_input_offset() argument
441 struct isp_device *isp = to_isp_device(res); in resizer_set_input_offset()
451 static void resizer_set_intype(struct isp_res_device *res, in resizer_set_intype() argument
454 struct isp_device *isp = to_isp_device(res); in resizer_set_intype()
470 static void __resizer_set_inaddr(struct isp_res_device *res, u32 addr) in __resizer_set_inaddr() argument
472 struct isp_device *isp = to_isp_device(res); in __resizer_set_inaddr()
500 void omap3isp_resizer_max_rate(struct isp_res_device *res, in omap3isp_resizer_max_rate() argument
503 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in omap3isp_resizer_max_rate()
504 const struct v4l2_mbus_framefmt *ofmt = &res->formats[RESZ_PAD_SOURCE]; in omap3isp_resizer_max_rate()
508 clock = div_u64((u64)limit * res->crop.active.height, ofmt->height); in omap3isp_resizer_max_rate()
510 *max_rate = div_u64((u64)clock * res->crop.active.width, ofmt->width); in omap3isp_resizer_max_rate()
542 static void resizer_adjust_bandwidth(struct isp_res_device *res) in resizer_adjust_bandwidth() argument
544 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in resizer_adjust_bandwidth()
545 struct isp_device *isp = to_isp_device(res); in resizer_adjust_bandwidth()
556 if (res->input != RESIZER_INPUT_MEMORY) { in resizer_adjust_bandwidth()
589 requests_per_frame = DIV_ROUND_UP(res->crop.active.width * 2, 256) in resizer_adjust_bandwidth()
590 * res->crop.active.height; in resizer_adjust_bandwidth()
610 int omap3isp_resizer_busy(struct isp_res_device *res) in omap3isp_resizer_busy() argument
612 struct isp_device *isp = to_isp_device(res); in omap3isp_resizer_busy()
622 static void resizer_set_inaddr(struct isp_res_device *res, u32 addr) in resizer_set_inaddr() argument
624 res->addr_base = addr; in resizer_set_inaddr()
627 if (res->crop_offset) in resizer_set_inaddr()
628 addr += res->crop_offset & ~0x1f; in resizer_set_inaddr()
630 __resizer_set_inaddr(res, addr); in resizer_set_inaddr()
639 static void resizer_set_outaddr(struct isp_res_device *res, u32 addr) in resizer_set_outaddr() argument
641 struct isp_device *isp = to_isp_device(res); in resizer_set_outaddr()
658 static void resizer_print_status(struct isp_res_device *res) in resizer_print_status() argument
660 struct isp_device *isp = to_isp_device(res); in resizer_print_status()
780 static void resizer_calc_ratios(struct isp_res_device *res, in resizer_calc_ratios() argument
785 struct isp_device *isp = to_isp_device(res); in resizer_calc_ratios()
911 static void resizer_set_crop_params(struct isp_res_device *res, in resizer_set_crop_params() argument
915 resizer_set_ratio(res, &res->ratio); in resizer_set_crop_params()
918 if (res->ratio.horz >= RESIZE_DIVISOR) in resizer_set_crop_params()
919 resizer_set_bilinear(res, RSZ_THE_SAME); in resizer_set_crop_params()
921 resizer_set_bilinear(res, RSZ_BILINEAR); in resizer_set_crop_params()
923 resizer_adjust_bandwidth(res); in resizer_set_crop_params()
925 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_set_crop_params()
927 res->crop_offset = (res->crop.active.top * input->width + in resizer_set_crop_params()
928 res->crop.active.left) * 2; in resizer_set_crop_params()
933 resizer_set_start(res, (res->crop_offset / 2) & 0xf, 0); in resizer_set_crop_params()
939 __resizer_set_inaddr(res, in resizer_set_crop_params()
940 res->addr_base + (res->crop_offset & ~0x1f)); in resizer_set_crop_params()
947 resizer_set_start(res, res->crop.active.left * 2, in resizer_set_crop_params()
948 res->crop.active.top); in resizer_set_crop_params()
950 __resizer_set_inaddr(res, 0); in resizer_set_crop_params()
951 resizer_set_input_offset(res, 0); in resizer_set_crop_params()
955 resizer_set_input_size(res, res->crop.active.width, in resizer_set_crop_params()
956 res->crop.active.height); in resizer_set_crop_params()
959 static void resizer_configure(struct isp_res_device *res) in resizer_configure() argument
964 resizer_set_source(res, res->input); in resizer_configure()
966 informat = &res->formats[RESZ_PAD_SINK]; in resizer_configure()
967 outformat = &res->formats[RESZ_PAD_SOURCE]; in resizer_configure()
970 if (res->input == RESIZER_INPUT_VP) in resizer_configure()
971 resizer_set_input_offset(res, 0); in resizer_configure()
973 resizer_set_input_offset(res, ALIGN(informat->width, 0x10) * 2); in resizer_configure()
976 resizer_set_intype(res, RSZ_YUV422); in resizer_configure()
977 resizer_set_ycpos(res, informat->code); in resizer_configure()
978 resizer_set_phase(res, DEFAULT_PHASE, DEFAULT_PHASE); in resizer_configure()
979 resizer_set_luma(res, &luma); in resizer_configure()
982 resizer_set_output_offset(res, ALIGN(outformat->width * 2, 32)); in resizer_configure()
983 resizer_set_output_size(res, outformat->width, outformat->height); in resizer_configure()
985 resizer_set_crop_params(res, informat, outformat); in resizer_configure()
992 static void resizer_enable_oneshot(struct isp_res_device *res) in resizer_enable_oneshot() argument
994 struct isp_device *isp = to_isp_device(res); in resizer_enable_oneshot()
1000 void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res) in omap3isp_resizer_isr_frame_sync() argument
1008 if (res->state == ISP_PIPELINE_STREAM_CONTINUOUS && in omap3isp_resizer_isr_frame_sync()
1009 res->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) { in omap3isp_resizer_isr_frame_sync()
1010 resizer_enable_oneshot(res); in omap3isp_resizer_isr_frame_sync()
1011 isp_video_dmaqueue_flags_clr(&res->video_out); in omap3isp_resizer_isr_frame_sync()
1015 static void resizer_isr_buffer(struct isp_res_device *res) in resizer_isr_buffer() argument
1017 struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity); in resizer_isr_buffer()
1021 if (res->state == ISP_PIPELINE_STREAM_STOPPED) in resizer_isr_buffer()
1027 buffer = omap3isp_video_buffer_next(&res->video_out); in resizer_isr_buffer()
1029 resizer_set_outaddr(res, buffer->dma); in resizer_isr_buffer()
1035 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_isr_buffer()
1036 buffer = omap3isp_video_buffer_next(&res->video_in); in resizer_isr_buffer()
1038 resizer_set_inaddr(res, buffer->dma); in resizer_isr_buffer()
1042 if (res->state == ISP_PIPELINE_STREAM_SINGLESHOT) { in resizer_isr_buffer()
1051 resizer_enable_oneshot(res); in resizer_isr_buffer()
1061 void omap3isp_resizer_isr(struct isp_res_device *res) in omap3isp_resizer_isr() argument
1066 if (omap3isp_module_sync_is_stopping(&res->wait, &res->stopping)) in omap3isp_resizer_isr()
1069 spin_lock_irqsave(&res->lock, flags); in omap3isp_resizer_isr()
1071 if (res->applycrop) { in omap3isp_resizer_isr()
1072 outformat = __resizer_get_format(res, NULL, RESZ_PAD_SOURCE, in omap3isp_resizer_isr()
1074 informat = __resizer_get_format(res, NULL, RESZ_PAD_SINK, in omap3isp_resizer_isr()
1076 resizer_set_crop_params(res, informat, outformat); in omap3isp_resizer_isr()
1077 res->applycrop = 0; in omap3isp_resizer_isr()
1080 spin_unlock_irqrestore(&res->lock, flags); in omap3isp_resizer_isr()
1082 resizer_isr_buffer(res); in omap3isp_resizer_isr()
1092 struct isp_res_device *res = &video->isp->isp_res; in resizer_video_queue() local
1095 resizer_set_inaddr(res, buffer->dma); in resizer_video_queue()
1110 resizer_set_outaddr(res, buffer->dma); in resizer_video_queue()
1135 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_stream() local
1136 struct isp_video *video_out = &res->video_out; in resizer_set_stream()
1137 struct isp_device *isp = to_isp_device(res); in resizer_set_stream()
1138 struct device *dev = to_device(res); in resizer_set_stream()
1140 if (res->state == ISP_PIPELINE_STREAM_STOPPED) { in resizer_set_stream()
1145 resizer_configure(res); in resizer_set_stream()
1146 resizer_print_status(res); in resizer_set_stream()
1153 resizer_enable_oneshot(res); in resizer_set_stream()
1159 if (res->input == RESIZER_INPUT_MEMORY) in resizer_set_stream()
1163 resizer_enable_oneshot(res); in resizer_set_stream()
1167 if (omap3isp_module_sync_idle(&sd->entity, &res->wait, in resizer_set_stream()
1168 &res->stopping)) in resizer_set_stream()
1177 res->state = enable; in resizer_set_stream()
1229 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_get_selection() local
1237 format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_get_selection()
1239 format_source = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_get_selection()
1250 resizer_calc_ratios(res, &sel->r, format_source, &ratio); in resizer_get_selection()
1254 sel->r = *__resizer_get_crop(res, cfg, sel->which); in resizer_get_selection()
1255 resizer_calc_ratios(res, &sel->r, format_source, &ratio); in resizer_get_selection()
1282 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_selection() local
1283 struct isp_device *isp = to_isp_device(res); in resizer_set_selection()
1293 format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_set_selection()
1295 format_source = *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_set_selection()
1313 *__resizer_get_crop(res, cfg, sel->which) = sel->r; in resizer_set_selection()
1314 resizer_calc_ratios(res, &sel->r, &format_source, &ratio); in resizer_set_selection()
1323 *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) = in resizer_set_selection()
1332 spin_lock_irqsave(&res->lock, flags); in resizer_set_selection()
1334 *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) = in resizer_set_selection()
1337 res->ratio = ratio; in resizer_set_selection()
1338 res->crop.active = sel->r; in resizer_set_selection()
1340 if (res->state != ISP_PIPELINE_STREAM_STOPPED) in resizer_set_selection()
1341 res->applycrop = 1; in resizer_set_selection()
1343 spin_unlock_irqrestore(&res->lock, flags); in resizer_set_selection()
1354 static unsigned int resizer_max_in_width(struct isp_res_device *res) in resizer_max_in_width() argument
1356 struct isp_device *isp = to_isp_device(res); in resizer_max_in_width()
1358 if (res->input == RESIZER_INPUT_MEMORY) { in resizer_max_in_width()
1376 static void resizer_try_format(struct isp_res_device *res, in resizer_try_format() argument
1392 resizer_max_in_width(res)); in resizer_try_format()
1398 format = __resizer_get_format(res, cfg, RESZ_PAD_SINK, which); in resizer_try_format()
1401 crop = *__resizer_get_crop(res, cfg, which); in resizer_try_format()
1402 resizer_calc_ratios(res, &crop, fmt, &ratio); in resizer_try_format()
1421 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_enum_mbus_code() local
1433 format = __resizer_get_format(res, cfg, RESZ_PAD_SINK, in resizer_enum_mbus_code()
1445 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_enum_frame_size() local
1454 resizer_try_format(res, cfg, fse->pad, &format, fse->which); in resizer_enum_frame_size()
1464 resizer_try_format(res, cfg, fse->pad, &format, fse->which); in resizer_enum_frame_size()
1481 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_get_format() local
1484 format = __resizer_get_format(res, cfg, fmt->pad, fmt->which); in resizer_get_format()
1502 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_set_format() local
1506 format = __resizer_get_format(res, cfg, fmt->pad, fmt->which); in resizer_set_format()
1510 resizer_try_format(res, cfg, fmt->pad, &fmt->format, fmt->which); in resizer_set_format()
1515 crop = __resizer_get_crop(res, cfg, fmt->which); in resizer_set_format()
1522 format = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE, in resizer_set_format()
1525 resizer_try_format(res, cfg, RESZ_PAD_SOURCE, format, in resizer_set_format()
1534 res->crop.active = res->crop.request; in resizer_set_format()
1535 resizer_calc_ratios(res, &res->crop.active, format, in resizer_set_format()
1536 &res->ratio); in resizer_set_format()
1547 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_link_validate() local
1550 omap3isp_resizer_max_rate(res, &pipe->max_rate); in resizer_link_validate()
1625 struct isp_res_device *res = v4l2_get_subdevdata(sd); in resizer_link_setup() local
1631 if (res->input == RESIZER_INPUT_VP) in resizer_link_setup()
1633 res->input = RESIZER_INPUT_MEMORY; in resizer_link_setup()
1635 if (res->input == RESIZER_INPUT_MEMORY) in resizer_link_setup()
1636 res->input = RESIZER_INPUT_NONE; in resizer_link_setup()
1643 if (res->input == RESIZER_INPUT_MEMORY) in resizer_link_setup()
1645 res->input = RESIZER_INPUT_VP; in resizer_link_setup()
1647 if (res->input == RESIZER_INPUT_VP) in resizer_link_setup()
1648 res->input = RESIZER_INPUT_NONE; in resizer_link_setup()
1669 void omap3isp_resizer_unregister_entities(struct isp_res_device *res) in omap3isp_resizer_unregister_entities() argument
1671 v4l2_device_unregister_subdev(&res->subdev); in omap3isp_resizer_unregister_entities()
1672 omap3isp_video_unregister(&res->video_in); in omap3isp_resizer_unregister_entities()
1673 omap3isp_video_unregister(&res->video_out); in omap3isp_resizer_unregister_entities()
1676 int omap3isp_resizer_register_entities(struct isp_res_device *res, in omap3isp_resizer_register_entities() argument
1682 ret = v4l2_device_register_subdev(vdev, &res->subdev); in omap3isp_resizer_register_entities()
1686 ret = omap3isp_video_register(&res->video_in, vdev); in omap3isp_resizer_register_entities()
1690 ret = omap3isp_video_register(&res->video_out, vdev); in omap3isp_resizer_register_entities()
1697 omap3isp_resizer_unregister_entities(res); in omap3isp_resizer_register_entities()
1710 static int resizer_init_entities(struct isp_res_device *res) in resizer_init_entities() argument
1712 struct v4l2_subdev *sd = &res->subdev; in resizer_init_entities()
1713 struct media_pad *pads = res->pads; in resizer_init_entities()
1717 res->input = RESIZER_INPUT_NONE; in resizer_init_entities()
1723 v4l2_set_subdevdata(sd, res); in resizer_init_entities()
1737 res->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in resizer_init_entities()
1738 res->video_in.ops = &resizer_video_ops; in resizer_init_entities()
1739 res->video_in.isp = to_isp_device(res); in resizer_init_entities()
1740 res->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3; in resizer_init_entities()
1741 res->video_in.bpl_alignment = 32; in resizer_init_entities()
1742 res->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in resizer_init_entities()
1743 res->video_out.ops = &resizer_video_ops; in resizer_init_entities()
1744 res->video_out.isp = to_isp_device(res); in resizer_init_entities()
1745 res->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3; in resizer_init_entities()
1746 res->video_out.bpl_alignment = 32; in resizer_init_entities()
1748 ret = omap3isp_video_init(&res->video_in, "resizer"); in resizer_init_entities()
1752 ret = omap3isp_video_init(&res->video_out, "resizer"); in resizer_init_entities()
1756 res->video_out.video.entity.flags |= MEDIA_ENT_FL_DEFAULT; in resizer_init_entities()
1759 ret = media_entity_create_link(&res->video_in.video.entity, 0, in resizer_init_entities()
1760 &res->subdev.entity, RESZ_PAD_SINK, 0); in resizer_init_entities()
1764 ret = media_entity_create_link(&res->subdev.entity, RESZ_PAD_SOURCE, in resizer_init_entities()
1765 &res->video_out.video.entity, 0, 0); in resizer_init_entities()
1772 omap3isp_video_cleanup(&res->video_out); in resizer_init_entities()
1774 omap3isp_video_cleanup(&res->video_in); in resizer_init_entities()
1776 media_entity_cleanup(&res->subdev.entity); in resizer_init_entities()
1787 struct isp_res_device *res = &isp->isp_res; in omap3isp_resizer_init() local
1789 init_waitqueue_head(&res->wait); in omap3isp_resizer_init()
1790 atomic_set(&res->stopping, 0); in omap3isp_resizer_init()
1791 spin_lock_init(&res->lock); in omap3isp_resizer_init()
1793 return resizer_init_entities(res); in omap3isp_resizer_init()
1798 struct isp_res_device *res = &isp->isp_res; in omap3isp_resizer_cleanup() local
1800 omap3isp_video_cleanup(&res->video_in); in omap3isp_resizer_cleanup()
1801 omap3isp_video_cleanup(&res->video_out); in omap3isp_resizer_cleanup()
1802 media_entity_cleanup(&res->subdev.entity); in omap3isp_resizer_cleanup()