Input: add generic support for sparse keymaps
More and more devices choose to reimplement support for sparse keymaps
first introduced by wistron driver. Move it into a library module so it
can be easily used by interested parties.
Reviewed-by: Anisse Astier <anisse@astier.eu>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
diff --git a/drivers/input/input-polldev.c b/drivers/input/input-polldev.c
index 6a2eb39..aa6713b 100644
--- a/drivers/input/input-polldev.c
+++ b/drivers/input/input-polldev.c
@@ -212,7 +212,7 @@
* @dev: device to free
*
* The function frees memory allocated for polling device and drops
- * reference to the associated input device (if present).
+ * reference to the associated input device.
*/
void input_free_polled_device(struct input_polled_dev *dev)
{
@@ -258,6 +258,15 @@
return error;
}
+ /*
+ * Take extra reference to the underlying input device so
+ * that it survives call to input_unregister_polled_device()
+ * and is deleted only after input_free_polled_device()
+ * has been invoked. This is needed to ease task of freeing
+ * sparse keymaps.
+ */
+ input_get_device(input);
+
return 0;
}
EXPORT_SYMBOL(input_register_polled_device);
@@ -269,8 +278,6 @@
* The function unregisters previously registered polled input
* device from input layer. Polling is stopped and device is
* ready to be freed with call to input_free_polled_device().
- * Callers should not attempt to access dev->input pointer
- * after calling this function.
*/
void input_unregister_polled_device(struct input_polled_dev *dev)
{
@@ -278,7 +285,6 @@
&input_polldev_attribute_group);
input_unregister_device(dev->input);
- dev->input = NULL;
}
EXPORT_SYMBOL(input_unregister_polled_device);