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