mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
clk: scmi: add is_prepared hook
Some clocks maybe default enabled by hardware. For clocks that don't have users, that will be left in hardware default state, because prepare count and enable count is zero,if there is no is_prepared hook to get the hardware state. So add is_prepared hook to detect the hardware state. Then when disabling the unused clocks, they can be simply turned OFF to save power during kernel boot. Reviewed-by: Dhruva Gole <d-gole@ti.com> Signed-off-by: Peng Fan <peng.fan@nxp.com> Link: https://lore.kernel.org/r/20240806145601.1184337-1-peng.fan@oss.nxp.com Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
8400291e28
commit
fc953d40bd
@ -156,13 +156,13 @@ static void scmi_clk_atomic_disable(struct clk_hw *hw)
|
||||
scmi_proto_clk_ops->disable(clk->ph, clk->id, ATOMIC);
|
||||
}
|
||||
|
||||
static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
|
||||
static int __scmi_clk_is_enabled(struct clk_hw *hw, bool atomic)
|
||||
{
|
||||
int ret;
|
||||
bool enabled = false;
|
||||
struct scmi_clk *clk = to_scmi_clk(hw);
|
||||
|
||||
ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled, ATOMIC);
|
||||
ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled, atomic);
|
||||
if (ret)
|
||||
dev_warn(clk->dev,
|
||||
"Failed to get state for clock ID %d\n", clk->id);
|
||||
@ -170,6 +170,16 @@ static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
|
||||
return !!enabled;
|
||||
}
|
||||
|
||||
static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
|
||||
{
|
||||
return __scmi_clk_is_enabled(hw, ATOMIC);
|
||||
}
|
||||
|
||||
static int scmi_clk_is_enabled(struct clk_hw *hw)
|
||||
{
|
||||
return __scmi_clk_is_enabled(hw, NOT_ATOMIC);
|
||||
}
|
||||
|
||||
static int scmi_clk_get_duty_cycle(struct clk_hw *hw, struct clk_duty *duty)
|
||||
{
|
||||
int ret;
|
||||
@ -285,6 +295,8 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key)
|
||||
|
||||
if (feats_key & BIT(SCMI_CLK_ATOMIC_SUPPORTED))
|
||||
ops->is_enabled = scmi_clk_atomic_is_enabled;
|
||||
else
|
||||
ops->is_prepared = scmi_clk_is_enabled;
|
||||
|
||||
/* Rate ops */
|
||||
ops->recalc_rate = scmi_clk_recalc_rate;
|
||||
|
Loading…
Reference in New Issue
Block a user