Lines Matching refs:pvtm
36 u32 (*get_value)(struct rockchip_clock_pvtm *pvtm,
38 int (*init_freq)(struct rockchip_clock_pvtm *pvtm);
39 int (*sel_enable)(struct rockchip_clock_pvtm *pvtm);
78 static int rockchip_clock_sel_internal_pvtm(struct rockchip_clock_pvtm *pvtm) in rockchip_clock_sel_internal_pvtm() argument
82 ret = regmap_write(pvtm->grf, pvtm->info->sel_con, in rockchip_clock_sel_internal_pvtm()
83 wr_msk_bit(pvtm->info->sel_value, in rockchip_clock_sel_internal_pvtm()
84 pvtm->info->sel_shift, in rockchip_clock_sel_internal_pvtm()
85 pvtm->info->sel_mask)); in rockchip_clock_sel_internal_pvtm()
93 static u32 rockchip_clock_pvtm_get_value(struct rockchip_clock_pvtm *pvtm, in rockchip_clock_pvtm_get_value() argument
96 const struct rockchip_clock_pvtm_info *info = pvtm->info; in rockchip_clock_pvtm_get_value()
103 regmap_write(pvtm->grf, info->con + 0x4, clk_cnt); in rockchip_clock_pvtm_get_value()
104 regmap_write(pvtm->grf, info->con, wr_msk_bit(3, 0, 0x3)); in rockchip_clock_pvtm_get_value()
110 regmap_read(pvtm->grf, info->sta, &sta); in rockchip_clock_pvtm_get_value()
118 regmap_read(pvtm->grf, info->sta + 0x4, &val); in rockchip_clock_pvtm_get_value()
124 regmap_write(pvtm->grf, info->con, wr_msk_bit(0, 0, 0x3)); in rockchip_clock_pvtm_get_value()
129 static int rockchip_clock_pvtm_init_freq(struct rockchip_clock_pvtm *pvtm) in rockchip_clock_pvtm_init_freq() argument
136 pvtm_cnt = pvtm->info->get_value(pvtm, time_us); in rockchip_clock_pvtm_init_freq()
140 div = DIV_ROUND_UP(1000 * pvtm_cnt, pvtm->rate); in rockchip_clock_pvtm_init_freq()
141 if (div > pvtm->info->div_mask) { in rockchip_clock_pvtm_init_freq()
143 div = pvtm->info->div_mask; in rockchip_clock_pvtm_init_freq()
146 pr_debug("set div %d, rate %luKHZ\n", div, pvtm->rate); in rockchip_clock_pvtm_init_freq()
147 ret = regmap_write(pvtm->grf, pvtm->info->con, in rockchip_clock_pvtm_init_freq()
148 wr_msk_bit(div, pvtm->info->div_shift, in rockchip_clock_pvtm_init_freq()
149 pvtm->info->div_mask)); in rockchip_clock_pvtm_init_freq()
154 ret = regmap_write(pvtm->grf, pvtm->info->con, in rockchip_clock_pvtm_init_freq()
159 ret = pvtm->info->sel_enable(pvtm); in rockchip_clock_pvtm_init_freq()
168 struct rockchip_clock_pvtm *pvtm) in clock_pvtm_regitstor() argument
174 pvtm->info->init_freq(pvtm); in clock_pvtm_regitstor()
189 pvtm->clk = devm_clk_register(dev, clk_hw); in clock_pvtm_regitstor()
190 if (IS_ERR(pvtm->clk)) in clock_pvtm_regitstor()
191 return PTR_ERR(pvtm->clk); in clock_pvtm_regitstor()
194 pvtm->clk); in clock_pvtm_regitstor()
226 struct rockchip_clock_pvtm *pvtm; in rockchip_clock_pvtm_probe() local
230 pvtm = devm_kzalloc(dev, sizeof(*pvtm), GFP_KERNEL); in rockchip_clock_pvtm_probe()
231 if (!pvtm) in rockchip_clock_pvtm_probe()
238 pvtm->info = (const struct rockchip_clock_pvtm_info *)match->data; in rockchip_clock_pvtm_probe()
239 if (!pvtm->info) in rockchip_clock_pvtm_probe()
245 pvtm->grf = syscon_node_to_regmap(dev->parent->of_node); in rockchip_clock_pvtm_probe()
246 if (IS_ERR(pvtm->grf)) in rockchip_clock_pvtm_probe()
247 return PTR_ERR(pvtm->grf); in rockchip_clock_pvtm_probe()
250 pvtm->rate = rate; in rockchip_clock_pvtm_probe()
252 pvtm->rate = 32768; in rockchip_clock_pvtm_probe()
254 pvtm->pvtm_clk = devm_clk_get(&pdev->dev, "pvtm_pmu_clk"); in rockchip_clock_pvtm_probe()
255 if (IS_ERR(pvtm->pvtm_clk)) { in rockchip_clock_pvtm_probe()
256 error = PTR_ERR(pvtm->pvtm_clk); in rockchip_clock_pvtm_probe()
264 error = clk_prepare_enable(pvtm->pvtm_clk); in rockchip_clock_pvtm_probe()
271 platform_set_drvdata(pdev, pvtm); in rockchip_clock_pvtm_probe()
273 error = clock_pvtm_regitstor(&pdev->dev, pvtm); in rockchip_clock_pvtm_probe()
283 clk_disable_unprepare(pvtm->pvtm_clk); in rockchip_clock_pvtm_probe()
290 struct rockchip_clock_pvtm *pvtm = platform_get_drvdata(pdev); in rockchip_clock_pvtm_remove() local
294 clk_disable_unprepare(pvtm->pvtm_clk); in rockchip_clock_pvtm_remove()