Lines Matching +full:key +full:- +full:code
1 // SPDX-License-Identifier: GPL-2.0-only
15 #include <linux/input/sparse-keymap.h>
26 struct key_entry *key; in sparse_keymap_get_key_index() local
29 for (key = dev->keycode; key->type != KE_END; key++) { in sparse_keymap_get_key_index()
30 if (key->type == KE_KEY) { in sparse_keymap_get_key_index()
31 if (key == k) in sparse_keymap_get_key_index()
43 struct key_entry *key; in sparse_keymap_entry_by_index() local
46 for (key = dev->keycode; key->type != KE_END; key++) in sparse_keymap_entry_by_index()
47 if (key->type == KE_KEY) in sparse_keymap_entry_by_index()
49 return key; in sparse_keymap_entry_by_index()
55 * sparse_keymap_entry_from_scancode - perform sparse keymap lookup
57 * @code: Scan code
63 unsigned int code) in sparse_keymap_entry_from_scancode() argument
65 struct key_entry *key; in sparse_keymap_entry_from_scancode() local
67 for (key = dev->keycode; key->type != KE_END; key++) in sparse_keymap_entry_from_scancode()
68 if (code == key->code) in sparse_keymap_entry_from_scancode()
69 return key; in sparse_keymap_entry_from_scancode()
76 * sparse_keymap_entry_from_keycode - perform sparse keymap lookup
78 * @keycode: Key code
86 struct key_entry *key; in sparse_keymap_entry_from_keycode() local
88 for (key = dev->keycode; key->type != KE_END; key++) in sparse_keymap_entry_from_keycode()
89 if (key->type == KE_KEY && keycode == key->keycode) in sparse_keymap_entry_from_keycode()
90 return key; in sparse_keymap_entry_from_keycode()
99 struct key_entry *key; in sparse_keymap_locate() local
102 if (ke->flags & INPUT_KEYMAP_BY_INDEX) in sparse_keymap_locate()
103 key = sparse_keymap_entry_by_index(dev, ke->index); in sparse_keymap_locate()
105 key = sparse_keymap_entry_from_scancode(dev, scancode); in sparse_keymap_locate()
107 key = NULL; in sparse_keymap_locate()
109 return key; in sparse_keymap_locate()
115 const struct key_entry *key; in sparse_keymap_getkeycode() local
117 if (dev->keycode) { in sparse_keymap_getkeycode()
118 key = sparse_keymap_locate(dev, ke); in sparse_keymap_getkeycode()
119 if (key && key->type == KE_KEY) { in sparse_keymap_getkeycode()
120 ke->keycode = key->keycode; in sparse_keymap_getkeycode()
121 if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) in sparse_keymap_getkeycode()
122 ke->index = in sparse_keymap_getkeycode()
123 sparse_keymap_get_key_index(dev, key); in sparse_keymap_getkeycode()
124 ke->len = sizeof(key->code); in sparse_keymap_getkeycode()
125 memcpy(ke->scancode, &key->code, sizeof(key->code)); in sparse_keymap_getkeycode()
130 return -EINVAL; in sparse_keymap_getkeycode()
137 struct key_entry *key; in sparse_keymap_setkeycode() local
139 if (dev->keycode) { in sparse_keymap_setkeycode()
140 key = sparse_keymap_locate(dev, ke); in sparse_keymap_setkeycode()
141 if (key && key->type == KE_KEY) { in sparse_keymap_setkeycode()
142 *old_keycode = key->keycode; in sparse_keymap_setkeycode()
143 key->keycode = ke->keycode; in sparse_keymap_setkeycode()
144 set_bit(ke->keycode, dev->keybit); in sparse_keymap_setkeycode()
146 clear_bit(*old_keycode, dev->keybit); in sparse_keymap_setkeycode()
151 return -EINVAL; in sparse_keymap_setkeycode()
155 * sparse_keymap_setup - set up sparse keymap for an input device
177 for (e = keymap; e->type != KE_END; e++) in sparse_keymap_setup()
180 map = devm_kmemdup_array(&dev->dev, keymap, map_size, sizeof(*keymap), GFP_KERNEL); in sparse_keymap_setup()
182 return -ENOMEM; in sparse_keymap_setup()
193 switch (entry->type) { in sparse_keymap_setup()
195 __set_bit(EV_KEY, dev->evbit); in sparse_keymap_setup()
196 __set_bit(entry->keycode, dev->keybit); in sparse_keymap_setup()
201 __set_bit(EV_SW, dev->evbit); in sparse_keymap_setup()
202 __set_bit(entry->sw.code, dev->swbit); in sparse_keymap_setup()
207 if (test_bit(EV_KEY, dev->evbit)) { in sparse_keymap_setup()
208 __set_bit(KEY_UNKNOWN, dev->keybit); in sparse_keymap_setup()
209 __set_bit(EV_MSC, dev->evbit); in sparse_keymap_setup()
210 __set_bit(MSC_SCAN, dev->mscbit); in sparse_keymap_setup()
213 dev->keycode = map; in sparse_keymap_setup()
214 dev->keycodemax = map_size; in sparse_keymap_setup()
215 dev->getkeycode = sparse_keymap_getkeycode; in sparse_keymap_setup()
216 dev->setkeycode = sparse_keymap_setkeycode; in sparse_keymap_setup()
223 * sparse_keymap_report_entry - report event corresponding to given key entry
225 * @ke: key entry describing event
237 switch (ke->type) { in sparse_keymap_report_entry()
239 input_event(dev, EV_MSC, MSC_SCAN, ke->code); in sparse_keymap_report_entry()
240 input_report_key(dev, ke->keycode, value); in sparse_keymap_report_entry()
243 input_report_key(dev, ke->keycode, 0); in sparse_keymap_report_entry()
249 value = ke->sw.value; in sparse_keymap_report_entry()
253 input_report_switch(dev, ke->sw.code, value); in sparse_keymap_report_entry()
261 * sparse_keymap_report_event - report event corresponding to given scancode
263 * @code: Scan code
273 bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, in sparse_keymap_report_event() argument
277 sparse_keymap_entry_from_scancode(dev, code); in sparse_keymap_report_event()
285 /* Report an unknown key event as a debugging aid */ in sparse_keymap_report_event()
287 unknown_ke.code = code; in sparse_keymap_report_event()