2 * TSC2301 keypad driver
4 * Copyright (C) 2005-2006 Nokia Corporation
6 * Written by Jarkko Oikarinen
7 * Rewritten by Juha Yrjola <juha.yrjola@nokia.com>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <linux/kernel.h>
26 #include <linux/module.h>
27 #include <linux/input.h>
28 #include <linux/interrupt.h>
29 #include <linux/irq.h>
30 #include <linux/delay.h>
31 #include <linux/spi/spi.h>
33 #include <linux/spi/tsc2301.h>
35 #define TSC2301_KEYBOARD_PRODUCT_ID 0x0051
36 #define TSC2301_KEYBOARD_PRODUCT_VERSION 0x0001
37 #define TSC2301_DEBOUNCE_TIME_2MS 0x0000
38 #define TSC2301_DEBOUNCE_TIME_10MS 0x0800
39 #define TSC2301_DEBOUNCE_TIME_20MS 0x1000
40 #define TSC2301_DEBOUNCE_TIME_50MS 0x1800
41 #define TSC2301_DEBOUNCE_TIME_60MS 0x2000
42 #define TSC2301_DEBOUNCE_TIME_80MS 0x2800
43 #define TSC2301_DEBOUNCE_TIME_100MS 0x3000
44 #define TSC2301_DEBOUNCE_TIME_120MS 0x3800
46 #define TSC2301_DEBOUNCE_TIME TSC2301_DEBOUNCE_TIME_20MS
48 #define TSC2301_RELEASE_TIMEOUT 50
51 struct input_dev *idev;
55 struct timer_list timer;
58 unsigned user_disabled:1;
59 unsigned disable_depth;
61 struct spi_transfer read_xfer[4];
62 struct spi_message read_msg;
71 static inline int tsc2301_kp_disabled(struct tsc2301 *tsc)
73 return tsc->kp->disable_depth != 0;
76 static void tsc2301_kp_send_key_events(struct tsc2301 *tsc,
80 struct tsc2301_kp *kp = tsc->kp;
81 u16 common, released, pressed;
84 common = prev_state & new_state;
85 released = common ^ prev_state;
86 pressed = common ^ new_state;
87 if (!released && !pressed)
89 for (i = 0; i < 16 && (released || pressed); i++) {
91 dev_dbg(&tsc->spi->dev, "key %d released\n", i);
92 input_report_key(kp->idev, kp->keymap[i], 0);
96 dev_dbg(&tsc->spi->dev, "key %d pressed\n", i);
97 input_report_key(kp->idev, kp->keymap[i], 1);
101 input_sync(kp->idev);
104 static inline void _filter_out(struct tsc2301 *tsc, u16 prev_state,
105 u16 *new_state, int row1, int row2, u8 rect_pat)
109 mask = (rect_pat << (row1 * 4)) | (rect_pat << (row2 * 4));
112 dev_dbg(&tsc->spi->dev, "filtering ghost keys %02x\n", mask);
115 static void tsc2301_filter_ghost_keys(struct tsc2301 *tsc, u16 prev_state,
121 static const u8 rect_pat[] = {
122 0x3, 0x5, 0x9, 0x6, 0xa, 0xc, 0,
125 key_map = *new_state;
126 for (row1 = 0; row1 < 4; row1++) {
127 row1_map = (key_map >> (row1 * 4)) & 0xf;
130 for (row2 = row1 + 1; row2 < 4; row2++) {
131 u16 rect_map = (key_map >> (row2 * 4)) & 0xf;
134 rect_map &= row1_map;
137 for (rp = rect_pat; *rp; rp++)
138 if ((rect_map & *rp) == *rp)
139 _filter_out(tsc, prev_state, new_state,
145 static void tsc2301_kp_timer(unsigned long arg)
147 struct tsc2301 *tsc = (void *) arg;
148 struct tsc2301_kp *kp = tsc->kp;
151 tsc2301_kp_send_key_events(tsc, kp->keys_pressed, 0);
152 spin_lock_irqsave(&kp->lock, flags);
153 kp->keys_pressed = 0;
154 spin_unlock_irqrestore(&kp->lock, flags);
157 static void tsc2301_kp_rx(void *arg)
159 struct tsc2301 *tsc = arg;
160 struct tsc2301_kp *kp = tsc->kp;
165 dev_dbg(&tsc->spi->dev, "KP data %04x\n", kp_data);
167 tsc2301_filter_ghost_keys(tsc, kp->keys_pressed, &kp_data);
168 tsc2301_kp_send_key_events(tsc, kp->keys_pressed, kp_data);
169 spin_lock_irqsave(&kp->lock, flags);
170 kp->keys_pressed = kp_data;
172 spin_unlock_irqrestore(&kp->lock, flags);
175 static irqreturn_t tsc2301_kp_irq_handler(int irq, void *dev_id)
177 struct tsc2301 *tsc = dev_id;
178 struct tsc2301_kp *kp = tsc->kp;
182 spin_lock_irqsave(&kp->lock, flags);
183 if (tsc2301_kp_disabled(tsc)) {
184 spin_unlock_irqrestore(&kp->lock, flags);
188 spin_unlock_irqrestore(&kp->lock, flags);
189 mod_timer(&kp->timer,
190 jiffies + msecs_to_jiffies(TSC2301_RELEASE_TIMEOUT));
191 r = spi_async(tsc->spi, &tsc->kp->read_msg);
193 dev_err(&tsc->spi->dev, "kp: spi_async() failed");
197 static void tsc2301_kp_start_scan(struct tsc2301 *tsc)
199 tsc2301_write_reg(tsc, TSC2301_REG_KPMASK, tsc->kp->mask);
200 tsc2301_write_reg(tsc, TSC2301_REG_KEY, TSC2301_DEBOUNCE_TIME);
203 static void tsc2301_kp_stop_scan(struct tsc2301 *tsc)
205 tsc2301_write_reg(tsc, TSC2301_REG_KEY, 1 << 14);
208 /* Must be called with the mutex held */
209 static void tsc2301_kp_enable(struct tsc2301 *tsc)
211 struct tsc2301_kp *kp = tsc->kp;
214 spin_lock_irqsave(&kp->lock, flags);
215 BUG_ON(!tsc2301_kp_disabled(tsc));
216 if (--kp->disable_depth != 0) {
217 spin_unlock_irqrestore(&kp->lock, flags);
220 spin_unlock_irqrestore(&kp->lock, flags);
222 set_irq_type(kp->irq, IRQT_FALLING);
223 tsc2301_kp_start_scan(tsc);
227 /* Must be called with the mutex held */
228 static int tsc2301_kp_disable(struct tsc2301 *tsc, int release_keys)
230 struct tsc2301_kp *kp = tsc->kp;
233 spin_lock_irqsave(&kp->lock, flags);
234 if (kp->disable_depth++ != 0) {
235 spin_unlock_irqrestore(&kp->lock, flags);
238 disable_irq_nosync(kp->irq);
239 set_irq_type(kp->irq, IRQT_NOEDGE);
240 spin_unlock_irqrestore(&kp->lock, flags);
242 while (kp->pending) {
246 tsc2301_kp_stop_scan(tsc);
249 del_timer(&kp->timer); /* let timeout release keys */
254 /* The following workaround is needed for a HW bug triggered by the
256 * 1. keep any key pressed
258 * 3. release all keys
260 * 5. disable touch screen controller
262 * After this the keypad scanner will get stuck in busy state and won't
263 * report any interrupts for further keypresses. One way to recover is to
264 * restart the keypad scanner whenever we enable / disable the
265 * touchscreen controller.
267 void tsc2301_kp_restart(struct tsc2301 *tsc)
269 if (!tsc2301_kp_disabled(tsc)) {
270 tsc2301_kp_start_scan(tsc);
274 static ssize_t tsc2301_kp_disable_show(struct device *dev,
275 struct device_attribute *attr, char *buf)
277 struct tsc2301 *tsc = dev_get_drvdata(dev);
279 return sprintf(buf, "%u\n", tsc2301_kp_disabled(tsc) ? 1 : 0);
282 static ssize_t tsc2301_kp_disable_store(struct device *dev,
283 struct device_attribute *attr,
284 const char *buf, size_t count)
286 struct tsc2301 *tsc = dev_get_drvdata(dev);
287 struct tsc2301_kp *kp = tsc->kp;
291 i = simple_strtoul(buf, &endp, 10);
294 mutex_lock(&kp->mutex);
295 if (i == kp->user_disabled) {
296 mutex_unlock(&kp->mutex);
299 kp->user_disabled = i;
302 tsc2301_kp_disable(tsc, 1);
304 tsc2301_kp_enable(tsc);
305 mutex_unlock(&kp->mutex);
310 static DEVICE_ATTR(disable_kp, 0664, tsc2301_kp_disable_show,
311 tsc2301_kp_disable_store);
313 static const u16 tsc2301_kp_read_data = 0x8000 | TSC2301_REG_KPDATA;
315 static void tsc2301_kp_setup_spi_xfer(struct tsc2301 *tsc)
317 struct tsc2301_kp *kp = tsc->kp;
318 struct spi_message *m = &kp->read_msg;
319 struct spi_transfer *x = &kp->read_xfer[0];
321 spi_message_init(&kp->read_msg);
323 x->tx_buf = &tsc2301_kp_read_data;
325 spi_message_add_tail(x, m);
328 x->rx_buf = &kp->data;
330 spi_message_add_tail(x, m);
332 m->complete = tsc2301_kp_rx;
337 int tsc2301_kp_suspend(struct tsc2301 *tsc)
339 struct tsc2301_kp *kp = tsc->kp;
341 mutex_lock(&kp->mutex);
342 tsc2301_kp_disable(tsc, 1);
343 mutex_unlock(&kp->mutex);
347 void tsc2301_kp_resume(struct tsc2301 *tsc)
349 struct tsc2301_kp *kp = tsc->kp;
351 mutex_lock(&kp->mutex);
352 tsc2301_kp_enable(tsc);
353 mutex_unlock(&kp->mutex);
357 int __devinit tsc2301_kp_init(struct tsc2301 *tsc,
358 struct tsc2301_platform_data *pdata)
360 struct input_dev *idev;
361 struct tsc2301_kp *kp;
365 if (pdata->keyb_int < 0) {
366 dev_err(&tsc->spi->dev, "need kbirq");
370 kp = kzalloc(sizeof(*kp), GFP_KERNEL);
375 kp->irq = pdata->keyb_int;
376 spin_lock_init(&kp->lock);
377 mutex_init(&kp->mutex);
379 init_timer(&kp->timer);
380 kp->timer.data = (unsigned long) tsc;
381 kp->timer.function = tsc2301_kp_timer;
383 idev = input_allocate_device();
388 if (pdata->keyb_name)
389 idev->name = pdata->keyb_name;
391 idev->name = "TSC2301 keypad";
392 snprintf(kp->phys, sizeof(kp->phys), "%s/input-kp", tsc->spi->dev.bus_id);
393 idev->phys = kp->phys;
396 idev->evbit[0] = BIT(EV_KEY);
397 for (i = 0; i < 16; i++) {
398 if (pdata->keymap[i] > 0) {
399 set_bit(pdata->keymap[i], idev->keybit);
400 kp->keymap[i] = pdata->keymap[i];
408 set_bit(EV_REP, idev->evbit);
412 tsc2301_kp_setup_spi_xfer(tsc);
414 r = device_create_file(&tsc->spi->dev, &dev_attr_disable_kp);
418 tsc2301_kp_start_scan(tsc);
420 /* IRQ mode 0 is faulty, it can cause the KBIRQ to get stuck.
421 * Mode 2 deasserts the IRQ at:
423 * - Setting SCS flag in REG_KEY register
424 * - Releasing all keys
425 * - Reading the REG_KPDATA
427 tsc2301_write_kbc(tsc, 2);
429 tsc2301_write_reg(tsc, TSC2301_REG_KPMASK, mask);
432 set_irq_type(kp->irq, IRQT_FALLING);
434 r = request_irq(kp->irq, tsc2301_kp_irq_handler, IRQF_SAMPLE_RANDOM,
437 dev_err(&tsc->spi->dev, "unable to get kbirq IRQ");
440 set_irq_wake(kp->irq, 1);
442 /* We need to read the register once..? */
443 tsc2301_read_reg(tsc, TSC2301_REG_KPDATA);
445 r = input_register_device(idev);
447 dev_err(&tsc->spi->dev, "can't register keypad device\n");
454 free_irq(kp->irq, tsc);
456 tsc2301_kp_stop_scan(tsc);
457 device_remove_file(&tsc->spi->dev, &dev_attr_disable_kp);
459 input_free_device(kp->idev);
465 void __devexit tsc2301_kp_exit(struct tsc2301 *tsc)
467 struct tsc2301_kp *kp = tsc->kp;
469 tsc2301_kp_disable(tsc, 1);
470 input_unregister_device(kp->idev);
471 free_irq(kp->irq, tsc);
472 device_remove_file(&tsc->spi->dev, &dev_attr_disable_kp);