blob: ba1374c96e7800e8cacd31a586b33ad378b98319 [file] [log] [blame]
Chandan Uddarajubedca152010-06-02 23:05:15 -07001/*
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -08002 * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
Chandan Uddarajubedca152010-06-02 23:05:15 -07003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution.
11 * * Neither the name of Code Aurora nor
12 * the names of its contributors may be used to endorse or promote
13 * products derived from this software without specific prior written
14 * permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include <dev/keys.h>
31#include <dev/gpio_keypad.h>
Greg Griscod6250552011-06-29 14:40:23 -070032#include <platform.h>
Chandan Uddarajubedca152010-06-02 23:05:15 -070033
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080034#define LINUX_MACHTYPE_8660_QT 3298
Chandan Uddarajubedca152010-06-02 23:05:15 -070035#define BITS_IN_ELEMENT(x) (sizeof(x)[0] * 8)
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080036#define KEYMAP_INDEX(row, col) (row)* BITS_IN_ELEMENT(qwerty_keys_new) + (col)
Chandan Uddarajubedca152010-06-02 23:05:15 -070037
38static unsigned char qwerty_keys_old[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
39static unsigned char qwerty_keys_new[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
40
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080041static unsigned int qt_keymap[] = {
42 [KEYMAP_INDEX(0, 3)] = KEY_BACK, /* Volume down key */
43 [KEYMAP_INDEX(1, 3)] = KEY_HOME, /* Volume up key */
44};
45
46static struct qwerty_keypad_info qt_keypad = {
47 .keymap = qt_keymap,
48 .old_keys = qwerty_keys_old,
49 .rec_keys = qwerty_keys_new,
50 .rows = 3,
51 .columns = 1,
52 .num_of_reads = 3,
53 .rd_func = &pa1_ssbi2_read_bytes,
54 .wr_func = &pa1_ssbi2_write_bytes,
55 .settle_time = 32 /* msec */,
56 .poll_time = 10 /* msec */,
57};
Chandan Uddarajubedca152010-06-02 23:05:15 -070058
59static unsigned int qwerty_keymap[] = {
60 [KEYMAP_INDEX(1, 3)] = KEY_BACK, /* Volume down key */
Shashank Mittal5ff3dd22011-01-07 18:54:16 -080061 [KEYMAP_INDEX(0, 3)] = KEY_HOME, /* Volume up key */
Chandan Uddarajubedca152010-06-02 23:05:15 -070062};
63
64static struct qwerty_keypad_info qwerty_keypad = {
65 .keymap = qwerty_keymap,
66 .old_keys = qwerty_keys_old,
67 .rec_keys = qwerty_keys_new,
68 .rows = 6,
69 .columns = 5,
70 .num_of_reads = 6,
71 .rd_func = &pa1_ssbi2_read_bytes,
72 .wr_func = &pa1_ssbi2_write_bytes,
73 .settle_time = 5 /* msec */,
74 .poll_time = 20 /* msec */,
75};
76
77void keypad_init(void)
78{
Subbaraman Narayanamurthy8f0b0452011-03-11 18:30:10 -080079 unsigned int mach_id;
80
81 mach_id = board_machtype();
82
83 if(mach_id == LINUX_MACHTYPE_8660_QT)
84 ssbi_keypad_init(&qt_keypad);
85 else
86 ssbi_keypad_init(&qwerty_keypad);
Chandan Uddarajubedca152010-06-02 23:05:15 -070087}