diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2022-11-27 19:36:42 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2022-11-27 19:36:42 -0800 |
commit | 3b7d21d1c871c69226d96bf2bf12ffc31866f8a1 (patch) | |
tree | fd90e87ef4b561a7ca27f62ab23814d6cecdbef0 | |
parent | b5e99c3925ea6de63f0c03a402130518f60ae38e (diff) | |
parent | c9caff69d8254154342af935eca1501af123f53c (diff) | |
download | goodix_touch-3b7d21d1c871c69226d96bf2bf12ffc31866f8a1.tar.gz |
Merge android13-gs-pixel-5.10-tm-qpr2 into android13-gs-pixel-5.10-tm-qpr3
SBMerger: 478053055
Change-Id: I7b28983dee98986e6d658c6d79a7147965f6711f
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | goodix_brl_spi.c | 21 | ||||
-rw-r--r-- | goodix_ts_core.c | 51 | ||||
-rw-r--r-- | goodix_ts_core.h | 1 |
3 files changed, 41 insertions, 32 deletions
diff --git a/goodix_brl_spi.c b/goodix_brl_spi.c index b868f8c..b7d82da 100644 --- a/goodix_brl_spi.c +++ b/goodix_brl_spi.c @@ -17,6 +17,9 @@ #include <linux/kernel.h> #include <linux/module.h> #include <linux/spi/spi.h> +#ifdef CONFIG_GOOG_TOUCH_INTERFACE +#include <goog_touch_interface.h> +#endif #include "goodix_ts_core.h" #define TS_DRIVER_NAME "gtx8_spi" @@ -126,7 +129,7 @@ static int goodix_spi_read(struct device *dev, unsigned int addr, int ret = 0; int buf_len = SPI_READ_PREFIX_LEN - 1 + len; - if (buf_len >= 64) { + if (goodix_spi_bus.dma_mode_enabled && buf_len >= 64) { buf_len = ALIGN(buf_len, 4); } @@ -170,7 +173,7 @@ static int goodix_spi_read(struct device *dev, unsigned int addr, xfers.rx_buf = rx_buf; xfers.len = buf_len; xfers.cs_change = 0; - xfers.bits_per_word = buf_len >= 64 ? 32 : 8; + if (goodix_spi_bus.dma_mode_enabled) xfers.bits_per_word = buf_len >= 64 ? 32 : 8; spi_message_add_tail(&xfers, &spi_msg); ret = spi_sync(spi, &spi_msg); if (ret < 0) { @@ -200,7 +203,7 @@ static int goodix_spi_read_fast(struct device *dev, unsigned int addr, int ret = 0; int buf_len = SPI_READ_PREFIX_LEN - 1 + len; - if (buf_len >= 64) { + if (goodix_spi_bus.dma_mode_enabled && buf_len >= 64) { buf_len = ALIGN(buf_len, 4); } @@ -233,7 +236,7 @@ static int goodix_spi_read_fast(struct device *dev, unsigned int addr, xfers.rx_buf = package->header; xfers.len = buf_len; xfers.cs_change = 0; - xfers.bits_per_word = buf_len >= 64 ? 32 : 8; + if (goodix_spi_bus.dma_mode_enabled) xfers.bits_per_word = buf_len >= 64 ? 32 : 8; spi_message_add_tail(&xfers, &spi_msg); ret = spi_sync(spi, &spi_msg); @@ -269,7 +272,7 @@ static int goodix_spi_write(struct device *dev, unsigned int addr, int ret = 0; int buf_len = SPI_WRITE_PREFIX_LEN + len; - if (buf_len >= 64) { + if (goodix_spi_bus.dma_mode_enabled && buf_len >= 64) { buf_len = ALIGN(buf_len, 4); } @@ -297,7 +300,7 @@ static int goodix_spi_write(struct device *dev, unsigned int addr, xfers.tx_buf = tx_buf; xfers.len = buf_len; xfers.cs_change = 0; - xfers.bits_per_word = buf_len >= 64 ? 32 : 8; + if (goodix_spi_bus.dma_mode_enabled) xfers.bits_per_word = buf_len >= 64 ? 32 : 8; spi_message_add_tail(&xfers, &spi_msg); ret = spi_sync(spi, &spi_msg); @@ -362,6 +365,12 @@ static int goodix_spi_probe(struct spi_device *spi) mutex_init(&goodix_spi_bus.mutex); + goodix_spi_bus.dma_mode_enabled = false; +#ifdef CONFIG_GOOG_TOUCH_INTERFACE + goodix_spi_bus.dma_mode_enabled = goog_check_spi_dma_enabled(spi); + ts_info("dma_mode: %s\n", goodix_spi_bus.dma_mode_enabled ? "enabled" : "disabled"); +#endif + /* ts core device */ goodix_pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL); if (!goodix_pdev) { diff --git a/goodix_ts_core.c b/goodix_ts_core.c index eb34f83..323b32d 100644 --- a/goodix_ts_core.c +++ b/goodix_ts_core.c @@ -2038,9 +2038,6 @@ static int goodix_ts_input_dev_config(struct goodix_ts_core *core_data) return -ENOMEM; } - core_data->input_dev = input_dev; - input_set_drvdata(input_dev, core_data); - input_dev->name = GOODIX_CORE_DRIVER_NAME; input_dev->phys = GOOIDX_INPUT_PHYS; input_dev->uniq = "goodix_ts"; @@ -2085,6 +2082,9 @@ static int goodix_ts_input_dev_config(struct goodix_ts_core *core_data) return r; } + core_data->input_dev = input_dev; + input_set_drvdata(input_dev, core_data); + return 0; } @@ -2100,9 +2100,6 @@ static int goodix_ts_pen_dev_config(struct goodix_ts_core *core_data) return -ENOMEM; } - core_data->pen_dev = pen_dev; - input_set_drvdata(pen_dev, core_data); - pen_dev->name = GOODIX_PEN_DRIVER_NAME; pen_dev->phys = "goodix_ts,pen/input0"; pen_dev->uniq = "goodix_ts,pen"; @@ -2137,6 +2134,9 @@ static int goodix_ts_pen_dev_config(struct goodix_ts_core *core_data) return r; } + core_data->pen_dev = pen_dev; + input_set_drvdata(pen_dev, core_data); + return 0; } @@ -2145,7 +2145,6 @@ void goodix_ts_input_dev_remove(struct goodix_ts_core *core_data) if (!core_data->input_dev) return; input_unregister_device(core_data->input_dev); - input_free_device(core_data->input_dev); core_data->input_dev = NULL; } @@ -2154,7 +2153,6 @@ void goodix_ts_pen_dev_remove(struct goodix_ts_core *core_data) if (!core_data->pen_dev) return; input_unregister_device(core_data->pen_dev); - input_free_device(core_data->pen_dev); core_data->pen_dev = NULL; } @@ -3124,39 +3122,40 @@ static int goodix_ts_remove(struct platform_device *pdev) struct goodix_ts_core *core_data = platform_get_drvdata(pdev); struct goodix_ts_hw_ops *hw_ops = core_data->hw_ops; - goodix_ts_unregister_notifier(&core_data->ts_notifier); - goodix_tools_exit(); - goodix_ts_power_off(core_data); - goodix_set_pinctrl_state(core_data, PINCTRL_MODE_SUSPEND); - if (core_data->init_stage >= CORE_INIT_STAGE2) { + hw_ops->irq_enable(core_data, false); + inspect_module_exit(); #if IS_ENABLED(CONFIG_GOODIX_GESTURE) gesture_module_exit(); #endif - inspect_module_exit(); - hw_ops->irq_enable(core_data, false); -#if IS_ENABLED(CONFIG_FB) - fb_unregister_client(&core_data->fb_notifier); -#endif core_module_prob_sate = CORE_MODULE_REMOVED; goodix_ts_esd_uninit(core_data); + goodix_ts_procfs_exit(core_data); - goodix_fw_update_uninit(); - goodix_ts_input_dev_remove(core_data); - goodix_ts_pen_dev_remove(core_data); - goodix_ts_sysfs_exit(core_data); #if IS_ENABLED(CONFIG_GOOG_TOUCH_INTERFACE) #if IS_ENABLED(CONFIG_GTI_PM) goog_pm_unregister_notification(core_data->gti); #endif - goog_touch_interface_remove(core_data->gti); -#endif destroy_workqueue(core_data->event_wq); touch_apis_deinit(&core_data->pdev->dev); - goodix_ts_procfs_exit(core_data); - goodix_ts_power_off(core_data); + goog_touch_interface_remove(core_data->gti); + goodix_ts_sysfs_exit(core_data); +#endif +#if IS_ENABLED(CONFIG_FB) + fb_unregister_client(&core_data->fb_notifier); +#endif + goodix_ts_pen_dev_remove(core_data); + goodix_ts_input_dev_remove(core_data); + + goodix_fw_update_uninit(); } + goodix_tools_exit(); + goodix_ts_unregister_notifier(&core_data->ts_notifier); + goodix_ts_power_off(core_data); + goodix_set_pinctrl_state(core_data, PINCTRL_MODE_SUSPEND); + mutex_destroy(&core_data->cmd_lock); + return 0; } diff --git a/goodix_ts_core.h b/goodix_ts_core.h index 3636357..2127abc 100644 --- a/goodix_ts_core.h +++ b/goodix_ts_core.h @@ -613,6 +613,7 @@ struct goodix_bus_interface { u8 *rx_buf; u8 *tx_buf; struct mutex mutex; + bool dma_mode_enabled; int (*read)(struct device *dev, unsigned int addr, unsigned char *data, unsigned int len); int (*read_fast)(struct device *dev, unsigned int addr, |