blob: fc850fb64a50b27072677f909f35b6854e55fcda [file] [log] [blame]
Angel Pons210a0082020-04-02 23:48:24 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Patrick Rudolph2dc00fa2018-10-20 17:10:04 +02002
3#include <ec/acpi/ec.h>
4
5#include "h8.h"
6
7/**
8 * Return the EC sense status register state.
9 *
10 * Observations showed the sense registers are all zero until the EC populates
11 * them after some time. Likely the EC sets all bits to it's valid state at
12 * once, but there's no prove as the firmware isn't available.
13 *
14 * Wait for any register having at least one bit set.
15 * Unlikely that all register will be zero after booting has finished.
16 *
17 * @return 1 if the EC provides valid data in sense status registers
18 */
19int h8_get_sense_ready(void)
20{
21 static const u8 regs[] = { H8_STATUS0, H8_STATUS1, H8_STATUS2,
22 H8_STATUS3};
23
24 for (size_t i = 0; i < ARRAY_SIZE(regs); i++) {
25 if (ec_read(regs[i]))
26 return 1;
27 }
28
29 return 0;
30}
31
32/**
33 * Return the state of Fn key.
34 * Only valid if h8_get_sense_ready (see above) returns true.
35 *
36 * @return 1 if the key is pressed.
37 */
38int h8_get_fn_key(void)
39{
40 return ec_read(H8_STATUS0) & H8_STATUS0_FN_KEY_DOWN;
41}