Siflower SF21A6826/SF21H8898 are a family of RISC-V SoCs with: * Quad-core T-Head C908 (1.125G for SF21A6826, 1.25G for SF21H8898) * DDR3/DDR4 memory controller * 1 QSGMII 4x1G * 1 SGMII/2500Base-X 2.5G * 1 additional RGMII on SF21H8898 * Network offloading engine for L2 switching and L3 NAT * 2 PCIE Gen2 lanes, operating in either one PCIE Gen2x2 or two PCIE Gen2x1 mode * 1 USB2.0 Link: https://github.com/openwrt/openwrt/pull/17115 Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
From: Chuanhong Guo <gch981213@gmail.com>
|
|
Date: Thu, 19 Sep 2024 09:23:27 +0800
|
|
Subject: [PATCH 16/20] spi: spi-mem: allow gpio cs in spi_mem_exec_op
|
|
|
|
spi_mem_exec_op can use gpio cs, either by not asserting the native
|
|
cs or switching the native cs pin to GPIO mode with pinctrl.
|
|
|
|
Allow calling exec_op when GPIO CS present and control GPIO CS
|
|
before and after calling exec_op.
|
|
If exec_op decided to return -EOPNOTSUPP, the code will assert and
|
|
deassert GPIO CS without clock pulsing, which should be fine on most
|
|
SPI slaves.
|
|
|
|
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
|
|
---
|
|
drivers/spi/spi-mem.c | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/spi/spi-mem.c
|
|
+++ b/drivers/spi/spi-mem.c
|
|
@@ -325,13 +325,19 @@ int spi_mem_exec_op(struct spi_mem *mem,
|
|
if (!spi_mem_internal_supports_op(mem, op))
|
|
return -ENOTSUPP;
|
|
|
|
- if (ctlr->mem_ops && ctlr->mem_ops->exec_op && !spi_get_csgpiod(mem->spi, 0)) {
|
|
+ if (ctlr->mem_ops && ctlr->mem_ops->exec_op) {
|
|
ret = spi_mem_access_start(mem);
|
|
if (ret)
|
|
return ret;
|
|
|
|
+ if (spi_get_csgpiod(mem->spi, 0))
|
|
+ gpiod_set_value_cansleep(spi_get_csgpiod(mem->spi, 0), 1);
|
|
+
|
|
ret = ctlr->mem_ops->exec_op(mem, op);
|
|
|
|
+ if (spi_get_csgpiod(mem->spi, 0))
|
|
+ gpiod_set_value_cansleep(spi_get_csgpiod(mem->spi, 0), 0);
|
|
+
|
|
spi_mem_access_end(mem);
|
|
|
|
/*
|