Lines Matching +full:num +full:- +full:clkdivs
1 // SPDX-License-Identifier: GPL-2.0-only
8 #include <linux/clk-provider.h>
44 return 1 << (div_factor - 1); in div_factor_to_div()
56 regmap_read(clkdiv->regmap, clkdiv->base + REG_EN_CTL, &val); in is_spmi_pmic_clkdiv_enabled()
66 unsigned int ns = clkdiv->cxo_period_ns; in __spmi_pmic_clkdiv_set_enable_state()
69 ret = regmap_update_bits(clkdiv->regmap, clkdiv->base + REG_EN_CTL, in __spmi_pmic_clkdiv_set_enable_state()
86 regmap_read(clkdiv->regmap, clkdiv->base + REG_DIV_CTL1, &div_factor); in spmi_pmic_clkdiv_set_enable_state()
98 spin_lock_irqsave(&clkdiv->lock, flags); in clk_spmi_pmic_div_enable()
100 spin_unlock_irqrestore(&clkdiv->lock, flags); in clk_spmi_pmic_div_enable()
110 spin_lock_irqsave(&clkdiv->lock, flags); in clk_spmi_pmic_div_disable()
112 spin_unlock_irqrestore(&clkdiv->lock, flags); in clk_spmi_pmic_div_disable()
133 regmap_read(clkdiv->regmap, clkdiv->base + REG_DIV_CTL1, &div_factor); in clk_spmi_pmic_div_recalc_rate()
147 guard(spinlock_irqsave)(&clkdiv->lock); in clk_spmi_pmic_div_set_rate()
156 ret = regmap_update_bits(clkdiv->regmap, clkdiv->base + REG_DIV_CTL1, in clk_spmi_pmic_div_set_rate()
184 int idx = clkspec->args[0] - 1; /* Start at 1 instead of 0 */ in spmi_pmic_div_clk_hw_get()
186 if (idx < 0 || idx >= cc->nclks) { in spmi_pmic_div_clk_hw_get()
188 __func__, clkspec->args[0], cc->nclks); in spmi_pmic_div_clk_hw_get()
189 return ERR_PTR(-EINVAL); in spmi_pmic_div_clk_hw_get()
192 return &cc->clks[idx].hw; in spmi_pmic_div_clk_hw_get()
202 struct device *dev = &pdev->dev; in spmi_pmic_clkdiv_probe()
203 struct device_node *of_node = dev->of_node; in spmi_pmic_clkdiv_probe()
215 regmap = dev_get_regmap(dev->parent, NULL); in spmi_pmic_clkdiv_probe()
218 return -EINVAL; in spmi_pmic_clkdiv_probe()
221 ret = of_property_read_u32(of_node, "qcom,num-clkdivs", &nclks); in spmi_pmic_clkdiv_probe()
223 dev_err(dev, "qcom,num-clkdivs property reading failed, ret=%d\n", in spmi_pmic_clkdiv_probe()
229 return -EINVAL; in spmi_pmic_clkdiv_probe()
233 return -ENOMEM; in spmi_pmic_clkdiv_probe()
234 cc->nclks = nclks; in spmi_pmic_clkdiv_probe()
239 if (ret != -EPROBE_DEFER) in spmi_pmic_clkdiv_probe()
251 for (i = 0, clkdiv = cc->clks; i < nclks; i++) { in spmi_pmic_clkdiv_probe()
269 { .compatible = "qcom,spmi-clkdiv" },
276 .name = "qcom,spmi-pmic-clkdiv",