Bläddra i källkod

Merge 56fcf3d4d4d40bfa1de989b41161b2ec55b8859e on remote branch

Change-Id: Ie37f0dbed39fa0fee89d028739f5d71bf3487ad9
Linux Build Service Account 2 år sedan
förälder
incheckning
a5882cbf53

+ 172 - 118
Android.mk

@@ -2,125 +2,179 @@
 
 TOUCH_DLKM_ENABLE := true
 ifeq ($(TARGET_KERNEL_DLKM_DISABLE), true)
-	ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
-		TOUCH_DLKM_ENABLE := false
-	endif
+       ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
+               TOUCH_DLKM_ENABLE := false
+       endif
 endif
 
 ifeq ($(TOUCH_DLKM_ENABLE),  true)
-	TOUCH_SELECT := CONFIG_MSM_TOUCH=m
-
-	LOCAL_PATH := $(call my-dir)
-	include $(CLEAR_VARS)
-
-	# This makefile is only for DLKM
-	ifneq ($(findstring vendor,$(LOCAL_PATH)),)
-
-	ifneq ($(findstring opensource,$(LOCAL_PATH)),)
-		TOUCH_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/touch-drivers
-	endif # opensource
-
-	DLKM_DIR := $(TOP)/device/qcom/common/dlkm
-
-	LOCAL_ADDITIONAL_DEPENDENCIES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-
-	# Build
-	###########################################################
-	# This is set once per LOCAL_PATH, not per (kernel) module
-	KBUILD_OPTIONS := TOUCH_ROOT=$(TOUCH_BLD_DIR)
-
-	KBUILD_OPTIONS += MODNAME=touch_dlkm
-	KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
-	KBUILD_OPTIONS += $(TOUCH_SELECT)
-
-	###########################################################
-	include $(CLEAR_VARS)
-	LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-	LOCAL_MODULE              := nt36xxx-i2c.ko
-	LOCAL_MODULE_KBUILD_NAME  := nt36xxx-i2c.ko
-	LOCAL_MODULE_TAGS         := optional
-	#LOCAL_MODULE_DEBUG_ENABLE := true
-	LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-	include $(DLKM_DIR)/Build_external_kernelmodule.mk
-	###########################################################
-
-	###########################################################
-	include $(CLEAR_VARS)
-	LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-	LOCAL_MODULE              := goodix_ts.ko
-	LOCAL_MODULE_KBUILD_NAME  := goodix_ts.ko
-	LOCAL_MODULE_TAGS         := optional
-	#LOCAL_MODULE_DEBUG_ENABLE := true
-	LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-	include $(DLKM_DIR)/Build_external_kernelmodule.mk
-	###########################################################
-
-	###########################################################
-	include $(CLEAR_VARS)
-	LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-	LOCAL_MODULE              := atmel_mxt_ts.ko
-	LOCAL_MODULE_KBUILD_NAME  := atmel_mxt_ts.ko
-	LOCAL_MODULE_TAGS         := optional
-	#LOCAL_MODULE_DEBUG_ENABLE := true
-	LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-	include $(DLKM_DIR)/Build_external_kernelmodule.mk
-	###########################################################
-
-	###########################################################
-	include $(CLEAR_VARS)
-	LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-	LOCAL_MODULE              := synaptics_tcm_ts.ko
-	LOCAL_MODULE_KBUILD_NAME  := synaptics_tcm_ts.ko
-	LOCAL_MODULE_TAGS         := optional
-	#LOCAL_MODULE_DEBUG_ENABLE := true
-	LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-	include $(DLKM_DIR)/Build_external_kernelmodule.mk
-	###########################################################
-
-	ifneq ($(TARGET_BOARD_PLATFORM), pineapple)
-		###########################################################
-		include $(CLEAR_VARS)
-		LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-		LOCAL_MODULE              := pt_ts.ko
-		LOCAL_MODULE_KBUILD_NAME  := pt_ts.ko
-		LOCAL_MODULE_TAGS         := optional
-		#LOCAL_MODULE_DEBUG_ENABLE := true
-		LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-		include $(DLKM_DIR)/Build_external_kernelmodule.mk
-		###########################################################
-
-		###########################################################
-		include $(CLEAR_VARS)
-		LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-		LOCAL_MODULE              := pt_i2c.ko
-		LOCAL_MODULE_KBUILD_NAME  := pt_i2c.ko
-		LOCAL_MODULE_TAGS         := optional
-		#LOCAL_MODULE_DEBUG_ENABLE := true
-		LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-		include $(DLKM_DIR)/Build_external_kernelmodule.mk
-		###########################################################
-
-		###########################################################
-		include $(CLEAR_VARS)
-		LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-		LOCAL_MODULE              := pt_device_access.ko
-		LOCAL_MODULE_KBUILD_NAME  := pt_device_access.ko
-		LOCAL_MODULE_TAGS         := optional
-		#LOCAL_MODULE_DEBUG_ENABLE := true
-		LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-		include $(DLKM_DIR)/Build_external_kernelmodule.mk
-		###########################################################
-
-		###########################################################
-		include $(CLEAR_VARS)
-		LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
-		LOCAL_MODULE              := raydium_ts.ko
-		LOCAL_MODULE_KBUILD_NAME  := raydium_ts.ko
-		LOCAL_MODULE_TAGS         := optional
-		#LOCAL_MODULE_DEBUG_ENABLE := true
-		LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
-		include $(DLKM_DIR)/Build_external_kernelmodule.mk
-		###########################################################
-	endif # pineapple
-	endif # DLKM check
+       TOUCH_SELECT := CONFIG_MSM_TOUCH=m
+
+       LOCAL_PATH := $(call my-dir)
+       include $(CLEAR_VARS)
+
+       # This makefile is only for DLKM
+       ifneq ($(findstring vendor,$(LOCAL_PATH)),)
+
+       ifneq ($(findstring opensource,$(LOCAL_PATH)),)
+               TOUCH_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/touch-drivers
+       endif # opensource
+
+       DLKM_DIR := $(TOP)/device/qcom/common/dlkm
+
+       LOCAL_ADDITIONAL_DEPENDENCIES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+
+       # Build
+       ###########################################################
+       # This is set once per LOCAL_PATH, not per (kernel) module
+       KBUILD_OPTIONS := TOUCH_ROOT=$(TOUCH_BLD_DIR)
+
+       KBUILD_OPTIONS += MODNAME=touch_dlkm
+       KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
+       KBUILD_OPTIONS += $(TOUCH_SELECT)
+
+       ###########################################################
+
+ifeq ($(TARGET_BOARD_PLATFORM), monaco)
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := pt_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := pt_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := pt_i2c.ko
+       LOCAL_MODULE_KBUILD_NAME  := pt_i2c.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := pt_device_access.ko
+       LOCAL_MODULE_KBUILD_NAME  := pt_device_access.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := raydium_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := raydium_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+else ifeq ($(TARGET_BOARD_PLATFORM), kona)
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := focaltech_fts.ko
+       LOCAL_MODULE_KBUILD_NAME  := focaltech_fts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+else ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := nt36xxx-i2c.ko
+       LOCAL_MODULE_KBUILD_NAME  := nt36xxx-i2c.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := goodix_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := goodix_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := atmel_mxt_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := atmel_mxt_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+else
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := nt36xxx-i2c.ko
+       LOCAL_MODULE_KBUILD_NAME  := nt36xxx-i2c.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := goodix_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := goodix_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := atmel_mxt_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := atmel_mxt_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+       ###########################################################
+       include $(CLEAR_VARS)
+       LOCAL_SRC_FILES   := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+       LOCAL_MODULE              := synaptics_tcm_ts.ko
+       LOCAL_MODULE_KBUILD_NAME  := synaptics_tcm_ts.ko
+       LOCAL_MODULE_TAGS         := optional
+       #LOCAL_MODULE_DEBUG_ENABLE := true
+       LOCAL_MODULE_PATH         := $(KERNEL_MODULES_OUT)
+       include $(DLKM_DIR)/Build_external_kernelmodule.mk
+       ###########################################################
+
+endif #kona
+       endif # DLKM check
 endif

+ 13 - 8
Kbuild

@@ -6,25 +6,30 @@ ifeq ($(CONFIG_ARCH_WAIPIO), y)
 	LINUX_INC += -include $(TOUCH_ROOT)/config/gki_waipiotouchconf.h
 endif
 
-#ifeq ($(CONFIG_ARCH_KALAMA), y)
+ifeq ($(CONFIG_ARCH_KALAMA), y)
 	include $(TOUCH_ROOT)/config/gki_kalamatouch.conf
 	LINUX_INC += -include $(TOUCH_ROOT)/config/gki_kalamatouchconf.h
-#endif
+endif
 
-#ifeq ($(CONFIG_ARCH_KHAJE), y)
+ifeq ($(CONFIG_ARCH_KHAJE), y)
 	include $(TOUCH_ROOT)/config/gki_khajetouch.conf
 	LINUX_INC += -include $(TOUCH_ROOT)/config/gki_khajetouchconf.h
-#endif
+endif
 
-#ifeq ($(CONFIG_ARCH_PINEAPPLE), y)
+ifeq ($(CONFIG_ARCH_PINEAPPLE), y)
 	include $(TOUCH_ROOT)/config/gki_pineappletouch.conf
 	LINUX_INC += -include $(TOUCH_ROOT)/config/gki_pineappletouchconf.h
-#endif
+endif
 
-#ifeq ($(CONFIG_ARCH_MONACO), y)
+ifeq ($(CONFIG_ARCH_MONACO), y)
 	include $(TOUCH_ROOT)/config/gki_monacotouch.conf
 	LINUX_INC += -include $(TOUCH_ROOT)/config/gki_monacotouchconf.h
-#endif
+endif
+
+ifeq ($(CONFIG_ARCH_KONA), y)
+        include $(TOUCH_ROOT)/config/gki_konatouch.conf
+        LINUX_INC += -include $(TOUCH_ROOT)/config/gki_konatouchconf.h
+endif
 
 LINUX_INC +=	-Iinclude/linux \
 		-Iinclude/linux/drm \

+ 4 - 0
config/gki_konatouch.conf

@@ -0,0 +1,4 @@
+export CONFIG_MSM_TOUCH=m
+export CONFIG_TOUCH_FOCALTECH=y
+export CONFIG_TOUCHSCREEN_FTS_DIRECTORY="focaltech_touch"
+export CONFIG_FTS_TRUSTED_TOUCH=n

+ 7 - 0
config/gki_konatouchconf.h

@@ -0,0 +1,7 @@
+/*
+* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+* SPDX-License-Identifier: GPL-2.0-only
+*/
+
+#define CONFIG_TOUCH_FOCALTECH 1
+#define CONFIG_TOUCHSCREEN_FTS_DIRECTORY "focaltech_touch"

+ 7 - 4
focaltech_touch/focaltech_core.c

@@ -998,15 +998,14 @@ static int fts_ts_vm_mem_lend(struct fts_ts_data *fts_data)
 	acl_desc = fts_ts_vm_get_acl(GH_TRUSTED_VM);
 	if (IS_ERR(acl_desc)) {
 		pr_err("Failed to get acl of IO memories for Trusted touch\n");
-		PTR_ERR(acl_desc);
-		return -EINVAL;
+		rc = PTR_ERR(acl_desc);
+		return rc;
 	}
 
 	sgl_desc = fts_ts_vm_get_sgl(fts_data->vm_info);
 	if (IS_ERR(sgl_desc)) {
 		pr_err("Failed to get sgl of IO memories for Trusted touch\n");
-		PTR_ERR(sgl_desc);
-		rc = -EINVAL;
+		rc = PTR_ERR(sgl_desc);
 		goto sgl_error;
 	}
 
@@ -2866,7 +2865,11 @@ static int fts_ts_probe_entry(struct fts_ts_data *ts_data)
 	if (ts_data->ts_workqueue)
 		INIT_WORK(&ts_data->resume_work, fts_resume_work);
 
+#ifdef CONFIG_FTS_TRUSTED_TOUCH
 	if (!strcmp(fts_data->touch_environment, "pvm"))
+#else
+	if (active_panel)
+#endif
 		fts_ts_register_for_panel_events(ts_data->dev->of_node, ts_data);
 #elif defined(CONFIG_FB)
 	if (ts_data->ts_workqueue) {

+ 2 - 0
focaltech_touch/focaltech_core.h

@@ -61,8 +61,10 @@
 #include <linux/sched.h>
 #include <linux/kthread.h>
 #include <linux/dma-mapping.h>
+#if defined(CONFIG_FTS_TRUSTED_TOUCH)
 #include <linux/gunyah/gh_irq_lend.h>
 #include <linux/gunyah/gh_mem_notifier.h>
+#endif
 #include "focaltech_common.h"
 
 /*****************************************************************************

+ 15 - 3
goodix_berlin_driver/goodix_brl_hw.c

@@ -204,6 +204,8 @@ static int brl_reset_after(struct goodix_ts_core *cd)
 	return 0;
 }
 
+#define REG_SUSPEND_CURRENT 20
+#define REG_RESUME_CURRENT 14000
 static int brl_power_on(struct goodix_ts_core *cd, bool on)
 {
 	int ret = 0;
@@ -215,6 +217,13 @@ static int brl_power_on(struct goodix_ts_core *cd, bool on)
 		if (iovdd_gpio > 0) {
 			gpio_direction_output(iovdd_gpio, 1);
 		} else if (cd->iovdd) {
+			if (regulator_count_voltages(cd->iovdd) > 0) {
+				ret = regulator_set_load(cd->iovdd, REG_RESUME_CURRENT);
+				if (ret) {
+					ts_err("Setting regulator load failed:%d", ret);
+					goto power_off;
+				}
+			}
 			ret = regulator_enable(cd->iovdd);
 			if (ret < 0) {
 				ts_err("Failed to enable iovdd:%d", ret);
@@ -251,8 +260,11 @@ power_off:
 	gpio_direction_output(reset_gpio, 0);
 	if (iovdd_gpio > 0)
 		gpio_direction_output(iovdd_gpio, 0);
-	else if (cd->iovdd)
+	else if (cd->iovdd) {
 		regulator_disable(cd->iovdd);
+		if (regulator_count_voltages(cd->iovdd) > 0)
+			regulator_set_load(cd->iovdd, REG_SUSPEND_CURRENT);
+	}
 	if (avdd_gpio > 0)
 		gpio_direction_output(avdd_gpio, 0);
 	else if (cd->avdd)
@@ -336,11 +348,11 @@ static int brl_irq_enbale(struct goodix_ts_core *cd, bool enable)
 	}
 
 	if (!enable && atomic_cmpxchg(&cd->irq_enabled, 1, 0)) {
-		disable_irq(cd->irq);
+		disable_irq_nosync(cd->irq);
 		ts_debug("Irq disabled");
 		return 0;
 	}
-	ts_info("warnning: irq deepth inbalance!");
+	ts_info("warning: irq depth imbalance!");
 	return 0;
 }
 

+ 3 - 2
pt/pt_core.c

@@ -12961,6 +12961,7 @@ static void pt_setup_panel_event_notifier(struct pt_core_data *cd)
 		pt_debug(cd->dev, DL_ERROR,
 				"%s: Register notifier failed!\n", __func__);
 	}
+	cd->entry = cookie;
 }
 #else
 
@@ -15061,7 +15062,7 @@ static int pt_device_exit(struct i2c_client *client)
 		pt_debug(dev, DL_INFO,"%s: Start pt_device_exit\n", __func__);
 
 		if (active_panel)
-			panel_event_notifier_unregister(&cd->fb_notifier);
+			panel_event_notifier_unregister(cd->entry);
 		pt_core_state = STATE_SUSPEND;
 
 		pm_runtime_suspend(dev);
@@ -18435,7 +18436,7 @@ int pt_release(struct pt_core_data *cd)
 	unregister_early_suspend(&cd->es);
 #elif defined(CONFIG_PANEL_NOTIFIER)
 	if (active_panel)
-		panel_event_notifier_unregister(&cd->fb_notifier);
+		panel_event_notifier_unregister(cd->entry);
 #elif defined(CONFIG_DRM)
 	if (active_panel)
 		drm_panel_notifier_unregister(active_panel, &cd->fb_notifier);

+ 3 - 0
pt/pt_regs.h

@@ -1525,6 +1525,9 @@ struct pt_core_data {
 	int raw_cmd_status;
 #ifdef CONFIG_HAS_EARLYSUSPEND
 	struct early_suspend es;
+#elif defined(CONFIG_PANEL_NOTIFIER)
+	struct panel_event_notifier_entry *entry;
+	enum pt_fb_state fb_state;
 #elif defined(CONFIG_FB) || defined(CONFIG_DRM) || defined(CONFIG_PANEL_NOTIFIER)
 	struct notifier_block fb_notifier;
 	enum pt_fb_state fb_state;

+ 25 - 1
qts/qts_core.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #define pr_fmt(fmt)	"%s: " fmt, __func__
@@ -40,7 +40,11 @@ static struct gh_acl_desc *qts_vm_get_acl(enum gh_vm_names vm_name)
 	struct gh_acl_desc *acl_desc;
 	gh_vmid_t vmid;
 
+#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
+	ghd_rm_get_vmid(vm_name, &vmid);
+#else
 	gh_rm_get_vmid(vm_name, &vmid);
+#endif
 
 	acl_desc = kzalloc(offsetof(struct gh_acl_desc, acl_entries[1]),
 			GFP_KERNEL);
@@ -739,7 +743,12 @@ static void qts_trusted_touch_abort_pvm(struct qts_data *qts_data)
 	case PVM_IOMEM_LENT:
 	case PVM_IOMEM_LENT_NOTIFIED:
 	case PVM_IOMEM_RELEASE_NOTIFIED:
+#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
+		rc = ghd_rm_mem_reclaim(qts_data->vm_info->vm_mem_handle, 0);
+#else
 		rc = gh_rm_mem_reclaim(qts_data->vm_info->vm_mem_handle, 0);
+#endif
+
 		if (rc) {
 			pr_err("failed to reclaim iomem on pvm rc:%d\n", rc);
 			qts_trusted_touch_set_vm_state(qts_data, PVM_IOMEM_RELEASE_NOTIFIED);
@@ -872,7 +881,12 @@ static void qts_trusted_touch_pvm_vm_mode_disable(struct qts_data *qts_data)
 	if (qts_data->vendor_ops.pre_la_tui_disable)
 		qts_data->vendor_ops.pre_la_tui_disable(qts_data->vendor_data);
 
+#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
+	rc = ghd_rm_mem_reclaim(qts_data->vm_info->vm_mem_handle, 0);
+#else
 	rc = gh_rm_mem_reclaim(qts_data->vm_info->vm_mem_handle, 0);
+#endif
+
 	if (rc) {
 		pr_err("Trusted touch VM mem reclaim failed rc:%d\n", rc);
 		goto error;
@@ -990,8 +1004,14 @@ static int qts_vm_mem_lend(struct qts_data *qts_data)
 		goto sgl_error;
 	}
 
+#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
+	rc = ghd_rm_mem_lend(GH_RM_MEM_TYPE_IO, 0, TRUSTED_TOUCH_MEM_LABEL,
+			acl_desc, sgl_desc, NULL, &mem_handle);
+#else
 	rc = gh_rm_mem_lend(GH_RM_MEM_TYPE_IO, 0, TRUSTED_TOUCH_MEM_LABEL,
 			acl_desc, sgl_desc, NULL, &mem_handle);
+#endif
+
 	if (rc) {
 		pr_err("Failed to lend IO memories for Trusted touch rc:%d\n", rc);
 		goto error;
@@ -1001,7 +1021,11 @@ static int qts_vm_mem_lend(struct qts_data *qts_data)
 
 	qts_trusted_touch_set_vm_state(qts_data, PVM_IOMEM_LENT);
 
+#if (KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE)
+	ghd_rm_get_vmid(GH_TRUSTED_VM, &trusted_vmid);
+#else
 	gh_rm_get_vmid(GH_TRUSTED_VM, &trusted_vmid);
+#endif
 
 	vmid_desc = qts_vm_get_vmid(trusted_vmid);
 

+ 23 - 12
raydium/raydium_driver.c

@@ -1188,8 +1188,8 @@ reset_error:
 static void raydium_work_handler(struct work_struct *work)
 {
 	int i32_ret = 0;
-	unsigned char u8_tp_status[MAX_TCH_STATUS_PACKET_SIZE];
-	unsigned char u8_buf[MAX_REPORT_PACKET_SIZE];
+	unsigned char u8_tp_status[MAX_TCH_STATUS_PACKET_SIZE] = {0};
+	unsigned char u8_buf[MAX_REPORT_PACKET_SIZE] = {0};
 
 #ifdef GESTURE_EN
 	unsigned char u8_i;
@@ -1300,8 +1300,10 @@ static irqreturn_t raydium_ts_interrupt(int irq, void *dev_id)
 	} else {
 		if (!work_pending(&g_raydium_ts->work)) {
 			/* Clear interrupts*/
-			result = queue_work(g_raydium_ts->workqueue,
-					    &g_raydium_ts->work);
+			if (g_raydium_ts->workqueue) {
+				result = queue_work(g_raydium_ts->workqueue,
+						&g_raydium_ts->work);
+			}
 
 			if (!result) {
 				/*queue_work fail*/
@@ -1669,6 +1671,7 @@ static void raydium_setup_panel_notifier(struct raydium_ts_data *g_raydium_ts)
 	cookie = panel_event_notifier_register(PANEL_EVENT_NOTIFICATION_PRIMARY,
 			PANEL_EVENT_NOTIFIER_CLIENT_PRIMARY_TOUCH,
 			active_panel,&panel_event_notifier_callback, g_raydium_ts);
+	g_raydium_ts->entry = cookie;
 }
 
 #elif defined(CONFIG_DRM)
@@ -2459,8 +2462,7 @@ exit_irq_request_failed:
 #if defined(CONFIG_FB)
 	raydium_unregister_notifier();
 #elif defined(CONFIG_PANEL_NOTIFIER)
-	if (active_panel)
-		panel_event_notifier_unregister(&g_raydium_ts->fb_notif);
+	panel_event_notifier_unregister(g_raydium_ts->entry);
 #elif defined(CONFIG_DRM)
         raydium_setup_drm_unregister_notifier();
 #endif
@@ -2512,6 +2514,9 @@ exit_check_functionality_failed:
 void raydium_ts_shutdown(struct i2c_client *client)
 {
 
+	LOGD(LOG_INFO, "[touch] %s: start\n", __func__);
+
+	cancel_work_sync(&g_raydium_ts->work);
 	if (g_raydium_ts->workqueue) {
 		destroy_workqueue(g_raydium_ts->workqueue);
 		g_raydium_ts->workqueue = NULL;
@@ -2522,7 +2527,7 @@ void raydium_ts_shutdown(struct i2c_client *client)
 	unregister_early_suspend(&g_raydium_ts->early_suspend);
 #elif defined(CONFIG_PANEL_NOTIFIER)
 if (active_panel)
-	panel_event_notifier_unregister(&g_raydium_ts->fb_notif);
+	panel_event_notifier_unregister(g_raydium_ts->entry);
 #elif defined(CONFIG_DRM)
 if (active_panel)
 	drm_panel_notifier_unregister(active_panel, &g_raydium_ts->fb_notif);
@@ -2546,29 +2551,33 @@ if (active_panel)
 	if (gpio_is_valid(g_raydium_ts->irq_gpio))
 		gpio_free(g_raydium_ts->irq_gpio);
 
+
 	raydium_enable_regulator(g_raydium_ts, false);
 	raydium_get_regulator(g_raydium_ts, false);
 
 	kfree(g_raydium_ts);
 
 	i2c_set_clientdata(client, NULL);
+	LOGD(LOG_INFO, "[touch] %s: done\n", __func__);
 }
 
 static int raydium_ts_remove(struct i2c_client *client)
 {
 
-        if (g_raydium_ts->workqueue) {
-                destroy_workqueue(g_raydium_ts->workqueue);
-                g_raydium_ts->workqueue = NULL;
-        }
+	LOGD(LOG_INFO, "[touch] %s: start\n", __func__);
 
+	cancel_work_sync(&g_raydium_ts->work);
+	if (g_raydium_ts->workqueue) {
+		destroy_workqueue(g_raydium_ts->workqueue);
+		g_raydium_ts->workqueue = NULL;
+	}
 #if defined(CONFIG_FB)
 	raydium_unregister_notifier();
 #elif defined(CONFIG_HAS_EARLYSUSPEND)
 	unregister_early_suspend(&g_raydium_ts->early_suspend);
 #elif defined(CONFIG_PANEL_NOTIFIER)
 if (active_panel)
-	panel_event_notifier_unregister(&g_raydium_ts->fb_notif);
+	panel_event_notifier_unregister(g_raydium_ts->entry);
 #elif defined(CONFIG_DRM)
 if (active_panel)
 	drm_panel_notifier_unregister(active_panel, &g_raydium_ts->fb_notif);
@@ -2590,12 +2599,14 @@ if (active_panel)
 	if (gpio_is_valid(g_raydium_ts->irq_gpio))
 		gpio_free(g_raydium_ts->irq_gpio);
 
+
 	raydium_enable_regulator(g_raydium_ts, false);
 	raydium_get_regulator(g_raydium_ts, false);
 
 	kfree(g_raydium_ts);
 
 	i2c_set_clientdata(client, NULL);
+	LOGD(LOG_INFO, "[touch] %s: done\n", __func__);
 	return 0;
 }
 

+ 5 - 2
raydium/raydium_driver.h

@@ -306,8 +306,11 @@ struct raydium_ts_data {
 	struct irq_desc *irq_desc;
 	bool irq_enabled;
 	bool irq_wake;
-
-#if defined(CONFIG_FB) || defined(CONFIG_DRM) || defined(CONFIG_PANEL_NOTIFIER)
+#if defined(CONFIG_PANEL_NOTIFIER)
+	struct panel_event_notifier_entry *entry;
+	int blank;
+	enum raydium_fb_state fb_state;
+#elif defined(CONFIG_FB) || defined(CONFIG_DRM) || defined(CONFIG_PANEL_NOTIFIER)
 	struct notifier_block fb_notif;
 	int blank;
 	enum raydium_fb_state fb_state;

+ 21 - 21
raydium/raydium_selftest.c

@@ -253,106 +253,106 @@ int self_test_save_test_raw_data_to_file(int i32_ng_type)
 		memset(write_string, 0, strlen(write_string));
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_SYSFS_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "System NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_I2C_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "I2C NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_INT_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "INT NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_RESET_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "RESET NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_PRAM_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "PRAM NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_NORMAL_FW_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "NORMAL_FW_NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_OPEN_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "OPEN NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_SHORT_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "SHORT NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_BURN_CC_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "BURN CC NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_GET_DATA_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "GET DATA NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_FLASH_ID_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "FLASH ID NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_NORMAL_FW_VER_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "NORMAL FW VER NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_TEST_FW_VER_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "TEST FW VER NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_TEST_INIT_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "TEST INIT NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_LOAD_TESTFW_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "LOAD TESTFW NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_BURN_FW_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "BURN FW NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_SINGLE_CC_OPEN_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "Open NG (Single Pin CC) ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_SINGLE_CC_SHORT_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "Short NG (Single Pin CC) ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_UB_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "Uniformity Baseline NG ");
 		}
 
 		if (i32_ng_type & WEARABLE_FT_TEST_RESULT_UC_NG) {
-			snprintf(write_string + strlen(write_string),
+			snprintf(write_string,
 				RM_SELF_TEST_MAX_STR_LENGTH, "Uniformity CC NG ");
 		}
 
-		snprintf(write_string + strlen(write_string), RM_SELF_TEST_MAX_STR_LENGTH, "\n");
+		snprintf(write_string, RM_SELF_TEST_MAX_STR_LENGTH, "\n");
 		self_test_save_to_file(RM_SELF_TEST_LOGFILE, write_string, strlen(write_string));
 	}
 

+ 1 - 1
raydium/raydium_sysfs.c

@@ -1080,7 +1080,7 @@ static ssize_t raydium_receive_fw_store(struct device *dev,
 		free_token = token;
 		free_temp_buf = temp_buf;
 
-		snprintf(temp_buf, PAGE_SIZE, "%s", p_i8_buf);
+		snprintf(temp_buf, 32, "%s", p_i8_buf);
 		token = strsep(&temp_buf, delim);
 		i32_ret = kstrtou8(token, 16, &u8_cmd);
 		if (i32_ret < 0) {

+ 24 - 22
touch_driver_board.mk

@@ -1,28 +1,30 @@
 TOUCH_DLKM_ENABLE := true
 ifeq ($(TARGET_KERNEL_DLKM_DISABLE), true)
-	ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
-		TOUCH_DLKM_ENABLE := false
-	endif
+        ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
+                TOUCH_DLKM_ENABLE := false
+        endif
 endif
 
 ifeq ($(TOUCH_DLKM_ENABLE),  true)
-	ifneq ($(TARGET_BOARD_AUTO),true)
-		ifeq ($(call is-board-platform-in-list,$(TARGET_BOARD_PLATFORM)),true)
-			ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
-				BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
-					$(KERNEL_MODULES_OUT)/goodix_ts.ko \
-					$(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
-					$(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko
-			else # pineapple
-				BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
-					$(KERNEL_MODULES_OUT)/goodix_ts.ko \
-					$(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
-					$(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko \
-					$(KERNEL_MODULES_OUT)/pt_ts.ko \
-					$(KERNEL_MODULES_OUT)/pt_i2c.ko \
-					$(KERNEL_MODULES_OUT)/pt_device_access.ko \
-					$(KERNEL_MODULES_OUT)/raydium_ts.ko
-			endif # pineapple
-		endif
-	endif
+        ifneq ($(TARGET_BOARD_AUTO),true)
+                ifeq ($(call is-board-platform-in-list,$(TARGET_BOARD_PLATFORM)),true)
+                       ifeq ($(TARGET_BOARD_PLATFORM), monaco)
+                                BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/pt_ts.ko \
+                                        $(KERNEL_MODULES_OUT)/pt_i2c.ko \
+                                        $(KERNEL_MODULES_OUT)/pt_device_access.ko \
+                                        $(KERNEL_MODULES_OUT)/raydium_ts.ko
+                        else ifeq ($(TARGET_BOARD_PLATFORM), kona)
+                                BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/focaltech_fts.ko
+                        else ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
+                                BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
+                                        $(KERNEL_MODULES_OUT)/goodix_ts.ko \
+                                        $(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko
+                        else
+                                BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
+                                        $(KERNEL_MODULES_OUT)/goodix_ts.ko \
+                                        $(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
+                                        $(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko
+                        endif
+                endif
+        endif
 endif

+ 20 - 18
touch_driver_product.mk

@@ -1,24 +1,26 @@
 TOUCH_DLKM_ENABLE := true
 ifeq ($(TARGET_KERNEL_DLKM_DISABLE), true)
-	ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
-		TOUCH_DLKM_ENABLE := false
-	endif
+        ifeq ($(TARGET_KERNEL_DLKM_TOUCH_OVERRIDE), false)
+                TOUCH_DLKM_ENABLE := false
+        endif
 endif
 
 ifeq ($(TOUCH_DLKM_ENABLE),  true)
-	ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
-		PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
-			$(KERNEL_MODULES_OUT)/goodix_ts.ko \
-			$(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
-			$(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko
-	else # pineapple
-		PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
-			$(KERNEL_MODULES_OUT)/goodix_ts.ko \
-			$(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
-			$(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko \
-			$(KERNEL_MODULES_OUT)/pt_ts.ko \
-			$(KERNEL_MODULES_OUT)/pt_i2c.ko \
-			$(KERNEL_MODULES_OUT)/pt_device_access.ko \
-			$(KERNEL_MODULES_OUT)/raydium_ts.ko
-	endif # pineapple
+        ifeq ($(TARGET_BOARD_PLATFORM), monaco)
+                PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/pt_ts.ko \
+                        $(KERNEL_MODULES_OUT)/pt_i2c.ko \
+                        $(KERNEL_MODULES_OUT)/pt_device_access.ko \
+                        $(KERNEL_MODULES_OUT)/raydium_ts.ko
+        else ifeq ($(TARGET_BOARD_PLATFORM), kona)
+                PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/focaltech_fts.ko
+        else ifeq ($(TARGET_BOARD_PLATFORM), pineapple)
+                PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
+                        $(KERNEL_MODULES_OUT)/goodix_ts.ko \
+                        $(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko
+        else
+                PRODUCT_PACKAGES += $(KERNEL_MODULES_OUT)/nt36xxx-i2c.ko \
+                        $(KERNEL_MODULES_OUT)/goodix_ts.ko \
+                        $(KERNEL_MODULES_OUT)/atmel_mxt_ts.ko \
+                        $(KERNEL_MODULES_OUT)/synaptics_tcm_ts.ko
+        endif
 endif