122851890Sopenharmony_cidiff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S 222851890Sopenharmony_ciindex 3cd7e76cc562..2a08002ea765 100644 322851890Sopenharmony_ci--- a/arch/arm64/kernel/vmlinux.lds.S 422851890Sopenharmony_ci+++ b/arch/arm64/kernel/vmlinux.lds.S 522851890Sopenharmony_ci@@ -260,6 +260,15 @@ SECTIONS 622851890Sopenharmony_ci INIT_RAM_FS 722851890Sopenharmony_ci *(.init.altinstructions .init.bss) /* from the EFI stub */ 822851890Sopenharmony_ci } 922851890Sopenharmony_ci+ 1022851890Sopenharmony_ci+#ifdef CONFIG_DRIVERS_HDF 1122851890Sopenharmony_ci+ .init.hdf_table : { 1222851890Sopenharmony_ci+ _hdf_drivers_start = .; 1322851890Sopenharmony_ci+ *(.hdf.driver) 1422851890Sopenharmony_ci+ _hdf_drivers_end = .; 1522851890Sopenharmony_ci+ } 1622851890Sopenharmony_ci+#endif 1722851890Sopenharmony_ci+ 1822851890Sopenharmony_ci .exit.data : { 1922851890Sopenharmony_ci EXIT_DATA 2022851890Sopenharmony_ci } 2122851890Sopenharmony_cidiff --git a/drivers/Kconfig b/drivers/Kconfig 2222851890Sopenharmony_ciindex efb66e25fa2d..c03c41f408cb 100644 2322851890Sopenharmony_ci--- a/drivers/Kconfig 2422851890Sopenharmony_ci+++ b/drivers/Kconfig 2522851890Sopenharmony_ci@@ -235,6 +235,8 @@ source "drivers/interconnect/Kconfig" 2622851890Sopenharmony_ci 2722851890Sopenharmony_ci source "drivers/counter/Kconfig" 2822851890Sopenharmony_ci 2922851890Sopenharmony_ci+source "drivers/hdf/khdf/Kconfig" 3022851890Sopenharmony_ci+ 3122851890Sopenharmony_ci source "drivers/most/Kconfig" 3222851890Sopenharmony_ci 3322851890Sopenharmony_ci source "drivers/peci/Kconfig" 3422851890Sopenharmony_cidiff --git a/drivers/Makefile b/drivers/Makefile 3522851890Sopenharmony_ciindex 1bec7819a837..c34686c8bc82 100644 3622851890Sopenharmony_ci--- a/drivers/Makefile 3722851890Sopenharmony_ci+++ b/drivers/Makefile 3822851890Sopenharmony_ci@@ -192,6 +192,7 @@ obj-$(CONFIG_SIOX) += siox/ 3922851890Sopenharmony_ci obj-$(CONFIG_GNSS) += gnss/ 4022851890Sopenharmony_ci obj-$(CONFIG_INTERCONNECT) += interconnect/ 4122851890Sopenharmony_ci obj-$(CONFIG_COUNTER) += counter/ 4222851890Sopenharmony_ci+obj-$(CONFIG_DRIVERS_HDF) += hdf/ 4322851890Sopenharmony_ci obj-$(CONFIG_MOST) += most/ 4422851890Sopenharmony_ci obj-$(CONFIG_PECI) += peci/ 4522851890Sopenharmony_ci obj-$(CONFIG_HTE) += hte/ 4622851890Sopenharmony_cidiff --git a/drivers/hdf/Makefile b/drivers/hdf/Makefile 4722851890Sopenharmony_cinew file mode 100644 4822851890Sopenharmony_ciindex 000000000000..5c5e1911c4f7 4922851890Sopenharmony_ci--- /dev/null 5022851890Sopenharmony_ci+++ b/drivers/hdf/Makefile 5122851890Sopenharmony_ci@@ -0,0 +1,2 @@ 5222851890Sopenharmony_ci+export PROJECT_ROOT := ../../../../../ 5322851890Sopenharmony_ci+obj-$(CONFIG_DRIVERS_HDF) += khdf/ 5422851890Sopenharmony_cidiff --git a/drivers/hid/Makefile b/drivers/hid/Makefile 5522851890Sopenharmony_ciindex 8a06d0f840bc..5e3382ccdcbf 100644 5622851890Sopenharmony_ci--- a/drivers/hid/Makefile 5722851890Sopenharmony_ci+++ b/drivers/hid/Makefile 5822851890Sopenharmony_ci@@ -2,6 +2,19 @@ 5922851890Sopenharmony_ci # 6022851890Sopenharmony_ci # Makefile for the HID driver 6122851890Sopenharmony_ci # 6222851890Sopenharmony_ci+HDF_ROOT_DIR = -I$(srctree)/drivers/hdf 6322851890Sopenharmony_ci+ccflags-$(CONFIG_DRIVERS_HDF_INPUT) += $(HDF_ROOT_DIR)/framework/model/input/driver \ 6422851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/core \ 6522851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/core/common/include/host \ 6622851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/utils \ 6722851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/osal \ 6822851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/ability/sbuf/include \ 6922851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/utils \ 7022851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/osal/shared \ 7122851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/core \ 7222851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/host/shared \ 7322851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/khdf/osal/include \ 7422851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/evdev 7522851890Sopenharmony_ci hid-y := hid-core.o hid-input.o hid-quirks.o 7622851890Sopenharmony_ci hid-$(CONFIG_DEBUG_FS) += hid-debug.o 7722851890Sopenharmony_ci 7822851890Sopenharmony_cidiff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c 7922851890Sopenharmony_ciindex e0181218ad85..57125af807d3 100644 8022851890Sopenharmony_ci--- a/drivers/hid/hid-core.c 8122851890Sopenharmony_ci+++ b/drivers/hid/hid-core.c 8222851890Sopenharmony_ci@@ -33,6 +33,9 @@ 8322851890Sopenharmony_ci #include <linux/hid-debug.h> 8422851890Sopenharmony_ci #include <linux/hidraw.h> 8522851890Sopenharmony_ci 8622851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 8722851890Sopenharmony_ci+#include "hdf_hid_adapter.h" 8822851890Sopenharmony_ci+#endif 8922851890Sopenharmony_ci #include "hid-ids.h" 9022851890Sopenharmony_ci 9122851890Sopenharmony_ci /* 9222851890Sopenharmony_ci@@ -1541,6 +1544,11 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, 9322851890Sopenharmony_ci hidinput_hid_event(hid, field, usage, value); 9422851890Sopenharmony_ci if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event) 9522851890Sopenharmony_ci hid->hiddev_hid_event(hid, field, usage, value); 9622851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 9722851890Sopenharmony_ci+ if (hid->input_dev) { 9822851890Sopenharmony_ci+ HidReportEvent(hid->input_dev, usage->type, usage->code, value); 9922851890Sopenharmony_ci+ } 10022851890Sopenharmony_ci+#endif 10122851890Sopenharmony_ci } 10222851890Sopenharmony_ci 10322851890Sopenharmony_ci /* 10422851890Sopenharmony_ci@@ -2166,6 +2174,81 @@ static const struct device_attribute dev_attr_country = { 10522851890Sopenharmony_ci .show = show_country, 10622851890Sopenharmony_ci }; 10722851890Sopenharmony_ci 10822851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 10922851890Sopenharmony_ci+static bool check_mouse(char *name) 11022851890Sopenharmony_ci+{ 11122851890Sopenharmony_ci+ static char *option[]={"Mouse", "mouse", "MOUSE", "Razer"}; 11222851890Sopenharmony_ci+ for (int i = 0; i < 4; i++) { 11322851890Sopenharmony_ci+ if (strstr(name, option[i])) 11422851890Sopenharmony_ci+ return true; 11522851890Sopenharmony_ci+ } 11622851890Sopenharmony_ci+ return false; 11722851890Sopenharmony_ci+} 11822851890Sopenharmony_ci+static bool check_kbd(char *name) 11922851890Sopenharmony_ci+{ 12022851890Sopenharmony_ci+ static char *option[]={"Keyboard", "keyboard"}; 12122851890Sopenharmony_ci+ for (int i = 0; i < 2; i++) { 12222851890Sopenharmony_ci+ if (strstr(name, option[i])) 12322851890Sopenharmony_ci+ return true; 12422851890Sopenharmony_ci+ } 12522851890Sopenharmony_ci+ return false; 12622851890Sopenharmony_ci+} 12722851890Sopenharmony_ci+static bool check_rocker(char *name) 12822851890Sopenharmony_ci+{ 12922851890Sopenharmony_ci+ static char *option[]={"Thrustmaster"}; 13022851890Sopenharmony_ci+ for (int i = 0; i < 1; i++) { 13122851890Sopenharmony_ci+ if (strstr(name, option[i])) 13222851890Sopenharmony_ci+ return true; 13322851890Sopenharmony_ci+ } 13422851890Sopenharmony_ci+ return false; 13522851890Sopenharmony_ci+} 13622851890Sopenharmony_ci+static bool check_encoder(char *name) 13722851890Sopenharmony_ci+{ 13822851890Sopenharmony_ci+ if (strcmp(name, "Wired KeyBoard") == 0) { 13922851890Sopenharmony_ci+ return true; 14022851890Sopenharmony_ci+ } 14122851890Sopenharmony_ci+ return false; 14222851890Sopenharmony_ci+} 14322851890Sopenharmony_ci+static bool check_trackball(char *name) 14422851890Sopenharmony_ci+{ 14522851890Sopenharmony_ci+ static char *option[]={"Trackball"}; 14622851890Sopenharmony_ci+ for (int i = 0; i < 1; i++) { 14722851890Sopenharmony_ci+ if (strstr(name, option[i])) 14822851890Sopenharmony_ci+ return true; 14922851890Sopenharmony_ci+ } 15022851890Sopenharmony_ci+ return false; 15122851890Sopenharmony_ci+} 15222851890Sopenharmony_ci+static void notify_connect_event(struct hid_device *hdev) 15322851890Sopenharmony_ci+{ 15422851890Sopenharmony_ci+ bool check; 15522851890Sopenharmony_ci+ int type = -1; 15622851890Sopenharmony_ci+ HidInfo *dev = (HidInfo *)kmalloc(sizeof(HidInfo), GFP_KERNEL); 15722851890Sopenharmony_ci+ if (dev == NULL) { 15822851890Sopenharmony_ci+ printk("%s: malloc failed", __func__); 15922851890Sopenharmony_ci+ return; 16022851890Sopenharmony_ci+ } 16122851890Sopenharmony_ci+ type = check_mouse(hdev->name)?HID_TYPE_MOUSE:type; 16222851890Sopenharmony_ci+ type = check_kbd(hdev->name)?HID_TYPE_KEYBOARD:type; 16322851890Sopenharmony_ci+ type = check_rocker(hdev->name)?HID_TYPE_ROCKER:type; 16422851890Sopenharmony_ci+ type = check_encoder(hdev->name)?HID_TYPE_ENCODER:type; 16522851890Sopenharmony_ci+ type = check_trackball(hdev->name)?HID_TYPE_TRACKBALL:type; 16622851890Sopenharmony_ci+ if ( type < 0) { 16722851890Sopenharmony_ci+ kfree(dev); 16822851890Sopenharmony_ci+ dev = NULL; 16922851890Sopenharmony_ci+ return; 17022851890Sopenharmony_ci+ } 17122851890Sopenharmony_ci+ 17222851890Sopenharmony_ci+ dev->devType = type; 17322851890Sopenharmony_ci+ dev->devName = hdev->name; 17422851890Sopenharmony_ci+ hdev->input_dev = HidRegisterHdfInputDev(dev); 17522851890Sopenharmony_ci+ if (hdev->input_dev == NULL) { 17622851890Sopenharmony_ci+ printk("%s: RegisterInputDevice failed\n", __func__); 17722851890Sopenharmony_ci+ } 17822851890Sopenharmony_ci+ kfree(dev); 17922851890Sopenharmony_ci+ dev = NULL; 18022851890Sopenharmony_ci+} 18122851890Sopenharmony_ci+#endif 18222851890Sopenharmony_ci+ 18322851890Sopenharmony_ci int hid_connect(struct hid_device *hdev, unsigned int connect_mask) 18422851890Sopenharmony_ci { 18522851890Sopenharmony_ci static const char *types[] = { "Device", "Pointer", "Mouse", "Device", 18622851890Sopenharmony_ci@@ -2268,6 +2351,9 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) 18722851890Sopenharmony_ci hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n", 18822851890Sopenharmony_ci buf, bus, hdev->version >> 8, hdev->version & 0xff, 18922851890Sopenharmony_ci type, hdev->name, hdev->phys); 19022851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 19122851890Sopenharmony_ci+ notify_connect_event(hdev); 19222851890Sopenharmony_ci+#endif 19322851890Sopenharmony_ci 19422851890Sopenharmony_ci return 0; 19522851890Sopenharmony_ci } 19622851890Sopenharmony_ci@@ -2283,7 +2369,10 @@ void hid_disconnect(struct hid_device *hdev) 19722851890Sopenharmony_ci if (hdev->claimed & HID_CLAIMED_HIDRAW) 19822851890Sopenharmony_ci hidraw_disconnect(hdev); 19922851890Sopenharmony_ci hdev->claimed = 0; 20022851890Sopenharmony_ci- 20122851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 20222851890Sopenharmony_ci+ if (hdev->input_dev) 20322851890Sopenharmony_ci+ HidUnregisterHdfInputDev(hdev->input_dev); 20422851890Sopenharmony_ci+#endif 20522851890Sopenharmony_ci hid_bpf_disconnect_device(hdev); 20622851890Sopenharmony_ci } 20722851890Sopenharmony_ci EXPORT_SYMBOL_GPL(hid_disconnect); 20822851890Sopenharmony_ci@@ -2369,6 +2458,11 @@ EXPORT_SYMBOL_GPL(hid_hw_open); 20922851890Sopenharmony_ci */ 21022851890Sopenharmony_ci void hid_hw_close(struct hid_device *hdev) 21122851890Sopenharmony_ci { 21222851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 21322851890Sopenharmony_ci+ if (hdev->input_dev) { 21422851890Sopenharmony_ci+ return; 21522851890Sopenharmony_ci+ } 21622851890Sopenharmony_ci+#endif 21722851890Sopenharmony_ci mutex_lock(&hdev->ll_open_lock); 21822851890Sopenharmony_ci if (!--hdev->ll_open_count) 21922851890Sopenharmony_ci hdev->ll_driver->close(hdev); 22022851890Sopenharmony_cidiff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c 22122851890Sopenharmony_ciindex c8b20d44b147..710495f014a9 100644 22222851890Sopenharmony_ci--- a/drivers/hid/hid-input.c 22322851890Sopenharmony_ci+++ b/drivers/hid/hid-input.c 22422851890Sopenharmony_ci@@ -20,6 +20,10 @@ 22522851890Sopenharmony_ci #include <linux/hid.h> 22622851890Sopenharmony_ci #include <linux/hid-debug.h> 22722851890Sopenharmony_ci 22822851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 22922851890Sopenharmony_ci+#include "hdf_hid_adapter.h" 23022851890Sopenharmony_ci+#endif 23122851890Sopenharmony_ci+ 23222851890Sopenharmony_ci #include "hid-ids.h" 23322851890Sopenharmony_ci 23422851890Sopenharmony_ci #define unk KEY_UNKNOWN 23522851890Sopenharmony_ci@@ -1745,7 +1749,15 @@ void hidinput_report_event(struct hid_device *hid, struct hid_report *report) 23622851890Sopenharmony_ci return; 23722851890Sopenharmony_ci 23822851890Sopenharmony_ci list_for_each_entry(hidinput, &hid->inputs, list) 23922851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 24022851890Sopenharmony_ci+ { 24122851890Sopenharmony_ci+#endif 24222851890Sopenharmony_ci input_sync(hidinput->input); 24322851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 24422851890Sopenharmony_ci+ if(hid->input_dev) 24522851890Sopenharmony_ci+ HidReportEvent(hid->input_dev, EV_SYN, SYN_REPORT, 0); 24622851890Sopenharmony_ci+ } 24722851890Sopenharmony_ci+#endif 24822851890Sopenharmony_ci } 24922851890Sopenharmony_ci EXPORT_SYMBOL_GPL(hidinput_report_event); 25022851890Sopenharmony_ci 25122851890Sopenharmony_ci@@ -2267,6 +2279,41 @@ static inline void hidinput_configure_usages(struct hid_input *hidinput, 25222851890Sopenharmony_ci j); 25322851890Sopenharmony_ci } 25422851890Sopenharmony_ci 25522851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 25622851890Sopenharmony_ci+static void transfer_info(struct input_dev *dev) 25722851890Sopenharmony_ci+{ 25822851890Sopenharmony_ci+ HidInfo *info = (HidInfo *)kmalloc(sizeof(HidInfo),GFP_KERNEL); 25922851890Sopenharmony_ci+ if (info == NULL) { 26022851890Sopenharmony_ci+ printk("%s: malloc failed\n",__func__); 26122851890Sopenharmony_ci+ return; 26222851890Sopenharmony_ci+ } 26322851890Sopenharmony_ci+ info->devName = dev->name; 26422851890Sopenharmony_ci+ memcpy(info->devProp, dev->propbit, sizeof(unsigned long) * BITS_TO_LONGS(INPUT_PROP_CNT)); 26522851890Sopenharmony_ci+ memcpy(info->eventType, dev->evbit, sizeof(unsigned long) * BITS_TO_LONGS(EV_CNT)); 26622851890Sopenharmony_ci+ memcpy(info->keyCode, dev->keybit, sizeof(unsigned long) * BITS_TO_LONGS(KEY_CNT)); 26722851890Sopenharmony_ci+ memcpy(info->relCode, dev->relbit, sizeof(unsigned long) * BITS_TO_LONGS(REL_CNT)); 26822851890Sopenharmony_ci+ memcpy(info->absCode, dev->absbit, sizeof(unsigned long) * BITS_TO_LONGS(ABS_CNT)); 26922851890Sopenharmony_ci+ memcpy(info->miscCode, dev->mscbit, sizeof(unsigned long) * BITS_TO_LONGS(MSC_CNT)); 27022851890Sopenharmony_ci+ memcpy(info->ledCode, dev->ledbit, sizeof(unsigned long) * BITS_TO_LONGS(LED_CNT)); 27122851890Sopenharmony_ci+ memcpy(info->soundCode, dev->sndbit, sizeof(unsigned long) * BITS_TO_LONGS(SND_CNT)); 27222851890Sopenharmony_ci+ memcpy(info->forceCode, dev->ffbit, sizeof(unsigned long) * BITS_TO_LONGS(FF_CNT)); 27322851890Sopenharmony_ci+ memcpy(info->switchCode, dev->swbit, sizeof(unsigned long) * BITS_TO_LONGS(SW_CNT)); 27422851890Sopenharmony_ci+ for (int i = 0; i < BITS_TO_LONGS(ABS_CNT); i++) { 27522851890Sopenharmony_ci+ if (dev->absbit[i] != 0) { 27622851890Sopenharmony_ci+ memcpy(info->axisInfo, dev->absinfo, sizeof(struct input_absinfo) * ABS_CNT); 27722851890Sopenharmony_ci+ break; 27822851890Sopenharmony_ci+ } 27922851890Sopenharmony_ci+ } 28022851890Sopenharmony_ci+ info->bustype = dev->id.bustype; 28122851890Sopenharmony_ci+ info->vendor = dev->id.vendor; 28222851890Sopenharmony_ci+ info->product = dev->id.product; 28322851890Sopenharmony_ci+ info->version = dev->id.version; 28422851890Sopenharmony_ci+ SendInfoToHdf(info); 28522851890Sopenharmony_ci+ kfree(info); 28622851890Sopenharmony_ci+ info = NULL; 28722851890Sopenharmony_ci+} 28822851890Sopenharmony_ci+#endif 28922851890Sopenharmony_ci+ 29022851890Sopenharmony_ci /* 29122851890Sopenharmony_ci * Register the input device; print a message. 29222851890Sopenharmony_ci * Configure the input layer interface 29322851890Sopenharmony_ci@@ -2352,6 +2399,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force) 29422851890Sopenharmony_ci continue; 29522851890Sopenharmony_ci } 29622851890Sopenharmony_ci 29722851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 29822851890Sopenharmony_ci+ transfer_info(hidinput->input); 29922851890Sopenharmony_ci+#endif 30022851890Sopenharmony_ci if (input_register_device(hidinput->input)) 30122851890Sopenharmony_ci goto out_unwind; 30222851890Sopenharmony_ci hidinput->registered = true; 30322851890Sopenharmony_cidiff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile 30422851890Sopenharmony_ciindex 04296a4abe8e..31315c7ac6ae 100644 30522851890Sopenharmony_ci--- a/drivers/input/misc/Makefile 30622851890Sopenharmony_ci+++ b/drivers/input/misc/Makefile 30722851890Sopenharmony_ci@@ -90,3 +90,22 @@ obj-$(CONFIG_INPUT_WM831X_ON) += wm831x-on.o 30822851890Sopenharmony_ci obj-$(CONFIG_INPUT_XEN_KBDDEV_FRONTEND) += xen-kbdfront.o 30922851890Sopenharmony_ci obj-$(CONFIG_INPUT_YEALINK) += yealink.o 31022851890Sopenharmony_ci obj-$(CONFIG_INPUT_IDEAPAD_SLIDEBAR) += ideapad_slidebar.o 31122851890Sopenharmony_ci+ 31222851890Sopenharmony_ci+ccflags-y +=-I$(srctree)/drivers/hdf/framework/model/input/driver \ 31322851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/model/input/driver/input_bus_ops \ 31422851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/include/core \ 31522851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/core/common/include/host \ 31622851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/include/utils \ 31722851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/include/osal \ 31822851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/include/platform \ 31922851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/include/config \ 32022851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/core/host/include \ 32122851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/core/shared/include \ 32222851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/framework/utils/include \ 32322851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/inner_api/osal/shared \ 32422851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/inner_api/host/shared \ 32522851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/inner_api/utils \ 32622851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/inner_api/core \ 32722851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/khdf/osal/include 32822851890Sopenharmony_ci+ccflags-y +=-I$(srctree)/bounds_checking_function/include \ 32922851890Sopenharmony_ci+ -I$(srctree)/drivers/hdf/evdev 33022851890Sopenharmony_cidiff --git a/drivers/input/misc/rk805-pwrkey.c b/drivers/input/misc/rk805-pwrkey.c 33122851890Sopenharmony_ciindex 76873aa005b4..4ef4b031fdb8 100644 33222851890Sopenharmony_ci--- a/drivers/input/misc/rk805-pwrkey.c 33322851890Sopenharmony_ci+++ b/drivers/input/misc/rk805-pwrkey.c 33422851890Sopenharmony_ci@@ -14,6 +14,9 @@ 33522851890Sopenharmony_ci #include <linux/kernel.h> 33622851890Sopenharmony_ci #include <linux/module.h> 33722851890Sopenharmony_ci #include <linux/platform_device.h> 33822851890Sopenharmony_ci+#include "hdf_hid_adapter.h" 33922851890Sopenharmony_ci+ 34022851890Sopenharmony_ci+InputDevice *HidinputDev = NULL; 34122851890Sopenharmony_ci 34222851890Sopenharmony_ci static irqreturn_t pwrkey_fall_irq(int irq, void *_pwr) 34322851890Sopenharmony_ci { 34422851890Sopenharmony_ci@@ -22,6 +25,9 @@ static irqreturn_t pwrkey_fall_irq(int irq, void *_pwr) 34522851890Sopenharmony_ci input_report_key(pwr, KEY_POWER, 1); 34622851890Sopenharmony_ci input_sync(pwr); 34722851890Sopenharmony_ci 34822851890Sopenharmony_ci+ HidReportEvent(HidinputDev, EV_KEY, KEY_POWER, 1); 34922851890Sopenharmony_ci+ HidReportEvent(HidinputDev, EV_SYN, SYN_REPORT, 0); 35022851890Sopenharmony_ci+ 35122851890Sopenharmony_ci return IRQ_HANDLED; 35222851890Sopenharmony_ci } 35322851890Sopenharmony_ci 35422851890Sopenharmony_ci@@ -32,9 +38,25 @@ static irqreturn_t pwrkey_rise_irq(int irq, void *_pwr) 35522851890Sopenharmony_ci input_report_key(pwr, KEY_POWER, 0); 35622851890Sopenharmony_ci input_sync(pwr); 35722851890Sopenharmony_ci 35822851890Sopenharmony_ci+ HidReportEvent(HidinputDev, EV_KEY, KEY_POWER, 0); 35922851890Sopenharmony_ci+ HidReportEvent(HidinputDev, EV_SYN, SYN_REPORT, 0); 36022851890Sopenharmony_ci+ 36122851890Sopenharmony_ci return IRQ_HANDLED; 36222851890Sopenharmony_ci } 36322851890Sopenharmony_ci 36422851890Sopenharmony_ci+static InputDevice* HidRegisterHdfPowerKeyDev(void) 36522851890Sopenharmony_ci+{ 36622851890Sopenharmony_ci+ InputDevice* inputDev = NULL; 36722851890Sopenharmony_ci+ HidInfo Hid_keyInfo; 36822851890Sopenharmony_ci+ 36922851890Sopenharmony_ci+ Hid_keyInfo.devType = HID_TYPE_KEY; 37022851890Sopenharmony_ci+ Hid_keyInfo.eventType[0] = SET_BIT(EV_KEY); 37122851890Sopenharmony_ci+ Hid_keyInfo.keyCode[3] = SET_BIT(KEY_POWER); 37222851890Sopenharmony_ci+ Hid_keyInfo.devName = "hid-powerkey"; 37322851890Sopenharmony_ci+ inputDev = HidRegisterHdfInputDev(&Hid_keyInfo); 37422851890Sopenharmony_ci+ return inputDev; 37522851890Sopenharmony_ci+} 37622851890Sopenharmony_ci+ 37722851890Sopenharmony_ci static int rk805_pwrkey_probe(struct platform_device *pdev) 37822851890Sopenharmony_ci { 37922851890Sopenharmony_ci struct input_dev *pwr; 38022851890Sopenharmony_ci@@ -87,6 +109,12 @@ static int rk805_pwrkey_probe(struct platform_device *pdev) 38122851890Sopenharmony_ci platform_set_drvdata(pdev, pwr); 38222851890Sopenharmony_ci device_init_wakeup(&pdev->dev, true); 38322851890Sopenharmony_ci 38422851890Sopenharmony_ci+ HidinputDev = HidRegisterHdfPowerKeyDev(); 38522851890Sopenharmony_ci+ if (NULL == HidinputDev) { 38622851890Sopenharmony_ci+ pr_err("HidRegisterHdfInputDev error\n"); 38722851890Sopenharmony_ci+ return -EINVAL; 38822851890Sopenharmony_ci+ } 38922851890Sopenharmony_ci+ 39022851890Sopenharmony_ci return 0; 39122851890Sopenharmony_ci } 39222851890Sopenharmony_ci 39322851890Sopenharmony_cidiff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c 39422851890Sopenharmony_ciindex 505c562a5daa..67d451beba08 100644 39522851890Sopenharmony_ci--- a/drivers/input/mousedev.c 39622851890Sopenharmony_ci+++ b/drivers/input/mousedev.c 39722851890Sopenharmony_ci@@ -869,7 +869,7 @@ static struct mousedev *mousedev_create(struct input_dev *dev, 39822851890Sopenharmony_ci 39922851890Sopenharmony_ci if (mixdev) { 40022851890Sopenharmony_ci dev_set_name(&mousedev->dev, "mice"); 40122851890Sopenharmony_ci- 40222851890Sopenharmony_ci+ mousedev->open = 1; 40322851890Sopenharmony_ci mousedev->open_device = mixdev_open_devices; 40422851890Sopenharmony_ci mousedev->close_device = mixdev_close_devices; 40522851890Sopenharmony_ci } else { 40622851890Sopenharmony_cidiff --git a/drivers/usb/core/notify.c b/drivers/usb/core/notify.c 40722851890Sopenharmony_ciindex e6143663778f..8256d576c762 100644 40822851890Sopenharmony_ci--- a/drivers/usb/core/notify.c 40922851890Sopenharmony_ci+++ b/drivers/usb/core/notify.c 41022851890Sopenharmony_ci@@ -66,3 +66,12 @@ void usb_notify_remove_bus(struct usb_bus *ubus) 41122851890Sopenharmony_ci { 41222851890Sopenharmony_ci blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_REMOVE, ubus); 41322851890Sopenharmony_ci } 41422851890Sopenharmony_ci+ 41522851890Sopenharmony_ci+void usb_notify_online_status(bool online) 41622851890Sopenharmony_ci+{ 41722851890Sopenharmony_ci+ if (online) { 41822851890Sopenharmony_ci+ blocking_notifier_call_chain(&usb_notifier_list, USB_GADGET_ADD, NULL); 41922851890Sopenharmony_ci+ } else { 42022851890Sopenharmony_ci+ blocking_notifier_call_chain(&usb_notifier_list, USB_GADGET_REMOVE, NULL); 42122851890Sopenharmony_ci+ } 42222851890Sopenharmony_ci+} 42322851890Sopenharmony_cidiff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c 42422851890Sopenharmony_ciindex 28f49400f3e8..abcc53a0779c 100644 42522851890Sopenharmony_ci--- a/drivers/usb/dwc3/gadget.c 42622851890Sopenharmony_ci+++ b/drivers/usb/dwc3/gadget.c 42722851890Sopenharmony_ci@@ -4360,6 +4360,7 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, 42822851890Sopenharmony_ci { 42922851890Sopenharmony_ci switch (event->type) { 43022851890Sopenharmony_ci case DWC3_DEVICE_EVENT_DISCONNECT: 43122851890Sopenharmony_ci+ usb_notify_online_status(false); 43222851890Sopenharmony_ci dwc3_gadget_disconnect_interrupt(dwc); 43322851890Sopenharmony_ci break; 43422851890Sopenharmony_ci case DWC3_DEVICE_EVENT_RESET: 43522851890Sopenharmony_ci@@ -4367,6 +4368,7 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, 43622851890Sopenharmony_ci break; 43722851890Sopenharmony_ci case DWC3_DEVICE_EVENT_CONNECT_DONE: 43822851890Sopenharmony_ci dwc3_gadget_conndone_interrupt(dwc); 43922851890Sopenharmony_ci+ usb_notify_online_status(true); 44022851890Sopenharmony_ci break; 44122851890Sopenharmony_ci case DWC3_DEVICE_EVENT_WAKEUP: 44222851890Sopenharmony_ci dwc3_gadget_wakeup_interrupt(dwc, event->event_info); 44322851890Sopenharmony_cidiff --git a/include/linux/hid.h b/include/linux/hid.h 44422851890Sopenharmony_ciindex 3b08a2957229..046de8cd3be0 100644 44522851890Sopenharmony_ci--- a/include/linux/hid.h 44622851890Sopenharmony_ci+++ b/include/linux/hid.h 44722851890Sopenharmony_ci@@ -686,6 +686,7 @@ struct hid_device { /* device report descriptor */ 44822851890Sopenharmony_ci #ifdef CONFIG_BPF 44922851890Sopenharmony_ci struct hid_bpf bpf; /* hid-bpf data */ 45022851890Sopenharmony_ci #endif /* CONFIG_BPF */ 45122851890Sopenharmony_ci+ void *input_dev; 45222851890Sopenharmony_ci }; 45322851890Sopenharmony_ci 45422851890Sopenharmony_ci void hiddev_free(struct kref *ref); 45522851890Sopenharmony_cidiff --git a/include/linux/usb.h b/include/linux/usb.h 45622851890Sopenharmony_ciindex a21074861f91..9e75513e4f7e 100644 45722851890Sopenharmony_ci--- a/include/linux/usb.h 45822851890Sopenharmony_ci+++ b/include/linux/usb.h 45922851890Sopenharmony_ci@@ -2056,8 +2056,11 @@ static inline int usb_translate_errors(int error_code) 46022851890Sopenharmony_ci #define USB_DEVICE_REMOVE 0x0002 46122851890Sopenharmony_ci #define USB_BUS_ADD 0x0003 46222851890Sopenharmony_ci #define USB_BUS_REMOVE 0x0004 46322851890Sopenharmony_ci+#define USB_GADGET_ADD 0x0005 46422851890Sopenharmony_ci+#define USB_GADGET_REMOVE 0x0006 46522851890Sopenharmony_ci extern void usb_register_notify(struct notifier_block *nb); 46622851890Sopenharmony_ci extern void usb_unregister_notify(struct notifier_block *nb); 46722851890Sopenharmony_ci+extern void usb_notify_online_status(bool online); 46822851890Sopenharmony_ci 46922851890Sopenharmony_ci /* debugfs stuff */ 47022851890Sopenharmony_ci extern struct dentry *usb_debug_root; 471