Re: [PATCH v3 03/46] media: sun6i-csi: Grab bus clock instead of passing it to regmap

Paul Kocialkowski
2022-03-18T08:49:14Z

[-- Attachment #1: Type: text/plain, Size: 3088 bytes --]

Hi Jernej,

On Tue 15 Mar 22, 20:22, Jernej Škrabec wrote:
> Hi Paul!
>
> Dne petek, 11. marec 2022 ob 15:34:49 CET je Paul Kocialkowski napisal(a):
> > Since the bus clock alone is not enough to get access to the registers,
> > don't pass it to regmap and manage it instead just like the other
> > clocks.
> >
>
> Let me ask it in another way, is bus clock needed only for register access? If
> yes, it makes sense to keep it enabled only during register access.

Ah right, I lost sight that what regmap will do is to enable/disable the
clock around register access. I understand there might be an advantage
in terms of power consumption here.

I haven't checked specifically, but since it was used like that before
it's probably fine.

Out of curiosity: is there any noticeable latency added by the process?

Cheers,

Paul

> Best regards,
> Jernej
>
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > ---
> > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c | 10 ++++++++--
> > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h | 1 +
> > 2 files changed, 9 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/
> media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > index 5fbaa1e99412..dc79f3c14336 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
> > @@ -827,13 +827,19 @@ static int sun6i_csi_resource_request(struct
> sun6i_csi_device *csi_dev,
> > if (IS_ERR(io_base))
> > return PTR_ERR(io_base);
> >
> > - csi_dev->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "bus",
> io_base,
> > -
> &sun6i_csi_regmap_config);
> > + csi_dev->regmap = devm_regmap_init_mmio(&pdev->dev, io_base,
> > +
> &sun6i_csi_regmap_config);
> > if (IS_ERR(csi_dev->regmap)) {
> > dev_err(&pdev->dev, "Failed to init register map\n");
> > return PTR_ERR(csi_dev->regmap);
> > }
> >
> > + csi_dev->clk_bus = devm_clk_get(&pdev->dev, "bus");
> > + if (IS_ERR(csi_dev->clk_bus)) {
> > + dev_err(&pdev->dev, "Unable to acquire bus clock\n");
> > + return PTR_ERR(csi_dev->clk_bus);
> > + }
> > +
> > csi_dev->clk_mod = devm_clk_get(&pdev->dev, "mod");
> > if (IS_ERR(csi_dev->clk_mod)) {
> > dev_err(&pdev->dev, "Unable to acquire csi clock\n");
> > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h b/drivers/
> media/platform/sunxi/sun6i-csi/sun6i_csi.h
> > index e4e7ac6c869f..356661b413f8 100644
> > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
> > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
> > @@ -51,6 +51,7 @@ struct sun6i_csi_device {
> > struct sun6i_video video;
> >
> > struct regmap *regmap;
> > + struct clk *clk_bus;
> > struct clk *clk_mod;
> > struct clk *clk_ram;
> > struct reset_control *reset;
> > --
> > 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 --]