diff options
author | tim <tim2.lin@ite.corp-partner.google.com> | 2020-02-14 11:55:48 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-17 10:24:39 +0000 |
commit | c2797a55a58678e3118aa0b95431c78f02b1ec3d (patch) | |
tree | 04290d466feeadef28ad620a22da9bca73f92b24 /board/damu | |
parent | a3cf5101156136e6a17434f57e9e521ed624eca8 (diff) | |
download | chrome-ec-c2797a55a58678e3118aa0b95431c78f02b1ec3d.tar.gz |
driver/ioexpander_it8801: add I/O expander driver for GPIO
IT8801 is an I/O expander with the gpio. Add api compatible with
ioexpander_drv so the main io expander framework can make use
of the pins on the it8801.
BUG=b/138352732, b/146996723
BRANCH=none
TEST=Use gpio.inc to declare the gpio state.
The console command #ioexget can get as follows:
0 O L IT8801_G0_00
1 O H IT8801_G0_03
1 O H IT8801_G0_04
0 O L IT8801_G0_06
0 O L IT8801_G0_07
1 O H ODR IT8801_G1_10
1 O H ODR IT8801_G1_11
1 O H ODR IT8801_G1_12
1 I H IT8801_G1_13
1 I H IT8801_G1_14
1 I H IT8801_G1_15
1 O H ODR IT8801_G2_20
1 O H ODR IT8801_G2_21
0 O L ODR IT8801_G2_22
0 O L ODR IT8801_G2_23
TEST=jacuzzi, juniper and kappa still compile
TEST=keyboard scanning still works
TEST=keyboard scanning now uses fewer i2c packets due to caching of GPIO23
Change-Id: I7ad89058ccd43b073d648e93877b86d6f187b5df
Signed-off-by: tim <tim2.lin@ite.corp-partner.google.com>
Signed-off-by: Alexandru M Stan <amstan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1712887
Reviewed-by: David Huang <David.Huang@quantatw.com>
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Tested-by: David Huang <David.Huang@quantatw.com>
Diffstat (limited to 'board/damu')
-rw-r--r-- | board/damu/board.c | 28 | ||||
-rw-r--r-- | board/damu/board.h | 8 | ||||
-rw-r--r-- | board/damu/ec.tasklist | 1 | ||||
-rw-r--r-- | board/damu/gpio.inc | 3 |
4 files changed, 39 insertions, 1 deletions
diff --git a/board/damu/board.c b/board/damu/board.c index 4639a23e50..0fd5487f95 100644 --- a/board/damu/board.c +++ b/board/damu/board.c @@ -27,6 +27,8 @@ #include "hooks.h" #include "host_command.h" #include "i2c.h" +#include "it8801.h" +#include "keyboard_scan.h" #include "lid_switch.h" #include "power.h" #include "power_button.h" @@ -79,6 +81,32 @@ const struct power_signal_info power_signal_list[] = { }; BUILD_ASSERT(ARRAY_SIZE(power_signal_list) == POWER_SIGNAL_COUNT); +/* Keyboard scan setting */ +struct keyboard_scan_config keyscan_config = { + /* + * TODO(b/133200075): Tune this once we have the final performance + * out of the driver and the i2c bus. + */ + .output_settle_us = 35, + .debounce_down_us = 5 * MSEC, + .debounce_up_us = 40 * MSEC, + .scan_period_us = 3 * MSEC, + .min_post_scan_delay_us = 1000, + .poll_timeout_us = 100 * MSEC, + .actual_key_mask = { + 0x14, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, + 0xa4, 0xff, 0xfe, 0x55, 0xfa, 0xca /* full set */ + }, +}; + +struct ioexpander_config_t ioex_config[CONFIG_IO_EXPANDER_PORT_COUNT] = { + [0] = { + .i2c_host_port = I2C_PORT_IO_EXPANDER_IT8801, + .i2c_slave_addr = IT8801_I2C_ADDR, + .drv = &it8801_ioexpander_drv, + }, +}; + /******************************************************************************/ /* SPI devices */ /* TODO: to be added once sensors land via CL:1714436 */ diff --git a/board/damu/board.h b/board/damu/board.h index 8399a19b81..8e45ebc3e6 100644 --- a/board/damu/board.h +++ b/board/damu/board.h @@ -81,6 +81,14 @@ (EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN) |\ EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON)) +#define CONFIG_IO_EXPANDER +#define CONFIG_IO_EXPANDER_IT8801 +#define CONFIG_IO_EXPANDER_PORT_COUNT 1 +#define CONFIG_KEYBOARD_DEBUG +#define CONFIG_KEYBOARD_NOT_RAW +#define CONFIG_KEYBOARD_BOARD_CONFIG +#define CONFIG_KEYBOARD_COL2_INVERTED + #define PD_OPERATING_POWER_MW 30000 #ifndef __ASSEMBLER__ diff --git a/board/damu/ec.tasklist b/board/damu/ec.tasklist index f4fb8670ea..4b7574652e 100644 --- a/board/damu/ec.tasklist +++ b/board/damu/ec.tasklist @@ -15,6 +15,7 @@ TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \ TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \ + TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \ TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \ TASK_ALWAYS_RO(EMMC, emmc_task, NULL, LARGER_TASK_STACK_SIZE) diff --git a/board/damu/gpio.inc b/board/damu/gpio.inc index 16daee88ee..90f6edd908 100644 --- a/board/damu/gpio.inc +++ b/board/damu/gpio.inc @@ -33,11 +33,12 @@ GPIO_INT(AC_PRESENT, PIN(A, 6), GPIO_INT_BOTH, extpower_interrupt) /* ACOK_OD */ GPIO_INT(BC12_EC_INT_ODL, PIN(C, 9), GPIO_INT_FALLING, bc12_interrupt) +GPIO_INT(IT8801_SMB_INT, PIN(A, 8), GPIO_INT_FALLING | GPIO_PULL_UP, + io_expander_it8801_interrupt) /* KB_INT_ODL */ GPIO_INT(AP_EC_WATCHDOG_L, PIN(D, 2), GPIO_INT_FALLING, chipset_watchdog_interrupt) /* Unimplemented interrupts */ -GPIO(KB_INT_ODL, PIN(A, 8), GPIO_INPUT) GPIO(ALS_RGB_INT_ODL, PIN(C, 10), GPIO_INPUT) GPIO(TABLET_MODE_L, PIN(B, 11), GPIO_INPUT) |