Lines Matching refs:pvtm

43 	u32 (*get_value)(struct rockchip_pvtm *pvtm, unsigned int ring_sel,
45 void (*set_ring_sel)(struct rockchip_pvtm *pvtm, unsigned int ring_sel);
90 struct rockchip_pvtm *pvtm = (struct rockchip_pvtm *)s->private; in pvtm_value_show() local
94 if (!pvtm || !pvtm->ops->get_value) { in pvtm_value_show()
99 if (pvtm->tz && pvtm->tz->ops && pvtm->tz->ops->get_temp) { in pvtm_value_show()
100 ret = pvtm->tz->ops->get_temp(pvtm->tz, &cur_temp); in pvtm_value_show()
102 dev_err(pvtm->dev, "debug failed to get temp\n"); in pvtm_value_show()
107 for (i = 0; i < pvtm->info->num_rings; i++) { in pvtm_value_show()
108 value = pvtm->ops->get_value(pvtm, i, 1000); in pvtm_value_show()
145 static int rockchip_pvtm_add_debugfs(struct rockchip_pvtm *pvtm) in rockchip_pvtm_add_debugfs() argument
152 pvtm->dentry = debugfs_create_dir(pvtm->info->name, in rockchip_pvtm_add_debugfs()
154 if (!pvtm->dentry) { in rockchip_pvtm_add_debugfs()
155 dev_err(pvtm->dev, "failed to create pvtm %s debug dir\n", in rockchip_pvtm_add_debugfs()
156 pvtm->info->name); in rockchip_pvtm_add_debugfs()
160 d = debugfs_create_file("value", 0444, pvtm->dentry, in rockchip_pvtm_add_debugfs()
161 (void *)pvtm, &pvtm_value_fops); in rockchip_pvtm_add_debugfs()
163 dev_err(pvtm->dev, "failed to pvtm %s value node\n", in rockchip_pvtm_add_debugfs()
164 pvtm->info->name); in rockchip_pvtm_add_debugfs()
165 debugfs_remove_recursive(pvtm->dentry); in rockchip_pvtm_add_debugfs()
181 static inline int rockchip_pvtm_add_debugfs(struct rockchip_pvtm *pvtm) in rockchip_pvtm_add_debugfs() argument
187 static int rockchip_pvtm_reset(struct rockchip_pvtm *pvtm) in rockchip_pvtm_reset() argument
191 ret = reset_control_assert(pvtm->rst); in rockchip_pvtm_reset()
193 dev_err(pvtm->dev, "failed to assert pvtm %d\n", ret); in rockchip_pvtm_reset()
199 ret = reset_control_deassert(pvtm->rst); in rockchip_pvtm_reset()
201 dev_err(pvtm->dev, "failed to deassert pvtm %d\n", ret); in rockchip_pvtm_reset()
211 struct rockchip_pvtm *p, *pvtm = NULL; in rockchip_get_pvtm_value() local
220 pvtm = p; in rockchip_get_pvtm_value()
225 if (!pvtm) { in rockchip_get_pvtm_value()
230 if (ring_sel >= pvtm->info->num_rings) { in rockchip_get_pvtm_value()
235 return pvtm->ops->get_value(pvtm, ring_sel, time_us); in rockchip_get_pvtm_value()
257 static void px30_pvtm_set_ring_sel(struct rockchip_pvtm *pvtm, in px30_pvtm_set_ring_sel() argument
260 unsigned int id = pvtm->info->id; in px30_pvtm_set_ring_sel()
262 regmap_write(pvtm->grf, pvtm->con, in px30_pvtm_set_ring_sel()
266 static void rk1808_pvtm_set_ring_sel(struct rockchip_pvtm *pvtm, in rk1808_pvtm_set_ring_sel() argument
269 regmap_write(pvtm->grf, pvtm->con, in rk1808_pvtm_set_ring_sel()
273 static void rk3399_pvtm_set_ring_sel(struct rockchip_pvtm *pvtm, in rk3399_pvtm_set_ring_sel() argument
276 unsigned int id = pvtm->info->id; in rk3399_pvtm_set_ring_sel()
279 regmap_write(pvtm->grf, pvtm->con + 0x14, in rk3399_pvtm_set_ring_sel()
284 regmap_write(pvtm->grf, pvtm->con, in rk3399_pvtm_set_ring_sel()
288 static u32 rockchip_pvtm_get_value(struct rockchip_pvtm *pvtm, in rockchip_pvtm_get_value() argument
292 const struct rockchip_pvtm_info *info = pvtm->info; in rockchip_pvtm_get_value()
297 ret = clk_bulk_prepare_enable(pvtm->num_clks, pvtm->clks); in rockchip_pvtm_get_value()
299 dev_err(pvtm->dev, "failed to prepare/enable pvtm clks\n"); in rockchip_pvtm_get_value()
302 ret = rockchip_pvtm_reset(pvtm); in rockchip_pvtm_get_value()
304 dev_err(pvtm->dev, "failed to reset pvtm\n"); in rockchip_pvtm_get_value()
309 regmap_read(pvtm->grf, pvtm->con, &sta); in rockchip_pvtm_get_value()
311 regmap_write(pvtm->grf, pvtm->con, in rockchip_pvtm_get_value()
314 regmap_write(pvtm->grf, pvtm->con, in rockchip_pvtm_get_value()
317 if (pvtm->ops->set_ring_sel) in rockchip_pvtm_get_value()
318 pvtm->ops->set_ring_sel(pvtm, ring_sel); in rockchip_pvtm_get_value()
322 regmap_write(pvtm->grf, pvtm->con + info->reg_cal, clk_cnt); in rockchip_pvtm_get_value()
324 regmap_write(pvtm->grf, pvtm->con, in rockchip_pvtm_get_value()
330 regmap_read(pvtm->grf, pvtm->sta, &sta); in rockchip_pvtm_get_value()
338 regmap_read(pvtm->grf, pvtm->sta + info->reg_freq, &val); in rockchip_pvtm_get_value()
340 dev_err(pvtm->dev, "wait pvtm_done timeout!\n"); in rockchip_pvtm_get_value()
344 regmap_write(pvtm->grf, pvtm->con, in rockchip_pvtm_get_value()
347 regmap_write(pvtm->grf, pvtm->con, in rockchip_pvtm_get_value()
351 clk_bulk_disable_unprepare(pvtm->num_clks, pvtm->clks); in rockchip_pvtm_get_value()
356 static void rv1106_core_pvtm_set_ring_sel(struct rockchip_pvtm *pvtm, in rv1106_core_pvtm_set_ring_sel() argument
359 writel_relaxed(wr_mask_bit(ring_sel + 4, 0x2, 0x7), pvtm->base + pvtm->con); in rv1106_core_pvtm_set_ring_sel()
362 static void rv1126_pvtm_set_ring_sel(struct rockchip_pvtm *pvtm, in rv1126_pvtm_set_ring_sel() argument
365 writel_relaxed(wr_mask_bit(ring_sel, 0x2, 0x7), pvtm->base + pvtm->con); in rv1126_pvtm_set_ring_sel()
368 static u32 rv1126_pvtm_get_value(struct rockchip_pvtm *pvtm, in rv1126_pvtm_get_value() argument
372 const struct rockchip_pvtm_info *info = pvtm->info; in rv1126_pvtm_get_value()
377 ret = clk_bulk_prepare_enable(pvtm->num_clks, pvtm->clks); in rv1126_pvtm_get_value()
379 dev_err(pvtm->dev, "failed to prepare/enable pvtm clks\n"); in rv1126_pvtm_get_value()
382 ret = rockchip_pvtm_reset(pvtm); in rv1126_pvtm_get_value()
384 dev_err(pvtm->dev, "failed to reset pvtm\n"); in rv1126_pvtm_get_value()
389 sta = readl_relaxed(pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
392 pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
395 pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
397 if (pvtm->ops->set_ring_sel) in rv1126_pvtm_get_value()
398 pvtm->ops->set_ring_sel(pvtm, ring_sel); in rv1126_pvtm_get_value()
402 writel_relaxed(clk_cnt, pvtm->base + pvtm->con + info->reg_cal); in rv1126_pvtm_get_value()
405 pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
410 sta = readl_relaxed(pvtm->base + pvtm->sta); in rv1126_pvtm_get_value()
418 val = readl_relaxed(pvtm->base + pvtm->sta + info->reg_freq); in rv1126_pvtm_get_value()
420 dev_err(pvtm->dev, "wait pvtm_done timeout!\n"); in rv1126_pvtm_get_value()
425 pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
427 pvtm->base + pvtm->con); in rv1126_pvtm_get_value()
430 clk_bulk_disable_unprepare(pvtm->num_clks, pvtm->clks); in rv1126_pvtm_get_value()
911 struct rockchip_pvtm *pvtm; in rockchip_pvtm_init() local
925 pvtm = devm_kzalloc(dev, sizeof(*pvtm), GFP_KERNEL); in rockchip_pvtm_init()
926 if (!pvtm) in rockchip_pvtm_init()
929 pvtm->dev = dev; in rockchip_pvtm_init()
930 pvtm->grf = grf; in rockchip_pvtm_init()
931 pvtm->base = base; in rockchip_pvtm_init()
932 pvtm->con = data->con; in rockchip_pvtm_init()
933 pvtm->sta = data->sta; in rockchip_pvtm_init()
934 pvtm->ops = &data->ops; in rockchip_pvtm_init()
935 pvtm->info = &data->infos[index]; in rockchip_pvtm_init()
938 pvtm->tz = thermal_zone_get_zone_by_name(tz_name); in rockchip_pvtm_init()
939 if (IS_ERR(pvtm->tz)) { in rockchip_pvtm_init()
940 dev_err(pvtm->dev, "failed to retrieve pvtm_tz\n"); in rockchip_pvtm_init()
941 pvtm->tz = NULL; in rockchip_pvtm_init()
945 pvtm->num_clks = of_clk_get_parent_count(node); in rockchip_pvtm_init()
946 if (pvtm->num_clks <= 0) { in rockchip_pvtm_init()
950 pvtm->clks = devm_kcalloc(dev, pvtm->num_clks, sizeof(*pvtm->clks), in rockchip_pvtm_init()
952 if (!pvtm->clks) in rockchip_pvtm_init()
954 for (i = 0; i < pvtm->num_clks; i++) { in rockchip_pvtm_init()
955 pvtm->clks[i].clk = of_clk_get(node, i); in rockchip_pvtm_init()
956 if (IS_ERR(pvtm->clks[i].clk)) { in rockchip_pvtm_init()
963 pvtm->rst = devm_reset_control_array_get_optional_exclusive(dev); in rockchip_pvtm_init()
964 if (IS_ERR(pvtm->rst)) in rockchip_pvtm_init()
967 rockchip_pvtm_add_debugfs(pvtm); in rockchip_pvtm_init()
969 return pvtm; in rockchip_pvtm_init()
973 clk_put(pvtm->clks[i].clk); in rockchip_pvtm_init()
974 devm_kfree(dev, pvtm->clks); in rockchip_pvtm_init()
976 devm_kfree(dev, pvtm); in rockchip_pvtm_init()
987 struct rockchip_pvtm *pvtm; in rockchip_pvtm_probe() local
1008 pvtm = rockchip_pvtm_init(dev, node, match->data, grf, base); in rockchip_pvtm_probe()
1009 if (!pvtm) { in rockchip_pvtm_probe()
1014 list_add(&pvtm->node, &pvtm_list); in rockchip_pvtm_probe()