gpu: ipu-v3: add ipu_csi_set_downsize
authorPhilipp Zabel <p.zabel@pengutronix.de>
Wed, 5 Oct 2016 15:33:45 +0000 (17:33 +0200)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 7 Nov 2016 14:17:47 +0000 (15:17 +0100)
Support downsizing to 1/2 width and/or height in the CSI.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/gpu/ipu-v3/ipu-csi.c
include/video/imx-ipu-v3.h

index d6e5ded2441813949709f230a389a812851eac84..63c7292f427a24a63445fe4fc4e5fc58cf63b087 100644 (file)
@@ -529,6 +529,22 @@ void ipu_csi_set_window(struct ipu_csi *csi, struct v4l2_rect *w)
 }
 EXPORT_SYMBOL_GPL(ipu_csi_set_window);
 
+void ipu_csi_set_downsize(struct ipu_csi *csi, bool horiz, bool vert)
+{
+       unsigned long flags;
+       u32 reg;
+
+       spin_lock_irqsave(&csi->lock, flags);
+
+       reg = ipu_csi_read(csi, CSI_OUT_FRM_CTRL);
+       reg &= ~(CSI_HORI_DOWNSIZE_EN | CSI_VERT_DOWNSIZE_EN);
+       reg |= (horiz ? CSI_HORI_DOWNSIZE_EN : 0) |
+              (vert ? CSI_VERT_DOWNSIZE_EN : 0);
+       ipu_csi_write(csi, reg, CSI_OUT_FRM_CTRL);
+
+       spin_unlock_irqrestore(&csi->lock, flags);
+}
+
 void ipu_csi_set_test_generator(struct ipu_csi *csi, bool active,
                                u32 r_value, u32 g_value, u32 b_value,
                                u32 pix_clk)
index cc8174c14df8ae093629b4a1fb51d69015ecb588..53cd07ccaa4ce2d0c2881430371a4e929d2bb045 100644 (file)
@@ -318,6 +318,7 @@ int ipu_csi_init_interface(struct ipu_csi *csi,
 bool ipu_csi_is_interlaced(struct ipu_csi *csi);
 void ipu_csi_get_window(struct ipu_csi *csi, struct v4l2_rect *w);
 void ipu_csi_set_window(struct ipu_csi *csi, struct v4l2_rect *w);
+void ipu_csi_set_downsize(struct ipu_csi *csi, bool horiz, bool vert);
 void ipu_csi_set_test_generator(struct ipu_csi *csi, bool active,
                                u32 r_value, u32 g_value, u32 b_value,
                                u32 pix_clk);