mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	Refreshed all patches Compile-tested on: cns3xxx, imx6, x86-64 Runtime-tested on: cns3xxx, imx6, x86-64 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 24d5ba8ad40c3ac7903f688580c345aafa764dc7 Mon Sep 17 00:00:00 2001
 | |
| From: Daniel Golle <daniel@makrotopia.org>
 | |
| Date: Mon, 4 Jun 2018 14:51:29 +0200
 | |
| Subject: [PATCH] tty: serial: exar: generalize rs485 setup
 | |
| To: linux-serial@vger.kernel.org,
 | |
|     Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 | |
| Cc: Linus Walleij <linus.walleij@linaro.org>,
 | |
|     Jan Kiszka <jan.kiszka@siemens.com>
 | |
| 
 | |
| Move the non-board-specific part of the RS485 initialization
 | |
| from iot2040_rs485_config function to a new generic function
 | |
| used also for other boards.
 | |
| This allows using PCIe boards which are hard-wired to RS485
 | |
| or have jumpers for their configurations.
 | |
| 
 | |
| Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | |
| ---
 | |
|  drivers/tty/serial/8250/8250_exar.c | 38 +++++++++++++++++++----------
 | |
|  1 file changed, 25 insertions(+), 13 deletions(-)
 | |
| 
 | |
| --- a/drivers/tty/serial/8250/8250_exar.c
 | |
| +++ b/drivers/tty/serial/8250/8250_exar.c
 | |
| @@ -275,8 +275,32 @@ static int xr17v35x_register_gpio(struct
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| +static int generic_rs485_config(struct uart_port *port,
 | |
| +				struct serial_rs485 *rs485)
 | |
| +{
 | |
| +	bool is_rs485 = !!(rs485->flags & SER_RS485_ENABLED);
 | |
| +	u8 __iomem *p = port->membase;
 | |
| +	u8 value;
 | |
| +
 | |
| +	value = readb(p + UART_EXAR_FCTR);
 | |
| +	if (is_rs485)
 | |
| +		value |= UART_FCTR_EXAR_485;
 | |
| +	else
 | |
| +		value &= ~UART_FCTR_EXAR_485;
 | |
| +
 | |
| +	writeb(value, p + UART_EXAR_FCTR);
 | |
| +
 | |
| +	if (is_rs485)
 | |
| +		writeb(UART_EXAR_RS485_DLY(4), p + UART_MSR);
 | |
| +
 | |
| +	port->rs485 = *rs485;
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static const struct exar8250_platform exar8250_default_platform = {
 | |
|  	.register_gpio = xr17v35x_register_gpio,
 | |
| +	.rs485_config = generic_rs485_config,
 | |
|  };
 | |
|  
 | |
|  static int iot2040_rs485_config(struct uart_port *port,
 | |
| @@ -309,19 +333,7 @@ static int iot2040_rs485_config(struct u
 | |
|  	value |= mode;
 | |
|  	writeb(value, p + UART_EXAR_MPIOLVL_7_0);
 | |
|  
 | |
| -	value = readb(p + UART_EXAR_FCTR);
 | |
| -	if (is_rs485)
 | |
| -		value |= UART_FCTR_EXAR_485;
 | |
| -	else
 | |
| -		value &= ~UART_FCTR_EXAR_485;
 | |
| -	writeb(value, p + UART_EXAR_FCTR);
 | |
| -
 | |
| -	if (is_rs485)
 | |
| -		writeb(UART_EXAR_RS485_DLY(4), p + UART_MSR);
 | |
| -
 | |
| -	port->rs485 = *rs485;
 | |
| -
 | |
| -	return 0;
 | |
| +	return generic_rs485_config(port, rs485);
 | |
|  }
 | |
|  
 | |
|  static const struct property_entry iot2040_gpio_properties[] = {
 |