summaryrefslogtreecommitdiff
path: root/baseboard/zork/cbi_ssfc.c
diff options
context:
space:
mode:
authorPeter Marheine <pmarheine@chromium.org>2021-01-29 15:19:04 +1100
committerCommit Bot <commit-bot@chromium.org>2021-02-01 00:42:07 +0000
commit0c149069f805a7858e7c3074d97f29949106138c (patch)
tree73a6e262142af8a91a22731ed58ca878b30f6e4e /baseboard/zork/cbi_ssfc.c
parent42eb485a06a851ebc3a7ea35dbb4498fcf3c61ac (diff)
downloadchrome-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.c17
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;
}