22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/input.h>
31 #include <linux/slab.h>
35 #define KBC_MAX_DEBOUNCE_CNT 0x3ffu
38 #define KBC_ROW_SCAN_TIME 16
39 #define KBC_ROW_SCAN_DLY 5
42 #define KBC_CYCLE_MS 32
47 #define KBC_CONTROL_0 0x0
48 #define KBC_FIFO_TH_CNT_SHIFT(cnt) (cnt << 14)
49 #define KBC_DEBOUNCE_CNT_SHIFT(cnt) (cnt << 4)
50 #define KBC_CONTROL_FIFO_CNT_INT_EN (1 << 3)
51 #define KBC_CONTROL_KEYPRESS_INT_EN (1 << 1)
52 #define KBC_CONTROL_KBC_EN (1 << 0)
56 #define KBC_INT_FIFO_CNT_INT_STATUS (1 << 2)
57 #define KBC_INT_KEYPRESS_INT_STATUS (1 << 0)
59 #define KBC_ROW_CFG0_0 0x8
60 #define KBC_COL_CFG0_0 0x18
61 #define KBC_TO_CNT_0 0x24
62 #define KBC_INIT_DLY_0 0x28
63 #define KBC_RPT_DLY_0 0x2c
64 #define KBC_KP_ENT0_0 0x30
65 #define KBC_KP_ENT1_0 0x34
66 #define KBC_ROW0_MASK_0 0x38
68 #define KBC_ROW_SHIFT 3
227 .keymap = tegra_kbc_default_keymap,
228 .keymap_size =
ARRAY_SIZE(tegra_kbc_default_keymap),
231 static void tegra_kbc_report_released_keys(
struct input_dev *
input,
232 unsigned short old_keycodes[],
233 unsigned int old_num_keys,
234 unsigned short new_keycodes[],
235 unsigned int new_num_keys)
239 for (i = 0; i < old_num_keys; i++) {
240 for (j = 0; j < new_num_keys; j++)
241 if (old_keycodes[i] == new_keycodes[j])
244 if (j == new_num_keys)
245 input_report_key(input, old_keycodes[i], 0);
249 static void tegra_kbc_report_pressed_keys(
struct input_dev *input,
250 unsigned char scancodes[],
251 unsigned short keycodes[],
252 unsigned int num_pressed_keys)
256 for (i = 0; i < num_pressed_keys; i++) {
258 input_report_key(input, keycodes[i], 1);
262 static void tegra_kbc_report_keys(
struct tegra_kbc *kbc)
268 unsigned int num_down = 0;
269 bool fn_keypress =
false;
270 bool key_in_same_row =
false;
271 bool key_in_same_col =
false;
278 unsigned int col = val & 0x07;
279 unsigned int row = (val >> 3) & 0x0f;
280 unsigned char scancode =
283 scancodes[num_down] = scancode;
284 keycodes[num_down] = kbc->
keycode[scancode];
302 for (i = 0; i < num_down; i++) {
304 u8 curr_col = scancodes[
i] & 0x07;
311 for (j = i + 1; j < num_down; j++) {
312 u8 col = scancodes[
j] & 0x07;
316 key_in_same_col =
true;
318 key_in_same_row =
true;
328 for (i = 0; i < num_down; i++) {
330 keycodes[
i] = kbc->
keycode[scancodes[
i]];
335 if (key_in_same_col && key_in_same_row)
338 tegra_kbc_report_released_keys(kbc->
idev,
341 tegra_kbc_report_pressed_keys(kbc->
idev, scancodes, keycodes, num_down);
342 input_sync(kbc->
idev);
348 static void tegra_kbc_set_fifo_interrupt(
struct tegra_kbc *kbc,
bool enable)
360 static void tegra_kbc_set_keypress_interrupt(
struct tegra_kbc *kbc,
bool enable)
372 static void tegra_kbc_keypress_timer(
unsigned long data)
385 tegra_kbc_report_keys(kbc);
397 input_sync(kbc->
idev);
402 tegra_kbc_set_fifo_interrupt(kbc,
true);
405 spin_unlock_irqrestore(&kbc->
lock, flags);
428 tegra_kbc_set_fifo_interrupt(kbc,
false);
435 spin_unlock_irqrestore(&kbc->
lock, flags);
440 static void tegra_kbc_setup_wakekeys(
struct tegra_kbc *kbc,
bool filter)
444 unsigned int rst_val;
447 rst_val = (filter && !pdata->
wakeup) ? ~0 : 0;
453 static void tegra_kbc_config_pins(
struct tegra_kbc *kbc)
459 u32 r_shft = 5 * (i % 6);
460 u32 c_shft = 4 * (i % 8);
461 u32 r_mask = 0x1f << r_shft;
462 u32 c_mask = 0x0f << c_shft;
471 switch (pdata->
pin_cfg[i].type) {
473 row_cfg |= ((pdata->
pin_cfg[
i].num << 1) | 1) << r_shft;
477 col_cfg |= ((pdata->
pin_cfg[
i].num << 1) | 1) << c_shft;
489 static int tegra_kbc_start(
struct tegra_kbc *kbc)
495 clk_prepare_enable(kbc->
clk);
503 tegra_kbc_config_pins(kbc);
504 tegra_kbc_setup_wakekeys(kbc,
false);
545 static void tegra_kbc_stop(
struct tegra_kbc *kbc)
554 spin_unlock_irqrestore(&kbc->
lock, flags);
559 clk_disable_unprepare(kbc->
clk);
562 static int tegra_kbc_open(
struct input_dev *
dev)
564 struct tegra_kbc *kbc = input_get_drvdata(dev);
566 return tegra_kbc_start(kbc);
569 static void tegra_kbc_close(
struct input_dev *
dev)
571 struct tegra_kbc *kbc = input_get_drvdata(dev);
573 return tegra_kbc_stop(kbc);
578 struct device *
dev,
unsigned int *num_rows)
587 switch (pin_cfg->
type) {
589 if (pin_cfg->
num >= KBC_MAX_ROW) {
591 "pin_cfg[%d]: invalid row number %d\n",
601 "pin_cfg[%d]: invalid column number %d\n",
612 "pin_cfg[%d]: invalid entry type %d\n",
637 if (!of_property_read_u32(np,
"nvidia,debounce-delay-ms", &prop))
640 if (!of_property_read_u32(np,
"nvidia,repeat-delay-ms", &prop))
692 &tegra_kbc_default_keymap_data,
NULL,
704 struct input_dev *input_dev;
709 unsigned int debounce_cnt;
710 unsigned int scan_time_rows;
713 pdata = tegra_kbc_dt_parse_pdata(pdev);
718 if (!tegra_kbc_check_pin_cfg(pdata, &pdev->
dev, &num_rows)) {
725 dev_err(&pdev->
dev,
"failed to get I/O memory\n");
732 dev_err(&pdev->
dev,
"failed to get keyboard IRQ\n");
738 input_dev = input_allocate_device();
739 if (!kbc || !input_dev) {
745 kbc->
idev = input_dev;
752 dev_err(&pdev->
dev,
"failed to request I/O memory\n");
759 dev_err(&pdev->
dev,
"failed to remap I/O memory\n");
761 goto err_free_mem_region;
765 if (IS_ERR(kbc->
clk)) {
766 dev_err(&pdev->
dev,
"failed to get keyboard clock\n");
767 err = PTR_ERR(kbc->
clk);
786 input_dev->name = pdev->
name;
788 input_dev->dev.parent = &pdev->
dev;
789 input_dev->open = tegra_kbc_open;
790 input_dev->close = tegra_kbc_close;
792 err = tegra_kbd_setup_keymap(kbc);
794 dev_err(&pdev->
dev,
"failed to setup keymap\n");
801 input_set_drvdata(input_dev, kbc);
806 dev_err(&pdev->
dev,
"failed to request keyboard IRQ\n");
812 err = input_register_device(kbc->
idev);
814 dev_err(&pdev->
dev,
"failed to register input device\n");
818 platform_set_drvdata(pdev, kbc);
832 input_free_device(input_dev);
835 if (!pdev->
dev.platform_data)
843 struct tegra_kbc *kbc = platform_get_drvdata(pdev);
846 platform_set_drvdata(pdev,
NULL);
851 input_unregister_device(kbc->
idev);
860 if (!pdev->
dev.platform_data)
868 #ifdef CONFIG_PM_SLEEP
869 static int tegra_kbc_suspend(
struct device *dev)
872 struct tegra_kbc *kbc = platform_get_drvdata(pdev);
875 if (device_may_wakeup(&pdev->
dev)) {
878 tegra_kbc_set_fifo_interrupt(kbc,
false);
889 tegra_kbc_setup_wakekeys(kbc,
true);
894 tegra_kbc_set_keypress_interrupt(kbc,
true);
896 enable_irq_wake(kbc->
irq);
898 if (kbc->
idev->users)
906 static int tegra_kbc_resume(
struct device *dev)
909 struct tegra_kbc *kbc = platform_get_drvdata(pdev);
913 if (device_may_wakeup(&pdev->
dev)) {
914 disable_irq_wake(kbc->
irq);
915 tegra_kbc_setup_wakekeys(kbc,
false);
917 tegra_kbc_set_keypress_interrupt(kbc,
false);
922 tegra_kbc_set_fifo_interrupt(kbc,
true);
933 input_sync(kbc->
idev);
935 input_sync(kbc->
idev);
938 if (kbc->
idev->users)
939 err = tegra_kbc_start(kbc);
949 static const struct of_device_id tegra_kbc_of_match[] = {
950 { .compatible =
"nvidia,tegra20-kbc", },
956 .probe = tegra_kbc_probe,
961 .pm = &tegra_kbc_pm_ops,
962 .of_match_table = tegra_kbc_of_match,