Lines Matching refs:keypad

85 static void enable_row_irqs(struct matrix_keypad *keypad)
87 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
98 static void disable_row_irqs(struct matrix_keypad *keypad)
100 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
116 struct matrix_keypad *keypad =
118 struct input_dev *input_dev = keypad->input_dev;
120 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
144 bits_changed = keypad->last_key_state[col] ^ new_state[col];
152 code = MATRIX_SCAN_CODE(row, col, keypad->row_shift);
161 memcpy(keypad->last_key_state, new_state, sizeof(new_state));
166 spin_lock_irq(&keypad->lock);
167 keypad->scan_pending = false;
168 enable_row_irqs(keypad);
169 spin_unlock_irq(&keypad->lock);
174 struct matrix_keypad *keypad = id;
177 spin_lock_irqsave(&keypad->lock, flags);
184 if (unlikely(keypad->scan_pending || keypad->stopped))
187 disable_row_irqs(keypad);
188 keypad->scan_pending = true;
189 schedule_delayed_work(&keypad->work,
190 msecs_to_jiffies(keypad->pdata->debounce_ms));
193 spin_unlock_irqrestore(&keypad->lock, flags);
199 struct matrix_keypad *keypad = input_get_drvdata(dev);
201 keypad->stopped = false;
208 schedule_delayed_work(&keypad->work, 0);
215 struct matrix_keypad *keypad = input_get_drvdata(dev);
217 spin_lock_irq(&keypad->lock);
218 keypad->stopped = true;
219 spin_unlock_irq(&keypad->lock);
221 flush_delayed_work(&keypad->work);
226 disable_row_irqs(keypad);
230 static void matrix_keypad_enable_wakeup(struct matrix_keypad *keypad)
232 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
238 keypad->gpio_all_disabled = true;
242 if (!test_bit(i, keypad->disabled_gpios)) {
246 __set_bit(i, keypad->disabled_gpios);
252 static void matrix_keypad_disable_wakeup(struct matrix_keypad *keypad)
254 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
259 if (keypad->gpio_all_disabled) {
261 keypad->gpio_all_disabled = false;
265 if (test_and_clear_bit(i, keypad->disabled_gpios)) {
276 struct matrix_keypad *keypad = platform_get_drvdata(pdev);
278 matrix_keypad_stop(keypad->input_dev);
281 matrix_keypad_enable_wakeup(keypad);
289 struct matrix_keypad *keypad = platform_get_drvdata(pdev);
292 matrix_keypad_disable_wakeup(keypad);
294 matrix_keypad_start(keypad->input_dev);
304 struct matrix_keypad *keypad)
306 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
338 "matrix-keypad", keypad);
351 "matrix-keypad", keypad);
362 disable_row_irqs(keypad);
367 free_irq(gpio_to_irq(pdata->row_gpios[i]), keypad);
380 static void matrix_keypad_free_gpio(struct matrix_keypad *keypad)
382 const struct matrix_keypad_platform_data *pdata = keypad->pdata;
386 free_irq(pdata->clustered_irq, keypad);
389 free_irq(gpio_to_irq(pdata->row_gpios[i]), keypad);
422 dev_err(dev, "number of keypad rows/columns not specified\n");
483 struct matrix_keypad *keypad;
497 keypad = kzalloc(sizeof(struct matrix_keypad), GFP_KERNEL);
499 if (!keypad || !input_dev) {
504 keypad->input_dev = input_dev;
505 keypad->pdata = pdata;
506 keypad->row_shift = get_count_order(pdata->num_col_gpios);
507 keypad->stopped = true;
508 INIT_DELAYED_WORK(&keypad->work, matrix_keypad_scan);
509 spin_lock_init(&keypad->lock);
529 input_set_drvdata(input_dev, keypad);
531 err = matrix_keypad_init_gpio(pdev, keypad);
535 err = input_register_device(keypad->input_dev);
540 platform_set_drvdata(pdev, keypad);
545 matrix_keypad_free_gpio(keypad);
548 kfree(keypad);
554 struct matrix_keypad *keypad = platform_get_drvdata(pdev);
556 matrix_keypad_free_gpio(keypad);
557 input_unregister_device(keypad->input_dev);
558 kfree(keypad);
565 { .compatible = "gpio-matrix-keypad" },
575 .name = "matrix-keypad",
585 MODULE_ALIAS("platform:matrix-keypad");