Signed-off-by: James Tai <james.tai@xxxxxxxxxxx> --- rtd16xx_pm.c | 27 ++++++++++++++++----------- rtd16xx_pm.h | 12 ++++++++---- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/rtd16xx_pm.c b/rtd16xx_pm.c index b34ce94..1779670 100644 --- a/rtd16xx_pm.c +++ b/rtd16xx_pm.c @@ -44,7 +44,7 @@ unsigned int IsSuspendToWFI; unsigned int suspend_ChipVer; rtk_pm_event_func_t wakeup_events[RTK_PM_MAX_EVENTS]; -param_pwm_irda_key_t param_wakeup_ir_key[RTK_PM_MAX_IR_KEY]; +param_pwm_irda_key_t param_wakeup_ir_key[MAX_KEY_TBL]; param_pwm_gpio_key_t Param_PWM_GPIO_Key; unsigned int bt_wakeup_flag; @@ -119,7 +119,8 @@ int ir_power_on_check(void) unsigned int key_mask = 0; unsigned int power_key = 0; unsigned int custom_key = 0; - int i = 0; + unsigned int power_keynum = 0; + int i = 0, j = 0; sr_value = ACCESS(ISO_IR_SR_reg); if(sr_value & 0x1) { @@ -131,22 +132,24 @@ int ir_power_on_check(void) if (sr_value & 0x2) return 0; - for (i = 0 ; i < RTK_PM_MAX_IR_KEY ; i++) { + for (i = 0 ; i < MAX_KEY_TBL ; i++) { key_shift = param_wakeup_ir_key[i].key_shift; key_mask = param_wakeup_ir_key[i].key_mask; custom_shift = param_wakeup_ir_key[i].custom_shift; custom_mask = param_wakeup_ir_key[i].custom_mask; - power_key = param_wakeup_ir_key[i].power_key; + power_keynum = param_wakeup_ir_key[i].power_keynum; custom_key = param_wakeup_ir_key[i].custom_key; tmp1 = ((reg_value & key_mask) >> key_shift); tmp2 = ((reg_value & custom_mask) >> custom_shift); if (key_mask == 0 && custom_mask == 0) return 0; - - if (power_key == tmp1 && custom_key == tmp2) { - ACCESS(0xD8007640) = 0xea000000 | (RESUME_IR << 16); - return 1; + for (j = 0; j < power_keynum; j++) { + power_key = param_wakeup_ir_key[i].power_key[j]; + if (power_key == tmp1 && custom_key == tmp2) { + ACCESS(0xD8007640) = 0xea000000 | (RESUME_IR << 16); + return 1; + } } } } @@ -409,7 +412,7 @@ int rtk_power_on_event(void) void rtk_power_on_event_init(struct suspend_param *scpu_param) { - int i = 0; + int i = 0, j = 0; wakeup_event_int_mask = 0; if (7093279 != trace_power) @@ -422,10 +425,12 @@ void rtk_power_on_event_init(struct suspend_param *scpu_param) /* Enable IR Interrupt */ if (suspend_wakeup_flag & fWAKEUP_ON_IR) { - for (i = 0 ; i< 2; i++) { + for (i = 0 ; i < MAX_KEY_TBL ; i++) { param_wakeup_ir_key[i].protocol = scpu_param->irda_info.key_tbl[i].protocol; param_wakeup_ir_key[i].key_mask = scpu_param->irda_info.key_tbl[i].scancode_mask; - param_wakeup_ir_key[i].power_key = scpu_param->irda_info.key_tbl[i].wakeup_scancode; + param_wakeup_ir_key[i].power_keynum = scpu_param->irda_info.key_tbl[i].wakeup_keynum; + for (j = 0; j < param_wakeup_ir_key[i].power_keynum; j++) + param_wakeup_ir_key[i].power_key[j] = scpu_param->irda_info.key_tbl[i].wakeup_scancode[j]; for (param_wakeup_ir_key[i].key_shift = 0; param_wakeup_ir_key[i].key_shift < 32; param_wakeup_ir_key[i].key_shift++) { if ((param_wakeup_ir_key[i].key_mask & (1 << param_wakeup_ir_key[i].key_shift))) { diff --git a/rtd16xx_pm.h b/rtd16xx_pm.h index ebebc79..10c1eab 100644 --- a/rtd16xx_pm.h +++ b/rtd16xx_pm.h @@ -14,7 +14,6 @@ #define SUSPEND_ISO_GPIO_BASE 0 #define SUSPEND_ISO_GPIO_SIZE 86 -#define RTK_PM_MAX_IR_KEY 2 #define RTK_PM_MAX_EVENTS 8 #define RESUME_STATE_ADDR (boot_offset_base+0x118) @@ -33,10 +32,14 @@ #define BT_WAKEUP_ACTIVE_HIGH (0x1 << 23) #define BT_WAKEUP_MASK 0x00EFFFFF +#define MAX_WAKEUP_CODE 16 +#define MAX_KEY_TBL 2 + struct irda_wake_up_key { unsigned int protocol; unsigned int scancode_mask; - unsigned int wakeup_scancode; + unsigned int wakeup_keynum; + unsigned int wakeup_scancode[MAX_WAKEUP_CODE]; unsigned int cus_mask; unsigned int cus_code; }; @@ -44,7 +47,7 @@ struct irda_wake_up_key { struct ipc_shm_irda { unsigned int ipc_shm_ir_magic; unsigned int dev_count; - struct irda_wake_up_key key_tbl[2]; + struct irda_wake_up_key key_tbl[MAX_KEY_TBL]; }; struct ipc_shm_cec { @@ -93,7 +96,8 @@ typedef struct param_pwm_irda_key { unsigned int is_valid; unsigned int protocol; - unsigned int power_key; + unsigned int power_keynum; + unsigned int power_key[MAX_WAKEUP_CODE]; unsigned int key_mask; unsigned int key_shift; unsigned int custom_key; -- 2.25.0