Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-2.6-microblaze.git] / drivers / input / evbug.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *  Copyright (c) 1999-2001 Vojtech Pavlik
4  */
5
6 /*
7  *  Input driver event debug module - dumps all events into syslog
8  */
9
10 /*
11  */
12
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14
15 #include <linux/slab.h>
16 #include <linux/module.h>
17 #include <linux/input.h>
18 #include <linux/init.h>
19 #include <linux/device.h>
20
21 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
22 MODULE_DESCRIPTION("Input driver event debug module");
23 MODULE_LICENSE("GPL");
24
25 static void evbug_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)
26 {
27         printk(KERN_DEBUG pr_fmt("Event. Dev: %s, Type: %d, Code: %d, Value: %d\n"),
28                dev_name(&handle->dev->dev), type, code, value);
29 }
30
31 static int evbug_connect(struct input_handler *handler, struct input_dev *dev,
32                          const struct input_device_id *id)
33 {
34         struct input_handle *handle;
35         int error;
36
37         handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
38         if (!handle)
39                 return -ENOMEM;
40
41         handle->dev = dev;
42         handle->handler = handler;
43         handle->name = "evbug";
44
45         error = input_register_handle(handle);
46         if (error)
47                 goto err_free_handle;
48
49         error = input_open_device(handle);
50         if (error)
51                 goto err_unregister_handle;
52
53         printk(KERN_DEBUG pr_fmt("Connected device: %s (%s at %s)\n"),
54                dev_name(&dev->dev),
55                dev->name ?: "unknown",
56                dev->phys ?: "unknown");
57
58         return 0;
59
60  err_unregister_handle:
61         input_unregister_handle(handle);
62  err_free_handle:
63         kfree(handle);
64         return error;
65 }
66
67 static void evbug_disconnect(struct input_handle *handle)
68 {
69         printk(KERN_DEBUG pr_fmt("Disconnected device: %s\n"),
70                dev_name(&handle->dev->dev));
71
72         input_close_device(handle);
73         input_unregister_handle(handle);
74         kfree(handle);
75 }
76
77 static const struct input_device_id evbug_ids[] = {
78         { .driver_info = 1 },   /* Matches all devices */
79         { },                    /* Terminating zero entry */
80 };
81
82 MODULE_DEVICE_TABLE(input, evbug_ids);
83
84 static struct input_handler evbug_handler = {
85         .event =        evbug_event,
86         .connect =      evbug_connect,
87         .disconnect =   evbug_disconnect,
88         .name =         "evbug",
89         .id_table =     evbug_ids,
90 };
91
92 static int __init evbug_init(void)
93 {
94         return input_register_handler(&evbug_handler);
95 }
96
97 static void __exit evbug_exit(void)
98 {
99         input_unregister_handler(&evbug_handler);
100 }
101
102 module_init(evbug_init);
103 module_exit(evbug_exit);