| From d4044dbf0e7cc9a27f1b4c2bb0279f2a7f4108e4 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 9 Jun 2021 15:00:28 +0200 |
| Subject: media: atmel: atmel-sama5d2-isc: fix YUYV format |
| |
| From: Eugen Hristev <eugen.hristev@microchip.com> |
| |
| [ Upstream commit 123aaf816b952e5b6ee754335596b01ba1f6c830 ] |
| |
| SAMA5D2 does not have the YCYC field for the RLP (rounding, limiting, |
| packaging) module. |
| The YCYC field is supposed to work with interleaved YUV formats like YUYV. |
| In SAMA5D2, we have to use YYCC field, which is used for both planar |
| formats like YUV420 and interleaved formats like YUYV. |
| Fix the according rlp callback to replace the generic YCYC field (which |
| makes more sense from a logical point of view) with the required YYCC |
| field. |
| |
| Fixes: debfa496871c ("media: atmel: atmel-isc-base: add support for more formats and additional pipeline modules") |
| Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> |
| Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../media/platform/atmel/atmel-sama5d2-isc.c | 17 +++++++++++++++++ |
| 1 file changed, 17 insertions(+) |
| |
| diff --git a/drivers/media/platform/atmel/atmel-sama5d2-isc.c b/drivers/media/platform/atmel/atmel-sama5d2-isc.c |
| index 925aa80a139b..b66f1d174e9d 100644 |
| --- a/drivers/media/platform/atmel/atmel-sama5d2-isc.c |
| +++ b/drivers/media/platform/atmel/atmel-sama5d2-isc.c |
| @@ -255,6 +255,23 @@ static void isc_sama5d2_config_rlp(struct isc_device *isc) |
| struct regmap *regmap = isc->regmap; |
| u32 rlp_mode = isc->config.rlp_cfg_mode; |
| |
| + /* |
| + * In sama5d2, the YUV planar modes and the YUYV modes are treated |
| + * in the same way in RLP register. |
| + * Normally, YYCC mode should be Luma(n) - Color B(n) - Color R (n) |
| + * and YCYC should be Luma(n + 1) - Color B (n) - Luma (n) - Color R (n) |
| + * but in sama5d2, the YCYC mode does not exist, and YYCC must be |
| + * selected for both planar and interleaved modes, as in fact |
| + * both modes are supported. |
| + * |
| + * Thus, if the YCYC mode is selected, replace it with the |
| + * sama5d2-compliant mode which is YYCC . |
| + */ |
| + if ((rlp_mode & ISC_RLP_CFG_MODE_YCYC) == ISC_RLP_CFG_MODE_YCYC) { |
| + rlp_mode &= ~ISC_RLP_CFG_MODE_MASK; |
| + rlp_mode |= ISC_RLP_CFG_MODE_YYCC; |
| + } |
| + |
| regmap_update_bits(regmap, ISC_RLP_CFG + isc->offsets.rlp, |
| ISC_RLP_CFG_MODE_MASK, rlp_mode); |
| } |
| -- |
| 2.30.2 |
| |