Re: [PATCH v9 2/2] media: V3s: Add support for Allwinner CSI.

2018-04-03 Thread Hans Verkuil
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.

2018-03-08 Thread Yong
Hi,

On Tue, 6 Mar 2018 17:14:18 +0200
Sakari Ailus  wrote:

> 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.

2018-03-06 Thread Sakari Ailus
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.

2018-03-05 Thread Yong Deng
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 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