* [PATCH v3 0/2] Implement support for inverted serial TX/RX on i.MX @ 2020-02-12 16:35 George Hilliard 2020-02-12 16:35 ` [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options George Hilliard 2020-02-12 16:35 ` [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity George Hilliard 0 siblings, 2 replies; 5+ messages in thread From: George Hilliard @ 2020-02-12 16:35 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: George Hilliard, linux-serial, devicetree, NXP Linux Team, kernel This peripheral has dedicated control bits that flip input/output signals before handing them off to the OS. This is useful on my hardware because the UART is connected to an RS-422 transceiver with the +/- pins hooked up backward. Instead of a hack flipping all the bits before sending them, the hardware can do it for free. Revision 3 sets *and* clears the bit as necessary during startup. It also moves init before transmit is enabled. George Hilliard (2): dt-bindings: serial: document fsl,inverted-tx and -rx options tty: imx serial: Implement support for reversing TX and RX polarity .../bindings/serial/fsl-imx-uart.txt | 4 +++ drivers/tty/serial/imx.c | 29 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) -- 2.25.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options 2020-02-12 16:35 [PATCH v3 0/2] Implement support for inverted serial TX/RX on i.MX George Hilliard @ 2020-02-12 16:35 ` George Hilliard 2020-02-18 23:07 ` Rob Herring 2020-02-12 16:35 ` [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity George Hilliard 1 sibling, 1 reply; 5+ messages in thread From: George Hilliard @ 2020-02-12 16:35 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: George Hilliard, linux-serial, devicetree, NXP Linux Team, kernel Add a description for the new fsl,inverted-tx and fsl,inverted-rx options for the i.MX UART peripheral. Signed-off-by: George Hilliard <ghilliard@kopismobile.com> --- v1..v2: Removed confidentiality spam Documentation/devicetree/bindings/serial/fsl-imx-uart.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt b/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt index 35957cbf1571..c8d677f9491f 100644 --- a/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt +++ b/Documentation/devicetree/bindings/serial/fsl-imx-uart.txt @@ -8,6 +8,10 @@ Required properties: Optional properties: - fsl,dte-mode : Indicate the uart works in DTE mode. The uart works in DCE mode by default. +- fsl,inverted-tx , fsl,inverted-rx : Indicate that the hardware attached + to the peripheral inverts the signal transmitted or received, + respectively, and that the peripheral should invert its output/input + using the INVT/INVR registers. - rs485-rts-delay, rs485-rts-active-low, rs485-rx-during-tx, linux,rs485-enabled-at-boot-time: see rs485.txt. Note that for RS485 you must enable either the "uart-has-rtscts" or the "rts-gpios" -- 2.25.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options 2020-02-12 16:35 ` [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options George Hilliard @ 2020-02-18 23:07 ` Rob Herring 0 siblings, 0 replies; 5+ messages in thread From: Rob Herring @ 2020-02-18 23:07 UTC (permalink / raw) To: George Hilliard Cc: Greg Kroah-Hartman, George Hilliard, linux-serial, devicetree, NXP Linux Team, kernel On Wed, 12 Feb 2020 10:35:37 -0600, George Hilliard wrote: > Add a description for the new fsl,inverted-tx and fsl,inverted-rx > options for the i.MX UART peripheral. > > Signed-off-by: George Hilliard <ghilliard@kopismobile.com> > --- > v1..v2: Removed confidentiality spam > > Documentation/devicetree/bindings/serial/fsl-imx-uart.txt | 4 ++++ > 1 file changed, 4 insertions(+) > Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity 2020-02-12 16:35 [PATCH v3 0/2] Implement support for inverted serial TX/RX on i.MX George Hilliard 2020-02-12 16:35 ` [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options George Hilliard @ 2020-02-12 16:35 ` George Hilliard 2020-02-12 20:47 ` Uwe Kleine-König 1 sibling, 1 reply; 5+ messages in thread From: George Hilliard @ 2020-02-12 16:35 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: George Hilliard, linux-serial, devicetree, NXP Linux Team, kernel The peripheral has support for inverting its input and/or output signals. This is useful if the hardware flips polarity of the peripheral's signal, such as swapped +/- pins on an RS-422 transceiver, or an inverting level shifter. Add support for these control registers via the device tree binding. Signed-off-by: George Hilliard <ghilliard@kopismobile.com> --- v1..v2: Remove confidentiality spam v2..v3: Set *and* clear register, and do it before TX enable drivers/tty/serial/imx.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 0c6c63166250..205627bcad66 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -195,6 +195,8 @@ struct imx_port { unsigned int have_rtscts:1; unsigned int have_rtsgpio:1; unsigned int dte_mode:1; + unsigned int inverted_tx:1; + unsigned int inverted_rx:1; struct clk *clk_ipg; struct clk *clk_per; const struct imx_uart_data *devdata; @@ -1335,7 +1337,7 @@ static int imx_uart_startup(struct uart_port *port) int retval, i; unsigned long flags; int dma_is_inited = 0; - u32 ucr1, ucr2, ucr4; + u32 ucr1, ucr2, ucr3, ucr4; retval = clk_prepare_enable(sport->clk_per); if (retval) @@ -1390,8 +1392,22 @@ static int imx_uart_startup(struct uart_port *port) ucr4 = imx_uart_readl(sport, UCR4) & ~UCR4_OREN; if (!sport->dma_is_enabled) ucr4 |= UCR4_OREN; + if (sport->inverted_rx) + ucr4 |= UCR4_INVR; + else + ucr4 &= ~UCR4_INVR; imx_uart_writel(sport, ucr4, UCR4); + /* + * configure tx polarity before enabling tx + */ + ucr3 = imx_uart_readl(sport, UCR3); + if (sport->inverted_tx) + ucr3 |= UCR3_INVT; + else + ucr3 &= ~UCR3_INVT; + imx_uart_writel(sport, ucr3, UCR3); + ucr2 = imx_uart_readl(sport, UCR2) & ~UCR2_ATEN; ucr2 |= (UCR2_RXEN | UCR2_TXEN); if (!sport->have_rtscts) @@ -1405,10 +1421,6 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_writel(sport, ucr2, UCR2); if (!imx_uart_is_imx1(sport)) { - u32 ucr3; - - ucr3 = imx_uart_readl(sport, UCR3); - ucr3 |= UCR3_DTRDEN | UCR3_RI | UCR3_DCD; if (sport->dte_mode) @@ -2184,6 +2196,12 @@ static int imx_uart_probe_dt(struct imx_port *sport, if (of_get_property(np, "rts-gpios", NULL)) sport->have_rtsgpio = 1; + if (of_get_property(np, "fsl,inverted-tx", NULL)) + sport->inverted_tx = 1; + + if (of_get_property(np, "fsl,inverted-rx", NULL)) + sport->inverted_rx = 1; + return 0; } #else -- 2.25.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity 2020-02-12 16:35 ` [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity George Hilliard @ 2020-02-12 20:47 ` Uwe Kleine-König 0 siblings, 0 replies; 5+ messages in thread From: Uwe Kleine-König @ 2020-02-12 20:47 UTC (permalink / raw) To: George Hilliard Cc: Greg Kroah-Hartman, linux-serial, devicetree, NXP Linux Team, kernel On Wed, Feb 12, 2020 at 10:35:38AM -0600, George Hilliard wrote: > The peripheral has support for inverting its input and/or output > signals. This is useful if the hardware flips polarity of the > peripheral's signal, such as swapped +/- pins on an RS-422 transceiver, > or an inverting level shifter. Add support for these control registers > via the device tree binding. > > Signed-off-by: George Hilliard <ghilliard@kopismobile.com> > --- > v1..v2: Remove confidentiality spam > v2..v3: Set *and* clear register, and do it before TX enable > > drivers/tty/serial/imx.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c > index 0c6c63166250..205627bcad66 100644 > --- a/drivers/tty/serial/imx.c > +++ b/drivers/tty/serial/imx.c > @@ -195,6 +195,8 @@ struct imx_port { > unsigned int have_rtscts:1; > unsigned int have_rtsgpio:1; > unsigned int dte_mode:1; > + unsigned int inverted_tx:1; > + unsigned int inverted_rx:1; > struct clk *clk_ipg; > struct clk *clk_per; > const struct imx_uart_data *devdata; > @@ -1335,7 +1337,7 @@ static int imx_uart_startup(struct uart_port *port) > int retval, i; > unsigned long flags; > int dma_is_inited = 0; > - u32 ucr1, ucr2, ucr4; > + u32 ucr1, ucr2, ucr3, ucr4; > > retval = clk_prepare_enable(sport->clk_per); > if (retval) > @@ -1390,8 +1392,22 @@ static int imx_uart_startup(struct uart_port *port) > ucr4 = imx_uart_readl(sport, UCR4) & ~UCR4_OREN; > if (!sport->dma_is_enabled) > ucr4 |= UCR4_OREN; > + if (sport->inverted_rx) > + ucr4 |= UCR4_INVR; > + else > + ucr4 &= ~UCR4_INVR; Maybe clear UCR4_INVR in the same way as UCR4_OREN is cleared just above? > imx_uart_writel(sport, ucr4, UCR4); > > + /* > + * configure tx polarity before enabling tx > + */ > + ucr3 = imx_uart_readl(sport, UCR3); > + if (sport->inverted_tx) > + ucr3 |= UCR3_INVT; > + else > + ucr3 &= ~UCR3_INVT; > + imx_uart_writel(sport, ucr3, UCR3); > + > ucr2 = imx_uart_readl(sport, UCR2) & ~UCR2_ATEN; > ucr2 |= (UCR2_RXEN | UCR2_TXEN); > if (!sport->have_rtscts) > @@ -1405,10 +1421,6 @@ static int imx_uart_startup(struct uart_port *port) > imx_uart_writel(sport, ucr2, UCR2); > > if (!imx_uart_is_imx1(sport)) { If this complete if block would be moved up, you only need to write this register once. > - u32 ucr3; > - > - ucr3 = imx_uart_readl(sport, UCR3); > - > ucr3 |= UCR3_DTRDEN | UCR3_RI | UCR3_DCD; > > if (sport->dte_mode) Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-02-18 23:07 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-02-12 16:35 [PATCH v3 0/2] Implement support for inverted serial TX/RX on i.MX George Hilliard 2020-02-12 16:35 ` [PATCH v3 1/2] dt-bindings: serial: document fsl,inverted-tx and -rx options George Hilliard 2020-02-18 23:07 ` Rob Herring 2020-02-12 16:35 ` [PATCH v3 2/2] tty: imx serial: Implement support for reversing TX and RX polarity George Hilliard 2020-02-12 20:47 ` Uwe Kleine-König
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).