summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Price <danielprice@google.com>2023-04-03 21:28:41 +0000
committerDaniel Price <danielprice@google.com>2023-04-03 21:28:41 +0000
commit669b77a73ab79aecc472f4c1f808f5ad7d802a08 (patch)
tree419f1d1297ed4799a4c080de5943c6c7d83e95de
parentf7536b693296541eae0911cbe074e5aaa6c39483 (diff)
parent5d94c210a179a80a7c3e6e26af7f07bce9f72753 (diff)
downloadtouch-669b77a73ab79aecc472f4c1f808f5ad7d802a08.tar.gz
Merge AU_LINUX_ANDROID_LW.UM.2.1.R1.11.00.00.200.031
This updates our sources to CodeLinaro release AU_LINUX_ANDROID_LW.UM.2.1.R1.11.00.00.200.031 (LW.UM.2.1.r1-03100-SW5100.0), which corresponds to ChipCode LW 2.0 r00062.1a. Bug: 276757489 Change-Id: Ia044a34fc58ea518e65bc29b2404cf5bd86094b4 Signed-off-by: Daniel Price <danielprice@google.com>
-rw-r--r--Android.mk22
-rw-r--r--Kbuild54
-rw-r--r--goodix_berlin_driver/goodix_brl_hw.c8
-rw-r--r--goodix_berlin_driver/goodix_ts_core.c27
-rw-r--r--raydium/raydium_driver.c58
-rw-r--r--raydium/raydium_driver.h7
6 files changed, 109 insertions, 67 deletions
diff --git a/Android.mk b/Android.mk
index 5661740..5f7f34a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -68,17 +68,6 @@ ifeq ($(TOUCH_DLKM_ENABLE), true)
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
- ###########################################################
-
###########################################################
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
@@ -123,6 +112,17 @@ ifeq ($(TOUCH_DLKM_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
endif
diff --git a/Kbuild b/Kbuild
index 699437b..47afe05 100644
--- a/Kbuild
+++ b/Kbuild
@@ -136,33 +136,6 @@ ifeq ($(CONFIG_TOUCHSCREEN_DUMMY), y)
obj-$(CONFIG_MSM_TOUCH) += dummy_ts.o
endif
-ifeq ($(CONFIG_TOUCHSCREEN_RM_TS), y)
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/Config.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/drv_interface.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/rad_fw_image_30.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/raydium_driver.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/raydium_selftest.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/tpselftest_30.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_control.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_reg.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_test.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/ic_drv_global.h
- LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/ic_drv_interface.h
-
- raydium_ts-y := \
- ./raydium/drv_interface.o \
- ./raydium/raydium_driver.o \
- ./raydium/raydium_fw_update.o \
- ./raydium/raydium_selftest.o \
- ./raydium/raydium_sysfs.o \
- ./raydium/chip_raydium/f303_ic_control.o \
- ./raydium/chip_raydium/f303_ic_test.o \
- ./raydium/chip_raydium/ic_drv_global.o \
- ./raydium/chip_raydium/ic_drv_interface.o
-
- obj-$(CONFIG_MSM_TOUCH) += raydium_ts.o
-endif
-
ifeq ($(CONFIG_TOUCHSCREEN_SYNAPTICS_TCM), y)
synaptics_tcm_ts-y := \
./synaptics_tcm/synaptics_tcm_core.o \
@@ -208,6 +181,33 @@ ifneq ($(CONFIG_ARCH_PINEAPPLE), y)
obj-$(CONFIG_MSM_TOUCH) += pt_device_access.o
endif
+
+ ifeq ($(CONFIG_TOUCHSCREEN_RM_TS), y)
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/Config.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/drv_interface.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/rad_fw_image_30.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/raydium_driver.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/raydium_selftest.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/tpselftest_30.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_control.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_reg.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/f303_ic_test.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/ic_drv_global.h
+ LINUX_INC += -include $(TOUCH_ROOT)/raydium/chip_raydium/ic_drv_interface.h
+
+ raydium_ts-y := \
+ ./raydium/drv_interface.o \
+ ./raydium/raydium_driver.o \
+ ./raydium/raydium_fw_update.o \
+ ./raydium/raydium_selftest.o \
+ ./raydium/raydium_sysfs.o \
+ ./raydium/chip_raydium/f303_ic_control.o \
+ ./raydium/chip_raydium/f303_ic_test.o \
+ ./raydium/chip_raydium/ic_drv_global.o \
+ ./raydium/chip_raydium/ic_drv_interface.o
+
+ obj-$(CONFIG_MSM_TOUCH) += raydium_ts.o
+ endif
endif # pineapple
CDEFINES += -DBUILD_TIMESTAMP=\"$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')\"
diff --git a/goodix_berlin_driver/goodix_brl_hw.c b/goodix_berlin_driver/goodix_brl_hw.c
index 791bd42..40068c8 100644
--- a/goodix_berlin_driver/goodix_brl_hw.c
+++ b/goodix_berlin_driver/goodix_brl_hw.c
@@ -231,9 +231,12 @@ static int brl_power_on(struct goodix_ts_core *cd, bool on)
goto power_off;
}
}
+
+ gpio_direction_output(cd->board_data.reset_gpio, 0);
usleep_range(15000, 15100);
- gpio_direction_output(reset_gpio, 1);
- usleep_range(4000, 4100);
+ gpio_direction_output(cd->board_data.reset_gpio, 1);
+ msleep(GOODIX_NORMAL_RESET_DELAY_MS);
+
ret = brl_dev_confirm(cd);
if (ret < 0)
goto power_off;
@@ -241,7 +244,6 @@ static int brl_power_on(struct goodix_ts_core *cd, bool on)
if (ret < 0)
goto power_off;
- msleep(GOODIX_NORMAL_RESET_DELAY_MS);
return 0;
}
diff --git a/goodix_berlin_driver/goodix_ts_core.c b/goodix_berlin_driver/goodix_ts_core.c
index e61fe7e..5783f0b 100644
--- a/goodix_berlin_driver/goodix_ts_core.c
+++ b/goodix_berlin_driver/goodix_ts_core.c
@@ -1,7 +1,7 @@
/*
* Goodix Touchscreen Driver
* Copyright (C) 2020 - 2021 Goodix, Inc.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -2509,18 +2509,6 @@ static int goodix_ts_probe(struct platform_device *pdev)
}
core_data->bus = bus_interface;
- qts_en = of_property_read_bool(node, "goodix,qts_en");
- if (qts_en) {
- mutex_init(&core_data->tui_transition_lock);
- goodix_ts_fill_qts_vendor_data(&qts_vendor_data, core_data);
-
- ret = qts_client_register(qts_vendor_data);
- if (ret) {
- pr_err("qts client register failed, rc %d\n", ret);
- goto err_out;
- }
- core_data->qts_en = qts_en;
- }
if (IS_ENABLED(CONFIG_OF) && bus_interface->dev->of_node) {
/* parse devicetree property */
@@ -2579,6 +2567,19 @@ static int goodix_ts_probe(struct platform_device *pdev)
skip_to_power_gpio_setup:
#endif
+ qts_en = of_property_read_bool(node, "goodix,qts_en");
+ if (qts_en) {
+ mutex_init(&core_data->tui_transition_lock);
+ goodix_ts_fill_qts_vendor_data(&qts_vendor_data, core_data);
+
+ ret = qts_client_register(qts_vendor_data);
+ if (ret) {
+ pr_err("qts client register failed, rc %d\n", ret);
+ goto err_out;
+ }
+ core_data->qts_en = qts_en;
+ }
+
/* generic notifier callback */
core_data->ts_notifier.notifier_call = goodix_generic_noti_callback;
goodix_ts_register_notifier(&core_data->ts_notifier);
diff --git a/raydium/raydium_driver.c b/raydium/raydium_driver.c
index c40489b..2560869 100644
--- a/raydium/raydium_driver.c
+++ b/raydium/raydium_driver.c
@@ -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)
@@ -1765,6 +1768,12 @@ exit:
return 0;
}
+static void raydium_setup_drm_unregister_notifier(void)
+{
+ if (active_panel && drm_panel_notifier_unregister(active_panel,
+ &g_raydium_ts->fb_notif) < 0)
+ LOGD(LOG_ERR, "[touch]%s: DRM UnRegister notifier failed!\n", __func__);
+}
/*******************************************************************************
* FUNCTION: raydium_setup_drm_notifier
*
@@ -2452,13 +2461,20 @@ static int raydium_ts_probe(struct i2c_client *client,
exit_irq_request_failed:
#if defined(CONFIG_FB)
raydium_unregister_notifier();
-#endif/*end of CONFIG_FB*/
+#elif defined(CONFIG_PANEL_NOTIFIER)
+ panel_event_notifier_unregister(g_raydium_ts->entry);
+#elif defined(CONFIG_DRM)
+ raydium_setup_drm_unregister_notifier();
+#endif
cancel_work_sync(&g_raydium_ts->work);
input_unregister_device(input_dev);
+ g_raydium_ts->input_dev = NULL;
exit_input_register_device_failed:
- input_free_device(input_dev);
+ if (g_raydium_ts->input_dev)
+ input_free_device(input_dev);
+ g_raydium_ts->input_dev = NULL;
exit_input_dev_alloc_failed:
exit_check_i2c:
@@ -2498,25 +2514,35 @@ 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;
+ }
#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);
#endif/*end of CONFIG_FB*/
input_unregister_device(g_raydium_ts->input_dev);
- input_free_device(g_raydium_ts->input_dev);
+ if (g_raydium_ts->input_dev)
+ input_free_device(g_raydium_ts->input_dev);
+ g_raydium_ts->input_dev = NULL;
gpio_free(g_raydium_ts->rst_gpio);
#ifdef CONFIG_RM_SYSFS_DEBUG
raydium_release_sysfs(client);
#endif /*end of CONFIG_RM_SYSFS_DEBUG*/
+ disable_irq(g_raydium_ts->irq);
free_irq(client->irq, g_raydium_ts);
if (gpio_is_valid(g_raydium_ts->rst_gpio))
@@ -2525,25 +2551,33 @@ if (active_panel)
if (gpio_is_valid(g_raydium_ts->irq_gpio))
gpio_free(g_raydium_ts->irq_gpio);
- cancel_work_sync(&g_raydium_ts->work);
- destroy_workqueue(g_raydium_ts->workqueue);
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)
{
+ 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);
@@ -2556,6 +2590,7 @@ if (active_panel)
raydium_release_sysfs(client);
#endif /*end of CONFIG_RM_SYSFS_DEBUG*/
+ disable_irq(g_raydium_ts->irq);
free_irq(client->irq, g_raydium_ts);
if (gpio_is_valid(g_raydium_ts->rst_gpio))
@@ -2564,13 +2599,14 @@ if (active_panel)
if (gpio_is_valid(g_raydium_ts->irq_gpio))
gpio_free(g_raydium_ts->irq_gpio);
- cancel_work_sync(&g_raydium_ts->work);
- destroy_workqueue(g_raydium_ts->workqueue);
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;
}
diff --git a/raydium/raydium_driver.h b/raydium/raydium_driver.h
index f3428a3..9a9e98a 100644
--- a/raydium/raydium_driver.h
+++ b/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;