lkml.org 
[lkml]   [2016]   [Oct]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v6] tty/serial: at91: fix hardware handshake on Atmel platforms
    2016-10-27 20:02 GMT+02:00 Uwe Kleine-König <u.kleine-koenig@pengutronix.de>:
    > Hello Richard,
    >
    > On Thu, Oct 27, 2016 at 06:04:06PM +0200, Richard Genoud wrote:
    >> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
    >> index fd8aa1f4ba78..168b10cad47b 100644
    >> --- a/drivers/tty/serial/atmel_serial.c
    >> +++ b/drivers/tty/serial/atmel_serial.c
    >> @@ -2132,11 +2132,29 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
    >> mode |= ATMEL_US_USMODE_RS485;
    >> } else if (termios->c_cflag & CRTSCTS) {
    >> /* RS232 with hardware handshake (RTS/CTS) */
    >> - if (atmel_use_dma_rx(port) && !atmel_use_fifo(port)) {
    >> - dev_info(port->dev, "not enabling hardware flow control because DMA is used");
    >> - termios->c_cflag &= ~CRTSCTS;
    >> - } else {
    >> + if (atmel_use_fifo(port) &&
    >> + !mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)) {
    >> + /*
    >> + * with ATMEL_US_USMODE_HWHS set, the controller will
    >> + * be able to drive the RTS pin high/low when the RX
    >> + * FIFO is above RXFTHRES/below RXFTHRES2.
    >> + * It will also disable the transmitter when the CTS
    >> + * pin is high.
    >> + * This mode is not activated if CTS pin is a GPIO
    >> + * because in this case, the transmitter is always
    >> + * disabled (there must be an internal pull-up
    >> + * responsible for this behaviour).
    >> + * If the RTS pin is a GPIO, the controller won't be
    >> + * able to drive it according to the FIFO thresholds,
    >> + * but it will be handled by the driver.
    >> + */
    >> mode |= ATMEL_US_USMODE_HWHS;
    >
    > You use
    >
    > !mctrl_gpio_to_gpiod(atmel_port->gpios, UART_GPIO_CTS)
    >
    > as indicator that the cts mode of the respective pin is used. Is this
    > reliable? (It's not if there are machines that don't use CTS, neither as
    > gpio nor using the hardware function.) Maybe this needs a dt property to
    > indicate that there is no (hw)handshaking available?
    I used that to filter-out the case where CTS is a GPIO.
    Now, for the machines that don't use CTS neither as GPIO nor using the
    hardware function, it's a whole different story, beyond the scope of this patch.
    And like you said, a DT property could be useful to handle this case.
    ( It's a little bit like if there was an RS232 cable with just TX/RX/GND, but
    this will be way harder to detect :) )
    Anyway, patches are welcome to handle that, but I don't think it belongs
    in this one.

    >> + } else {
    >> + ...
    >> }
    >
    > Best regards
    > Uwe
    >

    regards,
    Richard

    \
     
     \ /
      Last update: 2016-10-28 11:27    [W:5.869 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site