Lines Matching defs:kp

38 static void clear_phantom_key(struct gpio_kp *kp, int out, int in)
40 struct gpio_event_matrix_info *mi = kp->keypad_info;
46 if (!test_bit(keycode, kp->input_devs->dev[dev]->key)) {
51 __clear_bit(key_index, kp->keys_pressed);
60 static int restore_keys_for_input(struct gpio_kp *kp, int out, int in)
65 key_index = out * kp->keypad_info->ninputs + in;
66 while (out < kp->keypad_info->noutputs) {
67 if (test_bit(key_index, kp->keys_pressed)) {
69 clear_phantom_key(kp, out, in);
71 key_index += kp->keypad_info->ninputs;
77 static void remove_phantom_keys(struct gpio_kp *kp)
82 if (kp->some_keys_pressed < 3)
85 for (out = 0; out < kp->keypad_info->noutputs; out++) {
87 key_index = out * kp->keypad_info->ninputs;
88 for (in = 0; in < kp->keypad_info->ninputs; in++, key_index++) {
89 if (test_bit(key_index, kp->keys_pressed)) {
95 if (!restore_keys_for_input(kp, out + 1,
98 clear_phantom_key(kp, out, inp);
101 restore_keys_for_input(kp, out, in);
107 static void report_key(struct gpio_kp *kp, int key_index, int out, int in)
109 struct gpio_event_matrix_info *mi = kp->keypad_info;
110 int pressed = test_bit(key_index, kp->keys_pressed);
115 if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) {
128 input_report_key(kp->input_devs->dev[dev], keycode, pressed);
133 static void report_sync(struct gpio_kp *kp)
137 for (i = 0; i < kp->input_devs->count; i++)
138 input_sync(kp->input_devs->dev[i]);
146 struct gpio_kp *kp = container_of(timer, struct gpio_kp, timer);
147 struct gpio_event_matrix_info *mi = kp->keypad_info;
151 out = kp->current_output;
154 kp->last_key_state_changed = kp->key_state_changed;
155 kp->key_state_changed = 0;
156 kp->some_keys_pressed = 0;
162 if (kp->some_keys_pressed < 3)
163 kp->some_keys_pressed++;
164 kp->key_state_changed |= !__test_and_set_bit(
165 key_index, kp->keys_pressed);
167 kp->key_state_changed |= __test_and_clear_bit(
168 key_index, kp->keys_pressed);
177 kp->current_output = out;
188 if (kp->key_state_changed) {
189 hrtimer_start(&kp->timer, mi->debounce_delay,
193 kp->key_state_changed = kp->last_key_state_changed;
195 if (kp->key_state_changed) {
197 remove_phantom_keys(kp);
201 report_key(kp, key_index, out, in);
202 report_sync(kp);
204 if (!kp->use_irq || kp->some_keys_pressed) {
218 wake_unlock(&kp->wake_lock);
225 struct gpio_kp *kp = dev_id;
226 struct gpio_event_matrix_info *mi = kp->keypad_info;
229 if (!kp->use_irq) {
231 kp->disabled_irq = 1;
245 wake_lock(&kp->wake_lock);
246 hrtimer_start(&kp->timer, ktime_set(0, 0), HRTIMER_MODE_REL);
250 static int gpio_keypad_request_irqs(struct gpio_kp *kp)
256 struct gpio_event_matrix_info *mi = kp->keypad_info;
278 "gpio_kp", kp);
290 if (kp->disabled_irq) {
291 kp->disabled_irq = 0;
298 free_irq(gpio_to_irq(mi->input_gpios[i]), kp);
312 struct gpio_kp *kp;
331 *data = kp = kzalloc(sizeof(*kp) + sizeof(kp->keys_pressed[0]) *
333 if (kp == NULL) {
338 kp->input_devs = input_devs;
339 kp->keypad_info = mi;
394 kp->current_output = mi->noutputs;
395 kp->key_state_changed = 1;
397 hrtimer_init(&kp->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
398 kp->timer.function = gpio_keypad_timer_func;
399 wake_lock_init(&kp->wake_lock, WAKE_LOCK_SUSPEND, "gpio_kp");
400 err = gpio_keypad_request_irqs(kp);
401 kp->use_irq = err == 0;
406 kp->use_irq ? "interrupt" : "polling");
408 if (kp->use_irq)
409 wake_lock(&kp->wake_lock);
410 hrtimer_start(&kp->timer, ktime_set(0, 0), HRTIMER_MODE_REL);
416 kp = *data;
418 if (kp->use_irq)
420 free_irq(gpio_to_irq(mi->input_gpios[i]), kp);
422 hrtimer_cancel(&kp->timer);
423 wake_lock_destroy(&kp->wake_lock);
437 kfree(kp);