Lines Matching full:tsc
93 void (*thermal_init)(struct rcar_gen3_thermal_tsc *tsc);
96 static inline u32 rcar_gen3_thermal_read(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_read() argument
99 return ioread32(tsc->base + reg); in rcar_gen3_thermal_read()
102 static inline void rcar_gen3_thermal_write(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_write() argument
105 iowrite32(data, tsc->base + reg); in rcar_gen3_thermal_write()
136 static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_calc_coefs() argument
146 tsc->tj_t = (FIXPT_INT((ptat[1] - ptat[2]) * (ths_tj_1 - TJ_3)) in rcar_gen3_thermal_calc_coefs()
149 tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]), in rcar_gen3_thermal_calc_coefs()
150 tsc->tj_t - FIXPT_INT(TJ_3)); in rcar_gen3_thermal_calc_coefs()
151 tsc->coef.b1 = FIXPT_INT(thcode[2]) - tsc->coef.a1 * TJ_3; in rcar_gen3_thermal_calc_coefs()
153 tsc->coef.a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]), in rcar_gen3_thermal_calc_coefs()
154 tsc->tj_t - FIXPT_INT(ths_tj_1)); in rcar_gen3_thermal_calc_coefs()
155 tsc->coef.b2 = FIXPT_INT(thcode[0]) - tsc->coef.a2 * ths_tj_1; in rcar_gen3_thermal_calc_coefs()
170 struct rcar_gen3_thermal_tsc *tsc = devdata; in rcar_gen3_thermal_get_temp() local
175 reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK; in rcar_gen3_thermal_get_temp()
177 if (reg <= thcodes[tsc->id][1]) in rcar_gen3_thermal_get_temp()
178 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b1, in rcar_gen3_thermal_get_temp()
179 tsc->coef.a1); in rcar_gen3_thermal_get_temp()
181 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b2, in rcar_gen3_thermal_get_temp()
182 tsc->coef.a2); in rcar_gen3_thermal_get_temp()
193 static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_mcelsius_to_temp() argument
199 if (celsius <= INT_FIXPT(tsc->tj_t)) in rcar_gen3_thermal_mcelsius_to_temp()
200 val = celsius * tsc->coef.a1 + tsc->coef.b1; in rcar_gen3_thermal_mcelsius_to_temp()
202 val = celsius * tsc->coef.a2 + tsc->coef.b2; in rcar_gen3_thermal_mcelsius_to_temp()
209 struct rcar_gen3_thermal_tsc *tsc = devdata; in rcar_gen3_thermal_set_trips() local
214 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP1, in rcar_gen3_thermal_set_trips()
215 rcar_gen3_thermal_mcelsius_to_temp(tsc, low)); in rcar_gen3_thermal_set_trips()
220 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP2, in rcar_gen3_thermal_set_trips()
221 rcar_gen3_thermal_mcelsius_to_temp(tsc, high)); in rcar_gen3_thermal_set_trips()
224 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, irqmsk); in rcar_gen3_thermal_set_trips()
256 static void rcar_gen3_thermal_init_r8a7795es1(struct rcar_gen3_thermal_tsc *tsc) in rcar_gen3_thermal_init_r8a7795es1() argument
258 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_THBGR); in rcar_gen3_thermal_init_r8a7795es1()
259 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, 0x0); in rcar_gen3_thermal_init_r8a7795es1()
263 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_PONM); in rcar_gen3_thermal_init_r8a7795es1()
265 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0x3F); in rcar_gen3_thermal_init_r8a7795es1()
266 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0); in rcar_gen3_thermal_init_r8a7795es1()
267 if (tsc->zone->ops->set_trips) in rcar_gen3_thermal_init_r8a7795es1()
268 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, in rcar_gen3_thermal_init_r8a7795es1()
271 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, in rcar_gen3_thermal_init_r8a7795es1()
276 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, in rcar_gen3_thermal_init_r8a7795es1()
283 static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc) in rcar_gen3_thermal_init() argument
287 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR); in rcar_gen3_thermal_init()
289 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val); in rcar_gen3_thermal_init()
293 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0); in rcar_gen3_thermal_init()
294 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0); in rcar_gen3_thermal_init()
295 if (tsc->zone->ops->set_trips) in rcar_gen3_thermal_init()
296 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, in rcar_gen3_thermal_init()
299 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR); in rcar_gen3_thermal_init()
301 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val); in rcar_gen3_thermal_init()
425 struct rcar_gen3_thermal_tsc *tsc; in rcar_gen3_thermal_probe() local
431 tsc = devm_kzalloc(dev, sizeof(*tsc), GFP_KERNEL); in rcar_gen3_thermal_probe()
432 if (!tsc) { in rcar_gen3_thermal_probe()
437 tsc->base = devm_ioremap_resource(dev, res); in rcar_gen3_thermal_probe()
438 if (IS_ERR(tsc->base)) { in rcar_gen3_thermal_probe()
439 ret = PTR_ERR(tsc->base); in rcar_gen3_thermal_probe()
442 tsc->id = i; in rcar_gen3_thermal_probe()
444 priv->tscs[i] = tsc; in rcar_gen3_thermal_probe()
446 zone = devm_thermal_zone_of_sensor_register(dev, i, tsc, in rcar_gen3_thermal_probe()
453 tsc->zone = zone; in rcar_gen3_thermal_probe()
455 priv->thermal_init(tsc); in rcar_gen3_thermal_probe()
456 rcar_gen3_thermal_calc_coefs(tsc, ptat, thcodes[i], *ths_tj_1); in rcar_gen3_thermal_probe()
458 tsc->zone->tzp->no_hwmon = false; in rcar_gen3_thermal_probe()
459 ret = thermal_add_hwmon_sysfs(tsc->zone); in rcar_gen3_thermal_probe()
467 ret = of_thermal_get_ntrips(tsc->zone); in rcar_gen3_thermal_probe()
471 dev_info(dev, "TSC%u: Loaded %d trip points\n", i, ret); in rcar_gen3_thermal_probe()
495 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; in rcar_gen3_thermal_resume() local
496 struct thermal_zone_device *zone = tsc->zone; in rcar_gen3_thermal_resume()
498 priv->thermal_init(tsc); in rcar_gen3_thermal_resume()
500 rcar_gen3_thermal_set_trips(tsc, zone->prev_low_trip, in rcar_gen3_thermal_resume()