From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jack Zhu <jack.zhu@starfivetech.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
Robert Foss <rfoss@kernel.org>, Todor Tomov <todor.too@gmail.com>,
bryan.odonoghue@linaro.org, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Hans Verkuil <hverkuil-cisco@xs4all.nl>,
Eugen Hristev <eugen.hristev@collabora.com>,
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, changhuang.liang@starfivetech.com
Subject: Re: [PATCH v7 3/6] media: starfive: camss: Add basic driver
Date: Tue, 1 Aug 2023 21:45:52 +0300 [thread overview]
Message-ID: <20230801184552.GA30382@pendragon.ideasonboard.com> (raw)
In-Reply-To: <e8a1b30a-af1b-692b-f5e6-5fe4ba13da93@starfivetech.com>
Hi Jack,
On Tue, Aug 01, 2023 at 11:24:22AM +0800, Jack Zhu wrote:
> On 2023/7/27 19:33, Laurent Pinchart wrote:
> > On Mon, Jun 19, 2023 at 07:28:35PM +0800, Jack Zhu wrote:
> >> Add basic platform driver for StarFive Camera Subsystem.
> >>
> >> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> >> Signed-off-by: Jack Zhu <jack.zhu@starfivetech.com>
> >> ---
> >> MAINTAINERS | 1 +
> >> drivers/media/platform/Kconfig | 1 +
> >> drivers/media/platform/Makefile | 1 +
> >> drivers/media/platform/starfive/Kconfig | 5 +
> >> drivers/media/platform/starfive/Makefile | 2 +
> >> drivers/media/platform/starfive/camss/Kconfig | 16 +
> >> .../media/platform/starfive/camss/Makefile | 8 +
> >> .../media/platform/starfive/camss/stf_camss.c | 338 ++++++++++++++++++
> >> .../media/platform/starfive/camss/stf_camss.h | 146 ++++++++
> >> 9 files changed, 518 insertions(+)
> >> create mode 100644 drivers/media/platform/starfive/Kconfig
> >> create mode 100644 drivers/media/platform/starfive/Makefile
> >> create mode 100644 drivers/media/platform/starfive/camss/Kconfig
> >> create mode 100644 drivers/media/platform/starfive/camss/Makefile
> >> create mode 100644 drivers/media/platform/starfive/camss/stf_camss.c
> >> create mode 100644 drivers/media/platform/starfive/camss/stf_camss.h
[snip]
> >> diff --git a/drivers/media/platform/starfive/camss/Kconfig b/drivers/media/platform/starfive/camss/Kconfig
> >> new file mode 100644
> >> index 000000000000..dafe1d24324b
> >> --- /dev/null
> >> +++ b/drivers/media/platform/starfive/camss/Kconfig
> >> @@ -0,0 +1,16 @@
> >> +# SPDX-License-Identifier: GPL-2.0-only
> >> +config VIDEO_STARFIVE_CAMSS
> >> + tristate "Starfive Camera Subsystem driver"
> >> + depends on V4L_PLATFORM_DRIVERS
> >> + depends on VIDEO_DEV && OF
> >> + depends on HAS_DMA
> >
> > You need to depend on PM, otherwise the runtime PM operations will be
> > no-ops and the driver won't work as clocks won't be enabled.
>
> OK, I will add dependency.
By the way, if it makes it easier for you, you don't need to acknowledge
every single review comment. You can reply to comments you disagree
with, or comments that you find unclear. Anything that you agree with
and will address in the next version can be left unanswered in your
e-mail replies. It's entirely up to you.
> >> + select MEDIA_CONTROLLER
> >> + select VIDEO_V4L2_SUBDEV_API
> >> + select VIDEOBUF2_DMA_CONTIG
> >> + select V4L2_FWNODE
> >> + help
> >> + Enable this to support for the Starfive Camera subsystem
> >> + found on Starfive JH7110 SoC.
> >> +
> >> + To compile this driver as a module, choose M here: the
> >> + module will be called stf-camss.
[snip]
> >> diff --git a/drivers/media/platform/starfive/camss/stf_camss.c b/drivers/media/platform/starfive/camss/stf_camss.c
> >> new file mode 100644
> >> index 000000000000..dc2b5dba7bd4
> >> --- /dev/null
> >> +++ b/drivers/media/platform/starfive/camss/stf_camss.c
> >> @@ -0,0 +1,338 @@
[snip]
> >> +/*
> >> + * stfcamss_probe - Probe STFCAMSS platform device
> >> + * @pdev: Pointer to STFCAMSS platform device
> >> + *
> >> + * Return 0 on success or a negative error code on failure
> >> + */
> >> +static int stfcamss_probe(struct platform_device *pdev)
> >> +{
> >> + struct stfcamss *stfcamss;
> >> + struct device *dev = &pdev->dev;
> >> + int ret, num_subdevs;
> >> + unsigned int i;
> >> +
> >> + stfcamss = devm_kzalloc(dev, sizeof(*stfcamss), GFP_KERNEL);
> >> + if (!stfcamss)
> >> + return -ENOMEM;
> >> +
> >> + for (i = 0; i < ARRAY_SIZE(stfcamss->irq); ++i) {
> >> + stfcamss->irq[i] = platform_get_irq(pdev, i);
> >> + if (stfcamss->irq[i] < 0)
> >> + return dev_err_probe(&pdev->dev, stfcamss->irq[i],
> >> + "Failed to get irq%d", i);
> >> + }
> >> +
> >> + stfcamss->nclks = ARRAY_SIZE(stfcamss->sys_clk);
> >> + for (i = 0; i < stfcamss->nclks; ++i)
> >> + stfcamss->sys_clk[i].id = stfcamss_clocks[i];
> >> + ret = devm_clk_bulk_get(dev, stfcamss->nclks, stfcamss->sys_clk);
> >> + if (ret) {
> >> + dev_err(dev, "Failed to get clk controls\n");
> >> + return ret;
> >> + }
> >> +
> >> + stfcamss->nrsts = ARRAY_SIZE(stfcamss->sys_rst);
> >> + for (i = 0; i < stfcamss->nrsts; ++i)
> >> + stfcamss->sys_rst[i].id = stfcamss_resets[i];
> >> + ret = devm_reset_control_bulk_get_shared(dev, stfcamss->nrsts,
> >> + stfcamss->sys_rst);
> >> + if (ret) {
> >> + dev_err(dev, "Failed to get reset controls\n");
> >> + return ret;
> >> + }
> >> +
> >> + ret = stfcamss_get_mem_res(pdev, stfcamss);
> >> + if (ret) {
> >> + dev_err(dev, "Could not map registers\n");
> >> + return ret;
> >> + }
> >> +
> >> + stfcamss->dev = dev;
> >
> > Move this right after allocating stfcamss, and drop the pdev argument to
> > stfcamss_get_mem_res(). The platform device can be retrieved in the
> > function using to_platform_device().
>
> OK, I will modify.
>
> >> + platform_set_drvdata(pdev, stfcamss);
> >> +
> >> + v4l2_async_nf_init(&stfcamss->notifier);
> >> +
> >> + num_subdevs = stfcamss_of_parse_ports(stfcamss);
> >> + if (num_subdevs < 0) {
> >> + ret = -ENODEV;
> >
> > An error message would be useful, silent errors are hard to debug.
>
> OK, will add error printing information.
>
> >> + goto err_cleanup_notifier;
> >> + }
> >> +
> >> + stfcamss_mc_init(pdev, stfcamss);
> >> +
> >> + ret = v4l2_device_register(stfcamss->dev, &stfcamss->v4l2_dev);
> >> + if (ret < 0) {
> >> + dev_err(dev, "Failed to register V4L2 device: %d\n", ret);
> >> + goto err_cleanup_notifier;
> >> + }
> >> +
> >> + ret = media_device_register(&stfcamss->media_dev);
> >> + if (ret) {
> >> + dev_err(dev, "Failed to register media device: %d\n", ret);
> >> + goto err_unregister_device;
> >> + }
> >> +
> >> + pm_runtime_enable(dev);
> >
> > Would it be useful to enable autosuspend too, to avoid expensive
> > suspend/resume cycles when userspace wants to briefly stop capture and
> > restart it immediately ?
>
> It seems rare to use autosuspend in the Linux camera system.
It's a relatively recent practice, and is more common in sensor drivers
than ISP drivers, but I think it's a good practice nonetheless. It makes
stop-reconfigure-start cycles much faster.
> >> +
> >> + stfcamss->notifier.ops = &stfcamss_subdev_notifier_ops;
> >> + ret = v4l2_async_nf_register(&stfcamss->v4l2_dev, &stfcamss->notifier);
> >> + if (ret) {
> >> + dev_err(dev, "Failed to register async subdev nodes: %d\n",
> >> + ret);
> >> + goto err_unregister_media_dev;
> >
> > You need to disable runtime PM in this error path.
>
> OK, will fix it.
>
> >> + }
> >> +
> >> + return 0;
> >> +
> >> +err_unregister_media_dev:
> >> + media_device_unregister(&stfcamss->media_dev);
> >> +err_unregister_device:
> >> + v4l2_device_unregister(&stfcamss->v4l2_dev);
> >> +err_cleanup_notifier:
> >> + v4l2_async_nf_cleanup(&stfcamss->notifier);
> >> + return ret;
> >> +}
[snip]
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2023-08-01 18:46 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-19 11:28 [PATCH v7 0/6] Add StarFive Camera Subsystem driver Jack Zhu
2023-06-19 11:28 ` [PATCH v7 1/6] media: dt-bindings: Add JH7110 Camera Subsystem Jack Zhu
2023-06-19 11:28 ` [PATCH v7 2/6] media: admin-guide: Add starfive_camss.rst for Starfive " Jack Zhu
2023-07-26 11:26 ` Bryan O'Donoghue
2023-07-26 22:26 ` Jack Zhu
2023-07-27 10:23 ` Laurent Pinchart
2023-07-31 3:39 ` Jack Zhu
2023-06-19 11:28 ` [PATCH v7 3/6] media: starfive: camss: Add basic driver Jack Zhu
2023-07-26 10:55 ` Bryan O'Donoghue
2023-07-26 22:14 ` Jack Zhu
2023-07-26 10:58 ` Bryan O'Donoghue
2023-07-26 22:18 ` Jack Zhu
2023-07-27 11:33 ` Laurent Pinchart
2023-08-01 3:24 ` Jack Zhu
2023-08-01 18:45 ` Laurent Pinchart [this message]
2023-08-02 1:22 ` Jack Zhu
2023-06-19 11:28 ` [PATCH v7 4/6] media: starfive: camss: Add video driver Jack Zhu
2023-07-27 8:49 ` Hans Verkuil
2023-08-01 6:23 ` Jack Zhu
2023-08-01 18:47 ` Laurent Pinchart
2023-08-02 1:26 ` Jack Zhu
2023-07-27 15:25 ` Laurent Pinchart
2023-08-02 2:57 ` Jack Zhu
2023-08-02 9:13 ` Laurent Pinchart
2023-06-19 11:28 ` [PATCH v7 5/6] media: starfive: camss: Add ISP driver Jack Zhu
2023-06-22 3:29 ` kernel test robot
2023-07-26 9:11 ` Hans Verkuil
2023-07-26 10:01 ` Jack Zhu
2023-07-27 20:41 ` Laurent Pinchart
2023-08-02 9:57 ` Jack Zhu
2023-08-02 10:48 ` Laurent Pinchart
2023-08-03 2:41 ` Jack Zhu
2023-08-03 22:07 ` Laurent Pinchart
2023-06-19 11:28 ` [PATCH v7 6/6] media: starfive: camss: Add VIN driver Jack Zhu
2023-07-27 20:49 ` Laurent Pinchart
2023-08-02 9:58 ` Jack Zhu
2023-08-02 10:38 ` Laurent Pinchart
2023-08-03 2:44 ` Jack Zhu
2023-08-03 22:18 ` Laurent Pinchart
2023-08-04 11:14 ` Jack Zhu
2023-08-24 13:38 ` Laurent Pinchart
2023-07-10 5:45 ` [PATCH v7 0/6] Add StarFive Camera Subsystem driver Jack Zhu
2023-07-26 7:28 ` Jack Zhu
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=20230801184552.GA30382@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=bryan.odonoghue@linaro.org \
--cc=changhuang.liang@starfivetech.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=eugen.hristev@collabora.com \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jack.zhu@starfivetech.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rfoss@kernel.org \
--cc=robh+dt@kernel.org \
--cc=todor.too@gmail.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