static int report_key_event(struct microp_input_state *ds, uint8_t keycode) { uint8_t pressed; uint8_t keymap_index; const struct gpio_event_direct_entry *key_entry; uint32_t err = 0; if (keycode == 0) { KEY_LOGE("%s(), get invalid keycode!, keycode:%d\n", __func__, keycode); return -1; } pressed = !(keycode & 0x80); keymap_index = (keycode & 0xF) - 1; key_entry = &ds->info->keymap[keymap_index]; pr_info("microp_keys_scan_keys: key %d-%d, %d (%d) " "changed to %d\n", ds->info->type, key_entry->code, keymap_index, key_entry->gpio, pressed); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (ds->info->info.oj_btn && key_entry->code == BTN_MOUSE) curcial_oj_send_key(BTN_MOUSE, pressed); else #endif { input_event(ds->input_devs->dev[key_entry->dev], ds->info->type, key_entry->code, pressed); input_sync(ds->input_devs->dev[key_entry->dev]); } return err; }
static void microp_scan_key(struct microp_input_state *ds) { const struct gpio_event_direct_entry *key_entry; uint8_t pressed = 0; uint8_t data[3]; int i = 0; memset(data, 0x00, sizeof(uint8_t)*3); microp_i2c_read(MICROP_I2C_RCMD_GPIO_STATUS, data, 3); key_entry = ds->info->keymap; if (key_entry == NULL) { KEY_LOGE("%s, (key_entry == NULL) failed\n", __func__); return; } for (i = 0; i < ds->info->keymap_size; i++) { pressed = read_microp_gpio(data, key_entry[i].gpio); pr_info("microp_keys_scan_keys: key %d-%d, %d (%d) " "changed to %d\n", ds->info->type, key_entry[i].code, i, key_entry[i].gpio, pressed); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (ds->info->info.oj_btn && key_entry->code == BTN_MOUSE) { curcial_oj_send_key(BTN_MOUSE, pressed); } else { #endif input_event(ds->input_devs->dev[key_entry[i].dev], ds->info->type, key_entry[i].code, pressed); input_sync(ds->input_devs->dev[key_entry->dev]); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL } #endif } }
static void report_key(struct gpio_kp *kp, int key_index, int out, int in) { struct gpio_event_matrix_info *mi = kp->keypad_info; int pressed = test_bit(key_index, kp->keys_pressed); unsigned short keyentry = mi->keymap[key_index]; unsigned short keycode = keyentry & MATRIX_KEY_MASK; unsigned short dev = keyentry >> MATRIX_CODE_BITS; #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL static unsigned need_send_spec_key = 1; #endif if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) { if (keycode == KEY_RESERVED) { if (mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS) pr_info("gpiomatrix: unmapped key, %d-%d " "(%d-%d) changed to %d\n", out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); } else { if (mi->flags & GPIOKPF_PRINT_MAPPED_KEYS) pr_info("gpiomatrix: key %x, %d-%d (%d-%d) " "changed to %d\n", keycode, out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if ((machine_is_bravo() || machine_is_legend() || machine_is_latte() || machine_is_liberty() || machine_is_paradise() || machine_is_bravoc() || machine_is_bee()) && keycode == BTN_MOUSE) ; else #endif #ifdef CONFIG_MACH_HEROC if (button_filter(kp->input_devs->dev[dev], EV_KEY, keycode, pressed, kp->keys_pressed)) #endif input_report_key(kp->input_devs->dev[dev], keycode, pressed); } } #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if ((machine_is_bravo() || machine_is_legend() || machine_is_latte() || machine_is_liberty() || machine_is_paradise() || machine_is_bravoc() || machine_is_bee()) && keycode == BTN_MOUSE) { if (need_send_spec_key == pressed) { curcial_oj_send_key(keycode, pressed); need_send_spec_key = !pressed; printk(KERN_DEBUG "%s: send key, pressed: %d\n", __func__, need_send_spec_key); } } #endif }
static void report_key(struct gpio_kp *kp, int key_index, int out, int in) { struct gpio_event_matrix_info *mi = kp->keypad_info; int pressed = test_bit(key_index, kp->keys_pressed); unsigned short keyentry = mi->keymap[key_index]; unsigned short keycode = keyentry & MATRIX_KEY_MASK; unsigned short dev = keyentry >> MATRIX_CODE_BITS; #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL static unsigned need_send_spec_key = 1; #endif if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) { if (keycode == KEY_RESERVED) { pr_info("gpiomatrix: unmapped key, %d-%d " "(%d-%d) changed to %d\n", out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); } else { pr_info("gpiomatrix: key %d, %d-%d (%d-%d) " "changed to %d\n", keycode, out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (mi->info.oj_btn && keycode == BTN_MOUSE) ; else #endif input_report_key(kp->input_devs->dev[dev], keycode, pressed); } } #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (mi->info.oj_btn && keycode == BTN_MOUSE) { if (need_send_spec_key == pressed) { curcial_oj_send_key(keycode, pressed); need_send_spec_key = !pressed; pr_info("%s: send OJ action key, pressed: %d\n", __func__, pressed); } } #endif }
static void report_key(struct gpio_kp *kp, int key_index, int out, int in) { struct gpio_event_matrix_info *mi = kp->keypad_info; int pressed = test_bit(key_index, kp->keys_pressed); unsigned short keyentry = mi->keymap[key_index]; unsigned short keycode = keyentry & MATRIX_KEY_MASK; unsigned short dev = keyentry >> MATRIX_CODE_BITS; #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL static unsigned need_send_spec_key = 1; #endif int report = 1; if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) { if (keycode == KEY_RESERVED) { KEY_LOGI("gpiomatrix: unmapped key, %d-%d " "(%d-%d) changed to %d\n", out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); } else { KEY_LOGI("gpiomatrix: key %d, %d-%d (%d-%d) " "changed to %d\n", keycode, out, in, mi->output_gpios[out], mi->input_gpios[in], pressed); #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (mi->info.oj_btn && keycode == BTN_MOUSE) ; else #endif { report = 1; #ifdef CONFIG_MACH_DOUBLESHOT // fix for the all too often happening accidental key press repetitions if (pressed) { if (keycode == last_pressed) { if (press_time_init == 0) { press_time_init = 1; last_pressed_time = jiffies; } else { if ( time_before( jiffies, last_pressed_time + BETWEEN_PRESS_MIN_DIFF ) ) { report = 0; // too close } else { last_pressed_time = jiffies; } } } else { last_pressed_time = jiffies; } last_pressed = keycode; } #endif if (report) { input_report_key(kp->input_devs->dev[dev], keycode, pressed); input_sync(kp->input_devs->dev[dev]); } } } } #ifdef CONFIG_OPTICALJOYSTICK_CRUCIAL if (mi->info.oj_btn && keycode == BTN_MOUSE) { if (need_send_spec_key == pressed) { curcial_oj_send_key(keycode, pressed); need_send_spec_key = !pressed; KEY_LOGI("%s: send OJ action key, pressed: %d\n", __func__, pressed); } } #endif }