| /* Copyright 2015 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* Thermistor module for Chrome EC */ |
| |
| #ifndef __CROS_EC_TEMP_SENSOR_THERMISTOR_H |
| #define __CROS_EC_TEMP_SENSOR_THERMISTOR_H |
| |
| struct thermistor_data_pair { |
| uint8_t mv; /* Scaled voltage level at ADC (in mV) */ |
| uint8_t temp; /* Temperature in Celsius */ |
| }; |
| |
| struct thermistor_info { |
| uint8_t scaling_factor; /* Scaling factor for voltage in data pair. */ |
| uint8_t num_pairs; /* Number of data pairs. */ |
| |
| /* |
| * Values between given data pairs will be calculated as points on |
| * a line. Pairs can be derived using the Steinhart-Hart equation. |
| * |
| * Guidelines for data sets: |
| * - Must contain at least two pairs. |
| * - First and last pairs are the max and min. |
| * - Pairs must be sorted in descending order. |
| * - 5 pairs should provide reasonable accuracy in most cases. Use |
| * points where the slope changes significantly or to recalibrate |
| * the algorithm if needed. |
| */ |
| const struct thermistor_data_pair *data; |
| }; |
| |
| /** |
| * @brief Calculate temperature using linear interpolation of data points. |
| * |
| * Given a set of datapoints, the algorithm will calculate the "step" in |
| * between each one in order to interpolate missing entries. |
| * |
| * @param mv Value read from ADC (in millivolts). |
| * @param info Reference data set and info. |
| * |
| * @return temperature in C |
| */ |
| int thermistor_linear_interpolate(uint16_t mv, |
| const struct thermistor_info *info); |
| |
| /** |
| * ncp15wb temperature conversion routine. |
| * |
| * @param adc 10bit raw data on adc. |
| * |
| * @return temperature in C. |
| */ |
| int ncp15wb_calculate_temp(uint16_t adc); |
| |
| #endif /* __CROS_EC_TEMP_SENSOR_THERMISTOR_NCP15WB_H */ |