linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yong <yong.deng@magewell.com>
To: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>, Chen-Yu Tsai <wens@csie.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"David S. Miller" <davem@davemloft.net>,
	Hans Verkuil <hverkuil@xs4all.nl>, Arnd Bergmann <arnd@arndb.de>,
	Hugues Fruchet <hugues.fruchet@st.com>,
	Yannick Fertre <yannick.fertre@st.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Benoit Parrot <bparrot@ti.com>,
	Benjamin Gaignard <benjamin.gaignard@linaro.org>,
	Jean-Christophe Trotin <jean-christophe.trotin@st.com>,
	Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>,
	Minghsiu Tsai <minghsiu.tsai@mediatek.com>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Robert Jarzmik <robert.jarzmik@free.fr>,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com
Subject: Re: [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI.
Date: Wed, 23 Aug 2017 10:32:16 +0800	[thread overview]
Message-ID: <20170823103216.e43283308c195c4a80d929fa@magewell.com> (raw)
In-Reply-To: <20170822174339.6woauylgzkgqxygk@flea.lan>

On Tue, 22 Aug 2017 19:43:39 +0200
Maxime Ripard <maxime.ripard@free-electrons.com> wrote:

> Hi Yong,
> 
> On Mon, Jul 31, 2017 at 11:16:40AM +0800, Yong wrote:
> > > > @@ -143,6 +143,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/sun6i-csi/Kconfig"
> > > 
> > > We're going to have several different drivers in v4l eventually, so I
> > > guess it would make sense to move to a directory of our own.
> > 
> > Like this?
> > drivers/media/platform/sunxi/sun6i-csi
> 
> Yep.
> 
> > > > +static int sun6i_graph_notify_complete(struct v4l2_async_notifier *notifier)
> > > > +{
> > > > +	struct sun6i_csi *csi =
> > > > +			container_of(notifier, struct sun6i_csi, notifier);
> > > > +	struct sun6i_graph_entity *entity;
> > > > +	int ret;
> > > > +
> > > > +	dev_dbg(csi->dev, "notify complete, all subdevs registered\n");
> > > > +
> > > > +	/* Create links for every entity. */
> > > > +	list_for_each_entry(entity, &csi->entities, list) {
> > > > +		ret = sun6i_graph_build_one(csi, entity);
> > > > +		if (ret < 0)
> > > > +			return ret;
> > > > +	}
> > > > +
> > > > +	/* Create links for video node. */
> > > > +	ret = sun6i_graph_build_video(csi);
> > > > +	if (ret < 0)
> > > > +		return ret;
> > > 
> > > Can you elaborate a bit on the difference between a node parsed with
> > > _graph_build_one and _graph_build_video? Can't you just store the
> > > remote sensor when you build the notifier, and reuse it here?
> > 
> > There maybe many usercases:
> > 1. CSI->Sensor.
> > 2. CSI->MIPI->Sensor.
> > 3. CSI->FPGA->Sensor1
> >             ->Sensor2.
> > FPGA maybe some other video processor. FPGA, MIPI, Sensor can be
> > registered as v4l2 subdevs. We do not care about the driver code
> > of them. But they should be linked together here.
> > 
> > So, the _graph_build_one is used to link CSI port and subdevs. 
> > _graph_build_video is used to link CSI port and video node.
> 
> So the graph_build_one is for the two first cases, and the
> _build_video for the latter case?

No. 
The _graph_build_one is used to link the subdevs found in the device 
tree. _build_video is used to link the closest subdev to video node.
Video node is created in the driver, so the method to get it's pad is
diffrent to the subdevs.

> 
> If so, you should take a look at the last iteration of the
> subnotifiers rework by Nikas Söderlund (v4l2-async: add subnotifier
> registration for subdevices).
> 
> It allows subdevs to register notifiers, and you don't have to build
> the graph from the video device, each device and subdev can only care
> about what's next in the pipeline, but not really what's behind it.
> 
> That would mean in your case that you can only deal with your single
> CSI pad, and whatever subdev driver will use it care about its own.

Do you mean the subdevs create pad link in the notifier registered by
themself ?
If so, _graph_build_one is needless. But how to make sure the pipeline
has linked correctly when operateing the pipeline. 
I will lookt at this in more detail.

> 
> > This part is also difficult to understand for me. The one CSI module
> > have only one DMA channel(single port). But thay can be linked to 
> > different physical port (Parallel or MIPI)(multiple ep) by IF select
> > register.
> > 
> > For now, the binding can have several ep, the driver will just pick
> > the first valid one.
> 
> Yeah, I'm not really sure how we could deal with that, but I guess we
> can do it later on.
> 
> > > 
> > > > +struct sun6i_csi_ops {
> > > > +	int (*get_supported_pixformats)(struct sun6i_csi *csi,
> > > > +					const u32 **pixformats);
> > > > +	bool (*is_format_support)(struct sun6i_csi *csi, u32 pixformat,
> > > > +				  u32 mbus_code);
> > > > +	int (*s_power)(struct sun6i_csi *csi, bool enable);
> > > > +	int (*update_config)(struct sun6i_csi *csi,
> > > > +			     struct sun6i_csi_config *config);
> > > > +	int (*update_buf_addr)(struct sun6i_csi *csi, dma_addr_t addr);
> > > > +	int (*s_stream)(struct sun6i_csi *csi, bool enable);
> > > > +};
> > > 
> > > Didn't we agreed on removing those in the first iteration? It's not
> > > really clear at this point whether they will be needed at all. Make
> > > something simple first, without those ops. When we'll support other
> > > SoCs we'll have a better chance at seeing what and how we should deal
> > > with potential quirks.
> > 
> > OK. But without ops, it is inappropriate to sun6i_csi and sun6i_csi.
> > Maybe I should merge the two files.
> 
> I'm not sure what you meant here, but if you think that's appropriate,
> please go ahead.
> 
> > > > +		return IRQ_HANDLED;
> > > > +	}
> > > > +
> > > > +	if (status & CSI_CH_INT_STA_FD_PD) {
> > > > +		sun6i_video_frame_done(&sdev->csi.video);
> > > > +	}
> > > > +
> > > > +	regmap_write(regmap, CSI_CH_INT_STA_REG, status);
> > > 
> > > Isn't it redundant with the one you did in the condition a bit above?
> > > 
> > > You should also check that your device indeed generated an
> > > interrupt. In the occurence of a spourious interrupt, your code will
> > > return IRQ_HANDLED, which is the wrong thing to do.
> > > 
> > > I think you should reverse your logic a bit here to make this
> > > easier. You should just check that your status flags are indeed set,
> > > and if not just bail out and return IRQ_NONE.
> > > 
> > > And if they are, go on with treating your interrupt.
> > 
> > OK. I will add check for status flags.
> > BTW, how can a spurious interrupt occurred?
> 
> Usually it's either through some interference, or some poorly designed
> controller. This is unlikely, but it's something you should take into
> account.
> 
> Thanks!
> Maxime
> 
> -- 
> Maxime Ripard, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com


Thanks,
Yong

  reply	other threads:[~2017-08-23  2:32 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-27  5:01 [PATCH v2 0/3] Initial Allwinner V3s CSI Support Yong Deng
2017-07-27  5:01 ` [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI Yong Deng
2017-07-27 12:16   ` Baruch Siach
2017-07-27 12:25     ` Maxime Ripard
2017-07-31  0:47       ` Yong
2017-07-28 16:02   ` Maxime Ripard
2017-07-30  6:08     ` Baruch Siach
2017-07-31  1:48       ` Yong
2017-07-31  5:13         ` Baruch Siach
2017-08-21 20:21       ` Maxime Ripard
2017-08-23  2:41         ` Yong
2017-08-23 19:24           ` Maxime Ripard
2017-08-24  1:43             ` Yong
2017-07-31  3:16     ` Yong
2017-08-22 17:43       ` Maxime Ripard
2017-08-23  2:32         ` Yong [this message]
2017-08-25 13:41           ` Maxime Ripard
2017-08-28  7:00             ` Yong
2017-08-21 14:37   ` Hans Verkuil
2017-08-22  3:01     ` Yong
2017-08-22  6:43       ` Hans Verkuil
2017-08-22  7:51         ` Yong
2017-08-22 20:17         ` Maxime Ripard
2017-08-22 20:52           ` Laurent Pinchart
2017-08-23  6:52           ` Hans Verkuil
2017-08-23  7:43             ` Laurent Pinchart
2017-08-23 11:13               ` icenowy
2017-09-21 13:45   ` [linux-sunxi] " Ondřej Jirman
2017-09-22  8:44   ` Mylene JOSSERAND
2017-09-22  9:08     ` Yong
2017-11-21 15:48   ` Maxime Ripard
2017-11-22  1:33     ` Yong
2017-11-22  9:45       ` Maxime Ripard
2017-11-23  1:14         ` Yong
2017-11-25 16:02           ` Maxime Ripard
2017-12-04  9:45             ` Yong
2017-12-15 10:50               ` Maxime Ripard
2017-12-15 11:01                 ` Yong
2017-12-15 22:14                   ` Maxime Ripard
2017-07-27  5:01 ` [PATCH v2 2/3] dt-bindings: media: Add Allwinner V3s Camera Sensor Interface (CSI) Yong Deng
2017-07-28 16:03   ` Maxime Ripard
2017-07-31  0:50     ` Yong
2017-08-03 19:14   ` Rob Herring
2017-08-07  1:00     ` Yong
2017-12-19 11:53   ` Sakari Ailus
2017-12-21  2:49     ` Yong
2017-12-27 21:47       ` Sakari Ailus
2017-12-28  1:04         ` Yong
2017-07-27  5:01 ` [PATCH v2 3/3] media: MAINTAINERS: add entries for Allwinner V3s CSI Yong Deng
2017-12-19 11:48   ` Sakari Ailus
2017-12-21  2:40     ` Yong
  -- strict thread matches above, loose matches on Subject: below --
2017-07-27  3:51 [PATCH v2 0/3] Initial Allwinner V3s CSI Support Yong Deng
2017-07-27  3:51 ` [PATCH v2 1/3] media: V3s: Add support for Allwinner CSI Yong Deng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170823103216.e43283308c195c4a80d929fa@magewell.com \
    --to=yong.deng@magewell.com \
    --cc=arnd@arndb.de \
    --cc=benjamin.gaignard@linaro.org \
    --cc=bparrot@ti.com \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hugues.fruchet@st.com \
    --cc=hverkuil@xs4all.nl \
    --cc=jean-christophe.trotin@st.com \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=mark.rutland@arm.com \
    --cc=maxime.ripard@free-electrons.com \
    --cc=mchehab@kernel.org \
    --cc=minghsiu.tsai@mediatek.com \
    --cc=p.zabel@pengutronix.de \
    --cc=ramesh.shanmugasundaram@bp.renesas.com \
    --cc=robert.jarzmik@free.fr \
    --cc=robh+dt@kernel.org \
    --cc=wens@csie.org \
    --cc=yannick.fertre@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).