Re: [PATCH v2] serial: amba-pl011: add RS485 support

From: Lino Sanfilippo
Date: Fri Jun 25 2021 - 07:22:04 EST



Hi,

> On 25. 06. 21, 2:15, Lino Sanfilippo wrote:
> >>> +static int pl011_rs485_config(struct uart_port *port,
> >>> + struct serial_rs485 *rs485)
> >>> +{
> >>> + struct uart_amba_port *uap =
> >>> + container_of(port, struct uart_amba_port, port);
> >>> +
> >>> + /* pick sane settings if the user hasn't */
> >>> + if (!!(rs485->flags & SER_RS485_RTS_ON_SEND) ==
> >>
> >> Why the !! in an if statement?
> >>
> >>> + !!(rs485->flags & SER_RS485_RTS_AFTER_SEND)) {
> >>
> >> Same here, why?
> >>
> >
> > This was copied from serial8250_em485_config(). But I think we can simply use
> >
> > if (rs485->flags & SER_RS485_RTS_AFTER_SEND)
> > rs485->flags &= ~SER_RS485_RTS_ON_SEND;
> > else
> > rs485->flags |= SER_RS485_RTS_ON_SEND;
> >
> > instead. I will adjust the code accordingly.
>
> This is different. You want to set ON_SEND when none is set. And unset
> AFTER_SEND when both are set. In your code, when both are set, you leave
> AFTER_SEND.
>
> regards,
> --
> js
> suse labs
>

Thats right, the logic has slightly changed. I thought this does not matter as long as
we make sure that exactly one of both ON_SEND or AFTER_SEND is set. We can stick with the logic
in serial8250_em485_config() (i.e. always set ON_SEND and delete AFTER_SEND in case
of an invalid setting), but I think this will require more than the four lines that we
have now (especially if we want to avoid the !!).

Thanks,
Lino