From: Stephen Boyd <sboyd@codeaurora.org> To: Michael Turquette <mturquette@baylibre.com>, Stephen Boyd <sboyd@codeaurora.org> Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 10/13] clk: composite: Add hw based registration APIs Date: Thu, 21 Apr 2016 15:22:01 -0700 [thread overview] Message-ID: <1461277324-27185-11-git-send-email-sboyd@codeaurora.org> (raw) In-Reply-To: <1461277324-27185-1-git-send-email-sboyd@codeaurora.org> Add registration APIs in the clk composite code to return struct clk_hw pointers instead of struct clk pointers. This way we hide the struct clk pointer from providers unless they need to use consumer facing APIs. Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> --- drivers/clk/clk-composite.c | 45 ++++++++++++++++++++++++++++++++------------ include/linux/clk-provider.h | 7 +++++++ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c index 1f903e1f86a2..463fadd5a68f 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c @@ -184,17 +184,18 @@ static void clk_composite_disable(struct clk_hw *hw) gate_ops->disable(gate_hw); } -struct clk *clk_register_composite(struct device *dev, const char *name, +struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name, const char * const *parent_names, int num_parents, struct clk_hw *mux_hw, const struct clk_ops *mux_ops, struct clk_hw *rate_hw, const struct clk_ops *rate_ops, struct clk_hw *gate_hw, const struct clk_ops *gate_ops, unsigned long flags) { - struct clk *clk; + struct clk_hw *hw; struct clk_init_data init; struct clk_composite *composite; struct clk_ops *clk_composite_ops; + int ret; composite = kzalloc(sizeof(*composite), GFP_KERNEL); if (!composite) @@ -204,12 +205,13 @@ struct clk *clk_register_composite(struct device *dev, const char *name, init.flags = flags | CLK_IS_BASIC; init.parent_names = parent_names; init.num_parents = num_parents; + hw = &composite->hw; clk_composite_ops = &composite->ops; if (mux_hw && mux_ops) { if (!mux_ops->get_parent) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } @@ -224,7 +226,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, if (rate_hw && rate_ops) { if (!rate_ops->recalc_rate) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } clk_composite_ops->recalc_rate = clk_composite_recalc_rate; @@ -253,7 +255,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, if (gate_hw && gate_ops) { if (!gate_ops->is_enabled || !gate_ops->enable || !gate_ops->disable) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } @@ -267,22 +269,41 @@ struct clk *clk_register_composite(struct device *dev, const char *name, init.ops = clk_composite_ops; composite->hw.init = &init; - clk = clk_register(dev, &composite->hw); - if (IS_ERR(clk)) + ret = clk_hw_register(dev, hw); + if (ret) { + hw = ERR_PTR(ret); goto err; + } if (composite->mux_hw) - composite->mux_hw->clk = clk; + composite->mux_hw->clk = hw->clk; if (composite->rate_hw) - composite->rate_hw->clk = clk; + composite->rate_hw->clk = hw->clk; if (composite->gate_hw) - composite->gate_hw->clk = clk; + composite->gate_hw->clk = hw->clk; - return clk; + return hw; err: kfree(composite); - return clk; + return hw; +} + +struct clk *clk_register_composite(struct device *dev, const char *name, + const char * const *parent_names, int num_parents, + struct clk_hw *mux_hw, const struct clk_ops *mux_ops, + struct clk_hw *rate_hw, const struct clk_ops *rate_ops, + struct clk_hw *gate_hw, const struct clk_ops *gate_ops, + unsigned long flags) +{ + struct clk_hw *hw; + + hw = clk_hw_register_composite(dev, name, parent_names, num_parents, + mux_hw, mux_ops, rate_hw, rate_ops, gate_hw, gate_ops, + flags); + if (IS_ERR(hw)) + return ERR_CAST(hw); + return hw->clk; } diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index bcbaf6c95d52..456c3ced1ac9 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -638,6 +638,13 @@ struct clk *clk_register_composite(struct device *dev, const char *name, struct clk_hw *rate_hw, const struct clk_ops *rate_ops, struct clk_hw *gate_hw, const struct clk_ops *gate_ops, unsigned long flags); +struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name, + const char * const *parent_names, int num_parents, + struct clk_hw *mux_hw, const struct clk_ops *mux_ops, + struct clk_hw *rate_hw, const struct clk_ops *rate_ops, + struct clk_hw *gate_hw, const struct clk_ops *gate_ops, + unsigned long flags); +void clk_hw_unregister_composite(struct clk_hw *hw); /*** * struct clk_gpio_gate - gpio gated clock -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
WARNING: multiple messages have this Message-ID (diff)
From: sboyd@codeaurora.org (Stephen Boyd) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 10/13] clk: composite: Add hw based registration APIs Date: Thu, 21 Apr 2016 15:22:01 -0700 [thread overview] Message-ID: <1461277324-27185-11-git-send-email-sboyd@codeaurora.org> (raw) In-Reply-To: <1461277324-27185-1-git-send-email-sboyd@codeaurora.org> Add registration APIs in the clk composite code to return struct clk_hw pointers instead of struct clk pointers. This way we hide the struct clk pointer from providers unless they need to use consumer facing APIs. Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> --- drivers/clk/clk-composite.c | 45 ++++++++++++++++++++++++++++++++------------ include/linux/clk-provider.h | 7 +++++++ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c index 1f903e1f86a2..463fadd5a68f 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c @@ -184,17 +184,18 @@ static void clk_composite_disable(struct clk_hw *hw) gate_ops->disable(gate_hw); } -struct clk *clk_register_composite(struct device *dev, const char *name, +struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name, const char * const *parent_names, int num_parents, struct clk_hw *mux_hw, const struct clk_ops *mux_ops, struct clk_hw *rate_hw, const struct clk_ops *rate_ops, struct clk_hw *gate_hw, const struct clk_ops *gate_ops, unsigned long flags) { - struct clk *clk; + struct clk_hw *hw; struct clk_init_data init; struct clk_composite *composite; struct clk_ops *clk_composite_ops; + int ret; composite = kzalloc(sizeof(*composite), GFP_KERNEL); if (!composite) @@ -204,12 +205,13 @@ struct clk *clk_register_composite(struct device *dev, const char *name, init.flags = flags | CLK_IS_BASIC; init.parent_names = parent_names; init.num_parents = num_parents; + hw = &composite->hw; clk_composite_ops = &composite->ops; if (mux_hw && mux_ops) { if (!mux_ops->get_parent) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } @@ -224,7 +226,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, if (rate_hw && rate_ops) { if (!rate_ops->recalc_rate) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } clk_composite_ops->recalc_rate = clk_composite_recalc_rate; @@ -253,7 +255,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name, if (gate_hw && gate_ops) { if (!gate_ops->is_enabled || !gate_ops->enable || !gate_ops->disable) { - clk = ERR_PTR(-EINVAL); + hw = ERR_PTR(-EINVAL); goto err; } @@ -267,22 +269,41 @@ struct clk *clk_register_composite(struct device *dev, const char *name, init.ops = clk_composite_ops; composite->hw.init = &init; - clk = clk_register(dev, &composite->hw); - if (IS_ERR(clk)) + ret = clk_hw_register(dev, hw); + if (ret) { + hw = ERR_PTR(ret); goto err; + } if (composite->mux_hw) - composite->mux_hw->clk = clk; + composite->mux_hw->clk = hw->clk; if (composite->rate_hw) - composite->rate_hw->clk = clk; + composite->rate_hw->clk = hw->clk; if (composite->gate_hw) - composite->gate_hw->clk = clk; + composite->gate_hw->clk = hw->clk; - return clk; + return hw; err: kfree(composite); - return clk; + return hw; +} + +struct clk *clk_register_composite(struct device *dev, const char *name, + const char * const *parent_names, int num_parents, + struct clk_hw *mux_hw, const struct clk_ops *mux_ops, + struct clk_hw *rate_hw, const struct clk_ops *rate_ops, + struct clk_hw *gate_hw, const struct clk_ops *gate_ops, + unsigned long flags) +{ + struct clk_hw *hw; + + hw = clk_hw_register_composite(dev, name, parent_names, num_parents, + mux_hw, mux_ops, rate_hw, rate_ops, gate_hw, gate_ops, + flags); + if (IS_ERR(hw)) + return ERR_CAST(hw); + return hw->clk; } diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index bcbaf6c95d52..456c3ced1ac9 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -638,6 +638,13 @@ struct clk *clk_register_composite(struct device *dev, const char *name, struct clk_hw *rate_hw, const struct clk_ops *rate_ops, struct clk_hw *gate_hw, const struct clk_ops *gate_ops, unsigned long flags); +struct clk_hw *clk_hw_register_composite(struct device *dev, const char *name, + const char * const *parent_names, int num_parents, + struct clk_hw *mux_hw, const struct clk_ops *mux_ops, + struct clk_hw *rate_hw, const struct clk_ops *rate_ops, + struct clk_hw *gate_hw, const struct clk_ops *gate_ops, + unsigned long flags); +void clk_hw_unregister_composite(struct clk_hw *hw); /*** * struct clk_gpio_gate - gpio gated clock -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2016-04-21 22:23 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-04-21 22:21 [PATCH v2 00/13] clk_hw based clkdev/DT providers Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 01/13] clkdev: Remove clk_register_clkdevs() Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-05-03 0:37 ` Stephen Boyd 2016-05-03 0:37 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 02/13] clk: Add {devm_}clk_hw_{register,unregister}() APIs Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 21:44 ` Stephen Boyd 2016-04-22 21:44 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 03/13] clk: Add clk_hw OF clk providers Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 21:45 ` Stephen Boyd 2016-04-22 21:45 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 04/13] clkdev: Add clk_hw based registration APIs Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-05-03 0:37 ` Stephen Boyd 2016-05-03 0:37 ` Stephen Boyd 2016-05-03 10:36 ` Russell King - ARM Linux 2016-05-03 10:36 ` Russell King - ARM Linux 2016-04-21 22:21 ` [PATCH v2 05/13] clk: divider: Add hw " Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 21:49 ` Stephen Boyd 2016-04-22 21:49 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 06/13] clk: gate: " Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 21:49 ` Stephen Boyd 2016-04-22 21:49 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 07/13] clk: mux: " Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:21 ` [PATCH v2 08/13] clk: fixed-factor: " Stephen Boyd 2016-04-21 22:21 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:22 ` [PATCH v2 09/13] clk: fractional-divider: " Stephen Boyd 2016-04-21 22:22 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:22 ` Stephen Boyd [this message] 2016-04-21 22:22 ` [PATCH v2 10/13] clk: composite: " Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:22 ` [PATCH v2 11/13] clk: gpio: " Stephen Boyd 2016-04-21 22:22 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:22 ` [PATCH v2 12/13] clk: fixed-rate: " Stephen Boyd 2016-04-21 22:22 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-22 22:58 ` Stephen Boyd 2016-04-21 22:22 ` [PATCH v2 13/13] clk: qcom: Migrate to clk_hw based registration and OF APIs Stephen Boyd 2016-04-21 22:22 ` Stephen Boyd
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=1461277324-27185-11-git-send-email-sboyd@codeaurora.org \ --to=sboyd@codeaurora.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-clk@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mturquette@baylibre.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: linkBe 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.