diff options
author | Peter Marheine <pmarheine@chromium.org> | 2021-01-29 15:19:04 +1100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-01 00:42:07 +0000 |
commit | 0c149069f805a7858e7c3074d97f29949106138c (patch) | |
tree | 73a6e262142af8a91a22731ed58ca878b30f6e4e /baseboard/zork/cbi_ssfc.c | |
parent | 42eb485a06a851ebc3a7ea35dbb4498fcf3c61ac (diff) | |
download | chrome-ec-0c149069f805a7858e7c3074d97f29949106138c.tar.gz |
zork: add SSFC field for auto-mode speaker amp
This also converts the union with bitfields to explicit bit positions:
it's difficult to tell which bits are actually which when using bitfields,
because bitfield layout is implementation-defined (and in practice depends
on target endianness when building with GCC).
BUG=b:177971830
TEST=builds
BRANCH=zork
Signed-off-by: Peter Marheine <pmarheine@chromium.org>
Change-Id: I703571e2bbad51cceac809624f14cf1e6118a899
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2657901
Reviewed-by: Edward Hill <ecgh@chromium.org>
Diffstat (limited to 'baseboard/zork/cbi_ssfc.c')
-rw-r--r-- | baseboard/zork/cbi_ssfc.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/baseboard/zork/cbi_ssfc.c b/baseboard/zork/cbi_ssfc.c index cf1001e5c2..29b505fb26 100644 --- a/baseboard/zork/cbi_ssfc.c +++ b/baseboard/zork/cbi_ssfc.c @@ -12,20 +12,25 @@ #define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args) /* Cache SSFC on init since we don't expect it to change in runtime */ -static union zork_cbi_ssfc cached_ssfc; -BUILD_ASSERT(sizeof(cached_ssfc) == sizeof(uint32_t)); +static uint32_t cached_ssfc; static void cbi_ssfc_init(void) { - if (cbi_get_ssfc(&cached_ssfc.raw_value) != EC_SUCCESS) + if (cbi_get_ssfc(&cached_ssfc) != EC_SUCCESS) /* Default to 0 when CBI isn't populated */ - cached_ssfc.raw_value = 0; + cached_ssfc = 0; - CPRINTS("Read CBI SSFC : 0x%04X", cached_ssfc.raw_value); + CPRINTS("Read CBI SSFC : 0x%04X", cached_ssfc); } DECLARE_HOOK(HOOK_INIT, cbi_ssfc_init, HOOK_PRIO_FIRST); enum ec_ssfc_base_gyro_sensor get_cbi_ssfc_base_sensor(void) { - return cached_ssfc.base_sensor; + return (cached_ssfc & SSFC_BASE_GYRO_MASK) >> SSFC_BASE_GYRO_OFFSET; +} + +enum ec_ssfc_spkr_auto_mode get_cbi_ssfc_spkr_auto_mode(void) +{ + return (cached_ssfc & SSFC_SPKR_AUTO_MODE_MASK) >> + SSFC_SPKR_AUTO_MODE_OFFSET; } |