122851890Sopenharmony_cidiff --git a/Makefile b/Makefile 222851890Sopenharmony_ciindex e5cb4a4f2..210b200c8 100644 322851890Sopenharmony_ci--- a/Makefile 422851890Sopenharmony_ci+++ b/Makefile 522851890Sopenharmony_ci@@ -494,7 +494,7 @@ LINUXINCLUDE := \ 622851890Sopenharmony_ci $(USERINCLUDE) 722851890Sopenharmony_ci 822851890Sopenharmony_ci KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE 922851890Sopenharmony_ci-KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ 1022851890Sopenharmony_ci+KBUILD_CFLAGS := -Wall -Wundef -Wno-trigraphs \ 1122851890Sopenharmony_ci -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ 1222851890Sopenharmony_ci -Werror=implicit-function-declaration -Werror=implicit-int \ 1322851890Sopenharmony_ci -Werror=return-type -Wno-format-security \ 1422851890Sopenharmony_ci@@ -946,7 +946,7 @@ KBUILD_CFLAGS += $(call cc-option,-fconserve-stack) 1522851890Sopenharmony_ci KBUILD_CFLAGS += -Werror=date-time 1622851890Sopenharmony_ci 1722851890Sopenharmony_ci # enforce correct pointer usage 1822851890Sopenharmony_ci-KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) 1922851890Sopenharmony_ci+KBUILD_CFLAGS += $(call cc-option,-Wno=incompatible-pointer-types) 2022851890Sopenharmony_ci 2122851890Sopenharmony_ci # Require designated initializers for all marked structures 2222851890Sopenharmony_ci KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init) 2322851890Sopenharmony_cidiff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S 2422851890Sopenharmony_ciindex 30c102978942..1d8b8de34f1c 100644 2522851890Sopenharmony_ci--- a/arch/arm64/kernel/vmlinux.lds.S 2622851890Sopenharmony_ci+++ b/arch/arm64/kernel/vmlinux.lds.S 2722851890Sopenharmony_ci@@ -201,6 +201,15 @@ SECTIONS 2822851890Sopenharmony_ci INIT_RAM_FS 2922851890Sopenharmony_ci *(.init.rodata.* .init.bss) /* from the EFI stub */ 3022851890Sopenharmony_ci } 3122851890Sopenharmony_ci+ 3222851890Sopenharmony_ci+#ifdef CONFIG_DRIVERS_HDF 3322851890Sopenharmony_ci+ .init.hdf_table : { 3422851890Sopenharmony_ci+ _hdf_drivers_start = .; 3522851890Sopenharmony_ci+ *(.hdf.driver) 3622851890Sopenharmony_ci+ _hdf_drivers_end = .; 3722851890Sopenharmony_ci+ } 3822851890Sopenharmony_ci+#endif 3922851890Sopenharmony_ci+ 4022851890Sopenharmony_ci .exit.data : { 4122851890Sopenharmony_ci EXIT_DATA 4222851890Sopenharmony_ci } 4322851890Sopenharmony_cidiff --git a/arch/arm64/Makefile b/arch/arm64/Makefile 4422851890Sopenharmony_ciindex 485b7dbd4..ff0326c8c 100644 4522851890Sopenharmony_ci--- a/arch/arm64/Makefile 4622851890Sopenharmony_ci+++ b/arch/arm64/Makefile 4722851890Sopenharmony_ci@@ -44,8 +44,7 @@ ifeq ($(CONFIG_BROKEN_GAS_INST),y) 4822851890Sopenharmony_ci $(warning Detected assembler with broken .inst; disassembly will be unreliable) 4922851890Sopenharmony_ci endif 5022851890Sopenharmony_ci 5122851890Sopenharmony_ci-KBUILD_CFLAGS += -mgeneral-regs-only \ 5222851890Sopenharmony_ci- $(compat_vdso) $(cc_has_k_constraint) 5322851890Sopenharmony_ci+KBUILD_CFLAGS += $(compat_vdso) $(cc_has_k_constraint) 5422851890Sopenharmony_ci KBUILD_CFLAGS += $(call cc-disable-warning, psabi) 5522851890Sopenharmony_ci KBUILD_AFLAGS += $(compat_vdso) 5622851890Sopenharmony_ci 5722851890Sopenharmony_cidiff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S 5822851890Sopenharmony_ciindex 8af654bd1..1e9ff41d6 100644 5922851890Sopenharmony_ci--- a/arch/arm/kernel/vmlinux.lds.S 6022851890Sopenharmony_ci+++ b/arch/arm/kernel/vmlinux.lds.S 6122851890Sopenharmony_ci@@ -131,6 +131,14 @@ SECTIONS 6222851890Sopenharmony_ci __pv_table_end = .; 6322851890Sopenharmony_ci } 6422851890Sopenharmony_ci 6522851890Sopenharmony_ci+#ifdef CONFIG_DRIVERS_HDF 6622851890Sopenharmony_ci+ .init.hdf_table : { 6722851890Sopenharmony_ci+ _hdf_drivers_start = .; 6822851890Sopenharmony_ci+ *(.hdf.driver) 6922851890Sopenharmony_ci+ _hdf_drivers_end = .; 7022851890Sopenharmony_ci+ } 7122851890Sopenharmony_ci+#endif 7222851890Sopenharmony_ci+ 7322851890Sopenharmony_ci INIT_DATA_SECTION(16) 7422851890Sopenharmony_ci 7522851890Sopenharmony_ci .exit.data : { 7622851890Sopenharmony_cidiff --git a/drivers/Kconfig b/drivers/Kconfig 7722851890Sopenharmony_ciindex 826b2b19d0b8..9a887e91b375 100644 7822851890Sopenharmony_ci--- a/drivers/Kconfig 7922851890Sopenharmony_ci+++ b/drivers/Kconfig 8022851890Sopenharmony_ci@@ -236,6 +236,8 @@ source "drivers/interconnect/Kconfig" 8122851890Sopenharmony_ci 8222851890Sopenharmony_ci source "drivers/counter/Kconfig" 8322851890Sopenharmony_ci 8422851890Sopenharmony_ci+source "drivers/hdf/khdf/Kconfig" 8522851890Sopenharmony_ci+ 8622851890Sopenharmony_ci source "drivers/most/Kconfig" 8722851890Sopenharmony_ci 8822851890Sopenharmony_ci source "drivers/accesstokenid/Kconfig" 8922851890Sopenharmony_cidiff --git a/drivers/Makefile b/drivers/Makefile 9022851890Sopenharmony_ciindex ecc494918773..79507aef0c21 100644 9122851890Sopenharmony_ci--- a/drivers/Makefile 9222851890Sopenharmony_ci+++ b/drivers/Makefile 9322851890Sopenharmony_ci@@ -191,5 +191,6 @@ obj-$(CONFIG_SIOX) += siox/ 9422851890Sopenharmony_ci obj-$(CONFIG_GNSS) += gnss/ 9522851890Sopenharmony_ci obj-$(CONFIG_INTERCONNECT) += interconnect/ 9622851890Sopenharmony_ci obj-$(CONFIG_COUNTER) += counter/ 9722851890Sopenharmony_ci+obj-$(CONFIG_DRIVERS_HDF) += hdf/ 9822851890Sopenharmony_ci obj-$(CONFIG_MOST) += most/ 9922851890Sopenharmony_ci obj-$(CONFIG_ACCESS_TOKENID) += accesstokenid/ 10022851890Sopenharmony_cidiff --git a/drivers/hdf/Makefile b/drivers/hdf/Makefile 10122851890Sopenharmony_cinew file mode 100644 10222851890Sopenharmony_ciindex 000000000000..5c5e1911c4f7 10322851890Sopenharmony_ci--- /dev/null 10422851890Sopenharmony_ci+++ b/drivers/hdf/Makefile 10522851890Sopenharmony_ci@@ -0,0 +1,2 @@ 10622851890Sopenharmony_ci+export PROJECT_ROOT := ../../../../../ 10722851890Sopenharmony_ci+obj-$(CONFIG_DRIVERS_HDF) += khdf/ 10822851890Sopenharmony_cidiff --git a/drivers/hid/Makefile b/drivers/hid/Makefile 10922851890Sopenharmony_ciindex 4acb583c92a6..ddcaf4cdcb9c 100644 11022851890Sopenharmony_ci--- a/drivers/hid/Makefile 11122851890Sopenharmony_ci+++ b/drivers/hid/Makefile 11222851890Sopenharmony_ci@@ -2,6 +2,19 @@ 11322851890Sopenharmony_ci # 11422851890Sopenharmony_ci # Makefile for the HID driver 11522851890Sopenharmony_ci # 11622851890Sopenharmony_ci+HDF_ROOT_DIR = -I$(srctree)/drivers/hdf 11722851890Sopenharmony_ci+ccflags-$(CONFIG_DRIVERS_HDF_INPUT) += $(HDF_ROOT_DIR)/framework/model/input/driver \ 11822851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/core \ 11922851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/core/common/include/host \ 12022851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/utils \ 12122851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/include/osal \ 12222851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/framework/ability/sbuf/include \ 12322851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/utils \ 12422851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/osal/shared \ 12522851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/host/shared \ 12622851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/inner_api/core \ 12722851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/khdf/osal/include \ 12822851890Sopenharmony_ci+ $(HDF_ROOT_DIR)/evdev 12922851890Sopenharmony_ci hid-y := hid-core.o hid-input.o hid-quirks.o 13022851890Sopenharmony_ci hid-$(CONFIG_DEBUG_FS) += hid-debug.o 13122851890Sopenharmony_ci 13222851890Sopenharmony_cidiff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c 13322851890Sopenharmony_ciindex 5550c943f985..f0503e2327a3 100644 13422851890Sopenharmony_ci--- a/drivers/hid/hid-core.c 13522851890Sopenharmony_ci+++ b/drivers/hid/hid-core.c 13622851890Sopenharmony_ci@@ -33,6 +33,9 @@ 13722851890Sopenharmony_ci #include <linux/hid-debug.h> 13822851890Sopenharmony_ci #include <linux/hidraw.h> 13922851890Sopenharmony_ci 14022851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 14122851890Sopenharmony_ci+#include "hdf_hid_adapter.h" 14222851890Sopenharmony_ci+#endif 14322851890Sopenharmony_ci #include "hid-ids.h" 14422851890Sopenharmony_ci 14522851890Sopenharmony_ci /* 14622851890Sopenharmony_ci@@ -1522,6 +1525,11 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, 14722851890Sopenharmony_ci hidinput_hid_event(hid, field, usage, value); 14822851890Sopenharmony_ci if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event) 14922851890Sopenharmony_ci hid->hiddev_hid_event(hid, field, usage, value); 15022851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 15122851890Sopenharmony_ci+ if (hid->input_dev) { 15222851890Sopenharmony_ci+ HidReportEvent(hid->input_dev, usage->type, usage->code, value); 15322851890Sopenharmony_ci+ } 15422851890Sopenharmony_ci+#endif 15522851890Sopenharmony_ci } 15622851890Sopenharmony_ci 15722851890Sopenharmony_ci /* 15822851890Sopenharmony_ci@@ -1928,6 +1936,85 @@ static const struct device_attribute dev_attr_country = { 15922851890Sopenharmony_ci .show = show_country, 16022851890Sopenharmony_ci }; 16122851890Sopenharmony_ci 16222851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 16322851890Sopenharmony_ci+static bool check_mouse(char *name) 16422851890Sopenharmony_ci+{ 16522851890Sopenharmony_ci+ int i; 16622851890Sopenharmony_ci+ static char *option[]={"Mouse", "mouse", "MOUSE", "Razer"}; 16722851890Sopenharmony_ci+ for (i = 0; i < 4; i++) { 16822851890Sopenharmony_ci+ if (strstr(name, option[i])) 16922851890Sopenharmony_ci+ return true; 17022851890Sopenharmony_ci+ } 17122851890Sopenharmony_ci+ return false; 17222851890Sopenharmony_ci+} 17322851890Sopenharmony_ci+static bool check_kbd(char *name) 17422851890Sopenharmony_ci+{ 17522851890Sopenharmony_ci+ int i; 17622851890Sopenharmony_ci+ static char *option[]={"Keyboard", "keyboard"}; 17722851890Sopenharmony_ci+ for (i = 0; i < 2; i++) { 17822851890Sopenharmony_ci+ if (strstr(name, option[i])) 17922851890Sopenharmony_ci+ return true; 18022851890Sopenharmony_ci+ } 18122851890Sopenharmony_ci+ return false; 18222851890Sopenharmony_ci+} 18322851890Sopenharmony_ci+static bool check_rocker(char *name) 18422851890Sopenharmony_ci+{ 18522851890Sopenharmony_ci+ int i; 18622851890Sopenharmony_ci+ static char *option[]={"Thrustmaster"}; 18722851890Sopenharmony_ci+ for (i = 0; i < 1; i++) { 18822851890Sopenharmony_ci+ if (strstr(name, option[i])) 18922851890Sopenharmony_ci+ return true; 19022851890Sopenharmony_ci+ } 19122851890Sopenharmony_ci+ return false; 19222851890Sopenharmony_ci+} 19322851890Sopenharmony_ci+static bool check_encoder(char *name) 19422851890Sopenharmony_ci+{ 19522851890Sopenharmony_ci+ if (strcmp(name, "Wired KeyBoard") == 0) { 19622851890Sopenharmony_ci+ return true; 19722851890Sopenharmony_ci+ } 19822851890Sopenharmony_ci+ return false; 19922851890Sopenharmony_ci+} 20022851890Sopenharmony_ci+static bool check_trackball(char *name) 20122851890Sopenharmony_ci+{ 20222851890Sopenharmony_ci+ int i; 20322851890Sopenharmony_ci+ static char *option[]={"Trackball"}; 20422851890Sopenharmony_ci+ for (i = 0; i < 1; i++) { 20522851890Sopenharmony_ci+ if (strstr(name, option[i])) 20622851890Sopenharmony_ci+ return true; 20722851890Sopenharmony_ci+ } 20822851890Sopenharmony_ci+ return false; 20922851890Sopenharmony_ci+} 21022851890Sopenharmony_ci+static void notify_connect_event(struct hid_device *hdev) 21122851890Sopenharmony_ci+{ 21222851890Sopenharmony_ci+ bool check; 21322851890Sopenharmony_ci+ int type = -1; 21422851890Sopenharmony_ci+ HidInfo *dev = (HidInfo *)kmalloc(sizeof(HidInfo), GFP_KERNEL); 21522851890Sopenharmony_ci+ if (dev == NULL) { 21622851890Sopenharmony_ci+ printk("%s: malloc failed", __func__); 21722851890Sopenharmony_ci+ return; 21822851890Sopenharmony_ci+ } 21922851890Sopenharmony_ci+ type = check_mouse(hdev->name)?HID_TYPE_MOUSE:type; 22022851890Sopenharmony_ci+ type = check_kbd(hdev->name)?HID_TYPE_KEYBOARD:type; 22122851890Sopenharmony_ci+ type = check_rocker(hdev->name)?HID_TYPE_ROCKER:type; 22222851890Sopenharmony_ci+ type = check_encoder(hdev->name)?HID_TYPE_ENCODER:type; 22322851890Sopenharmony_ci+ type = check_trackball(hdev->name)?HID_TYPE_TRACKBALL:type; 22422851890Sopenharmony_ci+ if ( type < 0) { 22522851890Sopenharmony_ci+ kfree(dev); 22622851890Sopenharmony_ci+ dev = NULL; 22722851890Sopenharmony_ci+ return; 22822851890Sopenharmony_ci+ } 22922851890Sopenharmony_ci+ 23022851890Sopenharmony_ci+ dev->devType = type; 23122851890Sopenharmony_ci+ dev->devName = hdev->name; 23222851890Sopenharmony_ci+ hdev->input_dev = HidRegisterHdfInputDev(dev); 23322851890Sopenharmony_ci+ if (hdev->input_dev == NULL) { 23422851890Sopenharmony_ci+ printk("%s: RegisterInputDevice failed\n", __func__); 23522851890Sopenharmony_ci+ } 23622851890Sopenharmony_ci+ kfree(dev); 23722851890Sopenharmony_ci+ dev = NULL; 23822851890Sopenharmony_ci+} 23922851890Sopenharmony_ci+#endif 24022851890Sopenharmony_ci+ 24122851890Sopenharmony_ci int hid_connect(struct hid_device *hdev, unsigned int connect_mask) 24222851890Sopenharmony_ci { 24322851890Sopenharmony_ci static const char *types[] = { "Device", "Pointer", "Mouse", "Device", 24422851890Sopenharmony_ci@@ -2020,6 +2107,9 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask) 24522851890Sopenharmony_ci hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n", 24622851890Sopenharmony_ci buf, bus, hdev->version >> 8, hdev->version & 0xff, 24722851890Sopenharmony_ci type, hdev->name, hdev->phys); 24822851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 24922851890Sopenharmony_ci+ notify_connect_event(hdev); 25022851890Sopenharmony_ci+#endif 25122851890Sopenharmony_ci 25222851890Sopenharmony_ci return 0; 25322851890Sopenharmony_ci } 25422851890Sopenharmony_ci@@ -2035,6 +2125,10 @@ void hid_disconnect(struct hid_device *hdev) 25522851890Sopenharmony_ci if (hdev->claimed & HID_CLAIMED_HIDRAW) 25622851890Sopenharmony_ci hidraw_disconnect(hdev); 25722851890Sopenharmony_ci hdev->claimed = 0; 25822851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 25922851890Sopenharmony_ci+ if (hdev->input_dev) 26022851890Sopenharmony_ci+ HidUnregisterHdfInputDev(hdev->input_dev); 26122851890Sopenharmony_ci+#endif 26222851890Sopenharmony_ci } 26322851890Sopenharmony_ci EXPORT_SYMBOL_GPL(hid_disconnect); 26422851890Sopenharmony_ci 26522851890Sopenharmony_ci@@ -2119,6 +2213,11 @@ EXPORT_SYMBOL_GPL(hid_hw_open); 26622851890Sopenharmony_ci */ 26722851890Sopenharmony_ci void hid_hw_close(struct hid_device *hdev) 26822851890Sopenharmony_ci { 26922851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 27022851890Sopenharmony_ci+ if (hdev->input_dev) { 27122851890Sopenharmony_ci+ return; 27222851890Sopenharmony_ci+ } 27322851890Sopenharmony_ci+#endif 27422851890Sopenharmony_ci mutex_lock(&hdev->ll_open_lock); 27522851890Sopenharmony_ci if (!--hdev->ll_open_count) 27622851890Sopenharmony_ci hdev->ll_driver->close(hdev); 27722851890Sopenharmony_cidiff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c 27822851890Sopenharmony_ciindex 580d378342c4..fb945f4ce1ff 100644 27922851890Sopenharmony_ci--- a/drivers/hid/hid-input.c 28022851890Sopenharmony_ci+++ b/drivers/hid/hid-input.c 28122851890Sopenharmony_ci@@ -20,6 +20,10 @@ 28222851890Sopenharmony_ci #include <linux/hid.h> 28322851890Sopenharmony_ci #include <linux/hid-debug.h> 28422851890Sopenharmony_ci 28522851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 28622851890Sopenharmony_ci+#include "hdf_hid_adapter.h" 28722851890Sopenharmony_ci+#endif 28822851890Sopenharmony_ci+ 28922851890Sopenharmony_ci #include "hid-ids.h" 29022851890Sopenharmony_ci 29122851890Sopenharmony_ci #define unk KEY_UNKNOWN 29222851890Sopenharmony_ci@@ -1416,7 +1420,15 @@ void hidinput_report_event(struct hid_device *hid, struct hid_report *report) 29322851890Sopenharmony_ci return; 29422851890Sopenharmony_ci 29522851890Sopenharmony_ci list_for_each_entry(hidinput, &hid->inputs, list) 29622851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 29722851890Sopenharmony_ci+ { 29822851890Sopenharmony_ci+#endif 29922851890Sopenharmony_ci input_sync(hidinput->input); 30022851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 30122851890Sopenharmony_ci+ if(hid->input_dev) 30222851890Sopenharmony_ci+ HidReportEvent(hid->input_dev, EV_SYN, SYN_REPORT, 0); 30322851890Sopenharmony_ci+ } 30422851890Sopenharmony_ci+#endif 30522851890Sopenharmony_ci } 30622851890Sopenharmony_ci EXPORT_SYMBOL_GPL(hidinput_report_event); 30722851890Sopenharmony_ci 30822851890Sopenharmony_ci@@ -1867,6 +1879,42 @@ static inline void hidinput_configure_usages(struct hid_input *hidinput, 30922851890Sopenharmony_ci report->field[i]->usage + j); 31022851890Sopenharmony_ci } 31122851890Sopenharmony_ci 31222851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 31322851890Sopenharmony_ci+static void transfer_info(struct input_dev *dev) 31422851890Sopenharmony_ci+{ 31522851890Sopenharmony_ci+ int i; 31622851890Sopenharmony_ci+ HidInfo *info = (HidInfo *)kmalloc(sizeof(HidInfo),GFP_KERNEL); 31722851890Sopenharmony_ci+ if (info == NULL) { 31822851890Sopenharmony_ci+ printk("%s: malloc failed\n",__func__); 31922851890Sopenharmony_ci+ return; 32022851890Sopenharmony_ci+ } 32122851890Sopenharmony_ci+ info->devName = dev->name; 32222851890Sopenharmony_ci+ memcpy(info->devProp, dev->propbit, sizeof(unsigned long) * BITS_TO_LONGS(INPUT_PROP_CNT)); 32322851890Sopenharmony_ci+ memcpy(info->eventType, dev->evbit, sizeof(unsigned long) * BITS_TO_LONGS(EV_CNT)); 32422851890Sopenharmony_ci+ memcpy(info->keyCode, dev->keybit, sizeof(unsigned long) * BITS_TO_LONGS(KEY_CNT)); 32522851890Sopenharmony_ci+ memcpy(info->relCode, dev->relbit, sizeof(unsigned long) * BITS_TO_LONGS(REL_CNT)); 32622851890Sopenharmony_ci+ memcpy(info->absCode, dev->absbit, sizeof(unsigned long) * BITS_TO_LONGS(ABS_CNT)); 32722851890Sopenharmony_ci+ memcpy(info->miscCode, dev->mscbit, sizeof(unsigned long) * BITS_TO_LONGS(MSC_CNT)); 32822851890Sopenharmony_ci+ memcpy(info->ledCode, dev->ledbit, sizeof(unsigned long) * BITS_TO_LONGS(LED_CNT)); 32922851890Sopenharmony_ci+ memcpy(info->soundCode, dev->sndbit, sizeof(unsigned long) * BITS_TO_LONGS(SND_CNT)); 33022851890Sopenharmony_ci+ memcpy(info->forceCode, dev->ffbit, sizeof(unsigned long) * BITS_TO_LONGS(FF_CNT)); 33122851890Sopenharmony_ci+ memcpy(info->switchCode, dev->swbit, sizeof(unsigned long) * BITS_TO_LONGS(SW_CNT)); 33222851890Sopenharmony_ci+ for (i = 0; i < BITS_TO_LONGS(ABS_CNT); i++) { 33322851890Sopenharmony_ci+ if (dev->absbit[i] != 0) { 33422851890Sopenharmony_ci+ memcpy(info->axisInfo, dev->absinfo, sizeof(struct input_absinfo) * ABS_CNT); 33522851890Sopenharmony_ci+ break; 33622851890Sopenharmony_ci+ } 33722851890Sopenharmony_ci+ } 33822851890Sopenharmony_ci+ info->bustype = dev->id.bustype; 33922851890Sopenharmony_ci+ info->vendor = dev->id.vendor; 34022851890Sopenharmony_ci+ info->product = dev->id.product; 34122851890Sopenharmony_ci+ info->version = dev->id.version; 34222851890Sopenharmony_ci+ SendInfoToHdf(info); 34322851890Sopenharmony_ci+ kfree(info); 34422851890Sopenharmony_ci+ info = NULL; 34522851890Sopenharmony_ci+} 34622851890Sopenharmony_ci+#endif 34722851890Sopenharmony_ci+ 34822851890Sopenharmony_ci /* 34922851890Sopenharmony_ci * Register the input device; print a message. 35022851890Sopenharmony_ci * Configure the input layer interface 35122851890Sopenharmony_ci@@ -1952,6 +2000,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force) 35222851890Sopenharmony_ci continue; 35322851890Sopenharmony_ci } 35422851890Sopenharmony_ci 35522851890Sopenharmony_ci+#if defined(CONFIG_DRIVERS_HDF_INPUT) 35622851890Sopenharmony_ci+ transfer_info(hidinput->input); 35722851890Sopenharmony_ci+#endif 35822851890Sopenharmony_ci if (input_register_device(hidinput->input)) 35922851890Sopenharmony_ci goto out_unwind; 36022851890Sopenharmony_ci hidinput->registered = true; 36122851890Sopenharmony_cidiff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile 36222851890Sopenharmony_ciindex a48e5f2d859d..90d25f2248b1 100644 36322851890Sopenharmony_ci--- a/drivers/input/misc/Makefile 36422851890Sopenharmony_ci+++ b/drivers/input/misc/Makefile 36522851890Sopenharmony_ci@@ -85,3 +85,17 @@ obj-$(CONFIG_INPUT_XEN_KBDDEV_FRONTEND) += xen-kbdfront.o 36622851890Sopenharmony_ci obj-$(CONFIG_INPUT_YEALINK) += yealink.o 36722851890Sopenharmony_ci obj-$(CONFIG_INPUT_IDEAPAD_SLIDEBAR) += ideapad_slidebar.o 36822851890Sopenharmony_ci 36922851890Sopenharmony_ci+ccflags-y +=-Idrivers/hdf/framework/model/input/driver \ 37022851890Sopenharmony_ci+ -Idrivers/hdf/framework/model/input/driver/input_bus_ops \ 37122851890Sopenharmony_ci+ -Idrivers/hdf/framework/include/core \ 37222851890Sopenharmony_ci+ -Idrivers/hdf/framework/core/common/include/host \ 37322851890Sopenharmony_ci+ -Idrivers/hdf/framework/include/utils \ 37422851890Sopenharmony_ci+ -Idrivers/hdf/framework/include/osal \ 37522851890Sopenharmony_ci+ -Idrivers/hdf/framework/include/platform \ 37622851890Sopenharmony_ci+ -Idrivers/hdf/framework/include/config \ 37722851890Sopenharmony_ci+ -Idrivers/hdf/framework/core/host/include \ 37822851890Sopenharmony_ci+ -Idrivers/hdf/framework/core/shared/include \ 37922851890Sopenharmony_ci+ -Idrivers/hdf/framework/utils/include \ 38022851890Sopenharmony_ci+ -Idrivers/hdf/khdf/osal/include 38122851890Sopenharmony_ci+ccflags-y +=-Ibounds_checking_function/include \ 38222851890Sopenharmony_ci+ -Idrivers/hdf/evdev 38322851890Sopenharmony_cidiff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c 38422851890Sopenharmony_ciindex 505c562a5daa..67d451beba08 100644 38522851890Sopenharmony_ci--- a/drivers/input/mousedev.c 38622851890Sopenharmony_ci+++ b/drivers/input/mousedev.c 38722851890Sopenharmony_ci@@ -869,7 +869,7 @@ static struct mousedev *mousedev_create(struct input_dev *dev, 38822851890Sopenharmony_ci 38922851890Sopenharmony_ci if (mixdev) { 39022851890Sopenharmony_ci dev_set_name(&mousedev->dev, "mice"); 39122851890Sopenharmony_ci- 39222851890Sopenharmony_ci+ mousedev->open = 1; 39322851890Sopenharmony_ci mousedev->open_device = mixdev_open_devices; 39422851890Sopenharmony_ci mousedev->close_device = mixdev_close_devices; 39522851890Sopenharmony_ci } else { 39622851890Sopenharmony_cidiff --git a/include/linux/hid.h b/include/linux/hid.h 39722851890Sopenharmony_ciindex 6ed2a97eb55f..1d1445a23967 100644 39822851890Sopenharmony_ci--- a/include/linux/hid.h 39922851890Sopenharmony_ci+++ b/include/linux/hid.h 40022851890Sopenharmony_ci@@ -622,6 +622,7 @@ struct hid_device { /* device report descriptor */ 40122851890Sopenharmony_ci struct list_head debug_list; 40222851890Sopenharmony_ci spinlock_t debug_list_lock; 40322851890Sopenharmony_ci wait_queue_head_t debug_wait; 40422851890Sopenharmony_ci+ void *input_dev; 40522851890Sopenharmony_ci }; 40622851890Sopenharmony_ci 40722851890Sopenharmony_ci #define to_hid_device(pdev) \ 408