mirror of
https://github.com/openwrt/openwrt.git
synced 2025-12-21 17:04:28 +04:00
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.62 Manually rebased: bcm27xx/patches-6.12/950-0358-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clocks.patch Removed upstreamed: backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch[1] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.62&id=e31194bf494f6900a5f96f55ed194a00e458f8d1 Build system: x86/64 Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc Signed-off-by: John Audia <therealgraysky@proton.me> Link: https://github.com/openwrt/openwrt/pull/21126 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
42 lines
1.3 KiB
Diff
42 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
|
|
@@ -384,13 +384,19 @@ int spi_mem_exec_op(struct spi_mem *mem,
|
|
if (!spi_mem_internal_supports_op(mem, op))
|
|
return -EOPNOTSUPP;
|
|
|
|
- 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);
|
|
|
|
/*
|