Lines Matching +full:poll +full:- +full:interval
1 // SPDX-License-Identifier: GPL-2.0-only
15 #include <linux/input-polldev.h>
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()
45 if (dev->open) in input_open_polled_device()
46 dev->open(dev); 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()
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()
83 unsigned int interval; in input_polldev_set_poll() local
86 err = kstrtouint(buf, 0, &interval); in input_polldev_set_poll()
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()
111 static DEVICE_ATTR(poll, S_IRUGO | S_IWUSR, input_polldev_get_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
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()
215 * devm_input_allocate_polled_device - allocate managed polled device
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
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
287 * input_allocate_polled_device(). Callers should also set up poll()
294 struct input_dev *input = dev->input; in input_register_polled_device()
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()
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()
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
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()