aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/keyboard/tegra-kbc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/keyboard/tegra-kbc.c')
-rw-r--r--drivers/input/keyboard/tegra-kbc.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c
index fe4ac95ca6c..6722d376e89 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);