Re: [PATCH v9 2/2] media: V3s: Add support for Allwinner CSI.
On 06/03/18 03:16, Yong Deng wrote: > Allwinner V3s SoC features two CSI module. CSI0 is used for MIPI CSI-2 > interface and CSI1 is used for parallel interface. This is not > documented in datasheet but by test and guess. > > This patch implement a v4l2 framework driver for it. > > Currently, the driver only support the parallel interface. MIPI-CSI2, > ISP's support are not included in this patch. > > Reviewed-by: Maxime Ripard> Tested-by: Maxime Ripard > Signed-off-by: Yong Deng Reviewed-by: Hans Verkuil Thanks! Hans
Re: [PATCH v9 2/2] media: V3s: Add support for Allwinner CSI.
Hi, On Tue, 6 Mar 2018 17:14:18 +0200 Sakari Ailuswrote: > Hi Yong, > > Thanks for the patchset; please see my comments below. > > On Tue, Mar 06, 2018 at 10:16:02AM +0800, Yong Deng wrote: > > Allwinner V3s SoC features two CSI module. CSI0 is used for MIPI CSI-2 > > interface and CSI1 is used for parallel interface. This is not > > documented in datasheet but by test and guess. ... > > + > > +static const u32 supported_pixformats[] = { > > + V4L2_PIX_FMT_SBGGR8, > > + V4L2_PIX_FMT_SGBRG8, > > + V4L2_PIX_FMT_SGRBG8, > > + V4L2_PIX_FMT_SRGGB8, > > + V4L2_PIX_FMT_SBGGR10, > > + V4L2_PIX_FMT_SGBRG10, > > + V4L2_PIX_FMT_SGRBG10, > > + V4L2_PIX_FMT_SRGGB10, > > + V4L2_PIX_FMT_SBGGR12, > > + V4L2_PIX_FMT_SGBRG12, > > + V4L2_PIX_FMT_SGRBG12, > > + V4L2_PIX_FMT_SRGGB12, > > + V4L2_PIX_FMT_YUYV, > > + V4L2_PIX_FMT_YVYU, > > + V4L2_PIX_FMT_UYVY, > > + V4L2_PIX_FMT_VYUY, > > + V4L2_PIX_FMT_HM12, > > + V4L2_PIX_FMT_NV12, > > + V4L2_PIX_FMT_NV21, > > + V4L2_PIX_FMT_YUV420, > > + V4L2_PIX_FMT_YVU420, > > + V4L2_PIX_FMT_NV16, > > + V4L2_PIX_FMT_NV61, > > + V4L2_PIX_FMT_YUV422P, > > +}; > > How about moving this where it's actually used? You'd also get rid of the > function to obtain this list. I think which formats are supported is determined by hardware (CSI). And different SoCs may support different formats. The distinction will be made in sun6i-csi.c. > > > + > > +static inline struct sun6i_csi_dev *sun6i_csi_to_dev(struct sun6i_csi *csi) > > +{ > > + return container_of(csi, struct sun6i_csi_dev, csi); > > +} > > + > > +int sun6i_csi_get_supported_pixformats(struct sun6i_csi *csi, > > + const u32 **pixformats) > > +{ > > + if (pixformats != NULL) > > + *pixformats = supported_pixformats; > > + > > + return ARRAY_SIZE(supported_pixformats); > > +} > > + > > +/* TODO add 10&12 bit YUV, RGB support */ > > +bool sun6i_csi_is_format_support(struct sun6i_csi *csi, > > s/support/supported/ OK. > > > +u32 pixformat, u32 mbus_code) > > +{ > > + struct sun6i_csi_dev *sdev = sun6i_csi_to_dev(csi); > > + > > + /* > > +* 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) { > > + switch (pixformat) { > > + case V4L2_PIX_FMT_HM12: > > + case V4L2_PIX_FMT_NV12: > > + case V4L2_PIX_FMT_NV21: > > + case V4L2_PIX_FMT_NV16: > > + case V4L2_PIX_FMT_NV61: > > + case V4L2_PIX_FMT_YUV420: > > + case V4L2_PIX_FMT_YVU420: > > + case V4L2_PIX_FMT_YUV422P: > > + switch (mbus_code) { > > + case MEDIA_BUS_FMT_UYVY8_1X16: > > + case MEDIA_BUS_FMT_VYUY8_1X16: > > + case MEDIA_BUS_FMT_YUYV8_1X16: > > + case MEDIA_BUS_FMT_YVYU8_1X16: > > + return true; > > + default: > > + dev_dbg(sdev->dev, "Unsupported mbus code: > > 0x%x\n", > > + mbus_code); > > + break; > > + } > > + break; > > + default: > > + dev_dbg(sdev->dev, "Unsupported pixformat: 0x%x\n", > > + pixformat); > > + break; > > + } > > + return false; > > + } > > + > > + switch (pixformat) { > > + case V4L2_PIX_FMT_SBGGR8: > > + return (mbus_code == MEDIA_BUS_FMT_SBGGR8_1X8); > > + case V4L2_PIX_FMT_SGBRG8: > > + return (mbus_code == MEDIA_BUS_FMT_SGBRG8_1X8); > > + case V4L2_PIX_FMT_SGRBG8: > > + return (mbus_code == MEDIA_BUS_FMT_SGRBG8_1X8); > > + case V4L2_PIX_FMT_SRGGB8: > > + return (mbus_code == MEDIA_BUS_FMT_SRGGB8_1X8); > > + case V4L2_PIX_FMT_SBGGR10: > > + return (mbus_code == MEDIA_BUS_FMT_SBGGR10_1X10); > > + case V4L2_PIX_FMT_SGBRG10: > > + return (mbus_code == MEDIA_BUS_FMT_SGBRG10_1X10); > > + case V4L2_PIX_FMT_SGRBG10: > > + return (mbus_code == MEDIA_BUS_FMT_SGRBG10_1X10); > > + case V4L2_PIX_FMT_SRGGB10: > > + return (mbus_code == MEDIA_BUS_FMT_SRGGB10_1X10); > > + case V4L2_PIX_FMT_SBGGR12: > > + return (mbus_code == MEDIA_BUS_FMT_SBGGR12_1X12); > > + case V4L2_PIX_FMT_SGBRG12: > > + return (mbus_code == MEDIA_BUS_FMT_SGBRG12_1X12); > > + case V4L2_PIX_FMT_SGRBG12: > > + return (mbus_code == MEDIA_BUS_FMT_SGRBG12_1X12); > > + case V4L2_PIX_FMT_SRGGB12: > > + return (mbus_code == MEDIA_BUS_FMT_SRGGB12_1X12); > > + > > +
Re: [PATCH v9 2/2] media: V3s: Add support for Allwinner CSI.
Hi Yong, Thanks for the patchset; please see my comments below. On Tue, Mar 06, 2018 at 10:16:02AM +0800, Yong Deng wrote: > Allwinner V3s SoC features two CSI module. CSI0 is used for MIPI CSI-2 > interface and CSI1 is used for parallel interface. This is not > documented in datasheet but by test and guess. > > This patch implement a v4l2 framework driver for it. > > Currently, the driver only support the parallel interface. MIPI-CSI2, > ISP's support are not included in this patch. > > Reviewed-by: Maxime Ripard> Tested-by: Maxime Ripard > Signed-off-by: Yong Deng > --- > MAINTAINERS| 8 + > drivers/media/platform/Kconfig | 1 + > drivers/media/platform/Makefile| 2 + > drivers/media/platform/sunxi/sun6i-csi/Kconfig | 9 + > drivers/media/platform/sunxi/sun6i-csi/Makefile| 3 + > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c | 936 > + > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h | 145 > .../media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h | 196 + > .../media/platform/sunxi/sun6i-csi/sun6i_video.c | 759 + > .../media/platform/sunxi/sun6i-csi/sun6i_video.h | 53 ++ > 10 files changed, 2112 insertions(+) > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/Kconfig > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/Makefile > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c > create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_video.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 91ed6adfa4a6..b4a331ad35b5 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -3793,6 +3793,14 @@ M: Jaya Kumar > S: Maintained > F: sound/pci/cs5535audio/ > > +CSI DRIVERS FOR ALLWINNER V3s > +M: Yong Deng > +L: linux-media@vger.kernel.org > +T: git git://linuxtv.org/media_tree.git > +S: Maintained > +F: drivers/media/platform/sunxi/sun6i-csi/ > +F: Documentation/devicetree/bindings/media/sun6i-csi.txt > + > CW1200 WLAN driver > M: Solomon Peachy > S: Maintained > diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig > index f9cc0582c8a9..7f1ee46c3258 100644 > --- a/drivers/media/platform/Kconfig > +++ b/drivers/media/platform/Kconfig > @@ -159,6 +159,7 @@ source "drivers/media/platform/am437x/Kconfig" > source "drivers/media/platform/xilinx/Kconfig" > source "drivers/media/platform/rcar-vin/Kconfig" > source "drivers/media/platform/atmel/Kconfig" > +source "drivers/media/platform/sunxi/sun6i-csi/Kconfig" > > config VIDEO_TI_CAL > tristate "TI CAL (Camera Adaptation Layer) driver" > diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile > index 85e112122f32..143d8a473b0a 100644 > --- a/drivers/media/platform/Makefile > +++ b/drivers/media/platform/Makefile > @@ -96,3 +96,5 @@ obj-$(CONFIG_VIDEO_QCOM_CAMSS) += > qcom/camss-8x16/ > obj-$(CONFIG_VIDEO_QCOM_VENUS) += qcom/venus/ > > obj-y+= meson/ > + > +obj-$(CONFIG_VIDEO_SUN6I_CSI)+= sunxi/sun6i-csi/ > diff --git a/drivers/media/platform/sunxi/sun6i-csi/Kconfig > b/drivers/media/platform/sunxi/sun6i-csi/Kconfig > new file mode 100644 > index ..314188aae2c2 > --- /dev/null > +++ b/drivers/media/platform/sunxi/sun6i-csi/Kconfig > @@ -0,0 +1,9 @@ > +config VIDEO_SUN6I_CSI > + tristate "Allwinner V3s Camera Sensor Interface driver" > + depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA > + depends on ARCH_SUNXI || COMPILE_TEST > + select VIDEOBUF2_DMA_CONTIG > + select REGMAP_MMIO > + select V4L2_FWNODE > + ---help--- > +Support for the Allwinner Camera Sensor Interface Controller on V3s. > diff --git a/drivers/media/platform/sunxi/sun6i-csi/Makefile > b/drivers/media/platform/sunxi/sun6i-csi/Makefile > new file mode 100644 > index ..213cb6be9e9c > --- /dev/null > +++ b/drivers/media/platform/sunxi/sun6i-csi/Makefile > @@ -0,0 +1,3 @@ > +sun6i-csi-y += sun6i_video.o sun6i_csi.o > + > +obj-$(CONFIG_VIDEO_SUN6I_CSI) += sun6i-csi.o > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > new file mode 100644 > index ..26d57e6053df > --- /dev/null > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c > @@ -0,0 +1,936 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (c) 2011-2018 Magewell Electronics Co., Ltd. (Nanjing) > + * All rights
[PATCH v9 2/2] media: V3s: Add support for Allwinner CSI.
Allwinner V3s SoC features two CSI module. CSI0 is used for MIPI CSI-2 interface and CSI1 is used for parallel interface. This is not documented in datasheet but by test and guess. This patch implement a v4l2 framework driver for it. Currently, the driver only support the parallel interface. MIPI-CSI2, ISP's support are not included in this patch. Reviewed-by: Maxime RipardTested-by: Maxime Ripard Signed-off-by: Yong Deng --- MAINTAINERS| 8 + drivers/media/platform/Kconfig | 1 + drivers/media/platform/Makefile| 2 + drivers/media/platform/sunxi/sun6i-csi/Kconfig | 9 + drivers/media/platform/sunxi/sun6i-csi/Makefile| 3 + drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c | 936 + drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h | 145 .../media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h | 196 + .../media/platform/sunxi/sun6i-csi/sun6i_video.c | 759 + .../media/platform/sunxi/sun6i-csi/sun6i_video.h | 53 ++ 10 files changed, 2112 insertions(+) create mode 100644 drivers/media/platform/sunxi/sun6i-csi/Kconfig create mode 100644 drivers/media/platform/sunxi/sun6i-csi/Makefile create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c create mode 100644 drivers/media/platform/sunxi/sun6i-csi/sun6i_video.h diff --git a/MAINTAINERS b/MAINTAINERS index 91ed6adfa4a6..b4a331ad35b5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3793,6 +3793,14 @@ M: Jaya Kumar S: Maintained F: sound/pci/cs5535audio/ +CSI DRIVERS FOR ALLWINNER V3s +M: Yong Deng +L: linux-media@vger.kernel.org +T: git git://linuxtv.org/media_tree.git +S: Maintained +F: drivers/media/platform/sunxi/sun6i-csi/ +F: Documentation/devicetree/bindings/media/sun6i-csi.txt + CW1200 WLAN driver M: Solomon Peachy S: Maintained diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index f9cc0582c8a9..7f1ee46c3258 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -159,6 +159,7 @@ source "drivers/media/platform/am437x/Kconfig" source "drivers/media/platform/xilinx/Kconfig" source "drivers/media/platform/rcar-vin/Kconfig" source "drivers/media/platform/atmel/Kconfig" +source "drivers/media/platform/sunxi/sun6i-csi/Kconfig" config VIDEO_TI_CAL tristate "TI CAL (Camera Adaptation Layer) driver" diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile index 85e112122f32..143d8a473b0a 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -96,3 +96,5 @@ obj-$(CONFIG_VIDEO_QCOM_CAMSS)+= qcom/camss-8x16/ obj-$(CONFIG_VIDEO_QCOM_VENUS) += qcom/venus/ obj-y += meson/ + +obj-$(CONFIG_VIDEO_SUN6I_CSI) += sunxi/sun6i-csi/ diff --git a/drivers/media/platform/sunxi/sun6i-csi/Kconfig b/drivers/media/platform/sunxi/sun6i-csi/Kconfig new file mode 100644 index ..314188aae2c2 --- /dev/null +++ b/drivers/media/platform/sunxi/sun6i-csi/Kconfig @@ -0,0 +1,9 @@ +config VIDEO_SUN6I_CSI + tristate "Allwinner V3s Camera Sensor Interface driver" + depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA + depends on ARCH_SUNXI || COMPILE_TEST + select VIDEOBUF2_DMA_CONTIG + select REGMAP_MMIO + select V4L2_FWNODE + ---help--- + Support for the Allwinner Camera Sensor Interface Controller on V3s. diff --git a/drivers/media/platform/sunxi/sun6i-csi/Makefile b/drivers/media/platform/sunxi/sun6i-csi/Makefile new file mode 100644 index ..213cb6be9e9c --- /dev/null +++ b/drivers/media/platform/sunxi/sun6i-csi/Makefile @@ -0,0 +1,3 @@ +sun6i-csi-y += sun6i_video.o sun6i_csi.o + +obj-$(CONFIG_VIDEO_SUN6I_CSI) += sun6i-csi.o diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c new file mode 100644 index ..26d57e6053df --- /dev/null +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c @@ -0,0 +1,936 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2011-2018 Magewell Electronics Co., Ltd. (Nanjing) + * All rights reserved. + * Author: Yong Deng + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sun6i_csi.h" +#include "sun6i_csi_reg.h" + +#define MODULE_NAME