From 7f29f81666a92029bd120767a5642cc72d81d6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Date: Mon, 27 Jun 2022 18:07:52 +0300 Subject: [PATCH] serial: stm32: Clear prev values before setting RTS delays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The code lacks clearing of previous DEAT/DEDT values. Thus, changing values on the fly results in garbage delays tending towards the maximum value as more and more bits are ORed together. (Leaving RS485 mode would have cleared the old values though). Fixes: 1bcda09d2910 ("serial: stm32: add support for RS485 hardware control mode") Cc: stable@kernel.org Signed-off-by: Ilpo Järvinen Link: https://lore.kernel.org/r/20220627150753.34510-1-ilpo.jarvinen@linux.intel.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Valentin Caron Change-Id: I2f1f2c0675180f65c524948a9103d03abf8f4ee8 Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/linux-stm32/+/272029 Reviewed-by: CITOOLS Reviewed-by: CIBUILD Reviewed-by: Eric FOURMONT Domain-Review: Amelie DELAUNAY --- drivers/tty/serial/stm32-usart.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c index 3eabb65f195518..4d7a316649c157 100644 --- a/drivers/tty/serial/stm32-usart.c +++ b/drivers/tty/serial/stm32-usart.c @@ -110,6 +110,8 @@ static void stm32_usart_config_reg_rs485(u32 *cr1, u32 *cr3, u32 baud, *cr3 |= USART_CR3_DEM; over8 = *cr1 & USART_CR1_OVER8; + *cr1 &= ~(USART_CR1_DEDT_MASK | USART_CR1_DEAT_MASK); + /* Assertion time */ tmp = stm32_usart_config_delay_rs485(cr1, delay_ADE, baud, over8, rs485_deat_dedt_max, rs485conf);