aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/keyboard
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2013-02-20 01:05:39 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2013-02-20 01:05:39 -0500
commit2d9f0d964be94fd51c7303288c6f9c88bf2381fe (patch)
tree2631c3e82abc145a6e9c8e2c18687833c71de012 /drivers/input/keyboard
parent9937c026820baabd1e908a9c1e6bdc846293000a (diff)
parent005a69d632cd8694061c2dd27492fe874780b5ee (diff)
Merge branch 'next' into for-linus
Prepare first set of updates for 3.9 merge window.
Diffstat (limited to 'drivers/input/keyboard')
-rw-r--r--drivers/input/keyboard/Kconfig16
-rw-r--r--drivers/input/keyboard/Makefile1
-rw-r--r--drivers/input/keyboard/atkbd.c74
-rw-r--r--drivers/input/keyboard/goldfish_events.c194
-rw-r--r--drivers/input/keyboard/imx_keypad.c43
-rw-r--r--drivers/input/keyboard/qt2160.c141
-rw-r--r--drivers/input/keyboard/tegra-kbc.c478
7 files changed, 573 insertions, 374 deletions
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index 48309641b1b2..992137cf3a64 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -224,7 +224,7 @@ config KEYBOARD_TCA6416
224 224
225config KEYBOARD_TCA8418 225config KEYBOARD_TCA8418
226 tristate "TCA8418 Keypad Support" 226 tristate "TCA8418 Keypad Support"
227 depends on I2C 227 depends on I2C && GENERIC_HARDIRQS
228 select INPUT_MATRIXKMAP 228 select INPUT_MATRIXKMAP
229 help 229 help
230 This driver implements basic keypad functionality 230 This driver implements basic keypad functionality
@@ -303,7 +303,7 @@ config KEYBOARD_HP7XX
303 303
304config KEYBOARD_LM8323 304config KEYBOARD_LM8323
305 tristate "LM8323 keypad chip" 305 tristate "LM8323 keypad chip"
306 depends on I2C 306 depends on I2C && GENERIC_HARDIRQS
307 depends on LEDS_CLASS 307 depends on LEDS_CLASS
308 help 308 help
309 If you say yes here you get support for the National Semiconductor 309 If you say yes here you get support for the National Semiconductor
@@ -420,7 +420,7 @@ config KEYBOARD_NOMADIK
420 420
421config KEYBOARD_TEGRA 421config KEYBOARD_TEGRA
422 tristate "NVIDIA Tegra internal matrix keyboard controller support" 422 tristate "NVIDIA Tegra internal matrix keyboard controller support"
423 depends on ARCH_TEGRA 423 depends on ARCH_TEGRA && OF
424 select INPUT_MATRIXKMAP 424 select INPUT_MATRIXKMAP
425 help 425 help
426 Say Y here if you want to use a matrix keyboard connected directly 426 Say Y here if you want to use a matrix keyboard connected directly
@@ -479,6 +479,16 @@ config KEYBOARD_SAMSUNG
479 To compile this driver as a module, choose M here: the 479 To compile this driver as a module, choose M here: the
480 module will be called samsung-keypad. 480 module will be called samsung-keypad.
481 481
482config KEYBOARD_GOLDFISH_EVENTS
483 depends on GOLDFISH
484 tristate "Generic Input Event device for Goldfish"
485 help
486 Say Y here to get an input event device for the Goldfish virtual
487 device emulator.
488
489 To compile this driver as a module, choose M here: the
490 module will be called goldfish-events.
491
482config KEYBOARD_STOWAWAY 492config KEYBOARD_STOWAWAY
483 tristate "Stowaway keyboard" 493 tristate "Stowaway keyboard"
484 select SERIO 494 select SERIO
diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
index 44e76002f54b..49b16453d00e 100644
--- a/drivers/input/keyboard/Makefile
+++ b/drivers/input/keyboard/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
13obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o 13obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
14obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o 14obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o
15obj-$(CONFIG_KEYBOARD_EP93XX) += ep93xx_keypad.o 15obj-$(CONFIG_KEYBOARD_EP93XX) += ep93xx_keypad.o
16obj-$(CONFIG_KEYBOARD_GOLDFISH_EVENTS) += goldfish_events.o
16obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o 17obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
17obj-$(CONFIG_KEYBOARD_GPIO_POLLED) += gpio_keys_polled.o 18obj-$(CONFIG_KEYBOARD_GPIO_POLLED) += gpio_keys_polled.o
18obj-$(CONFIG_KEYBOARD_TCA6416) += tca6416-keypad.o 19obj-$(CONFIG_KEYBOARD_TCA6416) += tca6416-keypad.o
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index add5ffd9fe26..2626773ff29b 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -676,6 +676,39 @@ static inline void atkbd_disable(struct atkbd *atkbd)
676 serio_continue_rx(atkbd->ps2dev.serio); 676 serio_continue_rx(atkbd->ps2dev.serio);
677} 677}
678 678
679static int atkbd_activate(struct atkbd *atkbd)
680{
681 struct ps2dev *ps2dev = &atkbd->ps2dev;
682
683/*
684 * Enable the keyboard to receive keystrokes.
685 */
686
687 if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
688 dev_err(&ps2dev->serio->dev,
689 "Failed to enable keyboard on %s\n",
690 ps2dev->serio->phys);
691 return -1;
692 }
693
694 return 0;
695}
696
697/*
698 * atkbd_deactivate() resets and disables the keyboard from sending
699 * keystrokes.
700 */
701
702static void atkbd_deactivate(struct atkbd *atkbd)
703{
704 struct ps2dev *ps2dev = &atkbd->ps2dev;
705
706 if (ps2_command(ps2dev, NULL, ATKBD_CMD_RESET_DIS))
707 dev_err(&ps2dev->serio->dev,
708 "Failed to deactivate keyboard on %s\n",
709 ps2dev->serio->phys);
710}
711
679/* 712/*
680 * atkbd_probe() probes for an AT keyboard on a serio port. 713 * atkbd_probe() probes for an AT keyboard on a serio port.
681 */ 714 */
@@ -726,11 +759,17 @@ static int atkbd_probe(struct atkbd *atkbd)
726 759
727 if (atkbd->id == 0xaca1 && atkbd->translated) { 760 if (atkbd->id == 0xaca1 && atkbd->translated) {
728 dev_err(&ps2dev->serio->dev, 761 dev_err(&ps2dev->serio->dev,
729 "NCD terminal keyboards are only supported on non-translating controlelrs. " 762 "NCD terminal keyboards are only supported on non-translating controllers. "
730 "Use i8042.direct=1 to disable translation.\n"); 763 "Use i8042.direct=1 to disable translation.\n");
731 return -1; 764 return -1;
732 } 765 }
733 766
767/*
768 * Make sure nothing is coming from the keyboard and disturbs our
769 * internal state.
770 */
771 atkbd_deactivate(atkbd);
772
734 return 0; 773 return 0;
735} 774}
736 775
@@ -825,24 +864,6 @@ static int atkbd_reset_state(struct atkbd *atkbd)
825 return 0; 864 return 0;
826} 865}
827 866
828static int atkbd_activate(struct atkbd *atkbd)
829{
830 struct ps2dev *ps2dev = &atkbd->ps2dev;
831
832/*
833 * Enable the keyboard to receive keystrokes.
834 */
835
836 if (ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE)) {
837 dev_err(&ps2dev->serio->dev,
838 "Failed to enable keyboard on %s\n",
839 ps2dev->serio->phys);
840 return -1;
841 }
842
843 return 0;
844}
845
846/* 867/*
847 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a 868 * atkbd_cleanup() restores the keyboard state so that BIOS is happy after a
848 * reboot. 869 * reboot.
@@ -1150,7 +1171,6 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
1150 1171
1151 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra); 1172 atkbd->set = atkbd_select_set(atkbd, atkbd_set, atkbd_extra);
1152 atkbd_reset_state(atkbd); 1173 atkbd_reset_state(atkbd);
1153 atkbd_activate(atkbd);
1154 1174
1155 } else { 1175 } else {
1156 atkbd->set = 2; 1176 atkbd->set = 2;
@@ -1165,6 +1185,8 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
1165 goto fail3; 1185 goto fail3;
1166 1186
1167 atkbd_enable(atkbd); 1187 atkbd_enable(atkbd);
1188 if (serio->write)
1189 atkbd_activate(atkbd);
1168 1190
1169 err = input_register_device(atkbd->dev); 1191 err = input_register_device(atkbd->dev);
1170 if (err) 1192 if (err)
@@ -1208,8 +1230,6 @@ static int atkbd_reconnect(struct serio *serio)
1208 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra)) 1230 if (atkbd->set != atkbd_select_set(atkbd, atkbd->set, atkbd->extra))
1209 goto out; 1231 goto out;
1210 1232
1211 atkbd_activate(atkbd);
1212
1213 /* 1233 /*
1214 * Restore LED state and repeat rate. While input core 1234 * Restore LED state and repeat rate. While input core
1215 * will do this for us at resume time reconnect may happen 1235 * will do this for us at resume time reconnect may happen
@@ -1223,7 +1243,17 @@ static int atkbd_reconnect(struct serio *serio)
1223 1243
1224 } 1244 }
1225 1245
1246 /*
1247 * Reset our state machine in case reconnect happened in the middle
1248 * of multi-byte scancode.
1249 */
1250 atkbd->xl_bit = 0;
1251 atkbd->emul = 0;
1252
1226 atkbd_enable(atkbd); 1253 atkbd_enable(atkbd);
1254 if (atkbd->write)
1255 atkbd_activate(atkbd);
1256
1227 retval = 0; 1257 retval = 0;
1228 1258
1229 out: 1259 out:
diff --git a/drivers/input/keyboard/goldfish_events.c b/drivers/input/keyboard/goldfish_events.c
new file mode 100644
index 000000000000..9f60a2ec88db
--- /dev/null
+++ b/drivers/input/keyboard/goldfish_events.c
@@ -0,0 +1,194 @@
1/*
2 * Copyright (C) 2007 Google, Inc.
3 * Copyright (C) 2012 Intel, Inc.
4 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16#include <linux/module.h>
17#include <linux/init.h>
18#include <linux/interrupt.h>
19#include <linux/types.h>
20#include <linux/input.h>
21#include <linux/kernel.h>
22#include <linux/platform_device.h>
23#include <linux/slab.h>
24#include <linux/irq.h>
25#include <linux/io.h>
26
27enum {
28 REG_READ = 0x00,
29 REG_SET_PAGE = 0x00,
30 REG_LEN = 0x04,
31 REG_DATA = 0x08,
32
33 PAGE_NAME = 0x00000,
34 PAGE_EVBITS = 0x10000,
35 PAGE_ABSDATA = 0x20000 | EV_ABS,
36};
37
38struct event_dev {
39 struct input_dev *input;
40 int irq;
41 void __iomem *addr;
42 char name[0];
43};
44
45static irqreturn_t events_interrupt(int irq, void *dev_id)
46{
47 struct event_dev *edev = dev_id;
48 unsigned type, code, value;
49
50 type = __raw_readl(edev->addr + REG_READ);
51 code = __raw_readl(edev->addr + REG_READ);
52 value = __raw_readl(edev->addr + REG_READ);
53
54 input_event(edev->input, type, code, value);
55 input_sync(edev->input);
56 return IRQ_HANDLED;
57}
58
59static void events_import_bits(struct event_dev *edev,
60 unsigned long bits[], unsigned type, size_t count)
61{
62 void __iomem *addr = edev->addr;
63 int i, j;
64 size_t size;
65 uint8_t val;
66
67 __raw_writel(PAGE_EVBITS | type, addr + REG_SET_PAGE);
68
69 size = __raw_readl(addr + REG_LEN) * 8;
70 if (size < count)
71 count = size;
72
73 addr += REG_DATA;
74 for (i = 0; i < count; i += 8) {
75 val = __raw_readb(addr++);
76 for (j = 0; j < 8; j++)
77 if (val & 1 << j)
78 set_bit(i + j, bits);
79 }
80}
81
82static void events_import_abs_params(struct event_dev *edev)
83{
84 struct input_dev *input_dev = edev->input;
85 void __iomem *addr = edev->addr;
86 u32 val[4];
87 int count;
88 int i, j;
89
90 __raw_writel(PAGE_ABSDATA, addr + REG_SET_PAGE);
91
92 count = __raw_readl(addr + REG_LEN) / sizeof(val);
93 if (count > ABS_MAX)
94 count = ABS_MAX;
95
96 for (i = 0; i < count; i++) {
97 if (!test_bit(i, input_dev->absbit))
98 continue;
99
100 for (j = 0; j < ARRAY_SIZE(val); j++) {
101 int offset = (i * ARRAY_SIZE(val) + j) * sizeof(u32);
102 val[j] = __raw_readl(edev->addr + REG_DATA + offset);
103 }
104
105 input_set_abs_params(input_dev, i,
106 val[0], val[1], val[2], val[3]);
107 }
108}
109
110static int events_probe(struct platform_device *pdev)
111{
112 struct input_dev *input_dev;
113 struct event_dev *edev;
114 struct resource *res;
115 unsigned keymapnamelen;
116 void __iomem *addr;
117 int irq;
118 int i;
119 int error;
120
121 irq = platform_get_irq(pdev, 0);
122 if (irq < 0)
123 return -EINVAL;
124
125 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
126 if (!res)
127 return -EINVAL;
128
129 addr = devm_ioremap(&pdev->dev, res->start, 4096);
130 if (!addr)
131 return -ENOMEM;
132
133 __raw_writel(PAGE_NAME, addr + REG_SET_PAGE);
134 keymapnamelen = __raw_readl(addr + REG_LEN);
135
136 edev = devm_kzalloc(&pdev->dev,
137 sizeof(struct event_dev) + keymapnamelen + 1,
138 GFP_KERNEL);
139 if (!edev)
140 return -ENOMEM;
141
142 input_dev = devm_input_allocate_device(&pdev->dev);
143 if (!input_dev)
144 return -ENOMEM;
145
146 edev->input = input_dev;
147 edev->addr = addr;
148 edev->irq = irq;
149
150 for (i = 0; i < keymapnamelen; i++)
151 edev->name[i] = __raw_readb(edev->addr + REG_DATA + i);
152
153 pr_debug("events_probe() keymap=%s\n", edev->name);
154
155 input_dev->name = edev->name;
156 input_dev->id.bustype = BUS_HOST;
157
158 events_import_bits(edev, input_dev->evbit, EV_SYN, EV_MAX);
159 events_import_bits(edev, input_dev->keybit, EV_KEY, KEY_MAX);
160 events_import_bits(edev, input_dev->relbit, EV_REL, REL_MAX);
161 events_import_bits(edev, input_dev->absbit, EV_ABS, ABS_MAX);
162 events_import_bits(edev, input_dev->mscbit, EV_MSC, MSC_MAX);
163 events_import_bits(edev, input_dev->ledbit, EV_LED, LED_MAX);
164 events_import_bits(edev, input_dev->sndbit, EV_SND, SND_MAX);
165 events_import_bits(edev, input_dev->ffbit, EV_FF, FF_MAX);
166 events_import_bits(edev, input_dev->swbit, EV_SW, SW_MAX);
167
168 events_import_abs_params(edev);
169
170 error = devm_request_irq(&pdev->dev, edev->irq, events_interrupt, 0,
171 "goldfish-events-keypad", edev);
172 if (error)
173 return error;
174
175 error = input_register_device(input_dev);
176 if (error)
177 return error;
178
179 return 0;
180}
181
182static struct platform_driver events_driver = {
183 .probe = events_probe,
184 .driver = {
185 .owner = THIS_MODULE,
186 .name = "goldfish_events",
187 },
188};
189
190module_platform_driver(events_driver);
191
192MODULE_AUTHOR("Brian Swetland");
193MODULE_DESCRIPTION("Goldfish Event Device");
194MODULE_LICENSE("GPL");
diff --git a/drivers/input/keyboard/imx_keypad.c b/drivers/input/keyboard/imx_keypad.c
index 6d150e3e1f55..98f9113251d2 100644
--- a/drivers/input/keyboard/imx_keypad.c
+++ b/drivers/input/keyboard/imx_keypad.c
@@ -20,6 +20,7 @@
20#include <linux/jiffies.h> 20#include <linux/jiffies.h>
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/module.h> 22#include <linux/module.h>
23#include <linux/of.h>
23#include <linux/platform_device.h> 24#include <linux/platform_device.h>
24#include <linux/slab.h> 25#include <linux/slab.h>
25#include <linux/timer.h> 26#include <linux/timer.h>
@@ -414,15 +415,23 @@ open_err:
414 return -EIO; 415 return -EIO;
415} 416}
416 417
418#ifdef CONFIG_OF
419static struct of_device_id imx_keypad_of_match[] = {
420 { .compatible = "fsl,imx21-kpp", },
421 { /* sentinel */ }
422};
423MODULE_DEVICE_TABLE(of, imx_keypad_of_match);
424#endif
425
417static int imx_keypad_probe(struct platform_device *pdev) 426static int imx_keypad_probe(struct platform_device *pdev)
418{ 427{
419 const struct matrix_keymap_data *keymap_data = pdev->dev.platform_data; 428 const struct matrix_keymap_data *keymap_data = pdev->dev.platform_data;
420 struct imx_keypad *keypad; 429 struct imx_keypad *keypad;
421 struct input_dev *input_dev; 430 struct input_dev *input_dev;
422 struct resource *res; 431 struct resource *res;
423 int irq, error, i; 432 int irq, error, i, row, col;
424 433
425 if (keymap_data == NULL) { 434 if (!keymap_data && !pdev->dev.of_node) {
426 dev_err(&pdev->dev, "no keymap defined\n"); 435 dev_err(&pdev->dev, "no keymap defined\n");
427 return -EINVAL; 436 return -EINVAL;
428 } 437 }
@@ -480,22 +489,6 @@ static int imx_keypad_probe(struct platform_device *pdev)
480 goto failed_unmap; 489 goto failed_unmap;
481 } 490 }
482 491
483 /* Search for rows and cols enabled */
484 for (i = 0; i < keymap_data->keymap_size; i++) {
485 keypad->rows_en_mask |= 1 << KEY_ROW(keymap_data->keymap[i]);
486 keypad->cols_en_mask |= 1 << KEY_COL(keymap_data->keymap[i]);
487 }
488
489 if (keypad->rows_en_mask > ((1 << MAX_MATRIX_KEY_ROWS) - 1) ||
490 keypad->cols_en_mask > ((1 << MAX_MATRIX_KEY_COLS) - 1)) {
491 dev_err(&pdev->dev,
492 "invalid key data (too many rows or colums)\n");
493 error = -EINVAL;
494 goto failed_clock_put;
495 }
496 dev_dbg(&pdev->dev, "enabled rows mask: %x\n", keypad->rows_en_mask);
497 dev_dbg(&pdev->dev, "enabled cols mask: %x\n", keypad->cols_en_mask);
498
499 /* Init the Input device */ 492 /* Init the Input device */
500 input_dev->name = pdev->name; 493 input_dev->name = pdev->name;
501 input_dev->id.bustype = BUS_HOST; 494 input_dev->id.bustype = BUS_HOST;
@@ -512,6 +505,19 @@ static int imx_keypad_probe(struct platform_device *pdev)
512 goto failed_clock_put; 505 goto failed_clock_put;
513 } 506 }
514 507
508 /* Search for rows and cols enabled */
509 for (row = 0; row < MAX_MATRIX_KEY_ROWS; row++) {
510 for (col = 0; col < MAX_MATRIX_KEY_COLS; col++) {
511 i = MATRIX_SCAN_CODE(row, col, MATRIX_ROW_SHIFT);
512 if (keypad->keycodes[i] != KEY_RESERVED) {
513 keypad->rows_en_mask |= 1 << row;
514 keypad->cols_en_mask |= 1 << col;
515 }
516 }
517 }
518 dev_dbg(&pdev->dev, "enabled rows mask: %x\n", keypad->rows_en_mask);
519 dev_dbg(&pdev->dev, "enabled cols mask: %x\n", keypad->cols_en_mask);
520
515 __set_bit(EV_REP, input_dev->evbit); 521 __set_bit(EV_REP, input_dev->evbit);
516 input_set_capability(input_dev, EV_MSC, MSC_SCAN); 522 input_set_capability(input_dev, EV_MSC, MSC_SCAN);
517 input_set_drvdata(input_dev, keypad); 523 input_set_drvdata(input_dev, keypad);
@@ -631,6 +637,7 @@ static struct platform_driver imx_keypad_driver = {
631 .name = "imx-keypad", 637 .name = "imx-keypad",
632 .owner = THIS_MODULE, 638 .owner = THIS_MODULE,
633 .pm = &imx_kbd_pm_ops, 639 .pm = &imx_kbd_pm_ops,
640 .of_match_table = of_match_ptr(imx_keypad_of_match),
634 }, 641 },
635 .probe = imx_keypad_probe, 642 .probe = imx_keypad_probe,
636 .remove = imx_keypad_remove, 643 .remove = imx_keypad_remove,
diff --git a/drivers/input/keyboard/qt2160.c b/drivers/input/keyboard/qt2160.c
index 3dc2b0f27b0c..1c0ddad0a1cc 100644
--- a/drivers/input/keyboard/qt2160.c
+++ b/drivers/input/keyboard/qt2160.c
@@ -20,6 +20,7 @@
20 20
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/leds.h>
23#include <linux/module.h> 24#include <linux/module.h>
24#include <linux/slab.h> 25#include <linux/slab.h>
25#include <linux/jiffies.h> 26#include <linux/jiffies.h>
@@ -39,6 +40,11 @@
39#define QT2160_CMD_GPIOS 6 40#define QT2160_CMD_GPIOS 6
40#define QT2160_CMD_SUBVER 7 41#define QT2160_CMD_SUBVER 7
41#define QT2160_CMD_CALIBRATE 10 42#define QT2160_CMD_CALIBRATE 10
43#define QT2160_CMD_DRIVE_X 70
44#define QT2160_CMD_PWMEN_X 74
45#define QT2160_CMD_PWM_DUTY 76
46
47#define QT2160_NUM_LEDS_X 8
42 48
43#define QT2160_CYCLE_INTERVAL (2*HZ) 49#define QT2160_CYCLE_INTERVAL (2*HZ)
44 50
@@ -49,6 +55,17 @@ static unsigned char qt2160_key2code[] = {
49 KEY_C, KEY_D, KEY_E, KEY_F, 55 KEY_C, KEY_D, KEY_E, KEY_F,
50}; 56};
51 57
58#ifdef CONFIG_LEDS_CLASS
59struct qt2160_led {
60 struct qt2160_data *qt2160;
61 struct led_classdev cdev;
62 struct work_struct work;
63 char name[32];
64 int id;
65 enum led_brightness new_brightness;
66};
67#endif
68
52struct qt2160_data { 69struct qt2160_data {
53 struct i2c_client *client; 70 struct i2c_client *client;
54 struct input_dev *input; 71 struct input_dev *input;
@@ -56,8 +73,61 @@ struct qt2160_data {
56 spinlock_t lock; /* Protects canceling/rescheduling of dwork */ 73 spinlock_t lock; /* Protects canceling/rescheduling of dwork */
57 unsigned short keycodes[ARRAY_SIZE(qt2160_key2code)]; 74 unsigned short keycodes[ARRAY_SIZE(qt2160_key2code)];
58 u16 key_matrix; 75 u16 key_matrix;
76#ifdef CONFIG_LEDS_CLASS
77 struct qt2160_led leds[QT2160_NUM_LEDS_X];
78 struct mutex led_lock;
79#endif
59}; 80};
60 81
82static int qt2160_read(struct i2c_client *client, u8 reg);
83static int qt2160_write(struct i2c_client *client, u8 reg, u8 data);
84
85#ifdef CONFIG_LEDS_CLASS
86
87static void qt2160_led_work(struct work_struct *work)
88{
89 struct qt2160_led *led = container_of(work, struct qt2160_led, work);
90 struct qt2160_data *qt2160 = led->qt2160;
91 struct i2c_client *client = qt2160->client;
92 int value = led->new_brightness;
93 u32 drive, pwmen;
94
95 mutex_lock(&qt2160->led_lock);
96
97 drive = qt2160_read(client, QT2160_CMD_DRIVE_X);
98 pwmen = qt2160_read(client, QT2160_CMD_PWMEN_X);
99 if (value != LED_OFF) {
100 drive |= (1 << led->id);
101 pwmen |= (1 << led->id);
102
103 } else {
104 drive &= ~(1 << led->id);
105 pwmen &= ~(1 << led->id);
106 }
107 qt2160_write(client, QT2160_CMD_DRIVE_X, drive);
108 qt2160_write(client, QT2160_CMD_PWMEN_X, pwmen);
109
110 /*
111 * Changing this register will change the brightness
112 * of every LED in the qt2160. It's a HW limitation.
113 */
114 if (value != LED_OFF)
115 qt2160_write(client, QT2160_CMD_PWM_DUTY, value);
116
117 mutex_unlock(&qt2160->led_lock);
118}
119
120static void qt2160_led_set(struct led_classdev *cdev,
121 enum led_brightness value)
122{
123 struct qt2160_led *led = container_of(cdev, struct qt2160_led, cdev);
124
125 led->new_brightness = value;
126 schedule_work(&led->work);
127}
128
129#endif /* CONFIG_LEDS_CLASS */
130
61static int qt2160_read_block(struct i2c_client *client, 131static int qt2160_read_block(struct i2c_client *client,
62 u8 inireg, u8 *buffer, unsigned int count) 132 u8 inireg, u8 *buffer, unsigned int count)
63{ 133{
@@ -216,6 +286,63 @@ static int qt2160_write(struct i2c_client *client, u8 reg, u8 data)
216 return ret; 286 return ret;
217} 287}
218 288
289#ifdef CONFIG_LEDS_CLASS
290
291static int qt2160_register_leds(struct qt2160_data *qt2160)
292{
293 struct i2c_client *client = qt2160->client;
294 int ret;
295 int i;
296
297 mutex_init(&qt2160->led_lock);
298
299 for (i = 0; i < QT2160_NUM_LEDS_X; i++) {
300 struct qt2160_led *led = &qt2160->leds[i];
301
302 snprintf(led->name, sizeof(led->name), "qt2160:x%d", i);
303 led->cdev.name = led->name;
304 led->cdev.brightness_set = qt2160_led_set;
305 led->cdev.brightness = LED_OFF;
306 led->id = i;
307 led->qt2160 = qt2160;
308
309 INIT_WORK(&led->work, qt2160_led_work);
310
311 ret = led_classdev_register(&client->dev, &led->cdev);
312 if (ret < 0)
313 return ret;
314 }
315
316 /* Tur off LEDs */
317 qt2160_write(client, QT2160_CMD_DRIVE_X, 0);
318 qt2160_write(client, QT2160_CMD_PWMEN_X, 0);
319 qt2160_write(client, QT2160_CMD_PWM_DUTY, 0);
320
321 return 0;
322}
323
324static void qt2160_unregister_leds(struct qt2160_data *qt2160)
325{
326 int i;
327
328 for (i = 0; i < QT2160_NUM_LEDS_X; i++) {
329 led_classdev_unregister(&qt2160->leds[i].cdev);
330 cancel_work_sync(&qt2160->leds[i].work);
331 }
332}
333
334#else
335
336static inline int qt2160_register_leds(struct qt2160_data *qt2160)
337{
338 return 0;
339}
340
341static inline void qt2160_unregister_leds(struct qt2160_data *qt2160)
342{
343}
344
345#endif
219 346
220static bool qt2160_identify(struct i2c_client *client) 347static bool qt2160_identify(struct i2c_client *client)
221{ 348{
@@ -249,7 +376,7 @@ static bool qt2160_identify(struct i2c_client *client)
249} 376}
250 377
251static int qt2160_probe(struct i2c_client *client, 378static int qt2160_probe(struct i2c_client *client,
252 const struct i2c_device_id *id) 379 const struct i2c_device_id *id)
253{ 380{
254 struct qt2160_data *qt2160; 381 struct qt2160_data *qt2160;
255 struct input_dev *input; 382 struct input_dev *input;
@@ -314,11 +441,17 @@ static int qt2160_probe(struct i2c_client *client,
314 } 441 }
315 } 442 }
316 443
444 error = qt2160_register_leds(qt2160);
445 if (error) {
446 dev_err(&client->dev, "Failed to register leds\n");
447 goto err_free_irq;
448 }
449
317 error = input_register_device(qt2160->input); 450 error = input_register_device(qt2160->input);
318 if (error) { 451 if (error) {
319 dev_err(&client->dev, 452 dev_err(&client->dev,
320 "Failed to register input device\n"); 453 "Failed to register input device\n");
321 goto err_free_irq; 454 goto err_unregister_leds;
322 } 455 }
323 456
324 i2c_set_clientdata(client, qt2160); 457 i2c_set_clientdata(client, qt2160);
@@ -326,6 +459,8 @@ static int qt2160_probe(struct i2c_client *client,
326 459
327 return 0; 460 return 0;
328 461
462err_unregister_leds:
463 qt2160_unregister_leds(qt2160);
329err_free_irq: 464err_free_irq:
330 if (client->irq) 465 if (client->irq)
331 free_irq(client->irq, qt2160); 466 free_irq(client->irq, qt2160);
@@ -339,6 +474,8 @@ static int qt2160_remove(struct i2c_client *client)
339{ 474{
340 struct qt2160_data *qt2160 = i2c_get_clientdata(client); 475 struct qt2160_data *qt2160 = i2c_get_clientdata(client);
341 476
477 qt2160_unregister_leds(qt2160);
478
342 /* Release IRQ so no queue will be scheduled */ 479 /* Release IRQ so no queue will be scheduled */
343 if (client->irq) 480 if (client->irq)
344 free_irq(client->irq, qt2160); 481 free_irq(client->irq, qt2160);
diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c
index c76f96872d31..d89e7d392d1e 100644
--- a/drivers/input/keyboard/tegra-kbc.c
+++ b/drivers/input/keyboard/tegra-kbc.c
@@ -29,9 +29,16 @@
29#include <linux/of.h> 29#include <linux/of.h>
30#include <linux/clk.h> 30#include <linux/clk.h>
31#include <linux/slab.h> 31#include <linux/slab.h>
32#include <linux/input/tegra_kbc.h> 32#include <linux/input/matrix_keypad.h>
33#include <mach/clk.h> 33#include <mach/clk.h>
34 34
35#define KBC_MAX_GPIO 24
36#define KBC_MAX_KPENT 8
37
38#define KBC_MAX_ROW 16
39#define KBC_MAX_COL 8
40#define KBC_MAX_KEY (KBC_MAX_ROW * KBC_MAX_COL)
41
35#define KBC_MAX_DEBOUNCE_CNT 0x3ffu 42#define KBC_MAX_DEBOUNCE_CNT 0x3ffu
36 43
37/* KBC row scan time and delay for beginning the row scan. */ 44/* KBC row scan time and delay for beginning the row scan. */
@@ -67,10 +74,27 @@
67 74
68#define KBC_ROW_SHIFT 3 75#define KBC_ROW_SHIFT 3
69 76
77enum tegra_pin_type {
78 PIN_CFG_IGNORE,
79 PIN_CFG_COL,
80 PIN_CFG_ROW,
81};
82
83struct tegra_kbc_pin_cfg {
84 enum tegra_pin_type type;
85 unsigned char num;
86};
87
70struct tegra_kbc { 88struct tegra_kbc {
89 struct device *dev;
90 unsigned int debounce_cnt;
91 unsigned int repeat_cnt;
92 struct tegra_kbc_pin_cfg pin_cfg[KBC_MAX_GPIO];
93 const struct matrix_keymap_data *keymap_data;
94 bool wakeup;
71 void __iomem *mmio; 95 void __iomem *mmio;
72 struct input_dev *idev; 96 struct input_dev *idev;
73 unsigned int irq; 97 int irq;
74 spinlock_t lock; 98 spinlock_t lock;
75 unsigned int repoll_dly; 99 unsigned int repoll_dly;
76 unsigned long cp_dly_jiffies; 100 unsigned long cp_dly_jiffies;
@@ -78,7 +102,6 @@ struct tegra_kbc {
78 bool use_fn_map; 102 bool use_fn_map;
79 bool use_ghost_filter; 103 bool use_ghost_filter;
80 bool keypress_caused_wake; 104 bool keypress_caused_wake;
81 const struct tegra_kbc_platform_data *pdata;
82 unsigned short keycode[KBC_MAX_KEY * 2]; 105 unsigned short keycode[KBC_MAX_KEY * 2];
83 unsigned short current_keys[KBC_MAX_KPENT]; 106 unsigned short current_keys[KBC_MAX_KPENT];
84 unsigned int num_pressed_keys; 107 unsigned int num_pressed_keys;
@@ -87,147 +110,6 @@ struct tegra_kbc {
87 struct clk *clk; 110 struct clk *clk;
88}; 111};
89 112
90static const u32 tegra_kbc_default_keymap[] = {
91 KEY(0, 2, KEY_W),
92 KEY(0, 3, KEY_S),
93 KEY(0, 4, KEY_A),
94 KEY(0, 5, KEY_Z),
95 KEY(0, 7, KEY_FN),
96
97 KEY(1, 7, KEY_LEFTMETA),
98
99 KEY(2, 6, KEY_RIGHTALT),
100 KEY(2, 7, KEY_LEFTALT),
101
102 KEY(3, 0, KEY_5),
103 KEY(3, 1, KEY_4),
104 KEY(3, 2, KEY_R),
105 KEY(3, 3, KEY_E),
106 KEY(3, 4, KEY_F),
107 KEY(3, 5, KEY_D),
108 KEY(3, 6, KEY_X),
109
110 KEY(4, 0, KEY_7),
111 KEY(4, 1, KEY_6),
112 KEY(4, 2, KEY_T),
113 KEY(4, 3, KEY_H),
114 KEY(4, 4, KEY_G),
115 KEY(4, 5, KEY_V),
116 KEY(4, 6, KEY_C),
117 KEY(4, 7, KEY_SPACE),
118
119 KEY(5, 0, KEY_9),
120 KEY(5, 1, KEY_8),
121 KEY(5, 2, KEY_U),
122 KEY(5, 3, KEY_Y),
123 KEY(5, 4, KEY_J),
124 KEY(5, 5, KEY_N),
125 KEY(5, 6, KEY_B),
126 KEY(5, 7, KEY_BACKSLASH),
127
128 KEY(6, 0, KEY_MINUS),
129 KEY(6, 1, KEY_0),
130 KEY(6, 2, KEY_O),
131 KEY(6, 3, KEY_I),
132 KEY(6, 4, KEY_L),
133 KEY(6, 5, KEY_K),
134 KEY(6, 6, KEY_COMMA),
135 KEY(6, 7, KEY_M),
136
137 KEY(7, 1, KEY_EQUAL),
138 KEY(7, 2, KEY_RIGHTBRACE),
139 KEY(7, 3, KEY_ENTER),
140 KEY(7, 7, KEY_MENU),
141
142 KEY(8, 4, KEY_RIGHTSHIFT),
143 KEY(8, 5, KEY_LEFTSHIFT),
144
145 KEY(9, 5, KEY_RIGHTCTRL),
146 KEY(9, 7, KEY_LEFTCTRL),
147
148 KEY(11, 0, KEY_LEFTBRACE),
149 KEY(11, 1, KEY_P),
150 KEY(11, 2, KEY_APOSTROPHE),
151 KEY(11, 3, KEY_SEMICOLON),
152 KEY(11, 4, KEY_SLASH),
153 KEY(11, 5, KEY_DOT),
154
155 KEY(12, 0, KEY_F10),
156 KEY(12, 1, KEY_F9),
157 KEY(12, 2, KEY_BACKSPACE),
158 KEY(12, 3, KEY_3),
159 KEY(12, 4, KEY_2),
160 KEY(12, 5, KEY_UP),
161 KEY(12, 6, KEY_PRINT),
162 KEY(12, 7, KEY_PAUSE),
163
164 KEY(13, 0, KEY_INSERT),
165 KEY(13, 1, KEY_DELETE),
166 KEY(13, 3, KEY_PAGEUP),
167 KEY(13, 4, KEY_PAGEDOWN),
168 KEY(13, 5, KEY_RIGHT),
169 KEY(13, 6, KEY_DOWN),
170 KEY(13, 7, KEY_LEFT),
171
172 KEY(14, 0, KEY_F11),
173 KEY(14, 1, KEY_F12),
174 KEY(14, 2, KEY_F8),
175 KEY(14, 3, KEY_Q),
176 KEY(14, 4, KEY_F4),
177 KEY(14, 5, KEY_F3),
178 KEY(14, 6, KEY_1),
179 KEY(14, 7, KEY_F7),
180
181 KEY(15, 0, KEY_ESC),
182 KEY(15, 1, KEY_GRAVE),
183 KEY(15, 2, KEY_F5),
184 KEY(15, 3, KEY_TAB),
185 KEY(15, 4, KEY_F1),
186 KEY(15, 5, KEY_F2),
187 KEY(15, 6, KEY_CAPSLOCK),
188 KEY(15, 7, KEY_F6),
189
190 /* Software Handled Function Keys */
191 KEY(20, 0, KEY_KP7),
192
193 KEY(21, 0, KEY_KP9),
194 KEY(21, 1, KEY_KP8),
195 KEY(21, 2, KEY_KP4),
196 KEY(21, 4, KEY_KP1),
197
198 KEY(22, 1, KEY_KPSLASH),
199 KEY(22, 2, KEY_KP6),
200 KEY(22, 3, KEY_KP5),
201 KEY(22, 4, KEY_KP3),
202 KEY(22, 5, KEY_KP2),
203 KEY(22, 7, KEY_KP0),
204
205 KEY(27, 1, KEY_KPASTERISK),
206 KEY(27, 3, KEY_KPMINUS),
207 KEY(27, 4, KEY_KPPLUS),
208 KEY(27, 5, KEY_KPDOT),
209
210 KEY(28, 5, KEY_VOLUMEUP),
211
212 KEY(29, 3, KEY_HOME),
213 KEY(29, 4, KEY_END),
214 KEY(29, 5, KEY_BRIGHTNESSDOWN),
215 KEY(29, 6, KEY_VOLUMEDOWN),
216 KEY(29, 7, KEY_BRIGHTNESSUP),
217
218 KEY(30, 0, KEY_NUMLOCK),
219 KEY(30, 1, KEY_SCROLLLOCK),
220 KEY(30, 2, KEY_MUTE),
221
222 KEY(31, 4, KEY_HELP),
223};
224
225static const
226struct matrix_keymap_data tegra_kbc_default_keymap_data = {
227 .keymap = tegra_kbc_default_keymap,
228 .keymap_size = ARRAY_SIZE(tegra_kbc_default_keymap),
229};
230
231static void tegra_kbc_report_released_keys(struct input_dev *input, 113static void tegra_kbc_report_released_keys(struct input_dev *input,
232 unsigned short old_keycodes[], 114 unsigned short old_keycodes[],
233 unsigned int old_num_keys, 115 unsigned int old_num_keys,
@@ -357,18 +239,6 @@ static void tegra_kbc_set_fifo_interrupt(struct tegra_kbc *kbc, bool enable)
357 writel(val, kbc->mmio + KBC_CONTROL_0); 239 writel(val, kbc->mmio + KBC_CONTROL_0);
358} 240}
359 241
360static void tegra_kbc_set_keypress_interrupt(struct tegra_kbc *kbc, bool enable)
361{
362 u32 val;
363
364 val = readl(kbc->mmio + KBC_CONTROL_0);
365 if (enable)
366 val |= KBC_CONTROL_KEYPRESS_INT_EN;
367 else
368 val &= ~KBC_CONTROL_KEYPRESS_INT_EN;
369 writel(val, kbc->mmio + KBC_CONTROL_0);
370}
371
372static void tegra_kbc_keypress_timer(unsigned long data) 242static void tegra_kbc_keypress_timer(unsigned long data)
373{ 243{
374 struct tegra_kbc *kbc = (struct tegra_kbc *)data; 244 struct tegra_kbc *kbc = (struct tegra_kbc *)data;
@@ -439,12 +309,11 @@ static irqreturn_t tegra_kbc_isr(int irq, void *args)
439 309
440static void tegra_kbc_setup_wakekeys(struct tegra_kbc *kbc, bool filter) 310static void tegra_kbc_setup_wakekeys(struct tegra_kbc *kbc, bool filter)
441{ 311{
442 const struct tegra_kbc_platform_data *pdata = kbc->pdata;
443 int i; 312 int i;
444 unsigned int rst_val; 313 unsigned int rst_val;
445 314
446 /* Either mask all keys or none. */ 315 /* Either mask all keys or none. */
447 rst_val = (filter && !pdata->wakeup) ? ~0 : 0; 316 rst_val = (filter && !kbc->wakeup) ? ~0 : 0;
448 317
449 for (i = 0; i < KBC_MAX_ROW; i++) 318 for (i = 0; i < KBC_MAX_ROW; i++)
450 writel(rst_val, kbc->mmio + KBC_ROW0_MASK_0 + i * 4); 319 writel(rst_val, kbc->mmio + KBC_ROW0_MASK_0 + i * 4);
@@ -452,7 +321,6 @@ static void tegra_kbc_setup_wakekeys(struct tegra_kbc *kbc, bool filter)
452 321
453static void tegra_kbc_config_pins(struct tegra_kbc *kbc) 322static void tegra_kbc_config_pins(struct tegra_kbc *kbc)
454{ 323{
455 const struct tegra_kbc_platform_data *pdata = kbc->pdata;
456 int i; 324 int i;
457 325
458 for (i = 0; i < KBC_MAX_GPIO; i++) { 326 for (i = 0; i < KBC_MAX_GPIO; i++) {
@@ -468,13 +336,13 @@ static void tegra_kbc_config_pins(struct tegra_kbc *kbc)
468 row_cfg &= ~r_mask; 336 row_cfg &= ~r_mask;
469 col_cfg &= ~c_mask; 337 col_cfg &= ~c_mask;
470 338
471 switch (pdata->pin_cfg[i].type) { 339 switch (kbc->pin_cfg[i].type) {
472 case PIN_CFG_ROW: 340 case PIN_CFG_ROW:
473 row_cfg |= ((pdata->pin_cfg[i].num << 1) | 1) << r_shft; 341 row_cfg |= ((kbc->pin_cfg[i].num << 1) | 1) << r_shft;
474 break; 342 break;
475 343
476 case PIN_CFG_COL: 344 case PIN_CFG_COL:
477 col_cfg |= ((pdata->pin_cfg[i].num << 1) | 1) << c_shft; 345 col_cfg |= ((kbc->pin_cfg[i].num << 1) | 1) << c_shft;
478 break; 346 break;
479 347
480 case PIN_CFG_IGNORE: 348 case PIN_CFG_IGNORE:
@@ -488,7 +356,6 @@ static void tegra_kbc_config_pins(struct tegra_kbc *kbc)
488 356
489static int tegra_kbc_start(struct tegra_kbc *kbc) 357static int tegra_kbc_start(struct tegra_kbc *kbc)
490{ 358{
491 const struct tegra_kbc_platform_data *pdata = kbc->pdata;
492 unsigned int debounce_cnt; 359 unsigned int debounce_cnt;
493 u32 val = 0; 360 u32 val = 0;
494 361
@@ -503,10 +370,10 @@ static int tegra_kbc_start(struct tegra_kbc *kbc)
503 tegra_kbc_config_pins(kbc); 370 tegra_kbc_config_pins(kbc);
504 tegra_kbc_setup_wakekeys(kbc, false); 371 tegra_kbc_setup_wakekeys(kbc, false);
505 372
506 writel(pdata->repeat_cnt, kbc->mmio + KBC_RPT_DLY_0); 373 writel(kbc->repeat_cnt, kbc->mmio + KBC_RPT_DLY_0);
507 374
508 /* Keyboard debounce count is maximum of 12 bits. */ 375 /* Keyboard debounce count is maximum of 12 bits. */
509 debounce_cnt = min(pdata->debounce_cnt, KBC_MAX_DEBOUNCE_CNT); 376 debounce_cnt = min(kbc->debounce_cnt, KBC_MAX_DEBOUNCE_CNT);
510 val = KBC_DEBOUNCE_CNT_SHIFT(debounce_cnt); 377 val = KBC_DEBOUNCE_CNT_SHIFT(debounce_cnt);
511 val |= KBC_FIFO_TH_CNT_SHIFT(1); /* set fifo interrupt threshold to 1 */ 378 val |= KBC_FIFO_TH_CNT_SHIFT(1); /* set fifo interrupt threshold to 1 */
512 val |= KBC_CONTROL_FIFO_CNT_INT_EN; /* interrupt on FIFO threshold */ 379 val |= KBC_CONTROL_FIFO_CNT_INT_EN; /* interrupt on FIFO threshold */
@@ -573,21 +440,20 @@ static void tegra_kbc_close(struct input_dev *dev)
573 return tegra_kbc_stop(kbc); 440 return tegra_kbc_stop(kbc);
574} 441}
575 442
576static bool 443static bool tegra_kbc_check_pin_cfg(const struct tegra_kbc *kbc,
577tegra_kbc_check_pin_cfg(const struct tegra_kbc_platform_data *pdata, 444 unsigned int *num_rows)
578 struct device *dev, unsigned int *num_rows)
579{ 445{
580 int i; 446 int i;
581 447
582 *num_rows = 0; 448 *num_rows = 0;
583 449
584 for (i = 0; i < KBC_MAX_GPIO; i++) { 450 for (i = 0; i < KBC_MAX_GPIO; i++) {
585 const struct tegra_kbc_pin_cfg *pin_cfg = &pdata->pin_cfg[i]; 451 const struct tegra_kbc_pin_cfg *pin_cfg = &kbc->pin_cfg[i];
586 452
587 switch (pin_cfg->type) { 453 switch (pin_cfg->type) {
588 case PIN_CFG_ROW: 454 case PIN_CFG_ROW:
589 if (pin_cfg->num >= KBC_MAX_ROW) { 455 if (pin_cfg->num >= KBC_MAX_ROW) {
590 dev_err(dev, 456 dev_err(kbc->dev,
591 "pin_cfg[%d]: invalid row number %d\n", 457 "pin_cfg[%d]: invalid row number %d\n",
592 i, pin_cfg->num); 458 i, pin_cfg->num);
593 return false; 459 return false;
@@ -597,7 +463,7 @@ tegra_kbc_check_pin_cfg(const struct tegra_kbc_platform_data *pdata,
597 463
598 case PIN_CFG_COL: 464 case PIN_CFG_COL:
599 if (pin_cfg->num >= KBC_MAX_COL) { 465 if (pin_cfg->num >= KBC_MAX_COL) {
600 dev_err(dev, 466 dev_err(kbc->dev,
601 "pin_cfg[%d]: invalid column number %d\n", 467 "pin_cfg[%d]: invalid column number %d\n",
602 i, pin_cfg->num); 468 i, pin_cfg->num);
603 return false; 469 return false;
@@ -608,7 +474,7 @@ tegra_kbc_check_pin_cfg(const struct tegra_kbc_platform_data *pdata,
608 break; 474 break;
609 475
610 default: 476 default:
611 dev_err(dev, 477 dev_err(kbc->dev,
612 "pin_cfg[%d]: invalid entry type %d\n", 478 "pin_cfg[%d]: invalid entry type %d\n",
613 pin_cfg->type, pin_cfg->num); 479 pin_cfg->type, pin_cfg->num);
614 return false; 480 return false;
@@ -618,154 +484,140 @@ tegra_kbc_check_pin_cfg(const struct tegra_kbc_platform_data *pdata,
618 return true; 484 return true;
619} 485}
620 486
621#ifdef CONFIG_OF 487static int tegra_kbc_parse_dt(struct tegra_kbc *kbc)
622static struct tegra_kbc_platform_data *tegra_kbc_dt_parse_pdata(
623 struct platform_device *pdev)
624{ 488{
625 struct tegra_kbc_platform_data *pdata; 489 struct device_node *np = kbc->dev->of_node;
626 struct device_node *np = pdev->dev.of_node;
627 u32 prop; 490 u32 prop;
628 int i; 491 int i;
629 492 u32 num_rows = 0;
630 if (!np) 493 u32 num_cols = 0;
631 return NULL; 494 u32 cols_cfg[KBC_MAX_GPIO];
632 495 u32 rows_cfg[KBC_MAX_GPIO];
633 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); 496 int proplen;
634 if (!pdata) 497 int ret;
635 return NULL;
636 498
637 if (!of_property_read_u32(np, "nvidia,debounce-delay-ms", &prop)) 499 if (!of_property_read_u32(np, "nvidia,debounce-delay-ms", &prop))
638 pdata->debounce_cnt = prop; 500 kbc->debounce_cnt = prop;
639 501
640 if (!of_property_read_u32(np, "nvidia,repeat-delay-ms", &prop)) 502 if (!of_property_read_u32(np, "nvidia,repeat-delay-ms", &prop))
641 pdata->repeat_cnt = prop; 503 kbc->repeat_cnt = prop;
642 504
643 if (of_find_property(np, "nvidia,needs-ghost-filter", NULL)) 505 if (of_find_property(np, "nvidia,needs-ghost-filter", NULL))
644 pdata->use_ghost_filter = true; 506 kbc->use_ghost_filter = true;
645 507
646 if (of_find_property(np, "nvidia,wakeup-source", NULL)) 508 if (of_find_property(np, "nvidia,wakeup-source", NULL))
647 pdata->wakeup = true; 509 kbc->wakeup = true;
648 510
649 /* 511 if (!of_get_property(np, "nvidia,kbc-row-pins", &proplen)) {
650 * All currently known keymaps with device tree support use the same 512 dev_err(kbc->dev, "property nvidia,kbc-row-pins not found\n");
651 * pin_cfg, so set it up here. 513 return -ENOENT;
652 */
653 for (i = 0; i < KBC_MAX_ROW; i++) {
654 pdata->pin_cfg[i].num = i;
655 pdata->pin_cfg[i].type = PIN_CFG_ROW;
656 } 514 }
515 num_rows = proplen / sizeof(u32);
657 516
658 for (i = 0; i < KBC_MAX_COL; i++) { 517 if (!of_get_property(np, "nvidia,kbc-col-pins", &proplen)) {
659 pdata->pin_cfg[KBC_MAX_ROW + i].num = i; 518 dev_err(kbc->dev, "property nvidia,kbc-col-pins not found\n");
660 pdata->pin_cfg[KBC_MAX_ROW + i].type = PIN_CFG_COL; 519 return -ENOENT;
661 } 520 }
521 num_cols = proplen / sizeof(u32);
662 522
663 return pdata; 523 if (!of_get_property(np, "linux,keymap", &proplen)) {
664} 524 dev_err(kbc->dev, "property linux,keymap not found\n");
665#else 525 return -ENOENT;
666static inline struct tegra_kbc_platform_data *tegra_kbc_dt_parse_pdata( 526 }
667 struct platform_device *pdev)
668{
669 return NULL;
670}
671#endif
672 527
673static int tegra_kbd_setup_keymap(struct tegra_kbc *kbc) 528 if (!num_rows || !num_cols || ((num_rows + num_cols) > KBC_MAX_GPIO)) {
674{ 529 dev_err(kbc->dev,
675 const struct tegra_kbc_platform_data *pdata = kbc->pdata; 530 "keypad rows/columns not porperly specified\n");
676 const struct matrix_keymap_data *keymap_data = pdata->keymap_data; 531 return -EINVAL;
677 unsigned int keymap_rows = KBC_MAX_KEY; 532 }
678 int retval;
679 533
680 if (keymap_data && pdata->use_fn_map) 534 /* Set all pins as non-configured */
681 keymap_rows *= 2; 535 for (i = 0; i < KBC_MAX_GPIO; i++)
536 kbc->pin_cfg[i].type = PIN_CFG_IGNORE;
682 537
683 retval = matrix_keypad_build_keymap(keymap_data, NULL, 538 ret = of_property_read_u32_array(np, "nvidia,kbc-row-pins",
684 keymap_rows, KBC_MAX_COL, 539 rows_cfg, num_rows);
685 kbc->keycode, kbc->idev); 540 if (ret < 0) {
686 if (retval == -ENOSYS || retval == -ENOENT) { 541 dev_err(kbc->dev, "Rows configurations are not proper\n");
687 /* 542 return -EINVAL;
688 * If there is no OF support in kernel or keymap 543 }
689 * property is missing, use default keymap. 544
690 */ 545 ret = of_property_read_u32_array(np, "nvidia,kbc-col-pins",
691 retval = matrix_keypad_build_keymap( 546 cols_cfg, num_cols);
692 &tegra_kbc_default_keymap_data, NULL, 547 if (ret < 0) {
693 keymap_rows, KBC_MAX_COL, 548 dev_err(kbc->dev, "Cols configurations are not proper\n");
694 kbc->keycode, kbc->idev); 549 return -EINVAL;
550 }
551
552 for (i = 0; i < num_rows; i++) {
553 kbc->pin_cfg[rows_cfg[i]].type = PIN_CFG_ROW;
554 kbc->pin_cfg[rows_cfg[i]].num = i;
695 } 555 }
696 556
697 return retval; 557 for (i = 0; i < num_cols; i++) {
558 kbc->pin_cfg[cols_cfg[i]].type = PIN_CFG_COL;
559 kbc->pin_cfg[cols_cfg[i]].num = i;
560 }
561
562 return 0;
698} 563}
699 564
700static int tegra_kbc_probe(struct platform_device *pdev) 565static int tegra_kbc_probe(struct platform_device *pdev)
701{ 566{
702 const struct tegra_kbc_platform_data *pdata = pdev->dev.platform_data;
703 struct tegra_kbc *kbc; 567 struct tegra_kbc *kbc;
704 struct input_dev *input_dev;
705 struct resource *res; 568 struct resource *res;
706 int irq;
707 int err; 569 int err;
708 int num_rows = 0; 570 int num_rows = 0;
709 unsigned int debounce_cnt; 571 unsigned int debounce_cnt;
710 unsigned int scan_time_rows; 572 unsigned int scan_time_rows;
573 unsigned int keymap_rows = KBC_MAX_KEY;
711 574
712 if (!pdata) 575 kbc = devm_kzalloc(&pdev->dev, sizeof(*kbc), GFP_KERNEL);
713 pdata = tegra_kbc_dt_parse_pdata(pdev); 576 if (!kbc) {
577 dev_err(&pdev->dev, "failed to alloc memory for kbc\n");
578 return -ENOMEM;
579 }
714 580
715 if (!pdata) 581 kbc->dev = &pdev->dev;
716 return -EINVAL; 582 spin_lock_init(&kbc->lock);
717 583
718 if (!tegra_kbc_check_pin_cfg(pdata, &pdev->dev, &num_rows)) { 584 err = tegra_kbc_parse_dt(kbc);
719 err = -EINVAL; 585 if (err)
720 goto err_free_pdata; 586 return err;
721 } 587
588 if (!tegra_kbc_check_pin_cfg(kbc, &num_rows))
589 return -EINVAL;
722 590
723 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 591 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
724 if (!res) { 592 if (!res) {
725 dev_err(&pdev->dev, "failed to get I/O memory\n"); 593 dev_err(&pdev->dev, "failed to get I/O memory\n");
726 err = -ENXIO; 594 return -ENXIO;
727 goto err_free_pdata;
728 } 595 }
729 596
730 irq = platform_get_irq(pdev, 0); 597 kbc->irq = platform_get_irq(pdev, 0);
731 if (irq < 0) { 598 if (kbc->irq < 0) {
732 dev_err(&pdev->dev, "failed to get keyboard IRQ\n"); 599 dev_err(&pdev->dev, "failed to get keyboard IRQ\n");
733 err = -ENXIO; 600 return -ENXIO;
734 goto err_free_pdata;
735 } 601 }
736 602
737 kbc = kzalloc(sizeof(*kbc), GFP_KERNEL); 603 kbc->idev = devm_input_allocate_device(&pdev->dev);
738 input_dev = input_allocate_device(); 604 if (!kbc->idev) {
739 if (!kbc || !input_dev) { 605 dev_err(&pdev->dev, "failed to allocate input device\n");
740 err = -ENOMEM; 606 return -ENOMEM;
741 goto err_free_mem;
742 } 607 }
743 608
744 kbc->pdata = pdata;
745 kbc->idev = input_dev;
746 kbc->irq = irq;
747 spin_lock_init(&kbc->lock);
748 setup_timer(&kbc->timer, tegra_kbc_keypress_timer, (unsigned long)kbc); 609 setup_timer(&kbc->timer, tegra_kbc_keypress_timer, (unsigned long)kbc);
749 610
750 res = request_mem_region(res->start, resource_size(res), pdev->name); 611 kbc->mmio = devm_request_and_ioremap(&pdev->dev, res);
751 if (!res) {
752 dev_err(&pdev->dev, "failed to request I/O memory\n");
753 err = -EBUSY;
754 goto err_free_mem;
755 }
756
757 kbc->mmio = ioremap(res->start, resource_size(res));
758 if (!kbc->mmio) { 612 if (!kbc->mmio) {
759 dev_err(&pdev->dev, "failed to remap I/O memory\n"); 613 dev_err(&pdev->dev, "Cannot request memregion/iomap address\n");
760 err = -ENXIO; 614 return -EBUSY;
761 goto err_free_mem_region;
762 } 615 }
763 616
764 kbc->clk = clk_get(&pdev->dev, NULL); 617 kbc->clk = devm_clk_get(&pdev->dev, NULL);
765 if (IS_ERR(kbc->clk)) { 618 if (IS_ERR(kbc->clk)) {
766 dev_err(&pdev->dev, "failed to get keyboard clock\n"); 619 dev_err(&pdev->dev, "failed to get keyboard clock\n");
767 err = PTR_ERR(kbc->clk); 620 return PTR_ERR(kbc->clk);
768 goto err_iounmap;
769 } 621 }
770 622
771 /* 623 /*
@@ -774,37 +626,38 @@ static int tegra_kbc_probe(struct platform_device *pdev)
774 * the rows. There is an additional delay before the row scanning 626 * the rows. There is an additional delay before the row scanning
775 * starts. The repoll delay is computed in milliseconds. 627 * starts. The repoll delay is computed in milliseconds.
776 */ 628 */
777 debounce_cnt = min(pdata->debounce_cnt, KBC_MAX_DEBOUNCE_CNT); 629 debounce_cnt = min(kbc->debounce_cnt, KBC_MAX_DEBOUNCE_CNT);
778 scan_time_rows = (KBC_ROW_SCAN_TIME + debounce_cnt) * num_rows; 630 scan_time_rows = (KBC_ROW_SCAN_TIME + debounce_cnt) * num_rows;
779 kbc->repoll_dly = KBC_ROW_SCAN_DLY + scan_time_rows + pdata->repeat_cnt; 631 kbc->repoll_dly = KBC_ROW_SCAN_DLY + scan_time_rows + kbc->repeat_cnt;
780 kbc->repoll_dly = DIV_ROUND_UP(kbc->repoll_dly, KBC_CYCLE_MS); 632 kbc->repoll_dly = DIV_ROUND_UP(kbc->repoll_dly, KBC_CYCLE_MS);
781 633
782 kbc->wakeup_key = pdata->wakeup_key; 634 kbc->idev->name = pdev->name;
783 kbc->use_fn_map = pdata->use_fn_map; 635 kbc->idev->id.bustype = BUS_HOST;
784 kbc->use_ghost_filter = pdata->use_ghost_filter; 636 kbc->idev->dev.parent = &pdev->dev;
637 kbc->idev->open = tegra_kbc_open;
638 kbc->idev->close = tegra_kbc_close;
785 639
786 input_dev->name = pdev->name; 640 if (kbc->keymap_data && kbc->use_fn_map)
787 input_dev->id.bustype = BUS_HOST; 641 keymap_rows *= 2;
788 input_dev->dev.parent = &pdev->dev;
789 input_dev->open = tegra_kbc_open;
790 input_dev->close = tegra_kbc_close;
791 642
792 err = tegra_kbd_setup_keymap(kbc); 643 err = matrix_keypad_build_keymap(kbc->keymap_data, NULL,
644 keymap_rows, KBC_MAX_COL,
645 kbc->keycode, kbc->idev);
793 if (err) { 646 if (err) {
794 dev_err(&pdev->dev, "failed to setup keymap\n"); 647 dev_err(&pdev->dev, "failed to setup keymap\n");
795 goto err_put_clk; 648 return err;
796 } 649 }
797 650
798 __set_bit(EV_REP, input_dev->evbit); 651 __set_bit(EV_REP, kbc->idev->evbit);
799 input_set_capability(input_dev, EV_MSC, MSC_SCAN); 652 input_set_capability(kbc->idev, EV_MSC, MSC_SCAN);
800 653
801 input_set_drvdata(input_dev, kbc); 654 input_set_drvdata(kbc->idev, kbc);
802 655
803 err = request_irq(kbc->irq, tegra_kbc_isr, 656 err = devm_request_irq(&pdev->dev, kbc->irq, tegra_kbc_isr,
804 IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, pdev->name, kbc); 657 IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, pdev->name, kbc);
805 if (err) { 658 if (err) {
806 dev_err(&pdev->dev, "failed to request keyboard IRQ\n"); 659 dev_err(&pdev->dev, "failed to request keyboard IRQ\n");
807 goto err_put_clk; 660 return err;
808 } 661 }
809 662
810 disable_irq(kbc->irq); 663 disable_irq(kbc->irq);
@@ -812,60 +665,28 @@ static int tegra_kbc_probe(struct platform_device *pdev)
812 err = input_register_device(kbc->idev); 665 err = input_register_device(kbc->idev);
813 if (err) { 666 if (err) {
814 dev_err(&pdev->dev, "failed to register input device\n"); 667 dev_err(&pdev->dev, "failed to register input device\n");
815 goto err_free_irq; 668 return err;
816 } 669 }
817 670
818 platform_set_drvdata(pdev, kbc); 671 platform_set_drvdata(pdev, kbc);
819 device_init_wakeup(&pdev->dev, pdata->wakeup); 672 device_init_wakeup(&pdev->dev, kbc->wakeup);
820 673
821 return 0; 674 return 0;
822
823err_free_irq:
824 free_irq(kbc->irq, pdev);
825err_put_clk:
826 clk_put(kbc->clk);
827err_iounmap:
828 iounmap(kbc->mmio);
829err_free_mem_region:
830 release_mem_region(res->start, resource_size(res));
831err_free_mem:
832 input_free_device(input_dev);
833 kfree(kbc);
834err_free_pdata:
835 if (!pdev->dev.platform_data)
836 kfree(pdata);
837
838 return err;
839} 675}
840 676
841static int tegra_kbc_remove(struct platform_device *pdev) 677#ifdef CONFIG_PM_SLEEP
678static void tegra_kbc_set_keypress_interrupt(struct tegra_kbc *kbc, bool enable)
842{ 679{
843 struct tegra_kbc *kbc = platform_get_drvdata(pdev); 680 u32 val;
844 struct resource *res;
845
846 platform_set_drvdata(pdev, NULL);
847
848 free_irq(kbc->irq, pdev);
849 clk_put(kbc->clk);
850
851 input_unregister_device(kbc->idev);
852 iounmap(kbc->mmio);
853 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
854 release_mem_region(res->start, resource_size(res));
855
856 /*
857 * If we do not have platform data attached to the device we
858 * allocated it ourselves and thus need to free it.
859 */
860 if (!pdev->dev.platform_data)
861 kfree(kbc->pdata);
862
863 kfree(kbc);
864 681
865 return 0; 682 val = readl(kbc->mmio + KBC_CONTROL_0);
683 if (enable)
684 val |= KBC_CONTROL_KEYPRESS_INT_EN;
685 else
686 val &= ~KBC_CONTROL_KEYPRESS_INT_EN;
687 writel(val, kbc->mmio + KBC_CONTROL_0);
866} 688}
867 689
868#ifdef CONFIG_PM_SLEEP
869static int tegra_kbc_suspend(struct device *dev) 690static int tegra_kbc_suspend(struct device *dev)
870{ 691{
871 struct platform_device *pdev = to_platform_device(dev); 692 struct platform_device *pdev = to_platform_device(dev);
@@ -954,7 +775,6 @@ MODULE_DEVICE_TABLE(of, tegra_kbc_of_match);
954 775
955static struct platform_driver tegra_kbc_driver = { 776static struct platform_driver tegra_kbc_driver = {
956 .probe = tegra_kbc_probe, 777 .probe = tegra_kbc_probe,
957 .remove = tegra_kbc_remove,
958 .driver = { 778 .driver = {
959 .name = "tegra-kbc", 779 .name = "tegra-kbc",
960 .owner = THIS_MODULE, 780 .owner = THIS_MODULE,