Lines Matching +full:tsens +full:- +full:v2

1 // SPDX-License-Identifier: GPL-2.0
9 #include <linux/nvmem-consumer.h>
11 #include "tsens.h"
13 /* ----- SROT ------ */
34 /* ----- TM ------ */
48 /* v2.x: 8996, 8998, sdm845 */
57 .trip_min_temp = -40000,
84 /* ----- SROT ------ */
97 /* ----- TM ------ */
99 /* v2 has separate enables for UPPER/LOWER/CRITICAL interrupts */
118 /* WATCHDOG on v2.3 or later */
152 ret = snprintf(name, sizeof(name), "tsens_sens%d_off", sensor->hw_id); in tsens_v2_calibrate_sensor()
156 ret = nvmem_cell_read_variable_le_u32(dev, name, &sensor->offset); in tsens_v2_calibrate_sensor()
163 slope = (TWO_PT_SHIFTED_GAIN / (base1 - base0)); in tsens_v2_calibrate_sensor()
165 czero = (base0 + sensor->offset - ((base1 - base0) / 3)); in tsens_v2_calibrate_sensor()
169 czero = base0 + sensor->offset - ONE_PT_CZERO_CONST; in tsens_v2_calibrate_sensor()
182 regmap_write(map, SENSOR_CONVERSION(sensor->hw_id), val); in tsens_v2_calibrate_sensor()
189 struct device *dev = priv->dev; in tsens_v2_calibration()
193 if (priv->num_sensors > MAX_SENSORS) in tsens_v2_calibration()
194 return -EINVAL; in tsens_v2_calibration()
196 ret = nvmem_cell_read_variable_le_u32(priv->dev, "mode", &mode); in tsens_v2_calibration()
197 if (ret == -ENOENT) in tsens_v2_calibration()
198 dev_warn(priv->dev, "Calibration data not present in DT\n"); in tsens_v2_calibration()
202 dev_dbg(priv->dev, "calibration mode is %d\n", mode); in tsens_v2_calibration()
204 ret = nvmem_cell_read_variable_le_u32(priv->dev, "base0", &base0); in tsens_v2_calibration()
208 ret = nvmem_cell_read_variable_le_u32(priv->dev, "base1", &base1); in tsens_v2_calibration()
213 for (i = 0; i < priv->num_sensors; i++) { in tsens_v2_calibration()
214 ret = tsens_v2_calibrate_sensor(dev, &priv->sensor[i], priv->srot_map, in tsens_v2_calibration()
225 struct device *dev = priv->dev; in init_tsens_v2_no_rpm()
233 priv->rf[CODE_OR_TEMP] = devm_regmap_field_alloc(dev, priv->srot_map, in init_tsens_v2_no_rpm()
234 priv->fields[CODE_OR_TEMP]); in init_tsens_v2_no_rpm()
235 if (IS_ERR(priv->rf[CODE_OR_TEMP])) in init_tsens_v2_no_rpm()
236 return PTR_ERR(priv->rf[CODE_OR_TEMP]); in init_tsens_v2_no_rpm()
238 priv->rf[MAIN_MEASURE_PERIOD] = devm_regmap_field_alloc(dev, priv->srot_map, in init_tsens_v2_no_rpm()
239 priv->fields[MAIN_MEASURE_PERIOD]); in init_tsens_v2_no_rpm()
240 if (IS_ERR(priv->rf[MAIN_MEASURE_PERIOD])) in init_tsens_v2_no_rpm()
241 return PTR_ERR(priv->rf[MAIN_MEASURE_PERIOD]); in init_tsens_v2_no_rpm()
243 regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_ASSERT); in init_tsens_v2_no_rpm()
245 regmap_field_write(priv->rf[MAIN_MEASURE_PERIOD], MEASURE_PERIOD_2mSEC); in init_tsens_v2_no_rpm()
248 for (i = 0; i < priv->num_sensors; i++) in init_tsens_v2_no_rpm()
249 val |= 1 << priv->sensor[i].hw_id; in init_tsens_v2_no_rpm()
251 regmap_field_write(priv->rf[SENSOR_EN], val); in init_tsens_v2_no_rpm()
253 /* Select temperature format, unit is deci-Celsius */ in init_tsens_v2_no_rpm()
254 regmap_field_write(priv->rf[CODE_OR_TEMP], RESULT_FORMAT_TEMP); in init_tsens_v2_no_rpm()
256 regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_DEASSERT); in init_tsens_v2_no_rpm()
258 regmap_field_write(priv->rf[TSENS_EN], TSENS_ENABLE); in init_tsens_v2_no_rpm()