From: Chen-Yu Tsai <wens@kernel.org> To: Sakari Ailus <sakari.ailus@linux.intel.com> Cc: Chen-Yu Tsai <wens@kernel.org>, Maxime Ripard <mripard@kernel.org>, Mauro Carvalho Chehab <mchehab@kernel.org>, Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>, Linux Media Mailing List <linux-media@vger.kernel.org>, linux-arm-kernel <linux-arm-kernel@lists.infradead.org>, devicetree <devicetree@vger.kernel.org>, linux-kernel <linux-kernel@vger.kernel.org> Subject: Re: [PATCH 06/14] media: sun4i-csi: Add support for A10 CSI1 camera sensor interface Date: Thu, 2 Jan 2020 19:36:25 +0800 [thread overview] Message-ID: <CAGb2v642Ky6ztuwBs9cOxr4RLKS2q9Do+ZCUzc399z+ppCMqmg@mail.gmail.com> (raw) In-Reply-To: <20200102113319.GJ19828@paasikivi.fi.intel.com> On Thu, Jan 2, 2020 at 7:33 PM Sakari Ailus <sakari.ailus@linux.intel.com> wrote: > > Hi Chen-Yu, > > Thanks for the patchset. > > On Mon, Dec 16, 2019 at 12:59:16AM +0800, Chen-Yu Tsai wrote: > > From: Chen-Yu Tsai <wens@csie.org> > > > > The A10/A20 Allwinner SoCs have two camera sensor interface blocks, > > named CSI0 and CSI1. The two have the same register layouts with > > slightly different features: > > > > - CSI0 has an image signal processor (ISP); CSI1 doesn't > > > > - CSI0 can support up to four separate channels under CCIR656; > > CSI1 can only support one > > > > - CSI0 can support up to 16-bit wide bus with YUV422; > > CSI1 can support up to 24-bit wide bus with YUV444 > > > > For now the driver doesn't support wide busses, nor CCIR656. So the > > only relevant difference is whether a clock needs to be taken and > > enabled for the ISP. > > > > Add structs to record the differences, tie them to the compatible > > strings, and deal with the ISP clock. Support for the new CSI1 > > hardware block is added as well. > > > > Signed-off-by: Chen-Yu Tsai <wens@csie.org> > > --- > > .../platform/sunxi/sun4i-csi/sun4i_csi.c | 35 ++++++++++++++++--- > > .../platform/sunxi/sun4i-csi/sun4i_csi.h | 2 ++ > > 2 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > index b8b07c1de2a8..be2466930a49 100644 > > --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > +++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > @@ -29,6 +29,12 @@ > > > > #include "sun4i_csi.h" > > > > +struct sun4i_csi_traits { > > + unsigned int channels; > > + unsigned int max_width; > > + bool has_isp; > > +}; > > + > > static const struct media_entity_operations sun4i_csi_video_entity_ops = { > > .link_validate = v4l2_subdev_link_validate, > > }; > > @@ -156,6 +162,10 @@ static int sun4i_csi_probe(struct platform_device *pdev) > > subdev = &csi->subdev; > > vdev = &csi->vdev; > > > > + csi->traits = of_device_get_match_data(&pdev->dev); > > + if (!csi->traits) > > + return -EINVAL; > > + > > /* > > * On Allwinner SoCs, some high memory bandwidth devices do DMA > > * directly over the memory bus (called MBUS), instead of the > > @@ -199,10 +209,12 @@ static int sun4i_csi_probe(struct platform_device *pdev) > > return PTR_ERR(csi->bus_clk); > > } > > > > - csi->isp_clk = devm_clk_get(&pdev->dev, "isp"); > > - if (IS_ERR(csi->isp_clk)) { > > - dev_err(&pdev->dev, "Couldn't get our ISP clock\n"); > > - return PTR_ERR(csi->isp_clk); > > + if (csi->traits->has_isp) { > > + csi->isp_clk = devm_clk_get(&pdev->dev, "isp"); > > + if (IS_ERR(csi->isp_clk)) { > > + dev_err(&pdev->dev, "Couldn't get our ISP clock\n"); > > + return PTR_ERR(csi->isp_clk); > > + } > > } > > > > csi->ram_clk = devm_clk_get(&pdev->dev, "ram"); > > @@ -280,8 +292,21 @@ static int sun4i_csi_remove(struct platform_device *pdev) > > return 0; > > } > > > > +struct sun4i_csi_traits sun4i_a10_csi1_traits = { > > + .channels = 1, > > + .max_width = 24, > > + .has_isp = false, > > +}; > > + > > +struct sun4i_csi_traits sun7i_a20_csi0_traits = { > > These two should be static const, right? You're right. I'll wait for the remaining reviews before sending v2. ChenYu > > + .channels = 4, > > + .max_width = 16, > > + .has_isp = true, > > +}; > > + > > static const struct of_device_id sun4i_csi_of_match[] = { > > - { .compatible = "allwinner,sun7i-a20-csi0" }, > > + { .compatible = "allwinner,sun4i-a10-csi1", .data = &sun4i_a10_csi1_traits }, > > + { .compatible = "allwinner,sun7i-a20-csi0", .data = &sun7i_a20_csi0_traits }, > > { /* Sentinel */ } > > }; > > MODULE_DEVICE_TABLE(of, sun4i_csi_of_match); > > diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > index 88d39b3554c4..0f67ff652c2e 100644 > > --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > +++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > @@ -108,6 +108,8 @@ struct sun4i_csi { > > /* Device resources */ > > struct device *dev; > > > > + const struct sun4i_csi_traits *traits; > > + > > void __iomem *regs; > > struct clk *bus_clk; > > struct clk *isp_clk; > > -- > Kind regards, > > Sakari Ailus
WARNING: multiple messages have this Message-ID (diff)
From: Chen-Yu Tsai <wens@kernel.org> To: Sakari Ailus <sakari.ailus@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com>, devicetree <devicetree@vger.kernel.org>, Chen-Yu Tsai <wens@kernel.org>, linux-kernel <linux-kernel@vger.kernel.org>, Maxime Ripard <mripard@kernel.org>, Rob Herring <robh+dt@kernel.org>, Mauro Carvalho Chehab <mchehab@kernel.org>, linux-arm-kernel <linux-arm-kernel@lists.infradead.org>, Linux Media Mailing List <linux-media@vger.kernel.org> Subject: Re: [PATCH 06/14] media: sun4i-csi: Add support for A10 CSI1 camera sensor interface Date: Thu, 2 Jan 2020 19:36:25 +0800 [thread overview] Message-ID: <CAGb2v642Ky6ztuwBs9cOxr4RLKS2q9Do+ZCUzc399z+ppCMqmg@mail.gmail.com> (raw) In-Reply-To: <20200102113319.GJ19828@paasikivi.fi.intel.com> On Thu, Jan 2, 2020 at 7:33 PM Sakari Ailus <sakari.ailus@linux.intel.com> wrote: > > Hi Chen-Yu, > > Thanks for the patchset. > > On Mon, Dec 16, 2019 at 12:59:16AM +0800, Chen-Yu Tsai wrote: > > From: Chen-Yu Tsai <wens@csie.org> > > > > The A10/A20 Allwinner SoCs have two camera sensor interface blocks, > > named CSI0 and CSI1. The two have the same register layouts with > > slightly different features: > > > > - CSI0 has an image signal processor (ISP); CSI1 doesn't > > > > - CSI0 can support up to four separate channels under CCIR656; > > CSI1 can only support one > > > > - CSI0 can support up to 16-bit wide bus with YUV422; > > CSI1 can support up to 24-bit wide bus with YUV444 > > > > For now the driver doesn't support wide busses, nor CCIR656. So the > > only relevant difference is whether a clock needs to be taken and > > enabled for the ISP. > > > > Add structs to record the differences, tie them to the compatible > > strings, and deal with the ISP clock. Support for the new CSI1 > > hardware block is added as well. > > > > Signed-off-by: Chen-Yu Tsai <wens@csie.org> > > --- > > .../platform/sunxi/sun4i-csi/sun4i_csi.c | 35 ++++++++++++++++--- > > .../platform/sunxi/sun4i-csi/sun4i_csi.h | 2 ++ > > 2 files changed, 32 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > index b8b07c1de2a8..be2466930a49 100644 > > --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > +++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c > > @@ -29,6 +29,12 @@ > > > > #include "sun4i_csi.h" > > > > +struct sun4i_csi_traits { > > + unsigned int channels; > > + unsigned int max_width; > > + bool has_isp; > > +}; > > + > > static const struct media_entity_operations sun4i_csi_video_entity_ops = { > > .link_validate = v4l2_subdev_link_validate, > > }; > > @@ -156,6 +162,10 @@ static int sun4i_csi_probe(struct platform_device *pdev) > > subdev = &csi->subdev; > > vdev = &csi->vdev; > > > > + csi->traits = of_device_get_match_data(&pdev->dev); > > + if (!csi->traits) > > + return -EINVAL; > > + > > /* > > * On Allwinner SoCs, some high memory bandwidth devices do DMA > > * directly over the memory bus (called MBUS), instead of the > > @@ -199,10 +209,12 @@ static int sun4i_csi_probe(struct platform_device *pdev) > > return PTR_ERR(csi->bus_clk); > > } > > > > - csi->isp_clk = devm_clk_get(&pdev->dev, "isp"); > > - if (IS_ERR(csi->isp_clk)) { > > - dev_err(&pdev->dev, "Couldn't get our ISP clock\n"); > > - return PTR_ERR(csi->isp_clk); > > + if (csi->traits->has_isp) { > > + csi->isp_clk = devm_clk_get(&pdev->dev, "isp"); > > + if (IS_ERR(csi->isp_clk)) { > > + dev_err(&pdev->dev, "Couldn't get our ISP clock\n"); > > + return PTR_ERR(csi->isp_clk); > > + } > > } > > > > csi->ram_clk = devm_clk_get(&pdev->dev, "ram"); > > @@ -280,8 +292,21 @@ static int sun4i_csi_remove(struct platform_device *pdev) > > return 0; > > } > > > > +struct sun4i_csi_traits sun4i_a10_csi1_traits = { > > + .channels = 1, > > + .max_width = 24, > > + .has_isp = false, > > +}; > > + > > +struct sun4i_csi_traits sun7i_a20_csi0_traits = { > > These two should be static const, right? You're right. I'll wait for the remaining reviews before sending v2. ChenYu > > + .channels = 4, > > + .max_width = 16, > > + .has_isp = true, > > +}; > > + > > static const struct of_device_id sun4i_csi_of_match[] = { > > - { .compatible = "allwinner,sun7i-a20-csi0" }, > > + { .compatible = "allwinner,sun4i-a10-csi1", .data = &sun4i_a10_csi1_traits }, > > + { .compatible = "allwinner,sun7i-a20-csi0", .data = &sun7i_a20_csi0_traits }, > > { /* Sentinel */ } > > }; > > MODULE_DEVICE_TABLE(of, sun4i_csi_of_match); > > diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > index 88d39b3554c4..0f67ff652c2e 100644 > > --- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > +++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.h > > @@ -108,6 +108,8 @@ struct sun4i_csi { > > /* Device resources */ > > struct device *dev; > > > > + const struct sun4i_csi_traits *traits; > > + > > void __iomem *regs; > > struct clk *bus_clk; > > struct clk *isp_clk; > > -- > Kind regards, > > Sakari Ailus _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-01-02 11:36 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-15 16:59 [PATCH 00/14] media: sun4i-csi: A10/A20 CSI1 and R40 CSI0 support Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 01/14] dt-bindings: media: sun4i-csi: Add compatible for CSI1 on A10/A20 Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 10:30 ` Maxime Ripard 2019-12-16 10:30 ` Maxime Ripard 2019-12-19 23:56 ` Rob Herring 2019-12-19 23:56 ` Rob Herring 2019-12-15 16:59 ` [PATCH 02/14] dt-bindings: media: sun4i-csi: Add compatible for CSI0 on R40 Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 10:30 ` Maxime Ripard 2019-12-16 10:30 ` Maxime Ripard 2019-12-19 23:57 ` Rob Herring 2019-12-19 23:57 ` Rob Herring 2019-12-15 16:59 ` [PATCH 03/14] media: sun4i-csi: Fix data sampling polarity handling Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 13:36 ` Maxime Ripard 2019-12-16 13:36 ` Maxime Ripard 2019-12-15 16:59 ` [PATCH 04/14] media: sun4i-csi: Fix [HV]sync " Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 13:37 ` Maxime Ripard 2019-12-16 13:37 ` Maxime Ripard 2023-01-16 10:03 ` Oleg Verych 2023-01-16 10:03 ` Oleg Verych 2023-01-16 10:16 ` Maxime Ripard 2023-01-16 10:16 ` Maxime Ripard 2023-01-16 18:43 ` Oleg Verych 2023-01-16 18:43 ` Oleg Verych 2019-12-15 16:59 ` [PATCH 05/14] media: sun4i-csi: Deal with DRAM offset Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 13:38 ` Maxime Ripard 2019-12-16 13:38 ` Maxime Ripard 2019-12-15 16:59 ` [PATCH 06/14] media: sun4i-csi: Add support for A10 CSI1 camera sensor interface Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 13:38 ` Maxime Ripard 2019-12-16 13:38 ` Maxime Ripard 2020-01-02 11:33 ` Sakari Ailus 2020-01-02 11:33 ` Sakari Ailus 2020-01-02 11:36 ` Chen-Yu Tsai [this message] 2020-01-02 11:36 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 07/14] ARM: dts: sun4i: Add CSI1 controller and pinmux options Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 08/14] ARM: dts: sun7i: " Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 09/14] ARM: dts: sun8i: r40: Add I2C " Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 10:29 ` Maxime Ripard 2019-12-16 10:29 ` Maxime Ripard 2019-12-15 16:59 ` [PATCH 10/14] dt-bindings: bus: sunxi: Add R40 MBUS compatible Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-19 23:58 ` Rob Herring 2019-12-19 23:58 ` Rob Herring 2019-12-15 16:59 ` [PATCH 11/14] ARM: dts: sun8i: r40: Add device node for CSI0 Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-16 13:39 ` Maxime Ripard 2019-12-16 13:39 ` Maxime Ripard 2019-12-16 13:42 ` Chen-Yu Tsai 2019-12-16 13:42 ` Chen-Yu Tsai 2019-12-16 13:53 ` Maxime Ripard 2019-12-16 13:53 ` Maxime Ripard 2019-12-15 16:59 ` [PATCH 12/14] [DO NOT MERGE] ARM: dts: sun4i: cubieboard: Enable OV7670 camera on CSI1 Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 13/14] [DO NOT MERGE] ARM: dts: sun7i: cubieboard2: " Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2019-12-15 16:59 ` [PATCH 14/14] [DO NOT MERGE] ARM: dts: sun8i-r40: bananapi-m2-ultra: Enable OV5640 camera Chen-Yu Tsai 2019-12-15 16:59 ` Chen-Yu Tsai 2020-01-01 10:20 ` [PATCH 00/14] media: sun4i-csi: A10/A20 CSI1 and R40 CSI0 support Chen-Yu Tsai 2020-01-01 10:20 ` Chen-Yu Tsai
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=CAGb2v642Ky6ztuwBs9cOxr4RLKS2q9Do+ZCUzc399z+ppCMqmg@mail.gmail.com \ --to=wens@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mchehab@kernel.org \ --cc=mripard@kernel.org \ --cc=robh+dt@kernel.org \ --cc=sakari.ailus@linux.intel.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.