Lines Matching refs:keypad
93 #define keypad_readl(off) __raw_readl(keypad->mmio_base + (off))
94 #define keypad_writel(off, v) __raw_writel((v), keypad->mmio_base + (off))
121 static int pxa27x_keypad_matrix_key_parse_dt(struct pxa27x_keypad *keypad, in pxa27x_keypad_matrix_key_parse_dt() argument
124 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_matrix_key_parse_dt()
144 keypad->keycodes, input_dev); in pxa27x_keypad_matrix_key_parse_dt()
151 static int pxa27x_keypad_direct_key_parse_dt(struct pxa27x_keypad *keypad, in pxa27x_keypad_direct_key_parse_dt() argument
154 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_direct_key_parse_dt()
204 keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = code; in pxa27x_keypad_direct_key_parse_dt()
211 static int pxa27x_keypad_rotary_parse_dt(struct pxa27x_keypad *keypad, in pxa27x_keypad_rotary_parse_dt() argument
220 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_rotary_parse_dt()
260 keypad->keycodes[n] = keycode; in pxa27x_keypad_rotary_parse_dt()
264 keypad->keycodes[n + 1] = keycode; in pxa27x_keypad_rotary_parse_dt()
278 keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; in pxa27x_keypad_rotary_parse_dt()
279 keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; in pxa27x_keypad_rotary_parse_dt()
284 static int pxa27x_keypad_build_keycode_from_dt(struct pxa27x_keypad *keypad) in pxa27x_keypad_build_keycode_from_dt() argument
286 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_build_keycode_from_dt()
298 error = pxa27x_keypad_matrix_key_parse_dt(keypad, pdata); in pxa27x_keypad_build_keycode_from_dt()
304 error = pxa27x_keypad_direct_key_parse_dt(keypad, pdata); in pxa27x_keypad_build_keycode_from_dt()
310 error = pxa27x_keypad_rotary_parse_dt(keypad, pdata); in pxa27x_keypad_build_keycode_from_dt()
327 input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes); in pxa27x_keypad_build_keycode_from_dt()
329 keypad->pdata = pdata; in pxa27x_keypad_build_keycode_from_dt()
335 static int pxa27x_keypad_build_keycode_from_dt(struct pxa27x_keypad *keypad) in pxa27x_keypad_build_keycode_from_dt() argument
337 dev_info(keypad->input_dev->dev.parent, "missing platform data\n"); in pxa27x_keypad_build_keycode_from_dt()
344 static int pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) in pxa27x_keypad_build_keycode() argument
346 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in pxa27x_keypad_build_keycode()
347 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_build_keycode()
355 keypad->keycodes, input_dev); in pxa27x_keypad_build_keycode()
363 input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes); in pxa27x_keypad_build_keycode()
368 keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = keycode; in pxa27x_keypad_build_keycode()
375 keypad->keycodes[MAX_MATRIX_KEY_NUM + 0] = keycode; in pxa27x_keypad_build_keycode()
379 keypad->keycodes[MAX_MATRIX_KEY_NUM + 1] = keycode; in pxa27x_keypad_build_keycode()
382 keypad->rotary_rel_code[0] = -1; in pxa27x_keypad_build_keycode()
384 keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; in pxa27x_keypad_build_keycode()
392 keypad->keycodes[MAX_MATRIX_KEY_NUM + 2] = keycode; in pxa27x_keypad_build_keycode()
396 keypad->keycodes[MAX_MATRIX_KEY_NUM + 3] = keycode; in pxa27x_keypad_build_keycode()
399 keypad->rotary_rel_code[1] = -1; in pxa27x_keypad_build_keycode()
401 keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; in pxa27x_keypad_build_keycode()
411 static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad) in pxa27x_keypad_scan_matrix() argument
413 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in pxa27x_keypad_scan_matrix()
414 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_scan_matrix()
459 bits_changed = keypad->matrix_key_state[col] ^ new_state[col]; in pxa27x_keypad_scan_matrix()
467 code = MATRIX_SCAN_CODE(row, col, keypad->row_shift); in pxa27x_keypad_scan_matrix()
470 input_report_key(input_dev, keypad->keycodes[code], in pxa27x_keypad_scan_matrix()
475 memcpy(keypad->matrix_key_state, new_state, sizeof(new_state)); in pxa27x_keypad_scan_matrix()
490 static void report_rotary_event(struct pxa27x_keypad *keypad, int r, int delta) in report_rotary_event() argument
492 struct input_dev *dev = keypad->input_dev; in report_rotary_event()
497 if (keypad->rotary_rel_code[r] == -1) { in report_rotary_event()
499 unsigned char keycode = keypad->keycodes[code]; in report_rotary_event()
509 input_report_rel(dev, keypad->rotary_rel_code[r], delta); in report_rotary_event()
514 static void pxa27x_keypad_scan_rotary(struct pxa27x_keypad *keypad) in pxa27x_keypad_scan_rotary() argument
516 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in pxa27x_keypad_scan_rotary()
524 report_rotary_event(keypad, 0, rotary_delta(kprec)); in pxa27x_keypad_scan_rotary()
527 report_rotary_event(keypad, 1, rotary_delta(kprec >> 16)); in pxa27x_keypad_scan_rotary()
530 static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad) in pxa27x_keypad_scan_direct() argument
532 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in pxa27x_keypad_scan_direct()
533 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_scan_direct()
541 pxa27x_keypad_scan_rotary(keypad); in pxa27x_keypad_scan_direct()
548 new_state = ~KPDK_DK(kpdk) & keypad->direct_key_mask; in pxa27x_keypad_scan_direct()
550 new_state = KPDK_DK(kpdk) & keypad->direct_key_mask; in pxa27x_keypad_scan_direct()
552 bits_changed = keypad->direct_key_state ^ new_state; in pxa27x_keypad_scan_direct()
562 input_report_key(input_dev, keypad->keycodes[code], in pxa27x_keypad_scan_direct()
567 keypad->direct_key_state = new_state; in pxa27x_keypad_scan_direct()
570 static void clear_wakeup_event(struct pxa27x_keypad *keypad) in clear_wakeup_event() argument
572 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in clear_wakeup_event()
580 struct pxa27x_keypad *keypad = dev_id; in pxa27x_keypad_irq_handler() local
583 clear_wakeup_event(keypad); in pxa27x_keypad_irq_handler()
586 pxa27x_keypad_scan_direct(keypad); in pxa27x_keypad_irq_handler()
589 pxa27x_keypad_scan_matrix(keypad); in pxa27x_keypad_irq_handler()
594 static void pxa27x_keypad_config(struct pxa27x_keypad *keypad) in pxa27x_keypad_config() argument
596 const struct pxa27x_keypad_platform_data *pdata = keypad->pdata; in pxa27x_keypad_config()
631 keypad->direct_key_mask = pdata->direct_key_mask; in pxa27x_keypad_config()
633 keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask; in pxa27x_keypad_config()
646 struct pxa27x_keypad *keypad = input_get_drvdata(dev); in pxa27x_keypad_open() local
649 ret = clk_prepare_enable(keypad->clk); in pxa27x_keypad_open()
653 pxa27x_keypad_config(keypad); in pxa27x_keypad_open()
660 struct pxa27x_keypad *keypad = input_get_drvdata(dev); in pxa27x_keypad_close() local
663 clk_disable_unprepare(keypad->clk); in pxa27x_keypad_close()
670 struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); in pxa27x_keypad_suspend() local
677 enable_irq_wake(keypad->irq); in pxa27x_keypad_suspend()
679 clk_disable_unprepare(keypad->clk); in pxa27x_keypad_suspend()
687 struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); in pxa27x_keypad_resume() local
688 struct input_dev *input_dev = keypad->input_dev; in pxa27x_keypad_resume()
696 disable_irq_wake(keypad->irq); in pxa27x_keypad_resume()
702 ret = clk_prepare_enable(keypad->clk); in pxa27x_keypad_resume()
704 pxa27x_keypad_config(keypad); in pxa27x_keypad_resume()
723 struct pxa27x_keypad *keypad; in pxa27x_keypad_probe() local
744 keypad = devm_kzalloc(&pdev->dev, sizeof(*keypad), in pxa27x_keypad_probe()
746 if (!keypad) in pxa27x_keypad_probe()
753 keypad->pdata = pdata; in pxa27x_keypad_probe()
754 keypad->input_dev = input_dev; in pxa27x_keypad_probe()
755 keypad->irq = irq; in pxa27x_keypad_probe()
757 keypad->mmio_base = devm_ioremap_resource(&pdev->dev, res); in pxa27x_keypad_probe()
758 if (IS_ERR(keypad->mmio_base)) in pxa27x_keypad_probe()
759 return PTR_ERR(keypad->mmio_base); in pxa27x_keypad_probe()
761 keypad->clk = devm_clk_get(&pdev->dev, NULL); in pxa27x_keypad_probe()
762 if (IS_ERR(keypad->clk)) { in pxa27x_keypad_probe()
764 return PTR_ERR(keypad->clk); in pxa27x_keypad_probe()
773 input_dev->keycode = keypad->keycodes; in pxa27x_keypad_probe()
774 input_dev->keycodesize = sizeof(keypad->keycodes[0]); in pxa27x_keypad_probe()
775 input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes); in pxa27x_keypad_probe()
777 input_set_drvdata(input_dev, keypad); in pxa27x_keypad_probe()
783 error = pxa27x_keypad_build_keycode(keypad); in pxa27x_keypad_probe()
785 error = pxa27x_keypad_build_keycode_from_dt(keypad); in pxa27x_keypad_probe()
791 pdata = keypad->pdata; in pxa27x_keypad_probe()
798 keypad->row_shift = get_count_order(pdata->matrix_key_cols); in pxa27x_keypad_probe()
800 if ((pdata->enable_rotary0 && keypad->rotary_rel_code[0] != -1) || in pxa27x_keypad_probe()
801 (pdata->enable_rotary1 && keypad->rotary_rel_code[1] != -1)) { in pxa27x_keypad_probe()
806 0, pdev->name, keypad); in pxa27x_keypad_probe()
819 platform_set_drvdata(pdev, keypad); in pxa27x_keypad_probe()