Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hi Hans and Niklas, On Mon, Jun 19, 2017 at 01:44:22PM +0200, Hans Verkuil wrote: > On 06/12/2017 04:48 PM, Niklas Söderlund wrote: > > Hi Hans, > > > > Thanks for your comments. > > > > On 2017-05-29 13:16:23 +0200, Hans Verkuil wrote: > > > On 05/24/2017 02:13 AM, Niklas Söderlund wrote: > > > > From: Niklas Söderlund> > > > > > > > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > > > > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > > > > hardware blocks are connected between the video sources and the video > > > > grabbers (VIN). > > > > > > > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > > > > > > > Signed-off-by: Niklas Söderlund > > > > --- > > > >drivers/media/platform/rcar-vin/Kconfig | 12 + > > > >drivers/media/platform/rcar-vin/Makefile| 1 + > > > >drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > > > > > > >3 files changed, 880 insertions(+) > > > >create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > > > > > > > > +static int rcar_csi2_registered(struct v4l2_subdev *sd) > > > > +{ > > > > + struct rcar_csi2 *priv = container_of(sd, struct rcar_csi2, > > > > subdev); > > > > + struct v4l2_async_subdev **subdevs = NULL; > > > > + int ret; > > > > + > > > > + subdevs = devm_kzalloc(priv->dev, sizeof(*subdevs), GFP_KERNEL); > > > > + if (subdevs == NULL) > > > > + return -ENOMEM; > > > > + > > > > + subdevs[0] = >remote.asd; > > > > + > > > > + priv->notifier.num_subdevs = 1; > > > > + priv->notifier.subdevs = subdevs; > > > > + priv->notifier.bound = rcar_csi2_notify_bound; > > > > + priv->notifier.unbind = rcar_csi2_notify_unbind; > > > > + priv->notifier.complete = rcar_csi2_notify_complete; > > > > + > > > > + ret = v4l2_async_subnotifier_register(>subdev, > > > > >notifier); > > > > + if (ret < 0) { > > > > + dev_err(priv->dev, "Notifier registration failed\n"); > > > > + return ret; > > > > + } > > > > + > > > > + return 0; > > > > +} > > > > > > Hmm, I'm trying to understand this, and I got one question. There are at > > > least > > > two complete callbacks: rcar_csi2_notify_complete and the bridge driver's > > > complete callback. Am I right that the bridge driver's complete callback > > > is > > > called as soon as this function exists (assuming this is the only subdev)? > > > > Yes (at least for the async case). > > > > In v4l2_async_test_notify() calls v4l2_device_register_subdev() which in > > turns calls this registered callback. v4l2_async_test_notify() then go > > on and calls the notifiers complete callback. > > > > In my case I have (in the simplified case) AD7482 -> CSI-2 -> VIN. Where > > VIN is the video device and CSI-2 is the subdevice of VIN while the > > ADV7482 is a subdevice to the CSI-2. In that case the call graph would > > be: > > > > v4l2_async_test_notify()(From VIN on the CSI-2 subdev) > >v4l2_device_register_subdev() > > sd->internal_ops->registered(sd); (sd == CSI-2 subdev) > >v4l2_async_subnotifier_register() (CSI-2 notifier for the ADV7482 > > subdev) > > v4l2_async_test_notify()(From CSI-2 on the ADV7482) [1] > >notifier->complete(notifier); (on the notifier from VIN) > > > > > > > > So the bridge driver thinks it is complete when in reality this subdev may > > > be waiting on newly registered subdevs? > > > > Yes if the ADV7482 subdevice are not already registered in [1] above the > > VIN complete callback would be called before the complete callback have > > been called on the notifier register from the CSI-2 registered callback. > > Instead that would be called once the ADV7482 calls > > v4l2_async_register_subdev(). > > > > > > > > If I am right, then my question is if that is what we want. If I am wrong, > > > then what did I miss? > > > > I think that is what we want? > > > > From the VIN point of view all the subdevices it registered in it's > > notifier have been found and bound right so I think it's correct to call > > the complete callback for that notifier at this point? If it really > > cared about that all devices be present before it calls it complete > > callback should it not also add all devices to its own notifier list? > > > > But I do see your point that the VIN really have no way of telling if > > all devices are present and we are ready to start to stream. This > > however will be found out with a -EPIPE error if a stream is tried to be > > started since the CSI-2 driver will fail to verify the pipeline since it > > have no subdevice attached to its source pad. What do you think? > > I think this is a bad idea. From the point of view of the application you > expect that once the device nodes
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hi Hans, Thanks for your feedback. On 2017-06-19 13:44:22 +0200, Hans Verkuil wrote: > On 06/12/2017 04:48 PM, Niklas Söderlund wrote: > > Hi Hans, > > > > Thanks for your comments. > > > > On 2017-05-29 13:16:23 +0200, Hans Verkuil wrote: > > > On 05/24/2017 02:13 AM, Niklas Söderlund wrote: > > > > From: Niklas Söderlund> > > > > > > > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > > > > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > > > > hardware blocks are connected between the video sources and the video > > > > grabbers (VIN). > > > > > > > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > > > > > > > Signed-off-by: Niklas Söderlund > > > > --- > > > >drivers/media/platform/rcar-vin/Kconfig | 12 + > > > >drivers/media/platform/rcar-vin/Makefile| 1 + > > > >drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > > > > > > >3 files changed, 880 insertions(+) > > > >create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > > > > > > > > +static int rcar_csi2_registered(struct v4l2_subdev *sd) > > > > +{ > > > > + struct rcar_csi2 *priv = container_of(sd, struct rcar_csi2, > > > > subdev); > > > > + struct v4l2_async_subdev **subdevs = NULL; > > > > + int ret; > > > > + > > > > + subdevs = devm_kzalloc(priv->dev, sizeof(*subdevs), GFP_KERNEL); > > > > + if (subdevs == NULL) > > > > + return -ENOMEM; > > > > + > > > > + subdevs[0] = >remote.asd; > > > > + > > > > + priv->notifier.num_subdevs = 1; > > > > + priv->notifier.subdevs = subdevs; > > > > + priv->notifier.bound = rcar_csi2_notify_bound; > > > > + priv->notifier.unbind = rcar_csi2_notify_unbind; > > > > + priv->notifier.complete = rcar_csi2_notify_complete; > > > > + > > > > + ret = v4l2_async_subnotifier_register(>subdev, > > > > >notifier); > > > > + if (ret < 0) { > > > > + dev_err(priv->dev, "Notifier registration failed\n"); > > > > + return ret; > > > > + } > > > > + > > > > + return 0; > > > > +} > > > > > > Hmm, I'm trying to understand this, and I got one question. There are at > > > least > > > two complete callbacks: rcar_csi2_notify_complete and the bridge driver's > > > complete callback. Am I right that the bridge driver's complete callback > > > is > > > called as soon as this function exists (assuming this is the only subdev)? > > > > Yes (at least for the async case). > > > > In v4l2_async_test_notify() calls v4l2_device_register_subdev() which in > > turns calls this registered callback. v4l2_async_test_notify() then go > > on and calls the notifiers complete callback. > > > > In my case I have (in the simplified case) AD7482 -> CSI-2 -> VIN. Where > > VIN is the video device and CSI-2 is the subdevice of VIN while the > > ADV7482 is a subdevice to the CSI-2. In that case the call graph would > > be: > > > > v4l2_async_test_notify()(From VIN on the CSI-2 subdev) > >v4l2_device_register_subdev() > > sd->internal_ops->registered(sd); (sd == CSI-2 subdev) > >v4l2_async_subnotifier_register() (CSI-2 notifier for the ADV7482 > > subdev) > > v4l2_async_test_notify()(From CSI-2 on the ADV7482) [1] > >notifier->complete(notifier); (on the notifier from VIN) > > > > > > > > So the bridge driver thinks it is complete when in reality this subdev may > > > be waiting on newly registered subdevs? > > > > Yes if the ADV7482 subdevice are not already registered in [1] above the > > VIN complete callback would be called before the complete callback have > > been called on the notifier register from the CSI-2 registered callback. > > Instead that would be called once the ADV7482 calls > > v4l2_async_register_subdev(). > > > > > > > > If I am right, then my question is if that is what we want. If I am wrong, > > > then what did I miss? > > > > I think that is what we want? > > > > From the VIN point of view all the subdevices it registered in it's > > notifier have been found and bound right so I think it's correct to call > > the complete callback for that notifier at this point? If it really > > cared about that all devices be present before it calls it complete > > callback should it not also add all devices to its own notifier list? > > > > But I do see your point that the VIN really have no way of telling if > > all devices are present and we are ready to start to stream. This > > however will be found out with a -EPIPE error if a stream is tried to be > > started since the CSI-2 driver will fail to verify the pipeline since it > > have no subdevice attached to its source pad. What do you think? > > I think this is a bad idea. From the point of view of the application you > expect that once the device nodes
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
On 06/12/2017 04:48 PM, Niklas Söderlund wrote: Hi Hans, Thanks for your comments. On 2017-05-29 13:16:23 +0200, Hans Verkuil wrote: On 05/24/2017 02:13 AM, Niklas Söderlund wrote: From: Niklas SöderlundA V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 hardware blocks are connected between the video sources and the video grabbers (VIN). Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. Signed-off-by: Niklas Söderlund --- drivers/media/platform/rcar-vin/Kconfig | 12 + drivers/media/platform/rcar-vin/Makefile| 1 + drivers/media/platform/rcar-vin/rcar-csi2.c | 867 3 files changed, 880 insertions(+) create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c +static int rcar_csi2_registered(struct v4l2_subdev *sd) +{ + struct rcar_csi2 *priv = container_of(sd, struct rcar_csi2, subdev); + struct v4l2_async_subdev **subdevs = NULL; + int ret; + + subdevs = devm_kzalloc(priv->dev, sizeof(*subdevs), GFP_KERNEL); + if (subdevs == NULL) + return -ENOMEM; + + subdevs[0] = >remote.asd; + + priv->notifier.num_subdevs = 1; + priv->notifier.subdevs = subdevs; + priv->notifier.bound = rcar_csi2_notify_bound; + priv->notifier.unbind = rcar_csi2_notify_unbind; + priv->notifier.complete = rcar_csi2_notify_complete; + + ret = v4l2_async_subnotifier_register(>subdev, >notifier); + if (ret < 0) { + dev_err(priv->dev, "Notifier registration failed\n"); + return ret; + } + + return 0; +} Hmm, I'm trying to understand this, and I got one question. There are at least two complete callbacks: rcar_csi2_notify_complete and the bridge driver's complete callback. Am I right that the bridge driver's complete callback is called as soon as this function exists (assuming this is the only subdev)? Yes (at least for the async case). In v4l2_async_test_notify() calls v4l2_device_register_subdev() which in turns calls this registered callback. v4l2_async_test_notify() then go on and calls the notifiers complete callback. In my case I have (in the simplified case) AD7482 -> CSI-2 -> VIN. Where VIN is the video device and CSI-2 is the subdevice of VIN while the ADV7482 is a subdevice to the CSI-2. In that case the call graph would be: v4l2_async_test_notify()(From VIN on the CSI-2 subdev) v4l2_device_register_subdev() sd->internal_ops->registered(sd); (sd == CSI-2 subdev) v4l2_async_subnotifier_register() (CSI-2 notifier for the ADV7482 subdev) v4l2_async_test_notify()(From CSI-2 on the ADV7482) [1] notifier->complete(notifier); (on the notifier from VIN) So the bridge driver thinks it is complete when in reality this subdev may be waiting on newly registered subdevs? Yes if the ADV7482 subdevice are not already registered in [1] above the VIN complete callback would be called before the complete callback have been called on the notifier register from the CSI-2 registered callback. Instead that would be called once the ADV7482 calls v4l2_async_register_subdev(). If I am right, then my question is if that is what we want. If I am wrong, then what did I miss? I think that is what we want? From the VIN point of view all the subdevices it registered in it's notifier have been found and bound right so I think it's correct to call the complete callback for that notifier at this point? If it really cared about that all devices be present before it calls it complete callback should it not also add all devices to its own notifier list? But I do see your point that the VIN really have no way of telling if all devices are present and we are ready to start to stream. This however will be found out with a -EPIPE error if a stream is tried to be started since the CSI-2 driver will fail to verify the pipeline since it have no subdevice attached to its source pad. What do you think? I think this is a bad idea. From the point of view of the application you expect that once the device nodes appear they will also *work*. In this case it might not work because one piece is still missing. So applications would have to know that if they get -EPIPE, then if they wait for a few seconds it might suddenly work because the last component was finally loaded. That's IMHO not acceptable and will drive application developers crazy. In the example above the CSI-2 subdev can't tell VIN that it is complete when it is still waiting for the ADV7482. Because it *isn't* complete. It is also unexpected: if A depends on B and B depends on C and D, then you expect that B won't tell A that is it ready unless C and D are both loaded. I was planning to merge this patch today: https://patchwork.linuxtv.org/patch/41834/ But
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hejssan Niklas, On Thu, Jun 15, 2017 at 10:48:20AM +0200, Niklas Söderlund wrote: > Hi Sakari, > > Thanks for your comments. > > On 2017-05-29 14:35:16 +0300, Sakari Ailus wrote: > > Hi Niklas, > > > > A few comments below. > > > > On Wed, May 24, 2017 at 02:13:53AM +0200, Niklas Söderlund wrote: > > > From: Niklas Söderlund> > > > > > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > > > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > > > hardware blocks are connected between the video sources and the video > > > grabbers (VIN). > > > > > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > > > > > Signed-off-by: Niklas Söderlund > > > --- > > > drivers/media/platform/rcar-vin/Kconfig | 12 + > > > drivers/media/platform/rcar-vin/Makefile| 1 + > > > drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > > > > > 3 files changed, 880 insertions(+) > > > create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > > > > > diff --git a/drivers/media/platform/rcar-vin/Kconfig > > > b/drivers/media/platform/rcar-vin/Kconfig > > > index af4c98b44d2e22cb..6875f30c1ae42631 100644 > > > --- a/drivers/media/platform/rcar-vin/Kconfig > > > +++ b/drivers/media/platform/rcar-vin/Kconfig > > > @@ -1,3 +1,15 @@ > > > +config VIDEO_RCAR_CSI2 > > > + tristate "R-Car MIPI CSI-2 Receiver" > > > + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF > > > + depends on ARCH_RENESAS || COMPILE_TEST > > > + select V4L2_FWNODE > > > + ---help--- > > > + Support for Renesas R-Car MIPI CSI-2 receiver. > > > + Supports R-Car Gen3 SoCs. > > > + > > > + To compile this driver as a module, choose M here: the > > > + module will be called rcar-csi2. > > > + > > > config VIDEO_RCAR_VIN > > > tristate "R-Car Video Input (VIN) Driver" > > > depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && > > > MEDIA_CONTROLLER > > > diff --git a/drivers/media/platform/rcar-vin/Makefile > > > b/drivers/media/platform/rcar-vin/Makefile > > > index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 > > > --- a/drivers/media/platform/rcar-vin/Makefile > > > +++ b/drivers/media/platform/rcar-vin/Makefile > > > @@ -1,3 +1,4 @@ > > > rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o > > > > > > +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o > > > obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o > > > diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c > > > b/drivers/media/platform/rcar-vin/rcar-csi2.c > > > new file mode 100644 > > > index ..1175f1fe4b139a13 > > > --- /dev/null > > > +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c > > > @@ -0,0 +1,867 @@ > > > +/* > > > + * Driver for Renesas R-Car MIPI CSI-2 Receiver > > > + * > > > + * Copyright (C) 2017 Renesas Electronics Corp. > > > + * > > > + * This program is free software; you can redistribute it and/or modify > > > it > > > + * under the terms of the GNU General Public License as published by > > > the > > > + * Free Software Foundation; either version 2 of the License, or (at > > > your > > > + * option) any later version. > > > + */ > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +/* Register offsets and bits */ > > > + > > > +/* Control Timing Select */ > > > +#define TREF_REG 0x00 > > > +#define TREF_TREF(1 << 0) > > > + > > > +/* Software Reset */ > > > +#define SRST_REG 0x04 > > > +#define SRST_SRST(1 << 0) > > > + > > > +/* PHY Operation Control */ > > > +#define PHYCNT_REG 0x08 > > > +#define PHYCNT_SHUTDOWNZ (1 << 17) > > > +#define PHYCNT_RSTZ (1 << 16) > > > +#define PHYCNT_ENABLECLK (1 << 4) > > > +#define PHYCNT_ENABLE_3 (1 << 3) > > > +#define PHYCNT_ENABLE_2 (1 << 2) > > > +#define PHYCNT_ENABLE_1 (1 << 1) > > > +#define PHYCNT_ENABLE_0 (1 << 0) > > > + > > > +/* Checksum Control */ > > > +#define CHKSUM_REG 0x0c > > > +#define CHKSUM_ECC_EN(1 << 1) > > > +#define CHKSUM_CRC_EN(1 << 0) > > > + > > > +/* > > > + * Channel Data Type Select > > > + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 > > > + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 > > > + */ > > > +#define VCDT_REG 0x10 > > > +#define VCDT2_REG0x14 > > > +#define VCDT_VCDTN_EN(1 << 15) > > > +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) > > > +#define VCDT_SEL_DTN_ON (1 << 6) > > > +#define
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hi Sakari, Thanks for your comments. On 2017-05-29 14:35:16 +0300, Sakari Ailus wrote: > Hi Niklas, > > A few comments below. > > On Wed, May 24, 2017 at 02:13:53AM +0200, Niklas Söderlund wrote: > > From: Niklas Söderlund> > > > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > > hardware blocks are connected between the video sources and the video > > grabbers (VIN). > > > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > > > Signed-off-by: Niklas Söderlund > > --- > > drivers/media/platform/rcar-vin/Kconfig | 12 + > > drivers/media/platform/rcar-vin/Makefile| 1 + > > drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > > > 3 files changed, 880 insertions(+) > > create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > > > diff --git a/drivers/media/platform/rcar-vin/Kconfig > > b/drivers/media/platform/rcar-vin/Kconfig > > index af4c98b44d2e22cb..6875f30c1ae42631 100644 > > --- a/drivers/media/platform/rcar-vin/Kconfig > > +++ b/drivers/media/platform/rcar-vin/Kconfig > > @@ -1,3 +1,15 @@ > > +config VIDEO_RCAR_CSI2 > > + tristate "R-Car MIPI CSI-2 Receiver" > > + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF > > + depends on ARCH_RENESAS || COMPILE_TEST > > + select V4L2_FWNODE > > + ---help--- > > + Support for Renesas R-Car MIPI CSI-2 receiver. > > + Supports R-Car Gen3 SoCs. > > + > > + To compile this driver as a module, choose M here: the > > + module will be called rcar-csi2. > > + > > config VIDEO_RCAR_VIN > > tristate "R-Car Video Input (VIN) Driver" > > depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && > > MEDIA_CONTROLLER > > diff --git a/drivers/media/platform/rcar-vin/Makefile > > b/drivers/media/platform/rcar-vin/Makefile > > index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 > > --- a/drivers/media/platform/rcar-vin/Makefile > > +++ b/drivers/media/platform/rcar-vin/Makefile > > @@ -1,3 +1,4 @@ > > rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o > > > > +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o > > obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o > > diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c > > b/drivers/media/platform/rcar-vin/rcar-csi2.c > > new file mode 100644 > > index ..1175f1fe4b139a13 > > --- /dev/null > > +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c > > @@ -0,0 +1,867 @@ > > +/* > > + * Driver for Renesas R-Car MIPI CSI-2 Receiver > > + * > > + * Copyright (C) 2017 Renesas Electronics Corp. > > + * > > + * This program is free software; you can redistribute it and/or modify it > > + * under the terms of the GNU General Public License as published by the > > + * Free Software Foundation; either version 2 of the License, or (at your > > + * option) any later version. > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +/* Register offsets and bits */ > > + > > +/* Control Timing Select */ > > +#define TREF_REG 0x00 > > +#define TREF_TREF (1 << 0) > > + > > +/* Software Reset */ > > +#define SRST_REG 0x04 > > +#define SRST_SRST (1 << 0) > > + > > +/* PHY Operation Control */ > > +#define PHYCNT_REG 0x08 > > +#define PHYCNT_SHUTDOWNZ (1 << 17) > > +#define PHYCNT_RSTZ(1 << 16) > > +#define PHYCNT_ENABLECLK (1 << 4) > > +#define PHYCNT_ENABLE_3(1 << 3) > > +#define PHYCNT_ENABLE_2(1 << 2) > > +#define PHYCNT_ENABLE_1(1 << 1) > > +#define PHYCNT_ENABLE_0(1 << 0) > > + > > +/* Checksum Control */ > > +#define CHKSUM_REG 0x0c > > +#define CHKSUM_ECC_EN (1 << 1) > > +#define CHKSUM_CRC_EN (1 << 0) > > + > > +/* > > + * Channel Data Type Select > > + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 > > + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 > > + */ > > +#define VCDT_REG 0x10 > > +#define VCDT2_REG 0x14 > > +#define VCDT_VCDTN_EN (1 << 15) > > +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) > > +#define VCDT_SEL_DTN_ON(1 << 6) > > +#define VCDT_SEL_DT(n) (((n) & 0x3f) << 0) > > + > > +/* Frame Data Type Select */ > > +#define FRDT_REG 0x18 > > + > > +/* Field Detection Control */ > > +#define FLD_REG0x1c > > +#define FLD_FLD_NUM(n) (((n) & 0xff) << 16) > > +#define FLD_FLD_EN4
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hi Hans, Thanks for your comments. On 2017-05-29 13:16:23 +0200, Hans Verkuil wrote: > On 05/24/2017 02:13 AM, Niklas Söderlund wrote: > > From: Niklas Söderlund> > > > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > > hardware blocks are connected between the video sources and the video > > grabbers (VIN). > > > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > > > Signed-off-by: Niklas Söderlund > > --- > > drivers/media/platform/rcar-vin/Kconfig | 12 + > > drivers/media/platform/rcar-vin/Makefile| 1 + > > drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > > > 3 files changed, 880 insertions(+) > > create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > > > diff --git a/drivers/media/platform/rcar-vin/Kconfig > > b/drivers/media/platform/rcar-vin/Kconfig > > index af4c98b44d2e22cb..6875f30c1ae42631 100644 > > --- a/drivers/media/platform/rcar-vin/Kconfig > > +++ b/drivers/media/platform/rcar-vin/Kconfig > > @@ -1,3 +1,15 @@ > > +config VIDEO_RCAR_CSI2 > > + tristate "R-Car MIPI CSI-2 Receiver" > > + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF > > + depends on ARCH_RENESAS || COMPILE_TEST > > + select V4L2_FWNODE > > + ---help--- > > + Support for Renesas R-Car MIPI CSI-2 receiver. > > + Supports R-Car Gen3 SoCs. > > + > > + To compile this driver as a module, choose M here: the > > + module will be called rcar-csi2. > > + > > config VIDEO_RCAR_VIN > > tristate "R-Car Video Input (VIN) Driver" > > depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && > > MEDIA_CONTROLLER > > diff --git a/drivers/media/platform/rcar-vin/Makefile > > b/drivers/media/platform/rcar-vin/Makefile > > index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 > > --- a/drivers/media/platform/rcar-vin/Makefile > > +++ b/drivers/media/platform/rcar-vin/Makefile > > @@ -1,3 +1,4 @@ > > rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o > > +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o > > obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o > > diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c > > b/drivers/media/platform/rcar-vin/rcar-csi2.c > > new file mode 100644 > > index ..1175f1fe4b139a13 > > --- /dev/null > > +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c > > @@ -0,0 +1,867 @@ > > +/* > > + * Driver for Renesas R-Car MIPI CSI-2 Receiver > > + * > > + * Copyright (C) 2017 Renesas Electronics Corp. > > + * > > + * This program is free software; you can redistribute it and/or modify it > > + * under the terms of the GNU General Public License as published by the > > + * Free Software Foundation; either version 2 of the License, or (at your > > + * option) any later version. > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +/* Register offsets and bits */ > > + > > +/* Control Timing Select */ > > +#define TREF_REG 0x00 > > +#define TREF_TREF (1 << 0) > > + > > +/* Software Reset */ > > +#define SRST_REG 0x04 > > +#define SRST_SRST (1 << 0) > > + > > +/* PHY Operation Control */ > > +#define PHYCNT_REG 0x08 > > +#define PHYCNT_SHUTDOWNZ (1 << 17) > > +#define PHYCNT_RSTZ(1 << 16) > > +#define PHYCNT_ENABLECLK (1 << 4) > > +#define PHYCNT_ENABLE_3(1 << 3) > > +#define PHYCNT_ENABLE_2(1 << 2) > > +#define PHYCNT_ENABLE_1(1 << 1) > > +#define PHYCNT_ENABLE_0(1 << 0) > > + > > +/* Checksum Control */ > > +#define CHKSUM_REG 0x0c > > +#define CHKSUM_ECC_EN (1 << 1) > > +#define CHKSUM_CRC_EN (1 << 0) > > + > > +/* > > + * Channel Data Type Select > > + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 > > + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 > > + */ > > +#define VCDT_REG 0x10 > > +#define VCDT2_REG 0x14 > > +#define VCDT_VCDTN_EN (1 << 15) > > +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) > > +#define VCDT_SEL_DTN_ON(1 << 6) > > +#define VCDT_SEL_DT(n) (((n) & 0x3f) << 0) > > + > > +/* Frame Data Type Select */ > > +#define FRDT_REG 0x18 > > + > > +/* Field Detection Control */ > > +#define FLD_REG0x1c > > +#define FLD_FLD_NUM(n) (((n) & 0xff) << 16) > > +#define FLD_FLD_EN4(1 << 3) > > +#define FLD_FLD_EN3
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
Hi Niklas, A few comments below. On Wed, May 24, 2017 at 02:13:53AM +0200, Niklas Söderlund wrote: > From: Niklas Söderlund> > A V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver > supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 > hardware blocks are connected between the video sources and the video > grabbers (VIN). > > Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. > > Signed-off-by: Niklas Söderlund > --- > drivers/media/platform/rcar-vin/Kconfig | 12 + > drivers/media/platform/rcar-vin/Makefile| 1 + > drivers/media/platform/rcar-vin/rcar-csi2.c | 867 > > 3 files changed, 880 insertions(+) > create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c > > diff --git a/drivers/media/platform/rcar-vin/Kconfig > b/drivers/media/platform/rcar-vin/Kconfig > index af4c98b44d2e22cb..6875f30c1ae42631 100644 > --- a/drivers/media/platform/rcar-vin/Kconfig > +++ b/drivers/media/platform/rcar-vin/Kconfig > @@ -1,3 +1,15 @@ > +config VIDEO_RCAR_CSI2 > + tristate "R-Car MIPI CSI-2 Receiver" > + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF > + depends on ARCH_RENESAS || COMPILE_TEST > + select V4L2_FWNODE > + ---help--- > + Support for Renesas R-Car MIPI CSI-2 receiver. > + Supports R-Car Gen3 SoCs. > + > + To compile this driver as a module, choose M here: the > + module will be called rcar-csi2. > + > config VIDEO_RCAR_VIN > tristate "R-Car Video Input (VIN) Driver" > depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && > MEDIA_CONTROLLER > diff --git a/drivers/media/platform/rcar-vin/Makefile > b/drivers/media/platform/rcar-vin/Makefile > index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 > --- a/drivers/media/platform/rcar-vin/Makefile > +++ b/drivers/media/platform/rcar-vin/Makefile > @@ -1,3 +1,4 @@ > rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o > > +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o > obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o > diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c > b/drivers/media/platform/rcar-vin/rcar-csi2.c > new file mode 100644 > index ..1175f1fe4b139a13 > --- /dev/null > +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c > @@ -0,0 +1,867 @@ > +/* > + * Driver for Renesas R-Car MIPI CSI-2 Receiver > + * > + * Copyright (C) 2017 Renesas Electronics Corp. > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License as published by the > + * Free Software Foundation; either version 2 of the License, or (at your > + * option) any later version. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > + > +/* Register offsets and bits */ > + > +/* Control Timing Select */ > +#define TREF_REG 0x00 > +#define TREF_TREF(1 << 0) > + > +/* Software Reset */ > +#define SRST_REG 0x04 > +#define SRST_SRST(1 << 0) > + > +/* PHY Operation Control */ > +#define PHYCNT_REG 0x08 > +#define PHYCNT_SHUTDOWNZ (1 << 17) > +#define PHYCNT_RSTZ (1 << 16) > +#define PHYCNT_ENABLECLK (1 << 4) > +#define PHYCNT_ENABLE_3 (1 << 3) > +#define PHYCNT_ENABLE_2 (1 << 2) > +#define PHYCNT_ENABLE_1 (1 << 1) > +#define PHYCNT_ENABLE_0 (1 << 0) > + > +/* Checksum Control */ > +#define CHKSUM_REG 0x0c > +#define CHKSUM_ECC_EN(1 << 1) > +#define CHKSUM_CRC_EN(1 << 0) > + > +/* > + * Channel Data Type Select > + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 > + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 > + */ > +#define VCDT_REG 0x10 > +#define VCDT2_REG0x14 > +#define VCDT_VCDTN_EN(1 << 15) > +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) > +#define VCDT_SEL_DTN_ON (1 << 6) > +#define VCDT_SEL_DT(n) (((n) & 0x3f) << 0) > + > +/* Frame Data Type Select */ > +#define FRDT_REG 0x18 > + > +/* Field Detection Control */ > +#define FLD_REG 0x1c > +#define FLD_FLD_NUM(n) (((n) & 0xff) << 16) > +#define FLD_FLD_EN4 (1 << 3) > +#define FLD_FLD_EN3 (1 << 2) > +#define FLD_FLD_EN2 (1 << 1) > +#define FLD_FLD_EN (1 << 0) > + > +/* Automatic Standby Control */ > +#define ASTBY_REG0x20 > + > +/* Long Data Type Setting 0 */ > +#define
Re: [PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
On 05/24/2017 02:13 AM, Niklas Söderlund wrote: From: Niklas SöderlundA V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 hardware blocks are connected between the video sources and the video grabbers (VIN). Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. Signed-off-by: Niklas Söderlund --- drivers/media/platform/rcar-vin/Kconfig | 12 + drivers/media/platform/rcar-vin/Makefile| 1 + drivers/media/platform/rcar-vin/rcar-csi2.c | 867 3 files changed, 880 insertions(+) create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c diff --git a/drivers/media/platform/rcar-vin/Kconfig b/drivers/media/platform/rcar-vin/Kconfig index af4c98b44d2e22cb..6875f30c1ae42631 100644 --- a/drivers/media/platform/rcar-vin/Kconfig +++ b/drivers/media/platform/rcar-vin/Kconfig @@ -1,3 +1,15 @@ +config VIDEO_RCAR_CSI2 + tristate "R-Car MIPI CSI-2 Receiver" + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF + depends on ARCH_RENESAS || COMPILE_TEST + select V4L2_FWNODE + ---help--- + Support for Renesas R-Car MIPI CSI-2 receiver. + Supports R-Car Gen3 SoCs. + + To compile this driver as a module, choose M here: the + module will be called rcar-csi2. + config VIDEO_RCAR_VIN tristate "R-Car Video Input (VIN) Driver" depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && MEDIA_CONTROLLER diff --git a/drivers/media/platform/rcar-vin/Makefile b/drivers/media/platform/rcar-vin/Makefile index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 --- a/drivers/media/platform/rcar-vin/Makefile +++ b/drivers/media/platform/rcar-vin/Makefile @@ -1,3 +1,4 @@ rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c new file mode 100644 index ..1175f1fe4b139a13 --- /dev/null +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c @@ -0,0 +1,867 @@ +/* + * Driver for Renesas R-Car MIPI CSI-2 Receiver + * + * Copyright (C) 2017 Renesas Electronics Corp. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* Register offsets and bits */ + +/* Control Timing Select */ +#define TREF_REG 0x00 +#define TREF_TREF (1 << 0) + +/* Software Reset */ +#define SRST_REG 0x04 +#define SRST_SRST (1 << 0) + +/* PHY Operation Control */ +#define PHYCNT_REG 0x08 +#define PHYCNT_SHUTDOWNZ (1 << 17) +#define PHYCNT_RSTZ(1 << 16) +#define PHYCNT_ENABLECLK (1 << 4) +#define PHYCNT_ENABLE_3(1 << 3) +#define PHYCNT_ENABLE_2(1 << 2) +#define PHYCNT_ENABLE_1(1 << 1) +#define PHYCNT_ENABLE_0(1 << 0) + +/* Checksum Control */ +#define CHKSUM_REG 0x0c +#define CHKSUM_ECC_EN (1 << 1) +#define CHKSUM_CRC_EN (1 << 0) + +/* + * Channel Data Type Select + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 + */ +#define VCDT_REG 0x10 +#define VCDT2_REG 0x14 +#define VCDT_VCDTN_EN (1 << 15) +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) +#define VCDT_SEL_DTN_ON(1 << 6) +#define VCDT_SEL_DT(n) (((n) & 0x3f) << 0) + +/* Frame Data Type Select */ +#define FRDT_REG 0x18 + +/* Field Detection Control */ +#define FLD_REG0x1c +#define FLD_FLD_NUM(n) (((n) & 0xff) << 16) +#define FLD_FLD_EN4(1 << 3) +#define FLD_FLD_EN3(1 << 2) +#define FLD_FLD_EN2(1 << 1) +#define FLD_FLD_EN (1 << 0) + +/* Automatic Standby Control */ +#define ASTBY_REG 0x20 + +/* Long Data Type Setting 0 */ +#define LNGDT0_REG 0x28 + +/* Long Data Type Setting 1 */ +#define LNGDT1_REG 0x2c + +/* Interrupt Enable */ +#define INTEN_REG 0x30 + +/* Interrupt Source Mask */ +#define INTCLOSE_REG 0x34 + +/* Interrupt Status
[PATCH v7 2/2] media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver
From: Niklas SöderlundA V4L2 driver for Renesas R-Car MIPI CSI-2 receiver. The driver supports the rcar-vin driver on R-Car Gen3 SoCs where separate CSI-2 hardware blocks are connected between the video sources and the video grabbers (VIN). Driver is based on a prototype by Koji Matsuoka in the Renesas BSP. Signed-off-by: Niklas Söderlund --- drivers/media/platform/rcar-vin/Kconfig | 12 + drivers/media/platform/rcar-vin/Makefile| 1 + drivers/media/platform/rcar-vin/rcar-csi2.c | 867 3 files changed, 880 insertions(+) create mode 100644 drivers/media/platform/rcar-vin/rcar-csi2.c diff --git a/drivers/media/platform/rcar-vin/Kconfig b/drivers/media/platform/rcar-vin/Kconfig index af4c98b44d2e22cb..6875f30c1ae42631 100644 --- a/drivers/media/platform/rcar-vin/Kconfig +++ b/drivers/media/platform/rcar-vin/Kconfig @@ -1,3 +1,15 @@ +config VIDEO_RCAR_CSI2 + tristate "R-Car MIPI CSI-2 Receiver" + depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF + depends on ARCH_RENESAS || COMPILE_TEST + select V4L2_FWNODE + ---help--- + Support for Renesas R-Car MIPI CSI-2 receiver. + Supports R-Car Gen3 SoCs. + + To compile this driver as a module, choose M here: the + module will be called rcar-csi2. + config VIDEO_RCAR_VIN tristate "R-Car Video Input (VIN) Driver" depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA && MEDIA_CONTROLLER diff --git a/drivers/media/platform/rcar-vin/Makefile b/drivers/media/platform/rcar-vin/Makefile index 48c5632c21dc060b..5ab803d3e7c1aa57 100644 --- a/drivers/media/platform/rcar-vin/Makefile +++ b/drivers/media/platform/rcar-vin/Makefile @@ -1,3 +1,4 @@ rcar-vin-objs = rcar-core.o rcar-dma.o rcar-v4l2.o +obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o obj-$(CONFIG_VIDEO_RCAR_VIN) += rcar-vin.o diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c new file mode 100644 index ..1175f1fe4b139a13 --- /dev/null +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c @@ -0,0 +1,867 @@ +/* + * Driver for Renesas R-Car MIPI CSI-2 Receiver + * + * Copyright (C) 2017 Renesas Electronics Corp. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* Register offsets and bits */ + +/* Control Timing Select */ +#define TREF_REG 0x00 +#define TREF_TREF (1 << 0) + +/* Software Reset */ +#define SRST_REG 0x04 +#define SRST_SRST (1 << 0) + +/* PHY Operation Control */ +#define PHYCNT_REG 0x08 +#define PHYCNT_SHUTDOWNZ (1 << 17) +#define PHYCNT_RSTZ(1 << 16) +#define PHYCNT_ENABLECLK (1 << 4) +#define PHYCNT_ENABLE_3(1 << 3) +#define PHYCNT_ENABLE_2(1 << 2) +#define PHYCNT_ENABLE_1(1 << 1) +#define PHYCNT_ENABLE_0(1 << 0) + +/* Checksum Control */ +#define CHKSUM_REG 0x0c +#define CHKSUM_ECC_EN (1 << 1) +#define CHKSUM_CRC_EN (1 << 0) + +/* + * Channel Data Type Select + * VCDT[0-15]: Channel 1 VCDT[16-31]: Channel 2 + * VCDT2[0-15]: Channel 3 VCDT2[16-31]: Channel 4 + */ +#define VCDT_REG 0x10 +#define VCDT2_REG 0x14 +#define VCDT_VCDTN_EN (1 << 15) +#define VCDT_SEL_VC(n) (((n) & 0x3) << 8) +#define VCDT_SEL_DTN_ON(1 << 6) +#define VCDT_SEL_DT(n) (((n) & 0x3f) << 0) + +/* Frame Data Type Select */ +#define FRDT_REG 0x18 + +/* Field Detection Control */ +#define FLD_REG0x1c +#define FLD_FLD_NUM(n) (((n) & 0xff) << 16) +#define FLD_FLD_EN4(1 << 3) +#define FLD_FLD_EN3(1 << 2) +#define FLD_FLD_EN2(1 << 1) +#define FLD_FLD_EN (1 << 0) + +/* Automatic Standby Control */ +#define ASTBY_REG 0x20 + +/* Long Data Type Setting 0 */ +#define LNGDT0_REG 0x28 + +/* Long Data Type Setting 1 */ +#define LNGDT1_REG 0x2c + +/* Interrupt Enable */ +#define INTEN_REG 0x30 + +/* Interrupt Source Mask */ +#define INTCLOSE_REG 0x34 + +/* Interrupt Status Monitor */ +#define INTSTATE_REG 0x38 + +/*