Prechádzať zdrojové kódy

RS485_udelay_before_tx patch added

Reinhard Russinger 8 rokov pred
rodič
commit
6b799818cb

+ 1 - 1
board/GfA/Display001/BUILD

@@ -1 +1 @@
-374
+401

+ 62 - 0
board/GfA/Display001/linux_4.4.65_rt17/linux-006-RS485_udelay_before_tx.patch

@@ -0,0 +1,62 @@
+diff --git a/Documentation/serial/serial-rs485.txt b/Documentation/serial/serial-rs485.txt
+index 2253b8b45a74..6225a3b759de 100644
+--- a/Documentation/serial/serial-rs485.txt
++++ b/Documentation/serial/serial-rs485.txt
+@@ -73,6 +73,9 @@
+ 	/* Set rts delay before send, if needed: */
+ 	rs485conf.delay_rts_before_send = ...;
+ 
++	/* Set udelay_before_enable_tx, if needed: */
++	rs485conf.udelay_before_enable_tx = ...;
++
+ 	/* Set rts delay after send, if needed: */
+ 	rs485conf.delay_rts_after_send = ...;
+ 
+diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
+index 2c6c06f3d61c..19f51585641b 100644
+--- a/drivers/tty/serial/omap-serial.c
++++ b/drivers/tty/serial/omap-serial.c
+@@ -423,6 +423,8 @@ static void serial_omap_start_tx(struct uart_port *port)
+ 		/* if rts not already enabled */
+ 		res = (port->rs485.flags & SER_RS485_RTS_ON_SEND) ? 1 : 0;
+ 		if (gpio_get_value(up->rts_gpio) != res) {
++			if(port->rs485.udelay_before_enable_tx)
++				udelay(port->rs485.udelay_before_enable_tx);
+ 			gpio_set_value(up->rts_gpio, res);
+ 			if (port->rs485.delay_rts_before_send > 0)
+ 				mdelay(port->rs485.delay_rts_before_send);
+@@ -1545,7 +1547,7 @@ static int serial_omap_probe_rs485(struct uart_omap_port *up,
+ 				   struct device_node *np)
+ {
+ 	struct serial_rs485 *rs485conf = &up->port.rs485;
+-	u32 rs485_delay[2];
++	u32 rs485_delay[3];
+ 	enum of_gpio_flags flags;
+ 	int ret;
+ 
+@@ -1577,9 +1579,10 @@ static int serial_omap_probe_rs485(struct uart_omap_port *up,
+ 	}
+ 
+ 	if (of_property_read_u32_array(np, "rs485-rts-delay",
+-				    rs485_delay, 2) == 0) {
++				    rs485_delay, 3) == 0) {
+ 		rs485conf->delay_rts_before_send = rs485_delay[0];
+ 		rs485conf->delay_rts_after_send = rs485_delay[1];
++		rs485conf->udelay_before_enable_tx = rs485_delay[2];
+ 	}
+ 
+ 	if (of_property_read_bool(np, "rs485-rx-during-tx"))
+diff --git a/include/uapi/linux/serial.h b/include/uapi/linux/serial.h
+index 5d59c3ebf459..d100bdac93c2 100644
+--- a/include/uapi/linux/serial.h
++++ b/include/uapi/linux/serial.h
+@@ -124,7 +124,8 @@ struct serial_rs485 {
+ #define SER_RS485_RX_DURING_TX		(1 << 4)
+ 	__u32	delay_rts_before_send;	/* Delay before send (milliseconds) */
+ 	__u32	delay_rts_after_send;	/* Delay after send (milliseconds) */
+-	__u32	padding[5];		/* Memory is cheap, new structs
++	__u32   udelay_before_enable_tx;/* Delay before switching to tx direction */
++	__u32	padding[4];		/* Memory is cheap, new structs
+ 					   are a royal PITA .. */
+ };
+