u-boot/drivers/misc
Alper Nebi Yasak 6900797678 cros_ec: Support keyboard scanning with EC_CMD_GET_NEXT_EVENT
The cros_ec_keyb driver currently uses EC_CMD_MKBP_STATE to scan the
keyboard, but this host command was superseded by EC_CMD_GET_NEXT_EVENT
and unavailable on more recent devices (including gru-kevin), as it was
removed in cros-ec commit 87a071941b89 ("mkbp: Add support for buttons
and switches.") dated 2016-07-06.

The EC_CMD_GET_NEXT_EVENT has been available since cros-ec commit
d1ed75815efe ("MKBP event signalling implementation") dated 2014-10-20,
but it looks like it isn't included in firmware-* branches for at least
link, nyan-big, samus, snow, spring, panther and peach-pit which have
defconfigs in U-Boot. So this patch falls back to the old method if the
EC doesn't recognize the newer command.

The implementation is mostly adapted from Depthcharge commit
f88af26b44fc ("cros_ec: Change keyboard scanning method.").

On a gru-kevin, the current driver before this patch fails to read the
pressed keys with:

    out: cmd=0x60: 03 9d 60 00 00 00 00 00
    in-header: 03 fc 01 00 00 00 00 00
    in-data:
    ec_command_inptr: len=-1, din=0000000000000000
    check_for_keys: keyboard scan failed

However the keyboard works fine with the newer command:

    out: cmd=0x67: 03 96 67 00 00 00 00 00
    in-header: 03 ef 00 00 0e 00 00 00
    in-data: 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ec_command_inptr: len=14, din=00000000f412df30
    key_matrix_decode: num_keys = 0
      0 valid keycodes found
    out: cmd=0x67: 03 96 67 00 00 00 00 00
    in-header: 03 df 00 00 0e 00 00 00
    in-data: 00 00 00 00 00 00 00 00 00 00 00 00 10 00
    ec_command_inptr: len=14, din=00000000f412df30
    key_matrix_decode: num_keys = 1
      valid=1, row=4, col=11
        keycode=28
      1 valid keycodes found
     {0d}

Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2020-11-05 09:11:31 -07:00
..
imx8 treewide: convert devfdt_get_addr() to dev_read_addr() 2020-07-25 14:46:57 -06:00
ali512x.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
altera_sysid.c treewide: convert devfdt_get_addr() to dev_read_addr() 2020-07-25 14:46:57 -06:00
atsha204a-i2c.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
cbmem_console.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
cros_ec.c cros_ec: Support keyboard scanning with EC_CMD_GET_NEXT_EVENT 2020-11-05 09:11:31 -07:00
cros_ec_i2c.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
cros_ec_lpc.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
cros_ec_sandbox.c drivers: rename drivers to match compatible string 2020-07-09 18:57:22 -06:00
cros_ec_spi.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
ds4510.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ds4510.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
esm_pmic.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
fs_loader.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
fsl_devdis.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
fsl_ifc.c common: Drop part.h from common header 2020-05-18 17:33:33 -04:00
fsl_iim.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
fsl_portals.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
fsl_sec_mon.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
gdsys_ioep.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
gdsys_ioep.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
gdsys_rxaui_ctrl.c gdsys_rxaui_ctrl: Use new regmap interface 2019-05-21 07:52:34 +02:00
gdsys_soc.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
gdsys_soc.h misc: Add gdsys_soc driver 2018-11-14 09:16:27 -08:00
gpio_led.c status_led: Kconfig migration 2017-01-21 15:12:33 -05:00
i2c_eeprom.c i2c: eeprom: Use reg property instead of offset and size 2020-08-20 09:49:20 +02:00
i2c_eeprom_emul.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
ihs_fpga.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
ihs_fpga.h misc: Add IHS FPGA driver 2018-11-14 09:16:27 -08:00
irq-uclass.c dm: Use driver_info index instead of pointer 2020-10-29 14:42:18 -06:00
irq_sandbox.c irq: Add a method to convert an interrupt to ACPI 2020-07-17 14:32:24 +08:00
jz4780_efuse.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
k3_avs.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
k3_esm.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
Kconfig xilinx: common: Move ZYNQ_GEM_I2C_MAC_OFFSET to board Kconfig 2020-10-27 08:13:32 +01:00
Makefile misc: add driver for the SiFive otp controller 2020-06-04 09:44:08 +08:00
mc9sdz60.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
microchip_flexcom.c treewide: convert devfdt_get_addr() to dev_read_addr() 2020-07-25 14:46:57 -06:00
misc-uclass.c misc: Allow child devices 2019-02-09 12:50:22 -07:00
misc_sandbox.c misc: Update read() and write() methods to return bytes xfered 2018-11-20 19:14:22 -07:00
mpc83xx_serdes.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
mpc83xx_serdes.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
mxc_ocotp.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
mxs_ocotp.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
nuvoton_nct6102d.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
p2sb-uclass.c x86: apl: Take advantage of the of-platdata parent support 2020-10-29 14:42:18 -06:00
p2sb_emul.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
p2sb_sandbox.c sandbox: Add PCI driver and test for p2sb 2019-12-15 11:44:11 +08:00
pca9551_led.c common: Drop global inclusion of status_led.h 2019-12-02 18:23:06 -05:00
pwrseq-uclass.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
qfw.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
rockchip-efuse.c command: Remove the cmd_tbl_t typedef 2020-05-18 18:36:55 -04:00
rockchip-otp.c misc: add driver for the Rockchip otp controller 2019-11-17 17:23:15 +08:00
sandbox_adder.c sandbox: Add PCI driver and test for p2sb 2019-12-15 11:44:11 +08:00
sifive-otp.c misc: add driver for the SiFive otp controller 2020-06-04 09:44:08 +08:00
smsc_lpc47m.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
smsc_sio1007.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
spltest_sandbox.c dm: test: Drop of-platdata pytest 2020-10-29 14:42:18 -06:00
status_led.c status_led: Tidy up the code style 2019-12-02 18:23:06 -05:00
stm32_rcc.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
stm32mp_fuse.c pmu: stpmic1: change specific NVM api to MISC 2019-08-27 11:19:23 +02:00
swap_case.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
syscon_sandbox.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
tegra186_bpmp.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
tegra_car.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
twl4030_led.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
vexpress_config.c common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
winbond_w83627.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00