1 /*
2  * Copyright © 2017 Red Hat, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include "config.h"
25 
26 #include "litest.h"
27 #include "litest-int.h"
28 
29 static struct input_id input_id = {
30 	.bustype = 0x19,
31 	.vendor = 0x17aa,
32 	.product = 0x5054,
33 };
34 
35 static int events[] = {
36 	EV_KEY, KEY_MUTE,
37 	EV_KEY, KEY_VOLUMEUP,
38 	EV_KEY, KEY_VOLUMEDOWN,
39 	EV_KEY, KEY_SCALE,
40 	EV_KEY, KEY_SLEEP,
41 	EV_KEY, KEY_FILE,
42 	EV_KEY, KEY_PROG1,
43 	EV_KEY, KEY_COFFEE,
44 	EV_KEY, KEY_BACK,
45 	EV_KEY, KEY_CONFIG,
46 	EV_KEY, KEY_REFRESH,
47 	EV_KEY, KEY_F20,
48 	EV_KEY, KEY_F21,
49 	EV_KEY, KEY_F24,
50 	EV_KEY, KEY_SUSPEND,
51 	EV_KEY, KEY_CAMERA,
52 	EV_KEY, KEY_SEARCH,
53 	EV_KEY, KEY_BRIGHTNESSDOWN,
54 	EV_KEY, KEY_BRIGHTNESSUP,
55 	EV_KEY, KEY_SWITCHVIDEOMODE,
56 	EV_KEY, KEY_KBDILLUMTOGGLE,
57 	EV_KEY, KEY_BATTERY,
58 	EV_KEY, KEY_WLAN,
59 	EV_KEY, KEY_UNKNOWN,
60 	EV_KEY, KEY_ZOOM,
61 	EV_KEY, KEY_FN_F1,
62 	EV_KEY, KEY_FN_F10,
63 	EV_KEY, KEY_FN_F11,
64 	EV_KEY, KEY_VOICECOMMAND,
65 	EV_KEY, KEY_BRIGHTNESS_MIN,
66 
67 	EV_SW, SW_RFKILL_ALL,
68 	EV_SW, SW_TABLET_MODE,
69 
70 	-1, -1,
71 };
72 
73 static const char udev_rule[] =
74 "ACTION==\"remove\", GOTO=\"switch_end\"\n"
75 "KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
76 "\n"
77 "ATTRS{name}==\"litest ThinkPad Extra Buttons*\",\\\n"
78 "    ENV{ID_INPUT_SWITCH}=\"1\"\n"
79 "\n"
80 "LABEL=\"switch_end\"";
81 
82 TEST_DEVICE("thinkpad-extrabuttons",
83 	.type = LITEST_THINKPAD_EXTRABUTTONS,
84 	.features = LITEST_KEYS | LITEST_SWITCH,
85 	.interface = NULL,
86 
87 	.name = "ThinkPad Extra Buttons",
88 	.id = &input_id,
89 	.events = events,
90 	.absinfo = NULL,
91 	.udev_rule = udev_rule,
92 )
93