From 8e33f734acc3dd6a745b8e0732290731e7fe4837 Mon Sep 17 00:00:00 2001 From: MacRsh Date: Sun, 3 Dec 2023 19:31:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8Dspi=20cs=E5=BC=95=E8=84=9A?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=8D=E6=9B=B4=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- device/can.c | 2 +- device/i2c.c | 2 +- device/serial.c | 1 + device/spi.c | 4 +++- include/mr_api.h | 2 +- source/device.c | 15 +++++++++------ 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/device/can.c b/device/can.c index 6ed39ea..8991069 100644 --- a/device/can.c +++ b/device/can.c @@ -72,7 +72,7 @@ static ssize_t mr_can_bus_isr(struct mr_dev *dev, int event, void *args) break; } } - return MR_ENOTSUP; + return MR_EOK; } default: diff --git a/device/i2c.c b/device/i2c.c index 297fbbd..afe8716 100644 --- a/device/i2c.c +++ b/device/i2c.c @@ -59,7 +59,7 @@ static ssize_t mr_i2c_bus_isr(struct mr_dev *dev, int event, void *args) ssize_t size = (ssize_t)mr_ringbuf_get_data_size(&i2c_dev->rd_fifo); i2c_dev->dev.rd_call.call(i2c_dev->dev.rd_call.desc, &size); } - return MR_ENOTSUP; + return MR_EOK; } default: diff --git a/device/serial.c b/device/serial.c index cd8cd69..7fdb9e5 100644 --- a/device/serial.c +++ b/device/serial.c @@ -197,6 +197,7 @@ static ssize_t mr_serial_isr(struct mr_dev *dev, int event, void *args) return (ssize_t)mr_ringbuf_get_data_size(&serial->rd_fifo); } + case MR_ISR_SERIAL_WR_INT: { /* Write data from FIFO */ diff --git a/device/spi.c b/device/spi.c index 7881338..0b99174 100644 --- a/device/spi.c +++ b/device/spi.c @@ -78,7 +78,7 @@ static ssize_t mr_spi_bus_isr(struct mr_dev *dev, int event, void *args) ssize_t size = (ssize_t)mr_ringbuf_get_data_size(&spi_dev->rd_fifo); spi_dev->dev.rd_call.call(spi_dev->dev.rd_call.desc, &size); } - return MR_ENOTSUP; + return MR_EOK; } default: @@ -499,9 +499,11 @@ static int mr_spi_dev_ioctl(struct mr_dev *dev, int off, int cmd, void *args) /* Reconfigure CS */ if (config.host_slave != spi_dev->config.host_slave) { + spi_dev->config = config; spi_dev_cs_configure(spi_dev, MR_ENABLE); } #endif /* MR_USING_PIN */ + /* If holding the bus, release it */ if (spi_dev == spi_bus->owner) { diff --git a/include/mr_api.h b/include/mr_api.h index 1a6ab96..90f64a9 100644 --- a/include/mr_api.h +++ b/include/mr_api.h @@ -64,7 +64,7 @@ int mr_dev_register(struct mr_dev *dev, int sflags, struct mr_dev_ops *ops, struct mr_drv *drv); -void mr_dev_isr(struct mr_dev *dev, int event, void *args); +int mr_dev_isr(struct mr_dev *dev, int event, void *args); int mr_dev_get_full_name(struct mr_dev *dev, char *buf, size_t bufsz); /** @} */ diff --git a/source/device.c b/source/device.c index 590c38f..7365738 100644 --- a/source/device.c +++ b/source/device.c @@ -435,7 +435,7 @@ int mr_dev_register(struct mr_dev *dev, * @param event The event to be handle. * @param args The arguments of the event. */ -void mr_dev_isr(struct mr_dev *dev, int event, void *args) +int mr_dev_isr(struct mr_dev *dev, int event, void *args) { mr_assert(dev != MR_NULL); @@ -444,7 +444,7 @@ void mr_dev_isr(struct mr_dev *dev, int event, void *args) ssize_t ret = dev->ops->isr(dev, event, args); if (ret < 0) { - return; + return (int)ret; } switch (event & MR_ISR_MASK) @@ -455,11 +455,12 @@ void mr_dev_isr(struct mr_dev *dev, int event, void *args) { dev->rd_call.call(dev->rd_call.desc, &ret); } - return; + return MR_EOK; } + case MR_ISR_WR: { - if (ret == 0) + if (ret == MR_EOK) { #ifdef MR_USING_RDWR_CTL dev_lock_release(dev, MR_LFLAG_NONBLOCK); @@ -468,16 +469,18 @@ void mr_dev_isr(struct mr_dev *dev, int event, void *args) { dev->wr_call.call(dev->wr_call.desc, &ret); } + return MR_EOK; } - return; + return MR_EBUSY; } default: { - return; + return MR_ENOTSUP; } } } + return MR_ENOTSUP; } /**