.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * drivers/input/keyboard/jornada680_kbd.c |
---|
3 | 4 | * |
---|
.. | .. |
---|
10 | 11 | * Split from drivers/input/keyboard/hp600_keyb.c |
---|
11 | 12 | * Copyright (C) 2000 Yaegashi Takeshi (hp6xx kbd scan routine and translation table) |
---|
12 | 13 | * Copyright (C) 2000 Niibe Yutaka (HP620 Keyb translation table) |
---|
13 | | - * |
---|
14 | | - * This program is free software; you can redistribute it and/or modify it |
---|
15 | | - * under the terms of the GNU General Public License version 2 as |
---|
16 | | - * published by the Free Software Foundation. |
---|
17 | 14 | */ |
---|
18 | 15 | |
---|
19 | 16 | #include <linux/device.h> |
---|
20 | 17 | #include <linux/input.h> |
---|
21 | | -#include <linux/input-polldev.h> |
---|
22 | 18 | #include <linux/interrupt.h> |
---|
23 | 19 | #include <linux/jiffies.h> |
---|
24 | 20 | #include <linux/kernel.h> |
---|
.. | .. |
---|
67 | 63 | #define JORNADA_SCAN_SIZE 18 |
---|
68 | 64 | |
---|
69 | 65 | struct jornadakbd { |
---|
70 | | - struct input_polled_dev *poll_dev; |
---|
| 66 | + struct input_dev *input; |
---|
71 | 67 | unsigned short keymap[ARRAY_SIZE(jornada_scancodes)]; |
---|
72 | 68 | unsigned char length; |
---|
73 | 69 | unsigned char old_scan[JORNADA_SCAN_SIZE]; |
---|
.. | .. |
---|
76 | 72 | |
---|
77 | 73 | static void jornada_parse_kbd(struct jornadakbd *jornadakbd) |
---|
78 | 74 | { |
---|
79 | | - struct input_dev *input_dev = jornadakbd->poll_dev->input; |
---|
| 75 | + struct input_dev *input_dev = jornadakbd->input; |
---|
80 | 76 | unsigned short *keymap = jornadakbd->keymap; |
---|
81 | 77 | unsigned int sync_me = 0; |
---|
82 | 78 | unsigned int i, j; |
---|
.. | .. |
---|
170 | 166 | *s++ = __raw_readb(PHDR); |
---|
171 | 167 | } |
---|
172 | 168 | |
---|
173 | | -static void jornadakbd680_poll(struct input_polled_dev *dev) |
---|
| 169 | +static void jornadakbd680_poll(struct input_dev *input) |
---|
174 | 170 | { |
---|
175 | | - struct jornadakbd *jornadakbd = dev->private; |
---|
| 171 | + struct jornadakbd *jornadakbd = input_get_drvdata(input); |
---|
176 | 172 | |
---|
177 | 173 | jornada_scan_keyb(jornadakbd->new_scan); |
---|
178 | 174 | jornada_parse_kbd(jornadakbd); |
---|
.. | .. |
---|
182 | 178 | static int jornada680kbd_probe(struct platform_device *pdev) |
---|
183 | 179 | { |
---|
184 | 180 | struct jornadakbd *jornadakbd; |
---|
185 | | - struct input_polled_dev *poll_dev; |
---|
186 | 181 | struct input_dev *input_dev; |
---|
187 | 182 | int i, error; |
---|
188 | 183 | |
---|
.. | .. |
---|
191 | 186 | if (!jornadakbd) |
---|
192 | 187 | return -ENOMEM; |
---|
193 | 188 | |
---|
194 | | - poll_dev = devm_input_allocate_polled_device(&pdev->dev); |
---|
195 | | - if (!poll_dev) { |
---|
196 | | - dev_err(&pdev->dev, "failed to allocate polled input device\n"); |
---|
| 189 | + input_dev = devm_input_allocate_device(&pdev->dev); |
---|
| 190 | + if (!input_dev) { |
---|
| 191 | + dev_err(&pdev->dev, "failed to allocate input device\n"); |
---|
197 | 192 | return -ENOMEM; |
---|
198 | 193 | } |
---|
199 | 194 | |
---|
200 | | - jornadakbd->poll_dev = poll_dev; |
---|
| 195 | + jornadakbd->input = input_dev; |
---|
201 | 196 | |
---|
202 | 197 | memcpy(jornadakbd->keymap, jornada_scancodes, |
---|
203 | 198 | sizeof(jornadakbd->keymap)); |
---|
204 | 199 | |
---|
205 | | - poll_dev->private = jornadakbd; |
---|
206 | | - poll_dev->poll = jornadakbd680_poll; |
---|
207 | | - poll_dev->poll_interval = 50; /* msec */ |
---|
208 | | - |
---|
209 | | - input_dev = poll_dev->input; |
---|
| 200 | + input_set_drvdata(input_dev, jornadakbd); |
---|
210 | 201 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); |
---|
211 | 202 | input_dev->name = "HP Jornada 680 keyboard"; |
---|
212 | 203 | input_dev->phys = "jornadakbd/input0"; |
---|
213 | 204 | input_dev->keycode = jornadakbd->keymap; |
---|
214 | 205 | input_dev->keycodesize = sizeof(unsigned short); |
---|
215 | 206 | input_dev->keycodemax = ARRAY_SIZE(jornada_scancodes); |
---|
216 | | - input_dev->dev.parent = &pdev->dev; |
---|
217 | 207 | input_dev->id.bustype = BUS_HOST; |
---|
218 | 208 | |
---|
219 | 209 | for (i = 0; i < 128; i++) |
---|
.. | .. |
---|
223 | 213 | |
---|
224 | 214 | input_set_capability(input_dev, EV_MSC, MSC_SCAN); |
---|
225 | 215 | |
---|
226 | | - error = input_register_polled_device(jornadakbd->poll_dev); |
---|
| 216 | + error = input_setup_polling(input_dev, jornadakbd680_poll); |
---|
227 | 217 | if (error) { |
---|
228 | | - dev_err(&pdev->dev, "failed to register polled input device\n"); |
---|
| 218 | + dev_err(&pdev->dev, "failed to set up polling\n"); |
---|
| 219 | + return error; |
---|
| 220 | + } |
---|
| 221 | + |
---|
| 222 | + input_set_poll_interval(input_dev, 50 /* msec */); |
---|
| 223 | + |
---|
| 224 | + error = input_register_device(input_dev); |
---|
| 225 | + if (error) { |
---|
| 226 | + dev_err(&pdev->dev, "failed to register input device\n"); |
---|
229 | 227 | return error; |
---|
230 | 228 | } |
---|
231 | 229 | |
---|