From f820c1948a268b8824077e3155986c8e2706391f Mon Sep 17 00:00:00 2001 From: Rbb666 <64397326+Rbb666@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:04:31 +0800 Subject: [PATCH] =?UTF-8?q?[drivers/spi]=E4=BF=AE=E5=A4=8Dspi=20configure?= =?UTF-8?q?=E4=BC=9A=E6=89=A7=E8=A1=8C=E4=B8=A4=E6=AC=A1=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#9972)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [drivers/spi]修复spi configure会执行两次的问题 --- components/drivers/spi/dev_spi_core.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/components/drivers/spi/dev_spi_core.c b/components/drivers/spi/dev_spi_core.c index 3a3008d6e7..978d5a4161 100644 --- a/components/drivers/spi/dev_spi_core.c +++ b/components/drivers/spi/dev_spi_core.c @@ -64,7 +64,7 @@ rt_err_t rt_spi_bus_register(struct rt_spi_bus *bus, for (int i = 0; i < pin_count; ++i) { bus->pins[i] = rt_pin_get_named_pin(&bus->parent, "cs", i, - RT_NULL, RT_NULL); + RT_NULL, RT_NULL); } } else if (pin_count == 0) @@ -103,12 +103,15 @@ rt_err_t rt_spi_bus_attach_device_cspin(struct rt_spi_device *device, { device->bus = (struct rt_spi_bus *)bus; + if (device->bus->owner == RT_NULL) + device->bus->owner = device; + /* initialize spidev device */ result = rt_spidev_device_init(device, name); if (result != RT_EOK) return result; - if(cs_pin != PIN_NONE) + if (cs_pin != PIN_NONE) { rt_pin_mode(cs_pin, PIN_MODE_OUTPUT); } @@ -140,7 +143,7 @@ rt_err_t rt_spi_bus_configure(struct rt_spi_device *device) result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER); if (result == RT_EOK) { - if (device->bus->owner == RT_NULL || device->bus->owner == device) + if (device->bus->owner == device) { /* current device is using, re-configure SPI bus */ result = device->bus->ops->configure(device, &device->config); @@ -157,7 +160,6 @@ rt_err_t rt_spi_bus_configure(struct rt_spi_device *device) */ result = -RT_EBUSY; } - /* release lock */ rt_mutex_release(&(device->bus->lock)); } @@ -451,7 +453,7 @@ rt_err_t rt_spi_sendrecv16(struct rt_spi_device *device, } len = rt_spi_transfer(device, &senddata, recvdata, 2); - if(len < 0) + if (len < 0) { return (rt_err_t)len; } @@ -578,7 +580,7 @@ rt_err_t rt_spi_take(struct rt_spi_device *device) message.cs_take = 1; result = device->bus->ops->xfer(device, &message); - if(result < 0) + if (result < 0) { return (rt_err_t)result; } @@ -598,7 +600,7 @@ rt_err_t rt_spi_release(struct rt_spi_device *device) message.cs_release = 1; result = device->bus->ops->xfer(device, &message); - if(result < 0) + if (result < 0) { return (rt_err_t)result; }