diff options
Diffstat (limited to 'drivers/input/keyboard/tegra-kbc.c')
-rw-r--r-- | drivers/input/keyboard/tegra-kbc.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c index fe4ac95ca6c8..6722d376e898 100644 --- a/drivers/input/keyboard/tegra-kbc.c +++ b/drivers/input/keyboard/tegra-kbc.c | |||
@@ -686,6 +686,7 @@ static int __devinit tegra_kbc_probe(struct platform_device *pdev) | |||
686 | int num_rows = 0; | 686 | int num_rows = 0; |
687 | unsigned int debounce_cnt; | 687 | unsigned int debounce_cnt; |
688 | unsigned int scan_time_rows; | 688 | unsigned int scan_time_rows; |
689 | unsigned int keymap_rows; | ||
689 | 690 | ||
690 | if (!pdata) | 691 | if (!pdata) |
691 | pdata = tegra_kbc_dt_parse_pdata(pdev); | 692 | pdata = tegra_kbc_dt_parse_pdata(pdev); |
@@ -757,29 +758,34 @@ static int __devinit tegra_kbc_probe(struct platform_device *pdev) | |||
757 | kbc->repoll_dly = KBC_ROW_SCAN_DLY + scan_time_rows + pdata->repeat_cnt; | 758 | kbc->repoll_dly = KBC_ROW_SCAN_DLY + scan_time_rows + pdata->repeat_cnt; |
758 | kbc->repoll_dly = DIV_ROUND_UP(kbc->repoll_dly, KBC_CYCLE_MS); | 759 | kbc->repoll_dly = DIV_ROUND_UP(kbc->repoll_dly, KBC_CYCLE_MS); |
759 | 760 | ||
761 | kbc->wakeup_key = pdata->wakeup_key; | ||
762 | kbc->use_fn_map = pdata->use_fn_map; | ||
763 | kbc->use_ghost_filter = pdata->use_ghost_filter; | ||
764 | |||
760 | input_dev->name = pdev->name; | 765 | input_dev->name = pdev->name; |
761 | input_dev->id.bustype = BUS_HOST; | 766 | input_dev->id.bustype = BUS_HOST; |
762 | input_dev->dev.parent = &pdev->dev; | 767 | input_dev->dev.parent = &pdev->dev; |
763 | input_dev->open = tegra_kbc_open; | 768 | input_dev->open = tegra_kbc_open; |
764 | input_dev->close = tegra_kbc_close; | 769 | input_dev->close = tegra_kbc_close; |
765 | 770 | ||
766 | input_set_drvdata(input_dev, kbc); | 771 | keymap_rows = KBC_MAX_KEY; |
767 | |||
768 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); | ||
769 | input_set_capability(input_dev, EV_MSC, MSC_SCAN); | ||
770 | |||
771 | input_dev->keycode = kbc->keycode; | ||
772 | input_dev->keycodesize = sizeof(kbc->keycode[0]); | ||
773 | input_dev->keycodemax = KBC_MAX_KEY; | ||
774 | if (pdata->use_fn_map) | 772 | if (pdata->use_fn_map) |
775 | input_dev->keycodemax *= 2; | 773 | keymap_rows *= 2; |
776 | 774 | ||
777 | kbc->use_fn_map = pdata->use_fn_map; | ||
778 | kbc->use_ghost_filter = pdata->use_ghost_filter; | ||
779 | keymap_data = pdata->keymap_data ?: &tegra_kbc_default_keymap_data; | 775 | keymap_data = pdata->keymap_data ?: &tegra_kbc_default_keymap_data; |
780 | matrix_keypad_build_keymap(keymap_data, KBC_ROW_SHIFT, | 776 | |
781 | input_dev->keycode, input_dev->keybit); | 777 | err = matrix_keypad_build_keymap(keymap_data, NULL, |
782 | kbc->wakeup_key = pdata->wakeup_key; | 778 | keymap_rows, KBC_MAX_COL, |
779 | kbc->keycode, input_dev); | ||
780 | if (err) { | ||
781 | dev_err(&pdev->dev, "failed to build keymap\n"); | ||
782 | goto err_put_clk; | ||
783 | } | ||
784 | |||
785 | __set_bit(EV_REP, input_dev->evbit); | ||
786 | input_set_capability(input_dev, EV_MSC, MSC_SCAN); | ||
787 | |||
788 | input_set_drvdata(input_dev, kbc); | ||
783 | 789 | ||
784 | err = request_irq(kbc->irq, tegra_kbc_isr, | 790 | err = request_irq(kbc->irq, tegra_kbc_isr, |
785 | IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, pdev->name, kbc); | 791 | IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, pdev->name, kbc); |