diff options
author | Ravi Jain <raviajain@google.com> | 2022-11-02 01:50:24 +0800 |
---|---|---|
committer | Ravi Jain <raviajain@google.com> | 2022-11-21 09:17:12 +0000 |
commit | ace1c47def43c3d0c6f83dc40b7e9f54d4db3bab (patch) | |
tree | 49198e60a37b50dae6c9142e0d825d3762d3abe1 | |
parent | ad14c9790ecdb00dafa397830af3f4ddcd769333 (diff) | |
download | goodix_touch-ace1c47def43c3d0c6f83dc40b7e9f54d4db3bab.tar.gz |
touch: goodix: fix read/writes when dma-mode isn't supported.
Test: Tested in both mode dma enabled and disabled.
Bug: 254364041
Change-Id: I373ccd07ece3993f16d003bed2dbce607ce863c7
Signed-off-by: Ravi Jain <raviajain@google.com>
-rw-r--r-- | goodix_brl_spi.c | 21 | ||||
-rw-r--r-- | goodix_ts_core.h | 1 |
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, |