Re: [PATCH 05/14] media: sun6i-csi: Only configure the interface data width for parallel
From: Paul Kocialkowski <hidden>
Date: 2020-10-27 09:31:36
Also in:
linux-devicetree, linux-media, lkml
Hi, On Mon 26 Oct 20, 17:00, Maxime Ripard wrote:
On Fri, Oct 23, 2020 at 07:45:37PM +0200, Paul Kocialkowski wrote:quoted
Bits related to the interface data width do not have any effect when the CSI controller is taking input from the MIPI CSI-2 controller.I guess it would be clearer to mention that the data width is only applicable for parallel here.
Understood, will change the wording in the next version.
quoted
In prevision of adding support for this case, set these bits conditionally so there is no ambiguity. Co-developed-by: Kévin L'hôpital <redacted> Signed-off-by: Kévin L'hôpital <redacted> Signed-off-by: Paul Kocialkowski <redacted> --- .../platform/sunxi/sun6i-csi/sun6i_csi.c | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-)diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c index 5d2389a5cd17..a876a05ea3c7 100644 --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c@@ -378,8 +378,13 @@ static void sun6i_csi_setup_bus(struct sun6i_csi_dev *sdev) unsigned char bus_width; u32 flags; u32 cfg; + bool input_parallel = false; bool input_interlaced = false; + if (endpoint->bus_type == V4L2_MBUS_PARALLEL || + endpoint->bus_type == V4L2_MBUS_BT656) + input_parallel = true; + if (csi->config.field == V4L2_FIELD_INTERLACED || csi->config.field == V4L2_FIELD_INTERLACED_TB || csi->config.field == V4L2_FIELD_INTERLACED_BT)@@ -395,6 +400,26 @@ static void sun6i_csi_setup_bus(struct sun6i_csi_dev *sdev) CSI_IF_CFG_HREF_POL_MASK | CSI_IF_CFG_FIELD_MASK | CSI_IF_CFG_SRC_TYPE_MASK); + if (input_parallel) { + switch (bus_width) { + case 8: + cfg |= CSI_IF_CFG_IF_DATA_WIDTH_8BIT; + break; + case 10: + cfg |= CSI_IF_CFG_IF_DATA_WIDTH_10BIT; + break; + case 12: + cfg |= CSI_IF_CFG_IF_DATA_WIDTH_12BIT; + break; + case 16: /* No need to configure DATA_WIDTH for 16bit */ + break; + default: + dev_warn(sdev->dev, "Unsupported bus width: %u\n", + bus_width); + break; + } + } + if (input_interlaced) cfg |= CSI_IF_CFG_SRC_TYPE_INTERLACED; else@@ -440,23 +465,6 @@ static void sun6i_csi_setup_bus(struct sun6i_csi_dev *sdev) break; } - switch (bus_width) { - case 8: - cfg |= CSI_IF_CFG_IF_DATA_WIDTH_8BIT; - break; - case 10: - cfg |= CSI_IF_CFG_IF_DATA_WIDTH_10BIT; - break; - case 12: - cfg |= CSI_IF_CFG_IF_DATA_WIDTH_12BIT; - break; - case 16: /* No need to configure DATA_WIDTH for 16bit */ - break; - default: - dev_warn(sdev->dev, "Unsupported bus width: %u\n", bus_width); - break; - } -Is there any reason to move it around?
The main reason is cosmetics: input_parallel is introduced to match the already existing input_interlaced variable, so it made sense to me to have both of these conditionals one after the other instead of spreading them randomly. I can mention this in the commit log if you prefer. -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com