From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
To: "Jernej Škrabec" <jernej.skrabec@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev, Yong Deng <yong.deng@magewell.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Chen-Yu Tsai <wens@csie.org>,
Samuel Holland <samuel@sholland.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v3 07/46] media: sun6i-csi: Use runtime pm for clocks and reset
Date: Fri, 18 Mar 2022 17:15:56 +0100 [thread overview]
Message-ID: <YjSwPOUxQ4KwPfUe@aptenodytes> (raw)
In-Reply-To: <14579642.tv2OnDr8pf@kista>
[-- Attachment #1: Type: text/plain, Size: 6568 bytes --]
Hi Jernej,
On Tue 15 Mar 22, 20:46, Jernej Škrabec wrote:
> Dne petek, 11. marec 2022 ob 15:34:53 CET je Paul Kocialkowski napisal(a):
> > Wrap the clock and reset preparation into runtime pm functions
> > for better organization of the code. Also fix the clock and
> > reset enable order to first deassert reset, as recommended in
> > Allwinner litterature.
> >
> > Make the driver depend on PM while at it since runtime pm is
> > mandatory for the driver to work.
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > ---
> > .../media/platform/sunxi/sun6i-csi/Kconfig | 2 +-
> > .../platform/sunxi/sun6i-csi/sun6i_csi.c | 94 ++++++++++++++-----
> > 2 files changed, 70 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/Kconfig b/drivers/media/
> platform/sunxi/sun6i-csi/Kconfig
> > index 586e3fb3a80d..fd03e48f0c8a 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/Kconfig
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/Kconfig
> > @@ -1,7 +1,7 @@
> > # SPDX-License-Identifier: GPL-2.0-only
> > config VIDEO_SUN6I_CSI
> > tristate "Allwinner V3s Camera Sensor Interface driver"
> > - depends on VIDEO_V4L2 && COMMON_CLK && HAS_DMA
> > + depends on PM && VIDEO_V4L2 && COMMON_CLK && HAS_DMA
> > depends on ARCH_SUNXI || COMPILE_TEST
> > select MEDIA_CONTROLLER
> > select VIDEO_V4L2_SUBDEV_API
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/
> media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > index 4a0d08e0ac25..7f045a9551a7 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > @@ -152,40 +152,18 @@ int sun6i_csi_set_power(struct sun6i_csi_device
> *csi_dev, bool enable)
> >
> > if (!enable) {
> > regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN,
> 0);
> > + pm_runtime_put(dev);
> >
> > - clk_disable_unprepare(csi_dev->clk_ram);
> > - clk_disable_unprepare(csi_dev->clk_mod);
> > - reset_control_assert(csi_dev->reset);
> > return 0;
> > }
> >
> > - ret = clk_prepare_enable(csi_dev->clk_mod);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "Enable csi clk err %d\n", ret);
> > + ret = pm_runtime_resume_and_get(dev);
> > + if (ret < 0)
> > return ret;
> > - }
> > -
> > - ret = clk_prepare_enable(csi_dev->clk_ram);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "Enable clk_dram_csi clk err
> %d\n", ret);
> > - goto clk_mod_disable;
> > - }
> > -
> > - ret = reset_control_deassert(csi_dev->reset);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "reset err %d\n", ret);
> > - goto clk_ram_disable;
> > - }
> >
> > regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN,
> CSI_EN_CSI_EN);
> >
> > return 0;
> > -
> > -clk_ram_disable:
> > - clk_disable_unprepare(csi_dev->clk_ram);
> > -clk_mod_disable:
> > - clk_disable_unprepare(csi_dev->clk_mod);
> > - return ret;
> > }
> >
> > static enum csi_input_fmt get_csi_input_format(struct sun6i_csi_device
> *csi_dev,
> > @@ -800,6 +778,65 @@ static irqreturn_t sun6i_csi_isr(int irq, void
> *private)
> > return IRQ_HANDLED;
> > }
> >
> > +static int sun6i_csi_suspend(struct device *dev)
> > +{
> > + struct sun6i_csi_device *csi_dev = dev_get_drvdata(dev);
> > +
> > + reset_control_assert(csi_dev->reset);
> > + clk_disable_unprepare(csi_dev->clk_ram);
> > + clk_disable_unprepare(csi_dev->clk_mod);
> > + clk_disable_unprepare(csi_dev->clk_bus);
> > +
> > + return 0;
> > +}
> > +
> > +static int sun6i_csi_resume(struct device *dev)
> > +{
> > + struct sun6i_csi_device *csi_dev = dev_get_drvdata(dev);
> > + int ret;
> > +
> > + ret = reset_control_deassert(csi_dev->reset);
> > + if (ret) {
> > + dev_err(dev, "failed to deassert reset\n");
> > + return ret;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_bus);
> > + if (ret) {
> > + dev_err(dev, "failed to enable bus clock\n");
> > + goto error_reset;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_mod);
> > + if (ret) {
> > + dev_err(dev, "failed to enable module clock\n");
> > + goto error_clk_bus;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_ram);
> > + if (ret) {
> > + dev_err(dev, "failed to enable ram clock\n");
> > + goto error_clk_mod;
> > + }
> > +
> > + return 0;
> > +
> > +error_clk_mod:
> > + clk_disable_unprepare(csi_dev->clk_mod);
> > +
> > +error_clk_bus:
> > + clk_disable_unprepare(csi_dev->clk_bus);
> > +
> > +error_reset:
> > + reset_control_assert(csi_dev->reset);
> > +
> > + return ret;
> > +}
> > +
> > +static const struct dev_pm_ops sun6i_csi_pm_ops = {
> > + SET_RUNTIME_PM_OPS(sun6i_csi_suspend, sun6i_csi_resume, NULL)
>
> Since driver depends on PM, using SET_RUNTIME_PM_OPS macro doesn't make sense.
Can you ellaborate why? It's really not obvious why the macro should only be
used when PM is optional. I see that it facilitates that, but I really don't
see any issue using it with PM required too. Is it a common practice?
> > +};
> > +
> > static const struct regmap_config sun6i_csi_regmap_config = {
> > .reg_bits = 32,
> > .reg_stride = 4,
> > @@ -886,6 +923,11 @@ static int sun6i_csi_resources_setup(struct
> sun6i_csi_device *csi_dev,
> > goto error_clk_rate_exclusive;
> > }
> >
> > + /* Runtime PM */
> > +
> > + pm_runtime_enable(dev);
> > + pm_runtime_set_suspended(dev);
>
> pm_runtime_set_suspended() description says: "It is not valid to call this
> function for devices with runtime PM enabled."
Okay I need to revisit this, I think I misunderstood a bunch of things here.
Thanks,
Paul
> Best regards,
> Jernej
>
> > +
> > return 0;
> >
> > error_clk_rate_exclusive:
> > @@ -896,6 +938,7 @@ static int sun6i_csi_resources_setup(struct
> sun6i_csi_device *csi_dev,
> >
> > static void sun6i_csi_resources_cleanup(struct sun6i_csi_device *csi_dev)
> > {
> > + pm_runtime_disable(csi_dev->dev);
> > clk_rate_exclusive_put(csi_dev->clk_mod);
> > }
> >
> > @@ -978,6 +1021,7 @@ static struct platform_driver sun6i_csi_platform_driver
> = {
> > .driver = {
> > .name = SUN6I_CSI_NAME,
> > .of_match_table =
> of_match_ptr(sun6i_csi_of_match),
> > + .pm = &sun6i_csi_pm_ops,
> > },
> > };
> >
> > --
> > 2.35.1
> >
> >
>
>
--
Paul Kocialkowski, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
To: "Jernej Škrabec" <jernej.skrabec@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev, Yong Deng <yong.deng@magewell.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Chen-Yu Tsai <wens@csie.org>,
Samuel Holland <samuel@sholland.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v3 07/46] media: sun6i-csi: Use runtime pm for clocks and reset
Date: Fri, 18 Mar 2022 17:15:56 +0100 [thread overview]
Message-ID: <YjSwPOUxQ4KwPfUe@aptenodytes> (raw)
In-Reply-To: <14579642.tv2OnDr8pf@kista>
[-- Attachment #1.1: Type: text/plain, Size: 6568 bytes --]
Hi Jernej,
On Tue 15 Mar 22, 20:46, Jernej Škrabec wrote:
> Dne petek, 11. marec 2022 ob 15:34:53 CET je Paul Kocialkowski napisal(a):
> > Wrap the clock and reset preparation into runtime pm functions
> > for better organization of the code. Also fix the clock and
> > reset enable order to first deassert reset, as recommended in
> > Allwinner litterature.
> >
> > Make the driver depend on PM while at it since runtime pm is
> > mandatory for the driver to work.
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > ---
> > .../media/platform/sunxi/sun6i-csi/Kconfig | 2 +-
> > .../platform/sunxi/sun6i-csi/sun6i_csi.c | 94 ++++++++++++++-----
> > 2 files changed, 70 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/Kconfig b/drivers/media/
> platform/sunxi/sun6i-csi/Kconfig
> > index 586e3fb3a80d..fd03e48f0c8a 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/Kconfig
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/Kconfig
> > @@ -1,7 +1,7 @@
> > # SPDX-License-Identifier: GPL-2.0-only
> > config VIDEO_SUN6I_CSI
> > tristate "Allwinner V3s Camera Sensor Interface driver"
> > - depends on VIDEO_V4L2 && COMMON_CLK && HAS_DMA
> > + depends on PM && VIDEO_V4L2 && COMMON_CLK && HAS_DMA
> > depends on ARCH_SUNXI || COMPILE_TEST
> > select MEDIA_CONTROLLER
> > select VIDEO_V4L2_SUBDEV_API
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/
> media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > index 4a0d08e0ac25..7f045a9551a7 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > @@ -152,40 +152,18 @@ int sun6i_csi_set_power(struct sun6i_csi_device
> *csi_dev, bool enable)
> >
> > if (!enable) {
> > regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN,
> 0);
> > + pm_runtime_put(dev);
> >
> > - clk_disable_unprepare(csi_dev->clk_ram);
> > - clk_disable_unprepare(csi_dev->clk_mod);
> > - reset_control_assert(csi_dev->reset);
> > return 0;
> > }
> >
> > - ret = clk_prepare_enable(csi_dev->clk_mod);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "Enable csi clk err %d\n", ret);
> > + ret = pm_runtime_resume_and_get(dev);
> > + if (ret < 0)
> > return ret;
> > - }
> > -
> > - ret = clk_prepare_enable(csi_dev->clk_ram);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "Enable clk_dram_csi clk err
> %d\n", ret);
> > - goto clk_mod_disable;
> > - }
> > -
> > - ret = reset_control_deassert(csi_dev->reset);
> > - if (ret) {
> > - dev_err(csi_dev->dev, "reset err %d\n", ret);
> > - goto clk_ram_disable;
> > - }
> >
> > regmap_update_bits(regmap, CSI_EN_REG, CSI_EN_CSI_EN,
> CSI_EN_CSI_EN);
> >
> > return 0;
> > -
> > -clk_ram_disable:
> > - clk_disable_unprepare(csi_dev->clk_ram);
> > -clk_mod_disable:
> > - clk_disable_unprepare(csi_dev->clk_mod);
> > - return ret;
> > }
> >
> > static enum csi_input_fmt get_csi_input_format(struct sun6i_csi_device
> *csi_dev,
> > @@ -800,6 +778,65 @@ static irqreturn_t sun6i_csi_isr(int irq, void
> *private)
> > return IRQ_HANDLED;
> > }
> >
> > +static int sun6i_csi_suspend(struct device *dev)
> > +{
> > + struct sun6i_csi_device *csi_dev = dev_get_drvdata(dev);
> > +
> > + reset_control_assert(csi_dev->reset);
> > + clk_disable_unprepare(csi_dev->clk_ram);
> > + clk_disable_unprepare(csi_dev->clk_mod);
> > + clk_disable_unprepare(csi_dev->clk_bus);
> > +
> > + return 0;
> > +}
> > +
> > +static int sun6i_csi_resume(struct device *dev)
> > +{
> > + struct sun6i_csi_device *csi_dev = dev_get_drvdata(dev);
> > + int ret;
> > +
> > + ret = reset_control_deassert(csi_dev->reset);
> > + if (ret) {
> > + dev_err(dev, "failed to deassert reset\n");
> > + return ret;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_bus);
> > + if (ret) {
> > + dev_err(dev, "failed to enable bus clock\n");
> > + goto error_reset;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_mod);
> > + if (ret) {
> > + dev_err(dev, "failed to enable module clock\n");
> > + goto error_clk_bus;
> > + }
> > +
> > + ret = clk_prepare_enable(csi_dev->clk_ram);
> > + if (ret) {
> > + dev_err(dev, "failed to enable ram clock\n");
> > + goto error_clk_mod;
> > + }
> > +
> > + return 0;
> > +
> > +error_clk_mod:
> > + clk_disable_unprepare(csi_dev->clk_mod);
> > +
> > +error_clk_bus:
> > + clk_disable_unprepare(csi_dev->clk_bus);
> > +
> > +error_reset:
> > + reset_control_assert(csi_dev->reset);
> > +
> > + return ret;
> > +}
> > +
> > +static const struct dev_pm_ops sun6i_csi_pm_ops = {
> > + SET_RUNTIME_PM_OPS(sun6i_csi_suspend, sun6i_csi_resume, NULL)
>
> Since driver depends on PM, using SET_RUNTIME_PM_OPS macro doesn't make sense.
Can you ellaborate why? It's really not obvious why the macro should only be
used when PM is optional. I see that it facilitates that, but I really don't
see any issue using it with PM required too. Is it a common practice?
> > +};
> > +
> > static const struct regmap_config sun6i_csi_regmap_config = {
> > .reg_bits = 32,
> > .reg_stride = 4,
> > @@ -886,6 +923,11 @@ static int sun6i_csi_resources_setup(struct
> sun6i_csi_device *csi_dev,
> > goto error_clk_rate_exclusive;
> > }
> >
> > + /* Runtime PM */
> > +
> > + pm_runtime_enable(dev);
> > + pm_runtime_set_suspended(dev);
>
> pm_runtime_set_suspended() description says: "It is not valid to call this
> function for devices with runtime PM enabled."
Okay I need to revisit this, I think I misunderstood a bunch of things here.
Thanks,
Paul
> Best regards,
> Jernej
>
> > +
> > return 0;
> >
> > error_clk_rate_exclusive:
> > @@ -896,6 +938,7 @@ static int sun6i_csi_resources_setup(struct
> sun6i_csi_device *csi_dev,
> >
> > static void sun6i_csi_resources_cleanup(struct sun6i_csi_device *csi_dev)
> > {
> > + pm_runtime_disable(csi_dev->dev);
> > clk_rate_exclusive_put(csi_dev->clk_mod);
> > }
> >
> > @@ -978,6 +1021,7 @@ static struct platform_driver sun6i_csi_platform_driver
> = {
> > .driver = {
> > .name = SUN6I_CSI_NAME,
> > .of_match_table =
> of_match_ptr(sun6i_csi_of_match),
> > + .pm = &sun6i_csi_pm_ops,
> > },
> > };
> >
> > --
> > 2.35.1
> >
> >
>
>
--
Paul Kocialkowski, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
[-- Attachment #2: Type: text/plain, Size: 176 bytes --]
_______________________________________________
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:[~2022-03-18 16:23 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-11 14:34 [PATCH v3 00/46] Allwinner A31/A83T MIPI CSI-2 and A31 ISP / CSI Rework Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 01/46] media: sun6i-csi: Define and use driver name and (reworked) description Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 02/46] media: sun6i-csi: Refactor main driver data structures Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 03/46] media: sun6i-csi: Grab bus clock instead of passing it to regmap Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-15 19:22 ` Jernej Škrabec
2022-03-15 19:22 ` Jernej Škrabec
2022-03-18 8:49 ` Paul Kocialkowski
2022-03-18 8:49 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 04/46] media: sun6i-csi: Tidy up platform code Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 05/46] media: sun6i-csi: Always set exclusive module clock rate Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-15 19:27 ` Jernej Škrabec
2022-03-15 19:27 ` Jernej Škrabec
2022-03-11 14:34 ` [PATCH v3 06/46] media: sun6i-csi: Define and use variant to get " Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-15 19:31 ` Jernej Škrabec
2022-03-15 19:31 ` Jernej Škrabec
2022-03-18 8:54 ` Paul Kocialkowski
2022-03-18 8:54 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 07/46] media: sun6i-csi: Use runtime pm for clocks and reset Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-15 19:46 ` Jernej Škrabec
2022-03-15 19:46 ` Jernej Škrabec
2022-03-18 16:15 ` Paul Kocialkowski [this message]
2022-03-18 16:15 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 08/46] media: sun6i-csi: Tidy up Kconfig Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-15 19:51 ` Jernej Škrabec
2022-03-15 19:51 ` Jernej Škrabec
2022-03-11 14:34 ` [PATCH v3 09/46] media: sun6i-csi: Tidy up v4l2 code Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 10/46] media: sun6i-csi: Tidy up video code Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 11/46] media: sun6i-csi: Pass and store csi device directly in " Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 12/46] media: sun6i-csi: Register the media device after creation Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:34 ` [PATCH v3 13/46] media: sun6i-csi: Add media ops with link notify callback Paul Kocialkowski
2022-03-11 14:34 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 14/46] media: sun6i-csi: Introduce and use video helper functions Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 15/46] media: sun6i-csi: Move csi buffer definition to main header file Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 16/46] media: sun6i-csi: Add bridge v4l2 subdev with port management Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 17/46] media: sun6i-csi: Rename sun6i_video to sun6i_csi_capture Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 18/46] media: sun6i-csi: Add capture state using vsync for page flip Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 19/46] media: sun6i-csi: Rework register definitions, invert misleading fields Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 20/46] media: sun6i-csi: Add dimensions and format helpers to capture Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 21/46] media: sun6i-csi: Implement address configuration without indirection Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 22/46] media: sun6i-csi: Split stream sequences and irq code in capture Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 23/46] media: sun6i-csi: Move power management to runtime pm " Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 24/46] media: sun6i-csi: Move register configuration to capture Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 25/46] media: sun6i-csi: Rework capture format management with helper Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 26/46] media: sun6i-csi: Remove custom format helper and rework configure Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 27/46] media: sun6i-csi: Add bridge dimensions and format helpers Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 28/46] media: sun6i-csi: Get mbus code from bridge instead of storing it Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 29/46] media: sun6i-csi: Tidy capture configure code Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 30/46] media: sun6i-csi: Introduce bridge format structure, list and helper Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 31/46] media: sun6i-csi: Introduce capture " Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 32/46] media: sun6i-csi: Configure registers from format tables Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 33/46] media: sun6i-csi: Introduce format match structure, list and helper Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 34/46] media: sun6i-csi: Implement capture link validation with logic Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 35/46] media: sun6i-csi: Get bridge subdev directly in capture stream ops Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 36/46] media: sun6i-csi: Move hardware control to the bridge Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 37/46] media: sun6i-csi: Unset bridge source on capture streamon fail Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 38/46] media: sun6i-csi: Rename the capture video device to sun6i-csi-capture Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 39/46] media: sun6i-csi: Cleanup headers and includes, update copyright lines Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 40/46] media: sun6i-csi: Add support for MIPI CSI-2 to the bridge code Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 41/46] media: sun6i-csi: Only configure capture when streaming Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 42/46] media: sun6i-csi: Add extra checks to the interrupt routine Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 43/46] media: sun6i-csi: Request a shared interrupt Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 44/46] media: sun6i-csi: Detect the availability of the ISP Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 45/46] media: sun6i-csi: Add support for hooking to the isp devices Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
2022-03-11 14:35 ` [PATCH v3 46/46] MAINTAINERS: Add myself as sun6i-csi maintainer and rename/move entry Paul Kocialkowski
2022-03-11 14:35 ` Paul Kocialkowski
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=YjSwPOUxQ4KwPfUe@aptenodytes \
--to=paul.kocialkowski@bootlin.com \
--cc=jernej.skrabec@gmail.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=mchehab@kernel.org \
--cc=mripard@kernel.org \
--cc=samuel@sholland.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=wens@csie.org \
--cc=yong.deng@magewell.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 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.