/* SPDX-License-Identifier: GPL-2.0-only */ #include <ec/acpi/ec.h> #include "h8.h" /** * Return the EC sense status register state. * * Observations showed the sense registers are all zero until the EC populates * them after some time. Likely the EC sets all bits to it's valid state at * once, but there's no prove as the firmware isn't available. * * Wait for any register having at least one bit set. * Unlikely that all register will be zero after booting has finished. * * @return 1 if the EC provides valid data in sense status registers */ int h8_get_sense_ready(void) { static const u8 regs[] = { H8_STATUS0, H8_STATUS1, H8_STATUS2, H8_STATUS3}; for (size_t i = 0; i < ARRAY_SIZE(regs); i++) { if (ec_read(regs[i])) return 1; } return 0; } /** * Return the state of Fn key. * Only valid if h8_get_sense_ready (see above) returns true. * * @return 1 if the key is pressed. */ int h8_get_fn_key(void) { return ec_read(H8_STATUS0) & H8_STATUS0_FN_KEY_DOWN; }