Re: [PATCH 2/2] spi: qcom-geni: Use GPIO to notify master of SPI target activity

From: Mukesh Savaliya

Date: Thu Aug 06 2026 - 14:25:10 EST




On 8/6/2026 3:43 PM, Praveen Talari wrote:
When operating in SPI target mode, the GENI controller relies on an
external GPIO to notify the SPI master about the target's active state.

Add support for an optional device GPIO that is asserted when a target
transfer begins and deasserted when the transfer completes, is aborted,
or hits a timeout. This allows the target to explicitly signal its
availability to the master and ensures the GPIO is released in all error
and completion paths, preventing the master from observing a stale or
incorrect target-ready indication.

The GPIO is optional and requested only when target mode is enabled,
using devm_gpiod_get_index_optional() so targets without this signal
continue to work unchanged.

if this is an optional for something like showing target readiness,
why it's required ? if not defined, what mechanism makes it work properly ?

Like does it depend on any timing or sync mechanism if not the GPIO way?


Signed-off-by: Praveen Talari <praveen.talari@xxxxxxxxxxxxxxxx>
---
drivers/spi/spi-geni-qcom.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c

[...]

@@ -1116,8 +1129,16 @@ static int spi_geni_probe(struct platform_device *pdev)
init_completion(&mas->rx_reset_done);
spin_lock_init(&mas->lock);
- if (spi->target)
+ if (spi->target) {
spi->target_abort = spi_geni_target_abort;
+ mas->target_gpio = devm_gpiod_get_index_optional(dev, "device", 0,
+ GPIOD_OUT_LOW);
+ if (IS_ERR(mas->target_gpio)) {
+ dev_err(dev, "Failed to request GPIO: %ld\n",
+ PTR_ERR(mas->target_gpio));
+ mas->target_gpio = NULL;
IIUC, this GPIO is an optional one. if so, please add a comment to let go ahead with an error.

Else need to return an error.
+ }
+ }
pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_set_autosuspend_delay(&pdev->dev, 250);