Re: [PATCH 2/2] spi: qcom-geni: Use GPIO to notify master of SPI target activity
Mukesh Savaliya <[email protected]>
| Newsgroups | org.kernel.vger.linux-spi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> > --- > 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); >