summaryrefslogtreecommitdiff
path: root/common/acpi.c
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2018-10-19 16:23:50 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-11-15 02:16:01 -0800
commit3b41a2b157de0a48160745d632163f7cc400c49b (patch)
treefefc319a4736bbc9564ac55b3fb2cdb51b5ae6b7 /common/acpi.c
parent5b749cf03594ec652ad8b52e24a31db95b9d4634 (diff)
downloadchrome-ec-3b41a2b157de0a48160745d632163f7cc400c49b.tar.gz
dptf: Add support for DDPN
This change adds Device DPTF Profile Number(DDPN) to EC_ACPI_MEM_DEVICE_ORIENTATION field to indicate to host which DPTF profile should be loaded depending upon the device mode. This is done to de-couple DPTF table loading from tablet mode flag to allow different drivers within EC to set the profile number depending upon their design. In order to maintain backward compatibility, this change treats 0 as reserved to indicate to host that it should fall back to using tablet mode switch to decide which DPTF table to load. Additionally, it provides helper function to allow drivers to set the profile number that will be returned on host query for EC_ACPI_MEM_DEVICE_ORIENTATION. It also adds a new config option CONFIG_DPTF_MULTI_PROFILE that should be selected by the boards that support multiple DPTF profiles on the host side. CQ-DEPEND=CL:1295852 BUG=b:117844490 BRANCH=None TEST=make -j buildall Change-Id: Idfa0cfea48b9df346533342647258474fb63e86c Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://chromium-review.googlesource.com/1295851 Commit-Ready: Furquan Shaikh <furquan@chromium.org> Tested-by: Furquan Shaikh <furquan@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Duncan Laurie <dlaurie@google.com>
Diffstat (limited to 'common/acpi.c')
-rw-r--r--common/acpi.c51
1 files changed, 50 insertions, 1 deletions
diff --git a/common/acpi.c b/common/acpi.c
index 3baad4dc4d..da6795acd9 100644
--- a/common/acpi.c
+++ b/common/acpi.c
@@ -37,6 +37,17 @@ static uint8_t __bss_slow acpi_mem_test;
#ifdef CONFIG_DPTF
static int __bss_slow dptf_temp_sensor_id; /* last sensor ID written */
static int __bss_slow dptf_temp_threshold; /* last threshold written */
+
+/*
+ * Current DPTF profile number.
+ * This is by default initialized to 1 if multi-profile DPTF is not supported.
+ * If multi-profile DPTF is supported, this is by default initialized to 2 under
+ * the assumption that profile #2 corresponds to lower thresholds and is a safer
+ * profile to use until board or some EC driver sets the appropriate profile for
+ * device mode.
+ */
+static int current_dptf_profile = DPTF_PROFILE_DEFAULT;
+
#endif
#ifdef CONFIG_USB_PORT_POWER_DUMB
@@ -81,6 +92,38 @@ static void acpi_disable_burst_deferred(void)
}
DECLARE_DEFERRED(acpi_disable_burst_deferred);
+#ifdef CONFIG_DPTF
+
+static int acpi_dptf_is_profile_valid(int n)
+{
+#ifdef CONFIG_DPTF_MULTI_PROFILE
+ if ((n < DPTF_PROFILE_VALID_FIRST) || (n > DPTF_PROFILE_VALID_LAST))
+ return EC_ERROR_INVAL;
+#else
+ if (n != DPTF_PROFILE_DEFAULT)
+ return EC_ERROR_INVAL;
+#endif
+
+ return EC_SUCCESS;
+}
+
+int acpi_dptf_set_profile_num(int n)
+{
+ int ret = acpi_dptf_is_profile_valid(n);
+
+ if (ret == EC_SUCCESS)
+ current_dptf_profile = n;
+
+ return ret;
+}
+
+int acpi_dptf_get_profile_num(void)
+{
+ return current_dptf_profile;
+}
+
+#endif
+
/* Read memmapped data, returns read data or 0xff on error. */
static int acpi_read(uint8_t addr)
{
@@ -178,7 +221,13 @@ int acpi_ap_to_ec(int is_cmd, uint8_t value, uint8_t *resultptr)
#endif
case EC_ACPI_MEM_DEVICE_ORIENTATION:
- result = tablet_get_mode();
+ result = tablet_get_mode() << EC_ACPI_MEM_TBMD_SHIFT;
+
+#ifdef CONFIG_DPTF
+ result |= (acpi_dptf_get_profile_num() &
+ EC_ACPI_MEM_DDPN_MASK)
+ << EC_ACPI_MEM_DDPN_SHIFT;
+#endif
break;
case EC_ACPI_MEM_DEVICE_FEATURES0: