On Tue, 7 Mar 2023 at 16:54, Luca Weiss <luca.weiss@xxxxxxxxxxxxx> wrote: > > On Tue Feb 14, 2023 at 1:32 PM CET, Dmitry Baryshkov wrote: > > On Tue, 14 Feb 2023 at 13:01, Luca Weiss <luca.weiss@xxxxxxxxxxxxx> wrote: > > > > > > Make sure that we can enable and disable the power domains used for > > > camcc when the clocks are and aren't used. > > > > > > Signed-off-by: Luca Weiss <luca.weiss@xxxxxxxxxxxxx> > > > --- > > > drivers/clk/qcom/camcc-sm6350.c | 25 ++++++++++++++++++++++++- > > > 1 file changed, 24 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/clk/qcom/camcc-sm6350.c b/drivers/clk/qcom/camcc-sm6350.c > > > index acba9f99d960..fc5532e2ee5b 100644 > > > --- a/drivers/clk/qcom/camcc-sm6350.c > > > +++ b/drivers/clk/qcom/camcc-sm6350.c > > > @@ -7,6 +7,8 @@ > > > #include <linux/clk-provider.h> > > > #include <linux/module.h> > > > #include <linux/platform_device.h> > > > +#include <linux/pm_clock.h> > > > +#include <linux/pm_runtime.h> > > > #include <linux/regmap.h> > > > > > > #include <dt-bindings/clock/qcom,sm6350-camcc.h> > > > @@ -1869,6 +1871,19 @@ MODULE_DEVICE_TABLE(of, camcc_sm6350_match_table); > > > static int camcc_sm6350_probe(struct platform_device *pdev) > > > { > > > struct regmap *regmap; > > > + int ret; > > > + > > > + ret = devm_pm_runtime_enable(&pdev->dev); > > > + if (ret < 0) > > > + return ret; > > > + > > > + ret = devm_pm_clk_create(&pdev->dev); > > > + if (ret < 0) > > > + return ret; > > > > This makes me wonder, what is the use for the pm_clk in your case? The > > driver doesn't seem to use of_pm_clk_add_clk(), of_pm_clk_add_clks() > > or pm_clk_add_clk(). So pm_clk_suspend() and pm_clk_resume() do > > nothing. > > You're right that we're not using any of these functions in the driver. > However still when camcc is not used, the associated power domain turns > off correctly so that part works as expected. > > Honestly these lines have been copied from a different driver and I'm > not familiar enough with the pm_runtime APIs to know what to use here > without using the pm_clk* and pm_clk_suspend. Please don't blindly C&P code. > > Basically we need, if any clock is being used in the driver, the > power-domain needs to be enabled as well, and if nothing is used the > power-domain can be disabled again. Adding power-domains to the camcc node and calling devm_pm_runtime_enable() should be enough. Please see how this is managed for dispcc on sm8250. -- With best wishes Dmitry