diff --git a/arch/arm/src/sam34/sam_serial.c b/arch/arm/src/sam34/sam_serial.c index 4915591dfe..e2f2dfa57c 100644 --- a/arch/arm/src/sam34/sam_serial.c +++ b/arch/arm/src/sam34/sam_serial.c @@ -1094,6 +1094,7 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) struct termios *termiosp = (struct termios*)arg; struct up_dev_s *priv = (struct up_dev_s *)dev->priv; uint32_t baud; + uint32_t imr; uint8_t parity; uint8_t nbits; bool stop2; @@ -1178,7 +1179,12 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) * implement TCSADRAIN / TCSAFLUSH */ + up_disableallints(priv, &imr); ret = up_setup(dev); + + /* Restore the interrupt state */ + + up_restoreusartint(priv, imr); } } break; diff --git a/arch/arm/src/samv7/sam_serial.c b/arch/arm/src/samv7/sam_serial.c index 6fa7101f61..9618ee188a 100644 --- a/arch/arm/src/samv7/sam_serial.c +++ b/arch/arm/src/samv7/sam_serial.c @@ -1210,6 +1210,7 @@ static int sam_ioctl(struct file *filep, int cmd, unsigned long arg) struct termios *termiosp = (struct termios*)arg; struct sam_dev_s *priv = (struct sam_dev_s *)dev->priv; uint32_t baud; + uint32_t imr; uint8_t parity; uint8_t nbits; bool stop2; @@ -1294,7 +1295,12 @@ static int sam_ioctl(struct file *filep, int cmd, unsigned long arg) * implement TCSADRAIN / TCSAFLUSH */ + sam_disableallints(priv, &imr); ret = sam_setup(dev); + + /* Restore the interrupt state */ + + sam_restoreusartint(priv, imr); } } break;