.. | .. |
---|
17 | 17 | #include <linux/device.h> |
---|
18 | 18 | #include <linux/gpio/consumer.h> |
---|
19 | 19 | #include <linux/input.h> |
---|
20 | | -#include <linux/input-polldev.h> |
---|
21 | 20 | #include <linux/kernel.h> |
---|
22 | 21 | #include <linux/module.h> |
---|
23 | 22 | #include <linux/of.h> |
---|
24 | 23 | #include <linux/platform_device.h> |
---|
25 | 24 | |
---|
26 | 25 | struct gpio_decoder { |
---|
27 | | - struct input_polled_dev *poll_dev; |
---|
28 | 26 | struct gpio_descs *input_gpios; |
---|
29 | 27 | struct device *dev; |
---|
30 | 28 | u32 axis; |
---|
.. | .. |
---|
53 | 51 | return ret; |
---|
54 | 52 | } |
---|
55 | 53 | |
---|
56 | | -static void gpio_decoder_poll_gpios(struct input_polled_dev *poll_dev) |
---|
| 54 | +static void gpio_decoder_poll_gpios(struct input_dev *input) |
---|
57 | 55 | { |
---|
58 | | - struct gpio_decoder *decoder = poll_dev->private; |
---|
| 56 | + struct gpio_decoder *decoder = input_get_drvdata(input); |
---|
59 | 57 | int state; |
---|
60 | 58 | |
---|
61 | 59 | state = gpio_decoder_get_gpios_state(decoder); |
---|
62 | 60 | if (state >= 0 && state != decoder->last_stable) { |
---|
63 | | - input_report_abs(poll_dev->input, decoder->axis, state); |
---|
64 | | - input_sync(poll_dev->input); |
---|
| 61 | + input_report_abs(input, decoder->axis, state); |
---|
| 62 | + input_sync(input); |
---|
65 | 63 | decoder->last_stable = state; |
---|
66 | 64 | } |
---|
67 | 65 | } |
---|
.. | .. |
---|
70 | 68 | { |
---|
71 | 69 | struct device *dev = &pdev->dev; |
---|
72 | 70 | struct gpio_decoder *decoder; |
---|
73 | | - struct input_polled_dev *poll_dev; |
---|
| 71 | + struct input_dev *input; |
---|
74 | 72 | u32 max; |
---|
75 | 73 | int err; |
---|
76 | 74 | |
---|
77 | | - decoder = devm_kzalloc(dev, sizeof(struct gpio_decoder), GFP_KERNEL); |
---|
| 75 | + decoder = devm_kzalloc(dev, sizeof(*decoder), GFP_KERNEL); |
---|
78 | 76 | if (!decoder) |
---|
79 | 77 | return -ENOMEM; |
---|
80 | 78 | |
---|
| 79 | + decoder->dev = dev; |
---|
81 | 80 | device_property_read_u32(dev, "linux,axis", &decoder->axis); |
---|
| 81 | + |
---|
82 | 82 | decoder->input_gpios = devm_gpiod_get_array(dev, NULL, GPIOD_IN); |
---|
83 | 83 | if (IS_ERR(decoder->input_gpios)) { |
---|
84 | 84 | dev_err(dev, "unable to acquire input gpios\n"); |
---|
85 | 85 | return PTR_ERR(decoder->input_gpios); |
---|
86 | 86 | } |
---|
| 87 | + |
---|
87 | 88 | if (decoder->input_gpios->ndescs < 2) { |
---|
88 | 89 | dev_err(dev, "not enough gpios found\n"); |
---|
89 | 90 | return -EINVAL; |
---|
.. | .. |
---|
92 | 93 | if (device_property_read_u32(dev, "decoder-max-value", &max)) |
---|
93 | 94 | max = (1U << decoder->input_gpios->ndescs) - 1; |
---|
94 | 95 | |
---|
95 | | - decoder->dev = dev; |
---|
96 | | - poll_dev = devm_input_allocate_polled_device(decoder->dev); |
---|
97 | | - if (!poll_dev) |
---|
| 96 | + input = devm_input_allocate_device(dev); |
---|
| 97 | + if (!input) |
---|
98 | 98 | return -ENOMEM; |
---|
99 | 99 | |
---|
100 | | - poll_dev->private = decoder; |
---|
101 | | - poll_dev->poll = gpio_decoder_poll_gpios; |
---|
102 | | - decoder->poll_dev = poll_dev; |
---|
| 100 | + input_set_drvdata(input, decoder); |
---|
103 | 101 | |
---|
104 | | - poll_dev->input->name = pdev->name; |
---|
105 | | - poll_dev->input->id.bustype = BUS_HOST; |
---|
106 | | - input_set_abs_params(poll_dev->input, decoder->axis, 0, max, 0, 0); |
---|
| 102 | + input->name = pdev->name; |
---|
| 103 | + input->id.bustype = BUS_HOST; |
---|
| 104 | + input_set_abs_params(input, decoder->axis, 0, max, 0, 0); |
---|
107 | 105 | |
---|
108 | | - err = input_register_polled_device(poll_dev); |
---|
| 106 | + err = input_setup_polling(input, gpio_decoder_poll_gpios); |
---|
109 | 107 | if (err) { |
---|
110 | | - dev_err(dev, "failed to register polled device\n"); |
---|
| 108 | + dev_err(dev, "failed to set up polling\n"); |
---|
| 109 | + return err; |
---|
| 110 | + } |
---|
| 111 | + |
---|
| 112 | + err = input_register_device(input); |
---|
| 113 | + if (err) { |
---|
| 114 | + dev_err(dev, "failed to register input device\n"); |
---|
111 | 115 | return err; |
---|
112 | 116 | } |
---|
113 | 117 | |
---|