On Fri, Oct 23, 2020 at 07:45:37PM +0200, Paul Kocialkowski wrote: > 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. > 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 > Signed-off-by: Kévin L'hôpital > Signed-off-by: Paul Kocialkowski > --- > .../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? Maxime