mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 15:47:36 +00:00
clk: mxl: Add option to override gate clks
In MxL's LGM SoC, gate clocks can be controlled either from CGU clk driver i.e. this driver or directly from power management driver/daemon. It is dependent on the power policy/profile requirements of the end product. To support such use cases, provide option to override gate clks enable/disable by adding a flag GATE_CLK_HW which controls if these gate clks are controlled by HW i.e. this driver or overridden in order to allow it to be controlled by power profiles instead. Reviewed-by: Yi xin Zhu <yzhu@maxlinear.com> Signed-off-by: Rahul Tanwar <rtanwar@maxlinear.com> Link: https://lore.kernel.org/r/bdc9c89317b5d338a6c4f1d49386b696e947a672.1665642720.git.rtanwar@maxlinear.com [sboyd@kernel.org: Add braces on many line if-else] Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
eaabee88a8
commit
a5d49bd369
2 changed files with 16 additions and 1 deletions
|
@ -354,8 +354,22 @@ int lgm_clk_register_branches(struct lgm_clk_provider *ctx,
|
||||||
hw = lgm_clk_register_fixed_factor(ctx, list);
|
hw = lgm_clk_register_fixed_factor(ctx, list);
|
||||||
break;
|
break;
|
||||||
case CLK_TYPE_GATE:
|
case CLK_TYPE_GATE:
|
||||||
hw = lgm_clk_register_gate(ctx, list);
|
if (list->gate_flags & GATE_CLK_HW) {
|
||||||
|
hw = lgm_clk_register_gate(ctx, list);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* GATE_CLKs can be controlled either from
|
||||||
|
* CGU clk driver i.e. this driver or directly
|
||||||
|
* from power management driver/daemon. It is
|
||||||
|
* dependent on the power policy/profile requirements
|
||||||
|
* of the end product. To override control of gate
|
||||||
|
* clks from this driver, provide NULL for this index
|
||||||
|
* of gate clk provider.
|
||||||
|
*/
|
||||||
|
hw = NULL;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dev_err(ctx->dev, "invalid clk type\n");
|
dev_err(ctx->dev, "invalid clk type\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -197,6 +197,7 @@ struct lgm_clk_branch {
|
||||||
/* clock flags definition */
|
/* clock flags definition */
|
||||||
#define CLOCK_FLAG_VAL_INIT BIT(16)
|
#define CLOCK_FLAG_VAL_INIT BIT(16)
|
||||||
#define MUX_CLK_SW BIT(17)
|
#define MUX_CLK_SW BIT(17)
|
||||||
|
#define GATE_CLK_HW BIT(18)
|
||||||
|
|
||||||
#define LGM_MUX(_id, _name, _pdata, _f, _reg, \
|
#define LGM_MUX(_id, _name, _pdata, _f, _reg, \
|
||||||
_shift, _width, _cf, _v) \
|
_shift, _width, _cf, _v) \
|
||||||
|
|
Loading…
Reference in a new issue