Lines Matching refs:tsc

91 	void (*thermal_init)(struct rcar_gen3_thermal_tsc *tsc);
94 static inline u32 rcar_gen3_thermal_read(struct rcar_gen3_thermal_tsc *tsc,
97 return ioread32(tsc->base + reg);
100 static inline void rcar_gen3_thermal_write(struct rcar_gen3_thermal_tsc *tsc,
103 iowrite32(data, tsc->base + reg);
134 static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc,
144 tsc->tj_t = (FIXPT_INT((ptat[1] - ptat[2]) * (ths_tj_1 - TJ_3))
147 tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]),
148 tsc->tj_t - FIXPT_INT(TJ_3));
149 tsc->coef.b1 = FIXPT_INT(thcode[2]) - tsc->coef.a1 * TJ_3;
151 tsc->coef.a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]),
152 tsc->tj_t - FIXPT_INT(ths_tj_1));
153 tsc->coef.b2 = FIXPT_INT(thcode[0]) - tsc->coef.a2 * ths_tj_1;
168 struct rcar_gen3_thermal_tsc *tsc = devdata;
173 reg = rcar_gen3_thermal_read(tsc, REG_GEN3_TEMP) & CTEMP_MASK;
175 if (reg <= thcodes[tsc->id][1])
176 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b1,
177 tsc->coef.a1);
179 val = FIXPT_DIV(FIXPT_INT(reg) - tsc->coef.b2,
180 tsc->coef.a2);
191 static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc,
197 if (celsius <= INT_FIXPT(tsc->tj_t))
198 val = celsius * tsc->coef.a1 + tsc->coef.b1;
200 val = celsius * tsc->coef.a2 + tsc->coef.b2;
205 static int rcar_gen3_thermal_update_range(struct rcar_gen3_thermal_tsc *tsc)
209 rcar_gen3_thermal_get_temp(tsc, &temperature);
214 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP1,
215 rcar_gen3_thermal_mcelsius_to_temp(tsc, low));
217 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQTEMP2,
218 rcar_gen3_thermal_mcelsius_to_temp(tsc, high));
260 static void rcar_gen3_thermal_init_r8a7795es1(struct rcar_gen3_thermal_tsc *tsc)
262 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_THBGR);
263 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, 0x0);
267 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR, CTSR_PONM);
269 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0x3F);
270 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0);
271 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, IRQ_TEMPD1 | IRQ_TEMP2);
273 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR,
278 rcar_gen3_thermal_write(tsc, REG_GEN3_CTSR,
285 static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc)
289 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR);
291 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val);
295 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0);
296 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0);
297 rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN, IRQ_TEMPD1 | IRQ_TEMP2);
299 reg_val = rcar_gen3_thermal_read(tsc, REG_GEN3_THCTR);
301 rcar_gen3_thermal_write(tsc, REG_GEN3_THCTR, reg_val);
415 struct rcar_gen3_thermal_tsc *tsc;
421 tsc = devm_kzalloc(dev, sizeof(*tsc), GFP_KERNEL);
422 if (!tsc) {
427 tsc->base = devm_ioremap_resource(dev, res);
428 if (IS_ERR(tsc->base)) {
429 ret = PTR_ERR(tsc->base);
432 tsc->id = i;
434 priv->tscs[i] = tsc;
436 priv->thermal_init(tsc);
437 rcar_gen3_thermal_calc_coefs(tsc, ptat, thcodes[i], *ths_tj_1);
439 zone = devm_thermal_zone_of_sensor_register(dev, i, tsc,
446 tsc->zone = zone;
448 tsc->zone->tzp->no_hwmon = false;
449 ret = thermal_add_hwmon_sysfs(tsc->zone);
457 ret = of_thermal_get_ntrips(tsc->zone);
461 rcar_gen3_thermal_update_range(tsc);
498 struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i];
500 priv->thermal_init(tsc);
501 rcar_gen3_thermal_update_range(tsc);