1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 #ifndef _INPUT_POLLDEV_H 3 #define _INPUT_POLLDEV_H 4 5 /* 6 * Copyright (c) 2007 Dmitry Torokhov 7 */ 8 9 #include <linux/input.h> 10 #include <linux/workqueue.h> 11 12 /** 13 * struct input_polled_dev - simple polled input device 14 * @private: private driver data. 15 * @open: driver-supplied method that prepares device for polling 16 * (enabled the device and maybe flushes device state). 17 * @close: driver-supplied method that is called when device is no 18 * longer being polled. Used to put device into low power mode. 19 * @poll: driver-supplied method that polls the device and posts 20 * input events (mandatory). 21 * @poll_interval: specifies how often the poll() method should be called. 22 * Defaults to 500 msec unless overridden when registering the device. 23 * @poll_interval_max: specifies upper bound for the poll interval. 24 * Defaults to the initial value of @poll_interval. 25 * @poll_interval_min: specifies lower bound for the poll interval. 26 * Defaults to 0. 27 * @input: input device structure associated with the polled device. 28 * Must be properly initialized by the driver (id, name, phys, bits). 29 * 30 * Polled input device provides a skeleton for supporting simple input 31 * devices that do not raise interrupts but have to be periodically 32 * scanned or polled to detect changes in their state. 33 */ 34 struct input_polled_dev { 35 void *private; 36 37 void (*open)(struct input_polled_dev *dev); 38 void (*close)(struct input_polled_dev *dev); 39 void (*poll)(struct input_polled_dev *dev); 40 unsigned int poll_interval; /* msec */ 41 unsigned int poll_interval_max; /* msec */ 42 unsigned int poll_interval_min; /* msec */ 43 44 struct input_dev *input; 45 46 /* private: */ 47 struct delayed_work work; 48 49 bool devres_managed; 50 }; 51 52 struct input_polled_dev *input_allocate_polled_device(void); 53 struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev); 54 void input_free_polled_device(struct input_polled_dev *dev); 55 int input_register_polled_device(struct input_polled_dev *dev); 56 void input_unregister_polled_device(struct input_polled_dev *dev); 57 58 #endif