it83xx: keyboard: remove "CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT" and fix ISR

1. Always use wake-up control interrupt for keyboard KSI. This can also
   wake-up EC from deep doze / sleep mode.
2. In keyboard ISR, we just clear interrupt status to prevent keyboard
   interrupt can't be re-enabled.
   (for example, a KSI interrupt wakes up keyboard scan task,
   but keyboard_raw_read_rows() got 0.)

Signed-off-by: Dino Li <dino.li@ite.com.tw>

BRANCH=none
BUG=none
TEST=keyboard function is normally.

Change-Id: If8c292189c6133b179a63dedcb7a18abbc091312
Reviewed-on: https://chromium-review.googlesource.com/333865
Commit-Ready: Dino Li <dino.li@ite.com.tw>
Tested-by: Dino Li <dino.li@ite.com.tw>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
Dino Li
2016-03-21 16:03:14 +08:00
committed by chrome-bot
parent 47e2912f4b
commit ba6e37787a
5 changed files with 3 additions and 34 deletions

View File

@@ -14,7 +14,6 @@
#define CONFIG_FANS 1
#define CONFIG_I2C
#define CONFIG_I2C_MASTER
#define CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
#define CONFIG_IT83XX_LPC_ACCESS_INT
#define CONFIG_IT83XX_SMCLK2_ON_GPC7
#define CONFIG_KEYBOARD_BOARD_CONFIG

View File

@@ -466,7 +466,7 @@ static void __gpio_irq(void)
/* Determine interrupt number. */
int irq = intc_get_ec_int();
#if defined(HAS_TASK_KEYSCAN) && defined(CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT)
#ifdef HAS_TASK_KEYSCAN
if (irq == IT83XX_IRQ_WKINTC) {
keyboard_raw_interrupt();
return;

View File

@@ -23,11 +23,6 @@ void intc_cpu_int_group_5(void)
case IT83XX_IRQ_KBC_IN:
lpc_kbc_ibf_interrupt();
break;
#endif
#if defined(HAS_TASK_KEYSCAN) && !defined(CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT)
case IT83XX_IRQ_KB_MATRIX:
keyboard_raw_interrupt();
break;
#endif
default:
break;

View File

@@ -35,7 +35,6 @@ void keyboard_raw_init(void)
/* KSO[15:8] pins low. */
IT83XX_KBS_KSOH1 = 0x00;
#ifdef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
/* KSI[0-7] falling-edge triggered is selected */
IT83XX_WUC_WUEMR3 = 0xFF;
@@ -46,10 +45,6 @@ void keyboard_raw_init(void)
/* Enable WUC for KSI[0-7] */
IT83XX_WUC_WUENR3 = 0xFF;
#else
task_clear_pending_irq(IT83XX_IRQ_KB_MATRIX);
#endif
}
/*
@@ -57,14 +52,9 @@ void keyboard_raw_init(void)
*/
void keyboard_raw_task_start(void)
{
#ifdef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
IT83XX_WUC_WUESR3 = 0xFF;
task_clear_pending_irq(IT83XX_IRQ_WKINTC);
task_enable_irq(IT83XX_IRQ_WKINTC);
#else
task_clear_pending_irq(IT83XX_IRQ_KB_MATRIX);
task_enable_irq(IT83XX_IRQ_KB_MATRIX);
#endif
}
/*
@@ -104,20 +94,11 @@ test_mockable int keyboard_raw_read_rows(void)
void keyboard_raw_enable_interrupt(int enable)
{
if (enable) {
#ifdef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
IT83XX_WUC_WUESR3 = 0xFF;
task_clear_pending_irq(IT83XX_IRQ_WKINTC);
task_enable_irq(IT83XX_IRQ_WKINTC);
#else
task_clear_pending_irq(IT83XX_IRQ_KB_MATRIX);
task_enable_irq(IT83XX_IRQ_KB_MATRIX);
#endif
} else {
#ifdef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
task_disable_irq(IT83XX_IRQ_WKINTC);
#else
task_disable_irq(IT83XX_IRQ_KB_MATRIX);
#endif
}
}
@@ -126,11 +107,8 @@ void keyboard_raw_enable_interrupt(int enable)
*/
void keyboard_raw_interrupt(void)
{
#ifdef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
task_disable_irq(IT83XX_IRQ_WKINTC);
#else
task_disable_irq(IT83XX_IRQ_KB_MATRIX);
#endif
IT83XX_WUC_WUESR3 = 0xFF;
task_clear_pending_irq(IT83XX_IRQ_WKINTC);
/* Wake the scan task */
task_wake(TASK_ID_KEYSCAN);

View File

@@ -1173,9 +1173,6 @@
*/
#undef CONFIG_IT83XX_ILM_BLOCK_SIZE
/* Enable Wake-up control interrupt from KSI */
#undef CONFIG_IT83XX_KEYBOARD_KSI_WUC_INT
/* LPC cycle can wake-up EC from doze / deep doze mode if define it. */
#undef CONFIG_IT83XX_LPC_ACCESS_INT