From 3dcdd3647571ef7fadcd50efb7c8a14c8e09e6f9 Mon Sep 17 00:00:00 2001 From: liu_wei01 Date: Sat, 22 Jan 2022 05:51:33 -0800 Subject: [PATCH] support power-key --- linux-5.10/rk3568_patch/hdf.patch | 330 +----------------------------- 1 file changed, 3 insertions(+), 327 deletions(-) diff --git a/linux-5.10/rk3568_patch/hdf.patch b/linux-5.10/rk3568_patch/hdf.patch index a118ba5..fe97853 100644 --- a/linux-5.10/rk3568_patch/hdf.patch +++ b/linux-5.10/rk3568_patch/hdf.patch @@ -1,327 +1,3 @@ -diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S -index 30c102978942..1d8b8de34f1c 100644 ---- a/arch/arm64/kernel/vmlinux.lds.S -+++ b/arch/arm64/kernel/vmlinux.lds.S -@@ -201,6 +201,15 @@ SECTIONS - INIT_RAM_FS - *(.init.rodata.* .init.bss) /* from the EFI stub */ - } -+ -+#ifdef CONFIG_DRIVERS_HDF -+ .init.hdf_table : { -+ _hdf_drivers_start = .; -+ *(.hdf.driver) -+ _hdf_drivers_end = .; -+ } -+#endif -+ - .exit.data : { - EXIT_DATA - } -diff --git a/drivers/Kconfig b/drivers/Kconfig -index 8c97ea01aabd..340987ef1f17 100644 ---- a/drivers/Kconfig -+++ b/drivers/Kconfig -@@ -234,6 +234,8 @@ source "drivers/interconnect/Kconfig" - - source "drivers/counter/Kconfig" - -+source "drivers/hdf/khdf/Kconfig" -+ - source "drivers/most/Kconfig" - - source "drivers/rkflash/Kconfig" -diff --git a/drivers/Makefile b/drivers/Makefile -index 18cc78f5385c..f9cc4fa69f3b 100644 ---- a/drivers/Makefile -+++ b/drivers/Makefile -@@ -188,6 +188,7 @@ obj-$(CONFIG_SIOX) += siox/ - obj-$(CONFIG_GNSS) += gnss/ - obj-$(CONFIG_INTERCONNECT) += interconnect/ - obj-$(CONFIG_COUNTER) += counter/ -+obj-$(CONFIG_DRIVERS_HDF) += hdf/ - obj-$(CONFIG_MOST) += most/ - obj-$(CONFIG_RK_FLASH) += rkflash/ - obj-$(CONFIG_RK_NAND) += rk_nand/ -diff --git a/drivers/hdf/Makefile b/drivers/hdf/Makefile -new file mode 100644 -index 000000000000..5c5e1911c4f7 ---- /dev/null -+++ b/drivers/hdf/Makefile -@@ -0,0 +1,2 @@ -+export PROJECT_ROOT := ../../../../../ -+obj-$(CONFIG_DRIVERS_HDF) += khdf/ -diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile -index 4acb583c92a6..ddcaf4cdcb9c 100644 ---- a/drivers/hid/Makefile -+++ b/drivers/hid/Makefile -@@ -2,6 +2,15 @@ - # - # Makefile for the HID driver - # -+HDF_ROOT_DIR = -I$(srctree)/drivers/hdf -+ccflags-$(CONFIG_DRIVERS_HDF_INPUT) += $(HDF_ROOT_DIR)/framework/model/input/driver \ -+ $(HDF_ROOT_DIR)/framework/include/core \ -+ $(HDF_ROOT_DIR)/framework/core/common/include/host \ -+ $(HDF_ROOT_DIR)/framework/include/utils \ -+ $(HDF_ROOT_DIR)/framework/include/osal \ -+ $(HDF_ROOT_DIR)/framework/ability/sbuf/include \ -+ $(HDF_ROOT_DIR)/khdf/osal/include \ -+ $(HDF_ROOT_DIR)/evdev - hid-y := hid-core.o hid-input.o hid-quirks.o - hid-$(CONFIG_DEBUG_FS) += hid-debug.o - -diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index 5550c943f985..f0503e2327a3 100644 ---- a/drivers/hid/hid-core.c -+++ b/drivers/hid/hid-core.c -@@ -33,6 +33,9 @@ - #include - #include - -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+#include "hdf_hid_adapter.h" -+#endif - #include "hid-ids.h" - - /* -@@ -1522,6 +1525,11 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, - hidinput_hid_event(hid, field, usage, value); - if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event) - hid->hiddev_hid_event(hid, field, usage, value); -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ if (hid->input_dev) { -+ HidReportEvent(hid->input_dev, usage->type, usage->code, value); -+ } -+#endif - } - - /* -@@ -1928,6 +1936,85 @@ static const struct device_attribute dev_attr_country = { - .show = show_country, - }; - -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+static bool check_mouse(char *name) -+{ -+ int i; -+ static char *option[]={"Mouse", "mouse", "MOUSE", "Razer"}; -+ for (i = 0; i < 4; i++) { -+ if (strstr(name, option[i])) -+ return true; -+ } -+ return false; -+} -+static bool check_kbd(char *name) -+{ -+ int i; -+ static char *option[]={"Keyboard", "keyboard"}; -+ for (i = 0; i < 2; i++) { -+ if (strstr(name, option[i])) -+ return true; -+ } -+ return false; -+} -+static bool check_rocker(char *name) -+{ -+ int i; -+ static char *option[]={"Thrustmaster"}; -+ for (i = 0; i < 1; i++) { -+ if (strstr(name, option[i])) -+ return true; -+ } -+ return false; -+} -+static bool check_encoder(char *name) -+{ -+ if (strcmp(name, "Wired KeyBoard") == 0) { -+ return true; -+ } -+ return false; -+} -+static bool check_trackball(char *name) -+{ -+ int i; -+ static char *option[]={"Trackball"}; -+ for (i = 0; i < 1; i++) { -+ if (strstr(name, option[i])) -+ return true; -+ } -+ return false; -+} -+static void notify_connect_event(struct hid_device *hdev) -+{ -+ bool check; -+ int type = -1; -+ HidInfo *dev = (HidInfo *)kmalloc(sizeof(HidInfo), GFP_KERNEL); -+ if (dev == NULL) { -+ printk("%s: malloc failed", __func__); -+ return; -+ } -+ type = check_mouse(hdev->name)?HID_TYPE_MOUSE:type; -+ type = check_kbd(hdev->name)?HID_TYPE_KEYBOARD:type; -+ type = check_rocker(hdev->name)?HID_TYPE_ROCKER:type; -+ type = check_encoder(hdev->name)?HID_TYPE_ENCODER:type; -+ type = check_trackball(hdev->name)?HID_TYPE_TRACKBALL:type; -+ if ( type < 0) { -+ kfree(dev); -+ dev = NULL; -+ return; -+ } -+ -+ dev->devType = type; -+ dev->devName = hdev->name; -+ hdev->input_dev = HidRegisterHdfInputDev(dev); -+ if (hdev->input_dev == NULL) { -+ printk("%s: RegisterInputDevice failed\n", __func__); -+ } -+ kfree(dev); -+ dev = NULL; -+} -+#endif -+ - int hid_connect(struct hid_device *hdev, unsigned int connect_mask) - { - static const char *types[] = { "Device", "Pointer", "Mouse", "Device", -@@ -2020,6 +2107,9 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) - hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n", - buf, bus, hdev->version >> 8, hdev->version & 0xff, - type, hdev->name, hdev->phys); -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ notify_connect_event(hdev); -+#endif - - return 0; - } -@@ -2035,6 +2125,10 @@ void hid_disconnect(struct hid_device *hdev) - if (hdev->claimed & HID_CLAIMED_HIDRAW) - hidraw_disconnect(hdev); - hdev->claimed = 0; -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ if (hdev->input_dev) -+ HidUnregisterHdfInputDev(hdev->input_dev); -+#endif - } - EXPORT_SYMBOL_GPL(hid_disconnect); - -@@ -2119,6 +2213,11 @@ EXPORT_SYMBOL_GPL(hid_hw_open); - */ - void hid_hw_close(struct hid_device *hdev) - { -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ if (hdev->input_dev) { -+ return; -+ } -+#endif - mutex_lock(&hdev->ll_open_lock); - if (!--hdev->ll_open_count) - hdev->ll_driver->close(hdev); -diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c -index 580d378342c4..fb945f4ce1ff 100644 ---- a/drivers/hid/hid-input.c -+++ b/drivers/hid/hid-input.c -@@ -20,6 +20,10 @@ - #include - #include - -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+#include "hdf_hid_adapter.h" -+#endif -+ - #include "hid-ids.h" - - #define unk KEY_UNKNOWN -@@ -1416,7 +1420,15 @@ void hidinput_report_event(struct hid_device *hid, struct hid_report *report) - return; - - list_for_each_entry(hidinput, &hid->inputs, list) -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ { -+#endif - input_sync(hidinput->input); -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ if(hid->input_dev) -+ HidReportEvent(hid->input_dev, EV_SYN, SYN_REPORT, 0); -+ } -+#endif - } - EXPORT_SYMBOL_GPL(hidinput_report_event); - -@@ -1867,6 +1879,42 @@ static inline void hidinput_configure_usages(struct hid_input *hidinput, - report->field[i]->usage + j); - } - -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+static void transfer_info(struct input_dev *dev) -+{ -+ int i; -+ HidInfo *info = (HidInfo *)kmalloc(sizeof(HidInfo),GFP_KERNEL); -+ if (info == NULL) { -+ printk("%s: malloc failed\n",__func__); -+ return; -+ } -+ info->devName = dev->name; -+ memcpy(info->devProp, dev->propbit, sizeof(unsigned long) * BITS_TO_LONGS(INPUT_PROP_CNT)); -+ memcpy(info->eventType, dev->evbit, sizeof(unsigned long) * BITS_TO_LONGS(EV_CNT)); -+ memcpy(info->keyCode, dev->keybit, sizeof(unsigned long) * BITS_TO_LONGS(KEY_CNT)); -+ memcpy(info->relCode, dev->relbit, sizeof(unsigned long) * BITS_TO_LONGS(REL_CNT)); -+ memcpy(info->absCode, dev->absbit, sizeof(unsigned long) * BITS_TO_LONGS(ABS_CNT)); -+ memcpy(info->miscCode, dev->mscbit, sizeof(unsigned long) * BITS_TO_LONGS(MSC_CNT)); -+ memcpy(info->ledCode, dev->ledbit, sizeof(unsigned long) * BITS_TO_LONGS(LED_CNT)); -+ memcpy(info->soundCode, dev->sndbit, sizeof(unsigned long) * BITS_TO_LONGS(SND_CNT)); -+ memcpy(info->forceCode, dev->ffbit, sizeof(unsigned long) * BITS_TO_LONGS(FF_CNT)); -+ memcpy(info->switchCode, dev->swbit, sizeof(unsigned long) * BITS_TO_LONGS(SW_CNT)); -+ for (i = 0; i < BITS_TO_LONGS(ABS_CNT); i++) { -+ if (dev->absbit[i] != 0) { -+ memcpy(info->axisInfo, dev->absinfo, sizeof(struct input_absinfo) * ABS_CNT); -+ break; -+ } -+ } -+ info->bustype = dev->id.bustype; -+ info->vendor = dev->id.vendor; -+ info->product = dev->id.product; -+ info->version = dev->id.version; -+ SendInfoToHdf(info); -+ kfree(info); -+ info = NULL; -+} -+#endif -+ - /* - * Register the input device; print a message. - * Configure the input layer interface -@@ -1952,6 +2000,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force) - continue; - } - -+#if defined(CONFIG_DRIVERS_HDF_INPUT) -+ transfer_info(hidinput->input); -+#endif - if (input_register_device(hidinput->input)) - goto out_unwind; - hidinput->registered = true; -diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c -index 505c562a5daa..67d451beba08 100644 ---- a/drivers/input/mousedev.c -+++ b/drivers/input/mousedev.c -@@ -869,7 +869,7 @@ static struct mousedev *mousedev_create(struct input_dev *dev, - - if (mixdev) { - dev_set_name(&mousedev->dev, "mice"); -- -+ mousedev->open = 1; - mousedev->open_device = mixdev_open_devices; - mousedev->close_device = mixdev_close_devices; - } else { -diff --git a/include/linux/hid.h b/include/linux/hid.h -index 6ed2a97eb55f..1d1445a23967 100644 ---- a/include/linux/hid.h -+++ b/include/linux/hid.h -@@ -622,6 +622,7 @@ struct hid_device { /* device report descriptor */ - struct list_head debug_list; - spinlock_t debug_list_lock; - wait_queue_head_t debug_wait; -+ void *input_dev; - }; - - #define to_hid_device(pdev) \ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bdc0fcb12583fc8757c940d2844c1044f0d9c7abe8c93e2d1781cd79065c857 +size 12459 -- Gitee