void kpd_pmic_rstkey_handler(unsigned long pressed) { printk(KPD_SAY "PMIC reset Key generate, pressed=%ld\n", pressed); if (!kpd_input_dev) { printk("KPD input device not ready\n"); return; } kpd_pmic_rstkey_hal(pressed); #ifdef KPD_PMIC_RSTKEY_MAP kpd_aee_handler(KPD_PMIC_RSTKEY_MAP, pressed); #endif }
static void kpd_keymap_handler(unsigned long data) { int i, j; bool pressed; u16 new_state[KPD_NUM_MEMS], change, mask; u16 hw_keycode, linux_keycode; kpd_get_keymap_state(new_state); #ifdef CONFIG_MTK_TC1_FM_AT_SUSPEND wake_lock_timeout(&kpd_suspend_lock, HZ / 2); #endif for (i = 0; i < KPD_NUM_MEMS; i++) { change = new_state[i] ^ kpd_keymap_state[i]; if (!change) continue; for (j = 0; j < 16; j++) { mask = 1U << j; if (!(change & mask)) continue; hw_keycode = (i << 4) + j; /* bit is 1: not pressed, 0: pressed */ pressed = !(new_state[i] & mask); if (kpd_show_hw_keycode) { printk(KPD_SAY "(%s) HW keycode = %u\n", pressed ? "pressed" : "released", hw_keycode); } BUG_ON(hw_keycode >= KPD_NUM_KEYS); linux_keycode = kpd_keymap[hw_keycode]; if (unlikely(linux_keycode == 0)) { kpd_print("Linux keycode = 0\n"); continue; } kpd_aee_handler(linux_keycode, pressed); kpd_backlight_handler(pressed, linux_keycode); input_report_key(kpd_input_dev, linux_keycode, pressed); input_sync(kpd_input_dev); kpd_print("report Linux keycode = %u\n", linux_keycode); } } memcpy(kpd_keymap_state, new_state, sizeof(new_state)); kpd_print("save new keymap state\n"); #ifdef CONFIG_OF enable_irq(kp_irqnr); #else enable_irq(MT_KP_IRQ_ID); #endif }
void kpd_pwrkey_pmic_handler(unsigned long pressed) { kpd_print("Power Key generate, pressed=%ld\n", pressed); if (!kpd_input_dev) { kpd_print("KPD input device not ready\n"); return; } kpd_pmic_pwrkey_hal(pressed); #ifdef CONFIG_ARCH_MT8173 if (pressed) /* keep the lock while the button in held pushed */ wake_lock(&pwrkey_lock); else /* keep the lock for extra 500ms after the button is released */ wake_lock_timeout(&pwrkey_lock, HZ/2); #endif #ifdef PWK_DUMP printk(KPD_SAY "Power Key generate, pressed=%ld enter kpd_aee_handler \n", pressed); kpd_aee_handler(KEY_POWER, pressed); #endif }