Lines Matching full:tsc

91 	void (*thermal_init)(struct rcar_gen3_thermal_tsc *tsc);
95 static inline u32 rcar_gen3_thermal_read(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_read() argument
98 return ioread32(tsc->base + reg); in rcar_gen3_thermal_read()
101 static inline void rcar_gen3_thermal_write(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_write() argument
104 iowrite32(data, tsc->base + reg); in rcar_gen3_thermal_write()
136 struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_calc_coefs() argument
145 tsc->tj_t = (FIXPT_INT((priv->ptat[1] - priv->ptat[2]) * (ths_tj_1 - TJ_3)) in rcar_gen3_thermal_calc_coefs()
148 tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(tsc->thcode[1] - tsc->thcode[2]), in rcar_gen3_thermal_calc_coefs()
149 tsc->tj_t - FIXPT_INT(TJ_3)); in rcar_gen3_thermal_calc_coefs()
150 tsc->coef.b1 = FIXPT_INT(tsc->thcode[2]) - tsc->coef.a1 * TJ_3; in rcar_gen3_thermal_calc_coefs()
152 tsc->coef.a2 = FIXPT_DIV(FIXPT_INT(tsc->thcode[1] - tsc->thcode[0]), in rcar_gen3_thermal_calc_coefs()
153 tsc->tj_t - FIXPT_INT(ths_tj_1)); in rcar_gen3_thermal_calc_coefs()
154 tsc->coef.b2 = FIXPT_INT(tsc->thcode[0]) - tsc->coef.a2 * ths_tj_1; in rcar_gen3_thermal_calc_coefs()
169 struct rcar_gen3_thermal_tsc *tsc = tz->devdata; in rcar_gen3_thermal_get_temp() local
174 reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK; in rcar_gen3_thermal_get_temp()
176 if (reg <= tsc->thcode[1]) in rcar_gen3_thermal_get_temp()
177 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b1, in rcar_gen3_thermal_get_temp()
178 tsc->coef.a1); in rcar_gen3_thermal_get_temp()
180 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b2, in rcar_gen3_thermal_get_temp()
181 tsc->coef.a2); in rcar_gen3_thermal_get_temp()
192 static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc, in rcar_gen3_thermal_mcelsius_to_temp() argument
198 if (celsius <= INT_FIXPT(tsc->tj_t)) in rcar_gen3_thermal_mcelsius_to_temp()
199 val = celsius * tsc->coef.a1 + tsc->coef.b1; in rcar_gen3_thermal_mcelsius_to_temp()
201 val = celsius * tsc->coef.a2 + tsc->coef.b2; in rcar_gen3_thermal_mcelsius_to_temp()
208 struct rcar_gen3_thermal_tsc *tsc = tz->devdata; in rcar_gen3_thermal_set_trips() local
213 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP1, in rcar_gen3_thermal_set_trips()
214 rcar_gen3_thermal_mcelsius_to_temp(tsc, low)); in rcar_gen3_thermal_set_trips()
219 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP2, in rcar_gen3_thermal_set_trips()
220 rcar_gen3_thermal_mcelsius_to_temp(tsc, high)); in rcar_gen3_thermal_set_trips()
223 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, irqmsk); in rcar_gen3_thermal_set_trips()
277 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; in rcar_gen3_thermal_read_fuses() local
279 tsc->thcode[0] = thcodes[i][0]; in rcar_gen3_thermal_read_fuses()
280 tsc->thcode[1] = thcodes[i][1]; in rcar_gen3_thermal_read_fuses()
281 tsc->thcode[2] = thcodes[i][2]; in rcar_gen3_thermal_read_fuses()
290 * TSC while THCODEs are fused for each TSC. in rcar_gen3_thermal_read_fuses()
300 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; in rcar_gen3_thermal_read_fuses() local
302 tsc->thcode[0] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE1) & in rcar_gen3_thermal_read_fuses()
304 tsc->thcode[1] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE2) & in rcar_gen3_thermal_read_fuses()
306 tsc->thcode[2] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE3) & in rcar_gen3_thermal_read_fuses()
313 static void rcar_gen3_thermal_init_r8a7795es1(struct rcar_gen3_thermal_tsc *tsc) in rcar_gen3_thermal_init_r8a7795es1() argument
315 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_THBGR); in rcar_gen3_thermal_init_r8a7795es1()
316 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, 0x0); in rcar_gen3_thermal_init_r8a7795es1()
320 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_PONM); in rcar_gen3_thermal_init_r8a7795es1()
322 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0x3F); in rcar_gen3_thermal_init_r8a7795es1()
323 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0); in rcar_gen3_thermal_init_r8a7795es1()
324 if (tsc->zone->ops->set_trips) in rcar_gen3_thermal_init_r8a7795es1()
325 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, in rcar_gen3_thermal_init_r8a7795es1()
328 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, in rcar_gen3_thermal_init_r8a7795es1()
333 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, in rcar_gen3_thermal_init_r8a7795es1()
340 static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc) in rcar_gen3_thermal_init() argument
344 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR); in rcar_gen3_thermal_init()
346 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val); in rcar_gen3_thermal_init()
350 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0); in rcar_gen3_thermal_init()
351 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0); in rcar_gen3_thermal_init()
352 if (tsc->zone->ops->set_trips) in rcar_gen3_thermal_init()
353 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, in rcar_gen3_thermal_init()
356 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR); in rcar_gen3_thermal_init()
358 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val); in rcar_gen3_thermal_init()
482 struct rcar_gen3_thermal_tsc *tsc; in rcar_gen3_thermal_probe() local
488 tsc = devm_kzalloc(dev, sizeof(*tsc), GFP_KERNEL); in rcar_gen3_thermal_probe()
489 if (!tsc) { in rcar_gen3_thermal_probe()
494 tsc->base = devm_ioremap_resource(dev, res); in rcar_gen3_thermal_probe()
495 if (IS_ERR(tsc->base)) { in rcar_gen3_thermal_probe()
496 ret = PTR_ERR(tsc->base); in rcar_gen3_thermal_probe()
500 priv->tscs[i] = tsc; in rcar_gen3_thermal_probe()
509 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; in rcar_gen3_thermal_probe() local
511 zone = devm_thermal_of_zone_register(dev, i, tsc, in rcar_gen3_thermal_probe()
518 tsc->zone = zone; in rcar_gen3_thermal_probe()
520 priv->thermal_init(tsc); in rcar_gen3_thermal_probe()
521 rcar_gen3_thermal_calc_coefs(priv, tsc, *ths_tj_1); in rcar_gen3_thermal_probe()
523 tsc->zone->tzp->no_hwmon = false; in rcar_gen3_thermal_probe()
524 ret = thermal_add_hwmon_sysfs(tsc->zone); in rcar_gen3_thermal_probe()
532 ret = of_thermal_get_ntrips(tsc->zone); in rcar_gen3_thermal_probe()
558 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; in rcar_gen3_thermal_resume() local
559 struct thermal_zone_device *zone = tsc->zone; in rcar_gen3_thermal_resume()
561 priv->thermal_init(tsc); in rcar_gen3_thermal_resume()