diff options
author | loganliao <Logan_Liao@compal.corp-partner.google.com> | 2020-02-18 09:29:18 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-13 04:39:11 +0000 |
commit | feda8a46e7a35d364c2cc5d5146de6ca24fea0e0 (patch) | |
tree | 68f70b33053f88dd2b89c0cccece90c3c7c261e5 | |
parent | 85016d46504baed5735be70d477874bc7d3a0ede (diff) | |
download | chrome-ec-feda8a46e7a35d364c2cc5d5146de6ca24fea0e0.tar.gz |
Mushu : Add GPU temperature sensor driver
Add GPU temperature sensor driver in driver/temp_sensor for temperature
read .
BUG=b:148968367
BRANCH=none
TEST=make BOARD=mushu
Change-Id: Ide1613597dbb3712637649c098a7b804370f5e02
Signed-off-by: loganliao <Logan_Liao@compal.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2062117
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Logan Liao <logan_liao@compal.corp-partner.google.com>
Commit-Queue: Logan Liao <logan_liao@compal.corp-partner.google.com>
Tested-by: Logan Liao <logan_liao@compal.corp-partner.google.com>
-rw-r--r-- | driver/build.mk | 1 | ||||
-rw-r--r-- | driver/temp_sensor/amd_r19me4070.c | 76 | ||||
-rw-r--r-- | driver/temp_sensor/amd_r19me4070.h | 20 | ||||
-rw-r--r-- | include/config.h | 1 |
4 files changed, 98 insertions, 0 deletions
diff --git a/driver/build.mk b/driver/build.mk index 3950df93f8..fcc8c9334c 100644 --- a/driver/build.mk +++ b/driver/build.mk @@ -109,6 +109,7 @@ driver-$(CONFIG_TEMP_SENSOR_TMP112)+=temp_sensor/tmp112.o driver-$(CONFIG_TEMP_SENSOR_TMP411)+=temp_sensor/tmp411.o driver-$(CONFIG_TEMP_SENSOR_TMP432)+=temp_sensor/tmp432.o driver-$(CONFIG_TEMP_SENSOR_TMP468)+=temp_sensor/tmp468.o +driver-$(CONFIG_TEMP_SENSOR_AMD_R19ME4070)+=temp_sensor/amd_r19me4070.o # Touchpads driver-$(CONFIG_TOUCHPAD_GT7288)+=touchpad_gt7288.o diff --git a/driver/temp_sensor/amd_r19me4070.c b/driver/temp_sensor/amd_r19me4070.c new file mode 100644 index 0000000000..5da1129052 --- /dev/null +++ b/driver/temp_sensor/amd_r19me4070.c @@ -0,0 +1,76 @@ +/* Copyright 2020 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. + */ + +/* R19ME4070 temperature sensor module for Chrome EC */ + +#include "chipset.h" +#include "common.h" +#include "console.h" +#include "hooks.h" +#include "i2c.h" +#include "amd_r19me4070.h" + +#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) +#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) + +/* GPU I2C address */ +#define GPU_ADDR_FLAGS 0x82 + +/* + * Tell SMBus slave which register to read before GPU read + * temperature, call it "GPU INIT". + */ +#define GPU_INIT_OFFSET 0x01 +#define GPU_TEMPERATURE_OFFSET 0x03 +#define GPU_INIT_WRITE_VALUE 0x0F01665A + +static int initialized; + +static int read_gpu_temp(int *temp) +{ + return i2c_read32(I2C_PORT_GPU, GPU_ADDR_FLAGS, GPU_TEMPERATURE_OFFSET, + temp); +} + +static void gpu_init_temp_sensor(void) +{ + int rv; + + rv = i2c_write32(I2C_PORT_GPU, GPU_ADDR_FLAGS, GPU_INIT_OFFSET, + GPU_INIT_WRITE_VALUE); + if (rv == EC_SUCCESS) { + initialized = 1; + return; + } + CPRINTS("init GPU fail"); +} +DECLARE_HOOK(HOOK_INIT, gpu_init_temp_sensor, HOOK_PRIO_INIT_I2C + 1); + +/* INIT GPU first before read the GPU's die tmeperature. */ +int get_temp_R19ME4070(int idx, int *temp_ptr) +{ + int reg, rv; + + /* if no INIT GPU, must init it first and wait 1 sec. */ + if (!initialized) { + gpu_init_temp_sensor(); + return EC_ERROR_BUSY; + } + rv = read_gpu_temp(®); + if (rv) { + CPRINTS("read GPU Temperature fail"); + return rv; + } + /* + * The register is four bytes, bit[17:9] represents the GPU temperature. + * 0x000 : 0 ゚C + * 0x001 : 1 ゚C + * 0x002 : 2 ゚C + * ... + * 0x1FF : 511 ゚C + */ + *temp_ptr = C_TO_K((reg >> 9) & (0x1ff)); + return EC_SUCCESS; +} diff --git a/driver/temp_sensor/amd_r19me4070.h b/driver/temp_sensor/amd_r19me4070.h new file mode 100644 index 0000000000..d3c7977ba5 --- /dev/null +++ b/driver/temp_sensor/amd_r19me4070.h @@ -0,0 +1,20 @@ +/* Copyright 2020 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. + */ + +/* GPU R19ME4070 configuration */ + +#ifndef __CROS_EC_R19ME4070_H +#define __CROS_EC_R19ME4070_H + +/* GPU features */ +#define R19ME4070_LOCAL 0 + +/* + * get GPU temperature value and move to *tem_ptr + * One second trigger ,Use I2C read GPU's Die temperature. + */ +int get_temp_R19ME4070(int idx, int *temp_ptr); + +#endif /* __CROS_EC_AMD_R19ME4070_H */ diff --git a/include/config.h b/include/config.h index 89b622cd85..85baa50193 100644 --- a/include/config.h +++ b/include/config.h @@ -3420,6 +3420,7 @@ #undef CONFIG_TEMP_SENSOR_TMP432 /* TI TMP432 sensor, on I2C bus */ #undef CONFIG_TEMP_SENSOR_TMP468 /* TI TMP468 sensor, on I2C bus */ #undef CONFIG_TEMP_SENSOR_F75303 /* Fintek F75303 sensor, on I2C bus */ +#undef CONFIG_TEMP_SENSOR_AMD_R19ME4070 /* AMD_R19ME4070 sensor, on I2C bus */ /* Compile common code for thermistor support */ #undef CONFIG_THERMISTOR |