From f266d5b3558e2f90d1d8733201602afa44e1f0fa Mon Sep 17 00:00:00 2001 From: David Collins Date: Fri, 19 Jul 2019 16:55:48 -0700 Subject: [PATCH 1/2] clk: qcom: common: add device tree consumer support for clk_hws Add support for device tree consumers to utilize clocks which are registered via clk_hws in struct qcom_cc_desc. This modification is effectively commit 84196373f39d ("clk: qcom: Support to add hardware clocks to of_clk_hw_provider") reconciled with with commit 760be6586fbc ("clk: qcom: Make common clk_hw registrations"). Change-Id: I1e0bdeecd2d4092bff3110168438211493f4feda Signed-off-by: David Collins --- drivers/clk/qcom/common.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c index a6b2f86112d8..c58841ca9943 100644 --- a/drivers/clk/qcom/common.c +++ b/drivers/clk/qcom/common.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2014, 2017-2019, The Linux Foundation. + * All rights reserved. */ #include @@ -21,6 +22,8 @@ struct qcom_cc { struct qcom_reset_controller reset; struct clk_regmap **rclks; size_t num_rclks; + struct clk_hw **clk_hws; + size_t num_clk_hws; }; const @@ -213,6 +216,9 @@ static struct clk_hw *qcom_cc_clk_hw_get(struct of_phandle_args *clkspec, struct qcom_cc *cc = data; unsigned int idx = clkspec->args[0]; + if (idx < cc->num_clk_hws && cc->clk_hws[idx]) + return cc->clk_hws[idx]; + if (idx >= cc->num_rclks) { pr_err("%s: invalid index %u\n", __func__, idx); return ERR_PTR(-EINVAL); @@ -268,10 +274,15 @@ int qcom_cc_really_probe(struct platform_device *pdev, cc->rclks = rclks; cc->num_rclks = num_clks; + cc->clk_hws = clk_hws; + cc->num_clk_hws = num_clk_hws; qcom_cc_drop_protected(dev, cc); for (i = 0; i < num_clk_hws; i++) { + if (!clk_hws[i]) + continue; + ret = devm_clk_hw_register(dev, clk_hws[i]); if (ret) return ret; From 50661feab044c85b66d20b0b0398e03058ceb23a Mon Sep 17 00:00:00 2001 From: David Collins Date: Mon, 8 Jul 2019 12:00:39 -0700 Subject: [PATCH 2/2] clk: qcom: common: only register reset controllers which define resets Add a condition check to ensure that a reset controller is only registered for a given clock controller inside of the qcom_cc_really_probe() function if more than 0 resets are defined for it. Change-Id: Iffdfce1f7609ccab184a61c4a448a7edc15bb4ab Signed-off-by: David Collins --- drivers/clk/qcom/common.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c index c58841ca9943..d04fc7f054b0 100644 --- a/drivers/clk/qcom/common.c +++ b/drivers/clk/qcom/common.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2014, 2017-2019, The Linux Foundation. * All rights reserved. @@ -252,9 +252,11 @@ int qcom_cc_really_probe(struct platform_device *pdev, reset->regmap = regmap; reset->reset_map = desc->resets; - ret = devm_reset_controller_register(dev, &reset->rcdev); - if (ret) - return ret; + if (desc->num_resets) { + ret = devm_reset_controller_register(dev, &reset->rcdev); + if (ret) + return ret; + } if (desc->gdscs && desc->num_gdscs) { scd = devm_kzalloc(dev, sizeof(*scd), GFP_KERNEL);