From be119aa96dcd6a89a921b8418e24c9c478c482f0 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Sun, 4 Dec 2011 22:46:52 +0100 Subject: [PATCH] Alternative function to insert SPI message at queue head. This allows immediate retransmit of current message from transfer callback function. Signed-off-by: Pavel Pisa --- libs4c/spi/spi_drv.c | 13 +++++++++++++ libs4c/spi/spi_drv.h | 1 + 2 files changed, 14 insertions(+) diff --git a/libs4c/spi/spi_drv.c b/libs4c/spi/spi_drv.c index 4e578e8..6dff73f 100644 --- a/libs4c/spi/spi_drv.c +++ b/libs4c/spi/spi_drv.c @@ -42,6 +42,19 @@ int spi_msg_rq_ins(spi_drv_t *ifc, spi_msg_head_t *msg) return 0; } +int spi_msg_rq_ins_head(spi_drv_t *ifc, spi_msg_head_t *msg) +{ + spi_isr_lock_level_t saveif; + + if(!ifc) return -1; + if(!(ifc->flags&SPI_IFC_ON)) return -1; + spi_isr_lock(saveif); + spi_rq_queue_ins_head(ifc,msg); + spi_isr_unlock(saveif); + ifc->ctrl_fnc(ifc,SPI_CTRL_WAKE_RQ,NULL); + return 0; +} + int spi_msg_rq_rem(spi_msg_head_t *msg) { int act=0; diff --git a/libs4c/spi/spi_drv.h b/libs4c/spi/spi_drv.h index 448f42a..cc5a384 100644 --- a/libs4c/spi/spi_drv.h +++ b/libs4c/spi/spi_drv.h @@ -62,6 +62,7 @@ typedef struct spi_drv { spi_drv_t *spi_find_drv(char *name, int number); int spi_msg_rq_ins(spi_drv_t *ifc, spi_msg_head_t *msg); +int spi_msg_rq_ins_head(spi_drv_t *ifc, spi_msg_head_t *msg); int spi_msg_rq_rem(spi_msg_head_t *msg); int spi_flush_all(spi_drv_t *ifc); int spi_transfer(spi_drv_t *ifc, int addr, int rq_len, -- 2.39.2