Lines Matching +full:div +full:- +full:reg
1 // SPDX-License-Identifier: GPL-2.0
8 #include <linux/clk-provider.h>
10 #include "div.h"
17 req->rate = divider_round_rate(&cd->common.hw, req->rate, in sprd_div_determine_rate()
18 &req->best_parent_rate, in sprd_div_determine_rate()
19 NULL, cd->div.width, 0); in sprd_div_determine_rate()
25 const struct sprd_div_internal *div, in sprd_div_helper_recalc_rate() argument
29 unsigned int reg; in sprd_div_helper_recalc_rate() local
31 regmap_read(common->regmap, common->reg + div->offset, ®); in sprd_div_helper_recalc_rate()
32 val = reg >> div->shift; in sprd_div_helper_recalc_rate()
33 val &= (1 << div->width) - 1; in sprd_div_helper_recalc_rate()
35 return divider_recalc_rate(&common->hw, parent_rate, val, NULL, 0, in sprd_div_helper_recalc_rate()
36 div->width); in sprd_div_helper_recalc_rate()
45 return sprd_div_helper_recalc_rate(&cd->common, &cd->div, parent_rate); in sprd_div_recalc_rate()
49 const struct sprd_div_internal *div, in sprd_div_helper_set_rate() argument
54 unsigned int reg; in sprd_div_helper_set_rate() local
57 div->width, 0); in sprd_div_helper_set_rate()
59 regmap_read(common->regmap, common->reg + div->offset, ®); in sprd_div_helper_set_rate()
60 reg &= ~GENMASK(div->width + div->shift - 1, div->shift); in sprd_div_helper_set_rate()
62 regmap_write(common->regmap, common->reg + div->offset, in sprd_div_helper_set_rate()
63 reg | (val << div->shift)); in sprd_div_helper_set_rate()
75 return sprd_div_helper_set_rate(&cd->common, &cd->div, in sprd_div_set_rate()