Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: gpucc-sm6375: Enable runtime pm

The GPUCC block on SM6375 is powered by VDD_CX and VDD_GX. If the latter
rail is not online, GX_GDSC will never turn on. Enable runtime pm so that
we can reference VDD_GX from the dt to ensure that.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230529-topic-sm6375gpuccpd-v1-2-8d57c41a6066@linaro.org

authored by

Konrad Dybcio and committed by
Bjorn Andersson
097d359c 2f138c66

+17 -2
+17 -2
drivers/clk/qcom/gpucc-sm6375.c
··· 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/module.h> 9 9 #include <linux/of_device.h> 10 + #include <linux/pm_runtime.h> 10 11 #include <linux/regmap.h> 11 12 12 13 #include <dt-bindings/clock/qcom,sm6375-gpucc.h> ··· 435 434 static int gpucc_sm6375_probe(struct platform_device *pdev) 436 435 { 437 436 struct regmap *regmap; 437 + int ret; 438 + 439 + ret = devm_pm_runtime_enable(&pdev->dev); 440 + if (ret) 441 + return ret; 442 + 443 + ret = pm_runtime_resume_and_get(&pdev->dev); 444 + if (ret) 445 + return ret; 438 446 439 447 regmap = qcom_cc_map(pdev, &gpucc_sm6375_desc); 440 - if (IS_ERR(regmap)) 448 + if (IS_ERR(regmap)) { 449 + pm_runtime_put(&pdev->dev); 441 450 return PTR_ERR(regmap); 451 + } 442 452 443 453 clk_lucid_pll_configure(&gpucc_pll0, regmap, &gpucc_pll0_config); 444 454 clk_lucid_pll_configure(&gpucc_pll1, regmap, &gpucc_pll1_config); 445 455 446 - return qcom_cc_really_probe(pdev, &gpucc_sm6375_desc, regmap); 456 + ret = qcom_cc_really_probe(pdev, &gpucc_sm6375_desc, regmap); 457 + pm_runtime_put(&pdev->dev); 458 + 459 + return ret; 447 460 } 448 461 449 462 static struct platform_driver gpucc_sm6375_driver = {