| .. | .. |
|---|
| 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 | |
|---|