summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Peng <robinpeng@google.com>2022-11-22 03:55:36 +0000
committerRobin Peng <robinpeng@google.com>2022-11-23 05:29:40 +0000
commit9a3573645ee39023b565449c611eb63f3443ce84 (patch)
treee07e7cb1a051c51458ac1dca9143077617698a03
parent78caeb839ea94231d154d42fe102217ec8c47232 (diff)
parent7bc4ab91507ea62ee15fa506b5eebdcd26e57de9 (diff)
downloadgoodix_touch-9a3573645ee39023b565449c611eb63f3443ce84.tar.gz
Merge android13-gs-pixel-5.15 into android14-gs-pixel-5.15
Bug: 260173634 Change-Id: I481e909e527cede3755267f34de1a686cc88cb94 Signed-off-by: Robin Peng <robinpeng@google.com>
-rw-r--r--goodix_brl_spi.c21
-rw-r--r--goodix_ts_core.h1
2 files changed, 16 insertions, 6 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.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,