On Fri, Mar 22, 2024 at 02:47:50PM +0800, Ai Chao wrote:
Add lenovo generic wmi driver to support camera button.WMI
The Camera button is a GPIO device. This driver receives ACPI notifyiNo COMPILE_TEST?
when the camera button is switched on/off. This driver is used in
Lenovo A70, it is a Computer integrated machine.
+config LENOVO_WMI_CAMERA
+ tristate "Lenovo WMI Camera Button driver"
+ depends on ACPI_WMI
+ depends on INPUT
+ help...
+ This driver provides support for Lenovo camera button. The Camera
+ button is a GPIO device. This driver receives ACPI notify when the
+ camera button is switched on/off.
+
+ To compile this driver as a module, choose M here: the module
+ will be called lenovo-wmi-camera.
+#include <linux/acpi.h>+ types.h
+#include <linux/device.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/wmi.h>...
+struct lenovo_wmi_priv {WMI
+ struct input_dev *idev;
+ struct mutex notify_lock; /* lenovo wmi camera button notify lock */
+};...
+ /* obj->buffer.pointer[0] is camera mode:/*
+ * 0 camera close
+ * 1 camera open
+ */
* The correct multi-line comment style
* is depicted here.
*/
...
+ keycode = (camera_mode == SW_CAMERA_ON ?Useless parentheses.
+ KEY_CAMERA_ACCESS_ENABLE : KEY_CAMERA_ACCESS_DISABLE);
...
+ ret = input_register_device(priv->idev);Your mutex should be initialized before use. Have you tested that?
+ if (ret)
+ return ret;
+ mutex_init(&priv->notify_lock);
...
+static struct wmi_driver lenovo_wmi_driver = {Unneeded blank line.
+ .driver = {
+ .name = "lenovo-wmi-camera",
+ .probe_type = PROBE_PREFER_ASYNCHRONOUS,
+ },
+ .id_table = lenovo_wmi_id_table,
+ .no_singleton = true,
+ .probe = lenovo_wmi_probe,
+ .notify = lenovo_wmi_notify,
+ .remove = lenovo_wmi_remove,
+};
+
+module_wmi_driver(lenovo_wmi_driver);...
+MODULE_DEVICE_TABLE(wmi, lenovo_wmi_id_table);Please, move it closer to the respective table.