From 1299160d1d9aff2cc15d55718ff84ded1ffba90f Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 3 Nov 2015 10:47:37 -0600 Subject: [PATCH] SAMV71-XULT: Add call to can_txready() to MCAN driver. This is part of a fix to a CAN hang problem --- arch/arm/src/samv7/Kconfig | 2 ++ arch/arm/src/samv7/sam_mcan.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/arch/arm/src/samv7/Kconfig b/arch/arm/src/samv7/Kconfig index 3dede34314e..7aa5707bd0c 100644 --- a/arch/arm/src/samv7/Kconfig +++ b/arch/arm/src/samv7/Kconfig @@ -223,6 +223,7 @@ config SAMV7_MCAN0 bool "CAN controller 0 (MCAN0)" default n select CAN + select CAN_TXREADY select SAMV7_MCAN config SAMV7_MCAN1 @@ -230,6 +231,7 @@ config SAMV7_MCAN1 default n depends on SAMV7_HAVE_MCAN1 select CAN + select CAN_TXREADY select SAMV7_MCAN config SAMV7_DAC0 diff --git a/arch/arm/src/samv7/sam_mcan.c b/arch/arm/src/samv7/sam_mcan.c index 1fcefd32c71..b72a08d4df6 100644 --- a/arch/arm/src/samv7/sam_mcan.c +++ b/arch/arm/src/samv7/sam_mcan.c @@ -128,6 +128,12 @@ # endif #endif +/* General Configuration ****************************************************/ + +#ifndef CONFIG_CAN_TXREADY +# warning WARNING!!! CONFIG_CAN_TXREADY is required by this driver +#endif + /* MCAN0 Configuration ******************************************************/ #ifdef CONFIG_SAMV7_MCAN0 @@ -3190,6 +3196,14 @@ static void mcan_interrupt(FAR struct can_dev_s *dev) mcan_buffer_release(priv); handled = true; + +#ifdef CONFIG_CAN_TXREADY + /* Inform the upper half driver that we are again ready to accept + * data in mcan_send(). + */ + + can_txready(dev); +#endif } else if ((pending & priv->txints) != 0) {