hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/input/misc/sgi_btns.c
....@@ -1,23 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * SGI Volume Button interface driver
34 *
45 * Copyright (C) 2008 Thomas Bogendoerfer <tsbogend@alpha.franken.de>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
196 */
20
-#include <linux/input-polldev.h>
7
+#include <linux/input.h>
218 #include <linux/ioport.h>
229 #include <linux/module.h>
2310 #include <linux/platform_device.h>
....@@ -58,15 +45,13 @@
5845 };
5946
6047 struct buttons_dev {
61
- struct input_polled_dev *poll_dev;
6248 unsigned short keymap[ARRAY_SIZE(sgi_map)];
6349 int count[ARRAY_SIZE(sgi_map)];
6450 };
6551
66
-static void handle_buttons(struct input_polled_dev *dev)
52
+static void handle_buttons(struct input_dev *input)
6753 {
68
- struct buttons_dev *bdev = dev->private;
69
- struct input_dev *input = dev->input;
54
+ struct buttons_dev *bdev = input_get_drvdata(input);
7055 u8 status;
7156 int i;
7257
....@@ -93,28 +78,24 @@
9378 static int sgi_buttons_probe(struct platform_device *pdev)
9479 {
9580 struct buttons_dev *bdev;
96
- struct input_polled_dev *poll_dev;
9781 struct input_dev *input;
9882 int error, i;
9983
100
- bdev = kzalloc(sizeof(struct buttons_dev), GFP_KERNEL);
101
- poll_dev = input_allocate_polled_device();
102
- if (!bdev || !poll_dev) {
103
- error = -ENOMEM;
104
- goto err_free_mem;
105
- }
84
+ bdev = devm_kzalloc(&pdev->dev, sizeof(*bdev), GFP_KERNEL);
85
+ if (!bdev)
86
+ return -ENOMEM;
87
+
88
+ input = devm_input_allocate_device(&pdev->dev);
89
+ if (!input)
90
+ return -ENOMEM;
10691
10792 memcpy(bdev->keymap, sgi_map, sizeof(bdev->keymap));
10893
109
- poll_dev->private = bdev;
110
- poll_dev->poll = handle_buttons;
111
- poll_dev->poll_interval = BUTTONS_POLL_INTERVAL;
94
+ input_set_drvdata(input, bdev);
11295
113
- input = poll_dev->input;
11496 input->name = "SGI buttons";
11597 input->phys = "sgi/input0";
11698 input->id.bustype = BUS_HOST;
117
- input->dev.parent = &pdev->dev;
11899
119100 input->keycode = bdev->keymap;
120101 input->keycodemax = ARRAY_SIZE(bdev->keymap);
....@@ -126,35 +107,21 @@
126107 __set_bit(bdev->keymap[i], input->keybit);
127108 __clear_bit(KEY_RESERVED, input->keybit);
128109
129
- bdev->poll_dev = poll_dev;
130
- platform_set_drvdata(pdev, bdev);
131
-
132
- error = input_register_polled_device(poll_dev);
110
+ error = input_setup_polling(input, handle_buttons);
133111 if (error)
134
- goto err_free_mem;
112
+ return error;
135113
136
- return 0;
114
+ input_set_poll_interval(input, BUTTONS_POLL_INTERVAL);
137115
138
- err_free_mem:
139
- input_free_polled_device(poll_dev);
140
- kfree(bdev);
141
- return error;
142
-}
143
-
144
-static int sgi_buttons_remove(struct platform_device *pdev)
145
-{
146
- struct buttons_dev *bdev = platform_get_drvdata(pdev);
147
-
148
- input_unregister_polled_device(bdev->poll_dev);
149
- input_free_polled_device(bdev->poll_dev);
150
- kfree(bdev);
116
+ error = input_register_device(input);
117
+ if (error)
118
+ return error;
151119
152120 return 0;
153121 }
154122
155123 static struct platform_driver sgi_buttons_driver = {
156124 .probe = sgi_buttons_probe,
157
- .remove = sgi_buttons_remove,
158125 .driver = {
159126 .name = "sgibtns",
160127 },