summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2022-11-27 19:36:42 -0800
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2022-11-27 19:36:42 -0800
commit3b7d21d1c871c69226d96bf2bf12ffc31866f8a1 (patch)
treefd90e87ef4b561a7ca27f62ab23814d6cecdbef0
parentb5e99c3925ea6de63f0c03a402130518f60ae38e (diff)
parentc9caff69d8254154342af935eca1501af123f53c (diff)
downloadgoodix_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.c21
-rw-r--r--goodix_ts_core.c51
-rw-r--r--goodix_ts_core.h1
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,