summaryrefslogtreecommitdiff
path: root/driver/temp_sensor
diff options
context:
space:
mode:
Diffstat (limited to 'driver/temp_sensor')
-rw-r--r--driver/temp_sensor/ec_adc.c56
-rw-r--r--driver/temp_sensor/ec_adc.h24
2 files changed, 80 insertions, 0 deletions
diff --git a/driver/temp_sensor/ec_adc.c b/driver/temp_sensor/ec_adc.c
new file mode 100644
index 0000000000..db174e33dc
--- /dev/null
+++ b/driver/temp_sensor/ec_adc.c
@@ -0,0 +1,56 @@
+/* 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.
+ */
+
+/* EC_ADC driver for Chrome EC */
+
+#include "adc.h"
+#include "common.h"
+#include "console.h"
+#include "ec_adc.h"
+#include "thermistor.h"
+#include "util.h"
+
+/* Get temperature from requested sensor */
+static int get_temp(int idx, int *temp_ptr)
+{
+ int temp_raw = 0;
+
+ /* Read 10-bit ADC result */
+ temp_raw = adc_read_channel(idx);
+
+ if (temp_raw == ADC_READ_ERROR)
+ return EC_ERROR_UNKNOWN;
+
+ /* TODO : Need modification here if the result is not 10-bit */
+
+ /* If there is no thermistor calculation function.
+ * 1. Add adjusting function like thermistor_ncp15wb.c
+ * 2. Place function here with ifdef
+ * 3. define it on board.h
+ */
+#ifdef CONFIG_THERMISTOR_NCP15WB
+ *temp_ptr = ncp15wb_calculate_temp((uint16_t) temp_raw);
+#else
+#error "Unknown thermistor for ec_adc"
+ return EC_ERROR_UNKNOWN;
+#endif
+
+ return EC_SUCCESS;
+}
+
+int ec_adc_get_val(int idx, int *temp_ptr)
+{
+ int ret;
+ int temp_c;
+
+ if(idx < 0 || idx >= ADC_CH_COUNT)
+ return EC_ERROR_INVAL;
+
+ ret = get_temp(idx, &temp_c);
+ if (ret == EC_SUCCESS)
+ *temp_ptr = C_TO_K(temp_c);
+
+ return ret;
+}
diff --git a/driver/temp_sensor/ec_adc.h b/driver/temp_sensor/ec_adc.h
new file mode 100644
index 0000000000..8ff213e95d
--- /dev/null
+++ b/driver/temp_sensor/ec_adc.h
@@ -0,0 +1,24 @@
+/* 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.
+ */
+
+/* ec_adc which uses adc and thermistors module for Chrome EC
+ * Some EC has it's own ADC modules, define here EC's max ADC channels.
+ * We can consider every channel as a thermal sensor.
+ */
+
+#ifndef __CROS_EC_TEMP_SENSOR_EC_ADC_H
+#define __CROS_EC_TEMP_SENSOR_EC_ADC_H
+
+/**
+ * Get the latest value from the sensor.
+ *
+ * @param idx ADC channel to read.
+ * @param temp_ptr Destination for temperature in K.
+ *
+ * @return EC_SUCCESS if successful, non-zero if error.
+ */
+int ec_adc_get_val(int idx, int *temp_ptr);
+
+#endif /* __CROS_EC_TEMP_SENSOR_EC_ADC_H */