diff options
author | Daniel Price <danielprice@google.com> | 2023-04-03 21:28:41 +0000 |
---|---|---|
committer | Daniel Price <danielprice@google.com> | 2023-04-03 21:28:41 +0000 |
commit | 669b77a73ab79aecc472f4c1f808f5ad7d802a08 (patch) | |
tree | 419f1d1297ed4799a4c080de5943c6c7d83e95de | |
parent | f7536b693296541eae0911cbe074e5aaa6c39483 (diff) | |
parent | 5d94c210a179a80a7c3e6e26af7f07bce9f72753 (diff) | |
download | touch-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.mk | 22 | ||||
-rw-r--r-- | Kbuild | 54 | ||||
-rw-r--r-- | goodix_berlin_driver/goodix_brl_hw.c | 8 | ||||
-rw-r--r-- | goodix_berlin_driver/goodix_ts_core.c | 27 | ||||
-rw-r--r-- | raydium/raydium_driver.c | 58 | ||||
-rw-r--r-- | raydium/raydium_driver.h | 7 |
6 files changed, 109 insertions, 67 deletions
@@ -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 @@ -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; |