]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: qcom: branch: Extend invert logic for branch2 mem clocks
authorTaniya Das <taniya.das@oss.qualcomm.com>
Tue, 18 Nov 2025 07:17:07 +0000 (12:47 +0530)
committerBjorn Andersson <andersson@kernel.org>
Tue, 18 Nov 2025 22:11:29 +0000 (16:11 -0600)
Some clock branches require inverted logic for memory gating, where
disabling the memory involves setting a bit and enabling it involves
clearing the same bit. This behavior differs from the standard approach
memory branch clocks ops where enabling typically sets the bit.

The mem_enable_invert to allow conditional handling of these sequences
of the inverted control logic for memory operations required on those
memory clock branches.

Signed-off-by: Taniya Das <taniya.das@oss.qualcomm.com>
Reviewed-by: Imran Shaik <imran.shaik@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20251118-sm8750-videocc-v2-v4-3-049882a70c9f@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/clk/qcom/clk-branch.c

index 0f10090d4ae681babbdbbb1b6c68ffe77af7a784..444e7d8648d42ca9acc76bf3b054e3e2a7507aa1 100644 (file)
@@ -142,8 +142,8 @@ static int clk_branch2_mem_enable(struct clk_hw *hw)
        u32 val;
        int ret;
 
-       regmap_update_bits(branch.clkr.regmap, mem_br->mem_enable_reg,
-                          mem_br->mem_enable_ack_mask, mem_br->mem_enable_ack_mask);
+       regmap_assign_bits(branch.clkr.regmap, mem_br->mem_enable_reg,
+                          mem_br->mem_enable_mask, !mem_br->mem_enable_invert);
 
        ret = regmap_read_poll_timeout(branch.clkr.regmap, mem_br->mem_ack_reg,
                                       val, val & mem_br->mem_enable_ack_mask, 0, 200);
@@ -159,8 +159,8 @@ static void clk_branch2_mem_disable(struct clk_hw *hw)
 {
        struct clk_mem_branch *mem_br = to_clk_mem_branch(hw);
 
-       regmap_update_bits(mem_br->branch.clkr.regmap, mem_br->mem_enable_reg,
-                          mem_br->mem_enable_ack_mask, 0);
+       regmap_assign_bits(mem_br->branch.clkr.regmap, mem_br->mem_enable_reg,
+                          mem_br->mem_enable_mask, mem_br->mem_enable_invert);
 
        return clk_branch2_disable(hw);
 }