diff mbox

[OpenWrt-Devel,05/10] imx6: add RS485 gpio-based txen support

Message ID 1450736720-8908-6-git-send-email-psidhu@gateworks.com
State Not Applicable
Headers show

Commit Message

Pushpal Sidhu Dec. 21, 2015, 10:25 p.m. UTC
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
---
 .../300-imx-serial-rs485-gpio-txen-support.patch   | 186 +++++++++++++++++++++
 ...1-imx-ventana-add-rs485-txen-gpio-support.patch |  60 +++++++
 2 files changed, 246 insertions(+)
 create mode 100644 target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
 create mode 100644 target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch

Comments

Pushpal Sidhu Dec. 22, 2015, 11:32 p.m. UTC | #1
This patch isn't really applicable as we're still trying to clear this
with mainline. I'll mark as "Not Applicable" in patchwork. Removal of
this patch has no bearing on applying other patches as it's numbered
last.

- Pushpal

On Mon, Dec 21, 2015 at 2:25 PM, Pushpal Sidhu <psidhu@gateworks.com> wrote:
> Signed-off-by: Tim Harvey <tharvey@gateworks.com>
> ---
>  .../300-imx-serial-rs485-gpio-txen-support.patch   | 186 +++++++++++++++++++++
>  ...1-imx-ventana-add-rs485-txen-gpio-support.patch |  60 +++++++
>  2 files changed, 246 insertions(+)
>  create mode 100644 target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
>  create mode 100644 target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch
>
> diff --git a/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch b/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
> new file mode 100644
> index 0000000..156cdd6
> --- /dev/null
> +++ b/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
> @@ -0,0 +1,186 @@
> +Index: linux-4.3/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt
> +===================================================================
> +--- linux-4.3.orig/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt   2015-11-01 16:05:25.000000000 -0800
> ++++ linux-4.3/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt        2015-12-18 10:39:45.103158319 -0800
> +@@ -6,6 +6,7 @@
> + - interrupts : Should contain uart interrupt
> +
> + Optional properties:
> ++- fsl,rs485-gpio-txen : Indicate a GPIO is used as TXEN instead of RTS
> + - fsl,uart-has-rtscts : Indicate the uart has rts and cts
> + - fsl,irda-mode : Indicate the uart supports irda mode
> + - fsl,dte-mode : Indicate the uart works in DTE mode. The uart works
> +Index: linux-4.3/drivers/tty/serial/imx.c
> +===================================================================
> +--- linux-4.3.orig/drivers/tty/serial/imx.c    2015-11-01 16:05:25.000000000 -0800
> ++++ linux-4.3/drivers/tty/serial/imx.c 2015-12-18 10:39:45.103158319 -0800
> +@@ -21,6 +21,7 @@
> + #define SUPPORT_SYSRQ
> + #endif
> +
> ++#include <linux/gpio.h>
> + #include <linux/module.h>
> + #include <linux/ioport.h>
> + #include <linux/init.h>
> +@@ -37,6 +38,7 @@
> + #include <linux/slab.h>
> + #include <linux/of.h>
> + #include <linux/of_device.h>
> ++#include <linux/of_gpio.h>
> + #include <linux/io.h>
> + #include <linux/dma-mapping.h>
> +
> +@@ -203,6 +205,7 @@
> +       unsigned short          trcv_delay; /* transceiver delay */
> +       struct clk              *clk_ipg;
> +       struct clk              *clk_per;
> ++      int                     txen_gpio;
> +       const struct imx_uart_data *devdata;
> +
> +       /* DMA fields */
> +@@ -373,13 +376,21 @@
> +       /* in rs485 mode disable transmitter if shifter is empty */
> +       if (port->rs485.flags & SER_RS485_ENABLED &&
> +           readl(port->membase + USR2) & USR2_TXDC) {
> +-              temp = readl(port->membase + UCR2);
> +-              if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
> +-                      temp &= ~UCR2_CTS;
> +-              else
> +-                      temp |= UCR2_CTS;
> +-              writel(temp, port->membase + UCR2);
> ++              if (sport->txen_gpio != -1) {
> ++                      if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
> ++                              gpio_set_value(sport->txen_gpio, 1);
> ++                      else
> ++                              gpio_set_value(sport->txen_gpio, 0);
> ++              } else {
> ++                      temp = readl(port->membase + UCR2);
> ++                      if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
> ++                              temp &= ~UCR2_CTS;
> ++                      else
> ++                              temp |= UCR2_CTS;
> ++                      writel(temp, port->membase + UCR2);
> ++              }
> +
> ++              /* disable shifter empty irq */
> +               temp = readl(port->membase + UCR4);
> +               temp &= ~UCR4_TCEN;
> +               writel(temp, port->membase + UCR4);
> +@@ -578,14 +589,22 @@
> +       unsigned long temp;
> +
> +       if (port->rs485.flags & SER_RS485_ENABLED) {
> +-              /* enable transmitter and shifter empty irq */
> +-              temp = readl(port->membase + UCR2);
> +-              if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
> +-                      temp &= ~UCR2_CTS;
> +-              else
> +-                      temp |= UCR2_CTS;
> +-              writel(temp, port->membase + UCR2);
> ++              /* enable transmitter */
> ++              if (sport->txen_gpio != -1) {
> ++                      if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
> ++                              gpio_set_value(sport->txen_gpio, 1);
> ++                      else
> ++                              gpio_set_value(sport->txen_gpio, 0);
> ++              } else {
> ++                      temp = readl(port->membase + UCR2);
> ++                      if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
> ++                              temp &= ~UCR2_CTS;
> ++                      else
> ++                              temp |= UCR2_CTS;
> ++                      writel(temp, port->membase + UCR2);
> ++              }
> +
> ++              /* enable shifter empty irq */
> +               temp = readl(port->membase + UCR4);
> +               temp |= UCR4_TCEN;
> +               writel(temp, port->membase + UCR4);
> +@@ -1303,7 +1322,9 @@
> +               if (sport->have_rtscts) {
> +                       ucr2 &= ~UCR2_IRTS;
> +
> +-                      if (port->rs485.flags & SER_RS485_ENABLED) {
> ++                      if ((port->rs485.flags & SER_RS485_ENABLED) &&
> ++                          (sport->txen_gpio == -1))
> ++                      {
> +                               /*
> +                                * RTS is mandatory for rs485 operation, so keep
> +                                * it under manual control and keep transmitter
> +@@ -1312,9 +1333,8 @@
> +                               if (!(port->rs485.flags &
> +                                     SER_RS485_RTS_AFTER_SEND))
> +                                       ucr2 |= UCR2_CTS;
> +-                      } else {
> ++                      } else
> +                               ucr2 |= UCR2_CTSC;
> +-                      }
> +
> +                       /* Can we enable the DMA support? */
> +                       if (is_imx6q_uart(sport) && !uart_console(port)
> +@@ -1323,7 +1343,8 @@
> +               } else {
> +                       termios->c_cflag &= ~CRTSCTS;
> +               }
> +-      } else if (port->rs485.flags & SER_RS485_ENABLED)
> ++      } else if (port->rs485.flags & SER_RS485_ENABLED &&
> ++                 sport->txen_gpio == -1)
> +               /* disable transmitter */
> +               if (!(port->rs485.flags & SER_RS485_RTS_AFTER_SEND))
> +                       ucr2 |= UCR2_CTS;
> +@@ -1561,20 +1582,27 @@
> +       rs485conf->flags |= SER_RS485_RX_DURING_TX;
> +
> +       /* RTS is required to control the transmitter */
> +-      if (!sport->have_rtscts)
> ++      if (sport->txen_gpio == -1 && !sport->have_rtscts)
> +               rs485conf->flags &= ~SER_RS485_ENABLED;
> +
> +       if (rs485conf->flags & SER_RS485_ENABLED) {
> +-              unsigned long temp;
> +-
> +               /* disable transmitter */
> +-              temp = readl(sport->port.membase + UCR2);
> +-              temp &= ~UCR2_CTSC;
> +-              if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
> +-                      temp &= ~UCR2_CTS;
> +-              else
> +-                      temp |= UCR2_CTS;
> +-              writel(temp, sport->port.membase + UCR2);
> ++              if (sport->txen_gpio != -1) {
> ++                      if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
> ++                              gpio_set_value(sport->txen_gpio, 1);
> ++                      else
> ++                              gpio_set_value(sport->txen_gpio, 0);
> ++              } else {
> ++                      unsigned long temp;
> ++
> ++                      temp = readl(sport->port.membase + UCR2);
> ++                      temp &= ~UCR2_CTSC;
> ++                      if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
> ++                              temp &= ~UCR2_CTS;
> ++                      else
> ++                              temp |= UCR2_CTS;
> ++                      writel(temp, sport->port.membase + UCR2);
> ++              }
> +       }
> +
> +       port->rs485 = *rs485conf;
> +@@ -1847,6 +1875,17 @@
> +       if (of_get_property(np, "fsl,dte-mode", NULL))
> +               sport->dte_mode = 1;
> +
> ++      if (of_find_property(np, "fsl,rs485-gpio-txen", NULL))
> ++              sport->txen_gpio = of_get_named_gpio(np,
> ++                                                   "fsl,rs485-gpio-txen", 0);
> ++      else
> ++              sport->txen_gpio = -1;
> ++      if (gpio_is_valid(sport->txen_gpio))
> ++              devm_gpio_request_one(&pdev->dev, sport->txen_gpio,
> ++                                    GPIOF_OUT_INIT_LOW, "rs485-txen");
> ++      else
> ++              sport->txen_gpio = -1;
> ++
> +       sport->devdata = of_id->data;
> +
> +       return 0;
> diff --git a/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch b/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch
> new file mode 100644
> index 0000000..07f0601
> --- /dev/null
> +++ b/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch
> @@ -0,0 +1,60 @@
> +Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
> +===================================================================
> +--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi       2015-12-18 10:39:45.087158319 -0800
> ++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi    2015-12-18 10:39:45.115158319 -0800
> +@@ -372,6 +372,7 @@
> + &uart1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&pinctrl_uart1>;
> ++      fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> + };
> +
> +@@ -544,6 +545,7 @@
> +                       fsl,pins = <
> +                               MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA      0x1b0b1
> +                               MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA      0x1b0b1
> ++                              MX6QDL_PAD_SD3_DAT4__GPIO7_IO01         0x4001b0b1 /* TEN */
> +                       >;
> +               };
> +
> +Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
> +===================================================================
> +--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi       2015-12-18 10:39:45.087158319 -0800
> ++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi    2015-12-18 10:39:45.115158319 -0800
> +@@ -370,6 +370,7 @@
> + &uart1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&pinctrl_uart1>;
> ++      fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> + };
> +
> +@@ -534,6 +535,7 @@
> +                       fsl,pins = <
> +                               MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA      0x1b0b1
> +                               MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA      0x1b0b1
> ++                              MX6QDL_PAD_SD3_DAT4__GPIO7_IO01         0x4001b0b1 /* TEN */
> +                       >;
> +               };
> +
> +Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
> +===================================================================
> +--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi       2015-12-18 10:39:45.087158319 -0800
> ++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi    2015-12-18 10:39:45.115158319 -0800
> +@@ -471,6 +471,7 @@
> + &uart1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&pinctrl_uart1>;
> ++      fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> + };
> +
> +@@ -641,6 +642,7 @@
> +                       fsl,pins = <
> +                               MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA      0x1b0b1
> +                               MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA      0x1b0b1
> ++                              MX6QDL_PAD_SD3_DAT4__GPIO7_IO01         0x4001b0b1 /* TEN */
> +                       >;
> +               };
> +
> --
> 2.6.4
>
diff mbox

Patch

diff --git a/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch b/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
new file mode 100644
index 0000000..156cdd6
--- /dev/null
+++ b/target/linux/imx6/patches-4.3/300-imx-serial-rs485-gpio-txen-support.patch
@@ -0,0 +1,186 @@ 
+Index: linux-4.3/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt
+===================================================================
+--- linux-4.3.orig/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt	2015-11-01 16:05:25.000000000 -0800
++++ linux-4.3/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt	2015-12-18 10:39:45.103158319 -0800
+@@ -6,6 +6,7 @@
+ - interrupts : Should contain uart interrupt
+ 
+ Optional properties:
++- fsl,rs485-gpio-txen : Indicate a GPIO is used as TXEN instead of RTS
+ - fsl,uart-has-rtscts : Indicate the uart has rts and cts
+ - fsl,irda-mode : Indicate the uart supports irda mode
+ - fsl,dte-mode : Indicate the uart works in DTE mode. The uart works
+Index: linux-4.3/drivers/tty/serial/imx.c
+===================================================================
+--- linux-4.3.orig/drivers/tty/serial/imx.c	2015-11-01 16:05:25.000000000 -0800
++++ linux-4.3/drivers/tty/serial/imx.c	2015-12-18 10:39:45.103158319 -0800
+@@ -21,6 +21,7 @@
+ #define SUPPORT_SYSRQ
+ #endif
+ 
++#include <linux/gpio.h>
+ #include <linux/module.h>
+ #include <linux/ioport.h>
+ #include <linux/init.h>
+@@ -37,6 +38,7 @@
+ #include <linux/slab.h>
+ #include <linux/of.h>
+ #include <linux/of_device.h>
++#include <linux/of_gpio.h>
+ #include <linux/io.h>
+ #include <linux/dma-mapping.h>
+ 
+@@ -203,6 +205,7 @@
+ 	unsigned short		trcv_delay; /* transceiver delay */
+ 	struct clk		*clk_ipg;
+ 	struct clk		*clk_per;
++	int			txen_gpio;
+ 	const struct imx_uart_data *devdata;
+ 
+ 	/* DMA fields */
+@@ -373,13 +376,21 @@
+ 	/* in rs485 mode disable transmitter if shifter is empty */
+ 	if (port->rs485.flags & SER_RS485_ENABLED &&
+ 	    readl(port->membase + USR2) & USR2_TXDC) {
+-		temp = readl(port->membase + UCR2);
+-		if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
+-			temp &= ~UCR2_CTS;
+-		else
+-			temp |= UCR2_CTS;
+-		writel(temp, port->membase + UCR2);
++		if (sport->txen_gpio != -1) {
++			if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
++				gpio_set_value(sport->txen_gpio, 1);
++			else
++				gpio_set_value(sport->txen_gpio, 0);
++		} else {
++			temp = readl(port->membase + UCR2);
++			if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
++				temp &= ~UCR2_CTS;
++			else
++				temp |= UCR2_CTS;
++			writel(temp, port->membase + UCR2);
++		}
+ 
++		/* disable shifter empty irq */
+ 		temp = readl(port->membase + UCR4);
+ 		temp &= ~UCR4_TCEN;
+ 		writel(temp, port->membase + UCR4);
+@@ -578,14 +589,22 @@
+ 	unsigned long temp;
+ 
+ 	if (port->rs485.flags & SER_RS485_ENABLED) {
+-		/* enable transmitter and shifter empty irq */
+-		temp = readl(port->membase + UCR2);
+-		if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
+-			temp &= ~UCR2_CTS;
+-		else
+-			temp |= UCR2_CTS;
+-		writel(temp, port->membase + UCR2);
++		/* enable transmitter */
++		if (sport->txen_gpio != -1) {
++			if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
++				gpio_set_value(sport->txen_gpio, 1);
++			else
++				gpio_set_value(sport->txen_gpio, 0);
++		} else {
++			temp = readl(port->membase + UCR2);
++			if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
++				temp &= ~UCR2_CTS;
++			else
++				temp |= UCR2_CTS;
++			writel(temp, port->membase + UCR2);
++		}
+ 
++		/* enable shifter empty irq */
+ 		temp = readl(port->membase + UCR4);
+ 		temp |= UCR4_TCEN;
+ 		writel(temp, port->membase + UCR4);
+@@ -1303,7 +1322,9 @@
+ 		if (sport->have_rtscts) {
+ 			ucr2 &= ~UCR2_IRTS;
+ 
+-			if (port->rs485.flags & SER_RS485_ENABLED) {
++			if ((port->rs485.flags & SER_RS485_ENABLED) &&
++			    (sport->txen_gpio == -1))
++			{
+ 				/*
+ 				 * RTS is mandatory for rs485 operation, so keep
+ 				 * it under manual control and keep transmitter
+@@ -1312,9 +1333,8 @@
+ 				if (!(port->rs485.flags &
+ 				      SER_RS485_RTS_AFTER_SEND))
+ 					ucr2 |= UCR2_CTS;
+-			} else {
++			} else
+ 				ucr2 |= UCR2_CTSC;
+-			}
+ 
+ 			/* Can we enable the DMA support? */
+ 			if (is_imx6q_uart(sport) && !uart_console(port)
+@@ -1323,7 +1343,8 @@
+ 		} else {
+ 			termios->c_cflag &= ~CRTSCTS;
+ 		}
+-	} else if (port->rs485.flags & SER_RS485_ENABLED)
++	} else if (port->rs485.flags & SER_RS485_ENABLED &&
++	           sport->txen_gpio == -1)
+ 		/* disable transmitter */
+ 		if (!(port->rs485.flags & SER_RS485_RTS_AFTER_SEND))
+ 			ucr2 |= UCR2_CTS;
+@@ -1561,20 +1582,27 @@
+ 	rs485conf->flags |= SER_RS485_RX_DURING_TX;
+ 
+ 	/* RTS is required to control the transmitter */
+-	if (!sport->have_rtscts)
++	if (sport->txen_gpio == -1 && !sport->have_rtscts)
+ 		rs485conf->flags &= ~SER_RS485_ENABLED;
+ 
+ 	if (rs485conf->flags & SER_RS485_ENABLED) {
+-		unsigned long temp;
+-
+ 		/* disable transmitter */
+-		temp = readl(sport->port.membase + UCR2);
+-		temp &= ~UCR2_CTSC;
+-		if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
+-			temp &= ~UCR2_CTS;
+-		else
+-			temp |= UCR2_CTS;
+-		writel(temp, sport->port.membase + UCR2);
++		if (sport->txen_gpio != -1) {
++			if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
++				gpio_set_value(sport->txen_gpio, 1);
++			else
++				gpio_set_value(sport->txen_gpio, 0);
++		} else {
++			unsigned long temp;
++
++			temp = readl(sport->port.membase + UCR2);
++			temp &= ~UCR2_CTSC;
++			if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
++				temp &= ~UCR2_CTS;
++			else
++				temp |= UCR2_CTS;
++			writel(temp, sport->port.membase + UCR2);
++		}
+ 	}
+ 
+ 	port->rs485 = *rs485conf;
+@@ -1847,6 +1875,17 @@
+ 	if (of_get_property(np, "fsl,dte-mode", NULL))
+ 		sport->dte_mode = 1;
+ 
++	if (of_find_property(np, "fsl,rs485-gpio-txen", NULL))
++		sport->txen_gpio = of_get_named_gpio(np,
++						     "fsl,rs485-gpio-txen", 0);
++	else
++		sport->txen_gpio = -1;
++	if (gpio_is_valid(sport->txen_gpio))
++		devm_gpio_request_one(&pdev->dev, sport->txen_gpio,
++				      GPIOF_OUT_INIT_LOW, "rs485-txen");
++	else
++		sport->txen_gpio = -1;
++
+ 	sport->devdata = of_id->data;
+ 
+ 	return 0;
diff --git a/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch b/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch
new file mode 100644
index 0000000..07f0601
--- /dev/null
+++ b/target/linux/imx6/patches-4.3/301-imx-ventana-add-rs485-txen-gpio-support.patch
@@ -0,0 +1,60 @@ 
+Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
+===================================================================
+--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi	2015-12-18 10:39:45.087158319 -0800
++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi	2015-12-18 10:39:45.115158319 -0800
+@@ -372,6 +372,7 @@
+ &uart1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_uart1>;
++	fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
+ 	status = "okay";
+ };
+ 
+@@ -544,6 +545,7 @@
+ 			fsl,pins = <
+ 				MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA	0x1b0b1
+ 				MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA	0x1b0b1
++				MX6QDL_PAD_SD3_DAT4__GPIO7_IO01		0x4001b0b1 /* TEN */
+ 			>;
+ 		};
+ 
+Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
+===================================================================
+--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi	2015-12-18 10:39:45.087158319 -0800
++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi	2015-12-18 10:39:45.115158319 -0800
+@@ -370,6 +370,7 @@
+ &uart1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_uart1>;
++	fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
+ 	status = "okay";
+ };
+ 
+@@ -534,6 +535,7 @@
+ 			fsl,pins = <
+ 				MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA	0x1b0b1
+ 				MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA	0x1b0b1
++				MX6QDL_PAD_SD3_DAT4__GPIO7_IO01		0x4001b0b1 /* TEN */
+ 			>;
+ 		};
+ 
+Index: linux-4.3/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
+===================================================================
+--- linux-4.3.orig/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi	2015-12-18 10:39:45.087158319 -0800
++++ linux-4.3/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi	2015-12-18 10:39:45.115158319 -0800
+@@ -471,6 +471,7 @@
+ &uart1 {
+ 	pinctrl-names = "default";
+ 	pinctrl-0 = <&pinctrl_uart1>;
++	fsl,rs485-gpio-txen = <&gpio7 1 GPIO_ACTIVE_HIGH>;
+ 	status = "okay";
+ };
+ 
+@@ -641,6 +642,7 @@
+ 			fsl,pins = <
+ 				MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA	0x1b0b1
+ 				MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA	0x1b0b1
++				MX6QDL_PAD_SD3_DAT4__GPIO7_IO01		0x4001b0b1 /* TEN */
+ 			>;
+ 		};
+