From ec06af22b82fa2bd0582987eb5a11b2e20ce972f Mon Sep 17 00:00:00 2001 From: liaoao Date: Mon, 23 Dec 2024 17:13:55 +0800 Subject: [PATCH] rpmsg_port_spi.c: setfreq to 0 to shutdown the spi device In the stop process, add SPI_SETFREQUENCY(rpspi->spi, 0) to stutdown the spi device. Signed-off-by: liaoao --- drivers/rpmsg/rpmsg_port_spi.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/rpmsg/rpmsg_port_spi.c b/drivers/rpmsg/rpmsg_port_spi.c index ca4fa989a92..87627cf81ba 100644 --- a/drivers/rpmsg/rpmsg_port_spi.c +++ b/drivers/rpmsg/rpmsg_port_spi.c @@ -90,6 +90,7 @@ struct rpmsg_port_spi_s /* SPI devices' configuration */ + uint32_t freq; uint32_t devid; int nbits; @@ -381,6 +382,11 @@ static int rpmsg_port_spi_sreq_handler(FAR struct ioexpander_dev_s *dev, rpmsginfo("sreq enter\n"); + if (rpspi->state == RPMSG_PORT_SPI_STATE_UNCONNECTED) + { + SPI_SETFREQUENCY(rpspi->spi, rpspi->freq); + } + rpmsg_port_spi_exchange(rpspi); return 0; } @@ -460,6 +466,7 @@ rpmsg_port_spi_process_packet(FAR struct rpmsg_port_spi_s *rpspi, rpmsg_port_unregister(&rpspi->port); rpspi->state = RPMSG_PORT_SPI_STATE_UNCONNECTED; IOEXP_WRITEPIN(rpspi->ioe, rpspi->mreq, 0); + SPI_SETFREQUENCY(rpspi->spi, 0); rpmsg_port_queue_return_buffer(&rpspi->port.rxq, rxhdr); break; @@ -582,12 +589,12 @@ rpmsg_port_spi_init_hardware(FAR struct rpmsg_port_spi_s *rpspi, SPI_SETBITS(spi, spicfg->nbits); SPI_SETMODE(spi, spicfg->mode); - SPI_SETFREQUENCY(spi, spicfg->freq); SPI_REGISTERCALLBACK(spi, rpmsg_port_spi_complete_handler, rpspi); SPI_SELECT(spi, spicfg->devid, false); rpspi->spi = spi; rpspi->ioe = ioe; + rpspi->freq = spicfg->freq; rpspi->devid = spicfg->devid; rpspi->nbits = spicfg->nbits;