On Fri, Dec 11, 2020 at 04:57:00PM +0100, Paul Kocialkowski wrote: > The A31 CSI controller supports a MIPI CSI-2 bridge input, which has > its own dedicated port in the fwnode graph. > > Support for this input is added with this change: > - two pads are defined for the media entity instead of one > and only one needs to be connected at a time; > - the pads currently match the fwnode graph representation; > - links are created between our pads and the subdevs for each > interface and are no longer immutable so that userspace can select > which interface to use in case both are bound to a subdev; > - fwnode endpoints are parsed and stored for each interface; > - the active subdev (and fwnode endpoint) is retrieved when validating > the media link at stream on time and cleared at stream off; > - an error is raised if both links are active at the same time; > - the MIPI interface bit is set if the MIPI CSI-2 bridge endpoint is > active. > > In the future, the media entity representation might evolve to: > - distinguish the internal parallel bridge and data formatter; > - represent each of the 4 internal channels that can exist between > the parallel bridge (for BT656 time-multiplex) and MIPI CSI-2 > (internal channels can be mapped to virtual channels); > - connect the controller's output to the ISP instead of its > DMA engine. > > Finally note that the MIPI CSI-2 bridges should not be linked in > the fwnode graph unless they have a sensor subdev attached. > > Signed-off-by: Paul Kocialkowski > --- > .../platform/sunxi/sun6i-csi/sun6i_csi.c | 123 ++++++++++++++---- > .../platform/sunxi/sun6i-csi/sun6i_csi.h | 3 - > .../platform/sunxi/sun6i-csi/sun6i_video.c | 53 ++++---- > .../platform/sunxi/sun6i-csi/sun6i_video.h | 7 +- > 4 files changed, 135 insertions(+), 51 deletions(-) > > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > index f1150de94e98..481181038e1e 100644 > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > @@ -52,15 +52,16 @@ bool sun6i_csi_is_format_supported(struct sun6i_csi *csi, > u32 pixformat, u32 mbus_code) > { > struct sun6i_csi_dev *sdev = sun6i_csi_to_dev(csi); > + struct v4l2_fwnode_endpoint *endpoint = sdev->csi.video.source_endpoint; > > /* > * Some video receivers have the ability to be compatible with > * 8bit and 16bit bus width. > * Identify the media bus format from device tree. > */ > - if ((sdev->csi.v4l2_ep.bus_type == V4L2_MBUS_PARALLEL > - || sdev->csi.v4l2_ep.bus_type == V4L2_MBUS_BT656) > - && sdev->csi.v4l2_ep.bus.parallel.bus_width == 16) { > + if ((endpoint->bus_type == V4L2_MBUS_PARALLEL > + || endpoint->bus_type == V4L2_MBUS_BT656) > + && endpoint->bus.parallel.bus_width == 16) { The operators should be at the end of the previous line, not at the beginning Maxime