summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorMichael Tretter <m.tretter@pengutronix.de>2023-01-13 12:54:10 +0300
committerMauro Carvalho Chehab <mchehab@kernel.org>2023-02-08 11:17:27 +0300
commit47956c921d6a3f6b07007374b6ca96b1675f6114 (patch)
treec28593b5effe98ba176e8ff158125f80edc632c3 /drivers/media
parent9fb41a05837583e28a9e8d7d7e4802626dcbc32a (diff)
downloadlinux-47956c921d6a3f6b07007374b6ca96b1675f6114.tar.xz
media: imx-pxp: explicitly disable unused blocks
Various multiplexers in the pipeline are not used with the currently configured data path. Disable all unused multiplexers by selecting the "no output" (3) option. The datasheet doesn't explicitly require this, but the PXP has been seen to hang after processing a few hundreds of frames otherwise. As at it, add documentation for the multiplexers that are actually relevant for the data path. Signed-off-by: Michael Tretter <m.tretter@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/nxp/imx-pxp.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/media/platform/nxp/imx-pxp.c b/drivers/media/platform/nxp/imx-pxp.c
index 3e5b5f94b15c..094a4f7c5fdf 100644
--- a/drivers/media/platform/nxp/imx-pxp.c
+++ b/drivers/media/platform/nxp/imx-pxp.c
@@ -729,22 +729,28 @@ static u32 pxp_data_path_ctrl0(struct pxp_ctx *ctx)
u32 ctrl0;
ctrl0 = 0;
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX15_SEL(0);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX15_SEL(3);
+ /* Bypass Dithering x3CH */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX14_SEL(1);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX13_SEL(0);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX13_SEL(3);
+ /* Select Rotation */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX12_SEL(0);
+ /* Select LUT */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX11_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX10_SEL(0);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX10_SEL(3);
+ /* Select MUX8 for LUT */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX9_SEL(1);
+ /* Select CSC 2 */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX8_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX7_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX6_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX5_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX4_SEL(0);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX7_SEL(3);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX6_SEL(3);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX5_SEL(3);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX4_SEL(3);
+ /* Bypass Rotation 2 */
ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX3_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX2_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX1_SEL(0);
- ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX0_SEL(0);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX2_SEL(3);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX1_SEL(3);
+ ctrl0 |= BF_PXP_DATA_PATH_CTRL0_MUX0_SEL(3);
return ctrl0;
}
@@ -758,8 +764,8 @@ static void pxp_set_data_path(struct pxp_ctx *ctx)
ctrl0 = pxp_data_path_ctrl0(ctx);
ctrl1 = 0;
- ctrl1 |= BF_PXP_DATA_PATH_CTRL1_MUX17_SEL(1);
- ctrl1 |= BF_PXP_DATA_PATH_CTRL1_MUX16_SEL(1);
+ ctrl1 |= BF_PXP_DATA_PATH_CTRL1_MUX17_SEL(3);
+ ctrl1 |= BF_PXP_DATA_PATH_CTRL1_MUX16_SEL(3);
writel(ctrl0, dev->mmio + HW_PXP_DATA_PATH_CTRL0);
writel(ctrl1, dev->mmio + HW_PXP_DATA_PATH_CTRL1);