media: gpu: ipu-csi: Swap fields according to input/output field types
authorSteve Longerbeam <slongerbeam@gmail.com>
Wed, 9 Jan 2019 18:30:05 +0000 (13:30 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 16 Jan 2019 19:11:42 +0000 (14:11 -0500)
commitfc8c723852380b0f4349bb06cf553a6bba47462e
tree2bfb3262a1b486b4014ef854a6c0672aab6f1de5
parent1c3721b1f22286033abeda30b7e12439b083ed0f
media: gpu: ipu-csi: Swap fields according to input/output field types

The function ipu_csi_init_interface() was inverting the F-bit for
NTSC case, in the CCIR_CODE_1/2 registers. The result being that
for NTSC bottom-top field order, the CSI would swap fields and
capture in top-bottom order.

Instead, base field swap on the field order of the input to the CSI,
and the field order of the requested output. If the input/output
fields are sequential but different, swap fields, otherwise do
not swap. This requires passing both the input and output mbus
frame formats to ipu_csi_init_interface().

Move this code to a new private function ipu_csi_set_bt_interlaced_codes()
that programs the CCIR_CODE_1/2 registers for interlaced BT.656 (and
possibly interlaced BT.1120 in the future).

When detecting input video standard from the input frame width/height,
make sure to double height if input field type is alternate, since
in that case input height only includes lines for one field.

Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/gpu/ipu-v3/ipu-csi.c
drivers/staging/media/imx/imx-media-csi.c
include/video/imx-ipu-v3.h