Lines Matching +full:input +full:- +full:only
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Generic implementation of a polled input device
15 #include <linux/input-polldev.h>
18 MODULE_DESCRIPTION("Generic implementation of a polled input device");
25 delay = msecs_to_jiffies(dev->poll_interval); in input_polldev_queue_work()
29 queue_delayed_work(system_freezable_wq, &dev->work, delay); in input_polldev_queue_work()
37 dev->poll(dev); in input_polled_device_work()
41 static int input_open_polled_device(struct input_dev *input) in input_open_polled_device() argument
43 struct input_polled_dev *dev = input_get_drvdata(input); in input_open_polled_device()
45 if (dev->open) in input_open_polled_device()
46 dev->open(dev); in input_open_polled_device()
48 /* Only start polling if polling is enabled */ in input_open_polled_device()
49 if (dev->poll_interval > 0) { in input_open_polled_device()
50 dev->poll(dev); in input_open_polled_device()
57 static void input_close_polled_device(struct input_dev *input) in input_close_polled_device() argument
59 struct input_polled_dev *dev = input_get_drvdata(input); in input_close_polled_device()
61 cancel_delayed_work_sync(&dev->work); in input_close_polled_device()
63 if (dev->close) in input_close_polled_device()
64 dev->close(dev); in input_close_polled_device()
74 return sprintf(buf, "%d\n", polldev->poll_interval); in input_polldev_get_poll()
82 struct input_dev *input = polldev->input; in input_polldev_set_poll() local
90 if (interval < polldev->poll_interval_min) in input_polldev_set_poll()
91 return -EINVAL; in input_polldev_set_poll()
93 if (interval > polldev->poll_interval_max) in input_polldev_set_poll()
94 return -EINVAL; in input_polldev_set_poll()
96 mutex_lock(&input->mutex); in input_polldev_set_poll()
98 polldev->poll_interval = interval; in input_polldev_set_poll()
100 if (input->users) { in input_polldev_set_poll()
101 cancel_delayed_work_sync(&polldev->work); in input_polldev_set_poll()
102 if (polldev->poll_interval > 0) in input_polldev_set_poll()
106 mutex_unlock(&input->mutex); in input_polldev_set_poll()
120 return sprintf(buf, "%d\n", polldev->poll_interval_max); in input_polldev_get_max()
130 return sprintf(buf, "%d\n", polldev->poll_interval_min); in input_polldev_get_min()
152 * input_allocate_polled_device - allocate memory for polled device
155 * for an input device associated with this polled device.
165 dev->input = input_allocate_device(); in input_allocate_polled_device()
166 if (!dev->input) { in input_allocate_polled_device()
183 return devres->polldev == data; in devm_input_polldev_match()
189 struct input_polled_dev *polldev = devres->polldev; in devm_input_polldev_release()
192 __func__, dev_name(&polldev->input->dev)); in devm_input_polldev_release()
194 input_put_device(polldev->input); in devm_input_polldev_release()
201 struct input_polled_dev *polldev = devres->polldev; in devm_input_polldev_unregister()
204 __func__, dev_name(&polldev->input->dev)); in devm_input_polldev_unregister()
205 input_unregister_device(polldev->input); in devm_input_polldev_unregister()
208 * Note that we are still holding extra reference to the input in devm_input_polldev_unregister()
215 * devm_input_allocate_polled_device - allocate managed polled device
220 * Managed polled input devices do not need to be explicitly unregistered
224 * fashion as regular polled input devices (using
231 * NOTE: the owner device is set up as parent of input device and users
250 polldev->input->dev.parent = dev; in devm_input_allocate_polled_device()
251 polldev->devres_managed = true; in devm_input_allocate_polled_device()
253 devres->polldev = polldev; in devm_input_allocate_polled_device()
261 * input_free_polled_device - free memory allocated for polled device
265 * reference to the associated input device.
270 if (dev->devres_managed) in input_free_polled_device()
271 WARN_ON(devres_destroy(dev->input->dev.parent, in input_free_polled_device()
275 input_put_device(dev->input); in input_free_polled_device()
282 * input_register_polled_device - register polled device
285 * The function registers previously initialized polled input device
286 * with input layer. The device should be allocated with call to
294 struct input_dev *input = dev->input; in input_register_polled_device() local
297 if (dev->devres_managed) { in input_register_polled_device()
301 return -ENOMEM; in input_register_polled_device()
303 devres->polldev = dev; in input_register_polled_device()
306 input_set_drvdata(input, dev); in input_register_polled_device()
307 INIT_DELAYED_WORK(&dev->work, input_polled_device_work); in input_register_polled_device()
309 if (!dev->poll_interval) in input_register_polled_device()
310 dev->poll_interval = 500; in input_register_polled_device()
311 if (!dev->poll_interval_max) in input_register_polled_device()
312 dev->poll_interval_max = dev->poll_interval; in input_register_polled_device()
314 input->open = input_open_polled_device; in input_register_polled_device()
315 input->close = input_close_polled_device; in input_register_polled_device()
317 input->dev.groups = input_polldev_attribute_groups; in input_register_polled_device()
319 error = input_register_device(input); in input_register_polled_device()
326 * Take extra reference to the underlying input device so in input_register_polled_device()
328 * and is deleted only after input_free_polled_device() in input_register_polled_device()
332 input_get_device(input); in input_register_polled_device()
334 if (dev->devres_managed) { in input_register_polled_device()
335 dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", in input_register_polled_device()
336 __func__, dev_name(&input->dev)); in input_register_polled_device()
337 devres_add(input->dev.parent, devres); in input_register_polled_device()
345 * input_unregister_polled_device - unregister polled device
348 * The function unregisters previously registered polled input
349 * device from input layer. Polling is stopped and device is
354 if (dev->devres_managed) in input_unregister_polled_device()
355 WARN_ON(devres_destroy(dev->input->dev.parent, in input_unregister_polled_device()
360 input_unregister_device(dev->input); in input_unregister_polled_device()