summaryrefslogtreecommitdiff
path: root/common/acpi.c
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2013-12-12 11:03:17 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-12-13 01:13:44 +0000
commitd3fdf5e6f3243484328d3d954a1924b355ff9c21 (patch)
tree209bbeb6cc1f4e65457f2600d11a51ef04f5ef09 /common/acpi.c
parentdf50fccf8e87bbf0328e58bd012b577bd4c7658a (diff)
downloadchrome-ec-d3fdf5e6f3243484328d3d954a1924b355ff9c21.tar.gz
Add stubs for DPTF thermal thresholds
This adds three new registers to the ACPI->EC interface, which will allow the AP to set/clear two DPTF thermal threshold points for each temp sensor. The registers are EC_ACPI_MEM_TEMP_ID 0x05 EC_ACPI_MEM_TEMP_THRESHOLD 0x06 EC_ACPI_MEM_TEMP_COMMIT 0x07 It doesn't actually do anything yet, but the AP can now write those values. BUG=chrome-os-partner:23970 BRANCH=none TEST=manual On the host: dptf() { [ "$#" -eq "2" ] || return; iotools io_write8 0x66 0x81 iotools io_write8 0x62 $1 iotools io_write8 0x62 $2 } Now watch the EC console while running on the host: dptf 5 1 dptf 6 80 dptf 7 2 dptf 7 3 The EC should say DPTF sensor 1, threshold 7 C, index 0, enabled DPTF sensor 1, threshold 7 C, index 1, enabled Change-Id: I71fa57e3ca7c7b5bb8892e63212bf294b44dece5 Signed-off-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/179778 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/acpi.c')
-rw-r--r--common/acpi.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/common/acpi.c b/common/acpi.c
index 942dd21dd2..68c281b6e6 100644
--- a/common/acpi.c
+++ b/common/acpi.c
@@ -20,6 +20,11 @@ static uint8_t acpi_addr; /* First byte of data after ACPI command */
static int acpi_data_count; /* Number of data writes after command */
static uint8_t acpi_mem_test; /* Test byte in ACPI memory space */
+#ifdef CONFIG_TEMP_SENSOR
+static int dptf_temp_sensor_id; /* last sensor ID written */
+static int dptf_temp_threshold; /* last threshold written */
+#endif
+
/* This handles AP writes to the EC via the ACPI I/O port. There are only a few
* ACPI commands (EC_CMD_ACPI_*), but they are all handled here.
*/
@@ -27,8 +32,7 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
{
int data = 0;
int retval = 0;
-
- CPRINTF("[HEY: %T %s(%d, 0x%x)]\n", is_cmd, value);
+ int result = 0xff; /* value for bogus read */
/* Read command/data; this clears the FRMH status bit. */
if (is_cmd) {
@@ -47,8 +51,6 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
/* Process complete commands */
if (acpi_cmd == EC_CMD_ACPI_READ && acpi_data_count == 1) {
/* ACPI read cmd + addr */
- int result = 0xff; /* value for bogus read */
-
switch (acpi_addr) {
case EC_ACPI_MEM_VERSION:
result = EC_ACPI_MEM_VERSION_CURRENT;
@@ -61,29 +63,20 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
break;
#ifdef CONFIG_PWM_KBLIGHT
case EC_ACPI_MEM_KEYBOARD_BACKLIGHT:
- /*
- * TODO(crosbug.com/p/23774): not very satisfying that
- * LPC knows directly about the keyboard backlight, but
- * for now this is good enough and less code than
- * defining a new API for ACPI commands. If we start
- * adding more commands, or need to support LPC on more
- * than just LM4, fix this.
- */
result = pwm_get_duty(PWM_CH_KBLIGHT);
break;
#endif
#ifdef CONFIG_FANS
case EC_ACPI_MEM_FAN_DUTY:
- /** TODO(crosbug.com/p/23774): Fix this too */
result = dptf_get_fan_duty_target();
break;
#endif
default:
+ CPRINTF("[%T ACPI read 0x%02x (ignored)]\n", acpi_addr);
break;
}
/* Send the result byte */
- CPRINTF("[%T ACPI read 0x%02x = 0x%02x]\n", acpi_addr, result);
*resultptr = result;
retval = 1;
@@ -91,7 +84,6 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
/* ACPI write cmd + addr + data */
switch (acpi_addr) {
case EC_ACPI_MEM_TEST:
- CPRINTF("[%T ACPI mem test 0x%02x]\n", data);
acpi_mem_test = data;
break;
#ifdef CONFIG_PWM_KBLIGHT
@@ -107,12 +99,28 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
#endif
#ifdef CONFIG_FANS
case EC_ACPI_MEM_FAN_DUTY:
- /** TODO(crosbug.com/p/23774): Fix this too */
dptf_set_fan_duty_target(data);
break;
#endif
+#ifdef CONFIG_TEMP_SENSOR
+ case EC_ACPI_MEM_TEMP_ID:
+ dptf_temp_sensor_id = data;
+ break;
+ case EC_ACPI_MEM_TEMP_THRESHOLD:
+ dptf_temp_threshold = data + EC_TEMP_SENSOR_OFFSET;
+ break;
+ case EC_ACPI_MEM_TEMP_COMMIT:
+ {
+ int idx = data & EC_ACPI_MEM_TEMP_COMMIT_SELECT_MASK;
+ int enable = data & EC_ACPI_MEM_TEMP_COMMIT_ENABLE_MASK;
+ dptf_set_temp_threshold(dptf_temp_sensor_id,
+ dptf_temp_threshold,
+ idx, enable);
+ break;
+ }
+#endif
default:
- CPRINTF("[%T ACPI write 0x%02x = 0x%02x]\n",
+ CPRINTF("[%T ACPI write 0x%02x = 0x%02x (ignored)]\n",
acpi_addr, data);
break;
}