diff options
author | Furquan Shaikh <furquan@google.com> | 2018-10-19 16:23:50 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-11-15 02:16:01 -0800 |
commit | 3b41a2b157de0a48160745d632163f7cc400c49b (patch) | |
tree | fefc319a4736bbc9564ac55b3fb2cdb51b5ae6b7 /common/acpi.c | |
parent | 5b749cf03594ec652ad8b52e24a31db95b9d4634 (diff) | |
download | chrome-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.c | 51 |
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: |