[PATCH] libchip/ns16550: Allow user calculate baud divisor

Gedare Bloom gedare at rtems.org
Fri Jan 17 15:39:31 UTC 2020


On Thu, Jan 16, 2020 at 12:48 PM Christian Mauderer <list at c-mauderer.de> wrote:
>
>
>
> On 15/01/2020 12:50, G S Niteesh wrote:
> > This patch will allow the user to pass a function to calculate
> > the baud divisor.
> > This is will allow for more flexibility, since for some BSP's
> > like raspberrypi, the calculate of baud divisor is different
> > from what is in the current driver.
> > ---
> >  bsps/include/libchip/ns16550.h           | 11 ++++++++---
> >  bsps/shared/dev/serial/ns16550-context.c |  6 ++++--
> >  2 files changed, 12 insertions(+), 5 deletions(-)
> >
> > diff --git a/bsps/include/libchip/ns16550.h b/bsps/include/libchip/ns16550.h
> > index f053c8767f9..ab7992fd30b 100644
> > --- a/bsps/include/libchip/ns16550.h
> > +++ b/bsps/include/libchip/ns16550.h
> > @@ -1,6 +1,6 @@
> >  /**
> >   *  @file
> > - *
> > + *
>
> Please don't change lines that don't concern the target of your patch.
> If you want to fix the white space please do so in an extra patch.
>
> By the way: You can also send patch sets. Just pass all patches to "git
> send-email". Then git will number patches that belong together (like
> this and the AUX uart driver). That makes it easier to apply all in the
> right order.
>
> >   */
> >
> >  /*
> > @@ -60,7 +60,11 @@ typedef uint8_t (*ns16550_get_reg)(uintptr_t port, uint8_t reg);
> >
> >  typedef void (*ns16550_set_reg)(uintptr_t port, uint8_t reg, uint8_t value);
> >
> > -typedef struct {
> > +typedef struct ns16550_context ns16550_context;
> > +
> > +typedef uint32_t (*ns16550_calculate_baud_divisor)(ns16550_context *ctx, uint32_t baud);
> > +
> > +struct ns16550_context{
> >    rtems_termios_device_context base;
> >    ns16550_get_reg get_reg;
> >    ns16550_set_reg set_reg;
> > @@ -70,6 +74,7 @@ typedef struct {
> >    uint32_t initial_baud;
> >    bool has_fractional_divider_register;
> >    bool has_precision_clock_synthesizer;
> > +  ns16550_calculate_baud_divisor calculate_baud_divisor;
> >    uint8_t modem_control;
> >    uint8_t line_control;
> >    uint32_t baud_divisor;
> > @@ -78,7 +83,7 @@ typedef struct {
> >    size_t out_current;
> >    const char *out_buf;
> >    rtems_termios_tty *tty;
> > -} ns16550_context;
> > +};
> >
> >  extern const rtems_termios_device_handler ns16550_handler_interrupt;
> >  extern const rtems_termios_device_handler ns16550_handler_polled;
> > diff --git a/bsps/shared/dev/serial/ns16550-context.c b/bsps/shared/dev/serial/ns16550-context.c
> > index ce55b8309cc..70e73fc8c93 100644
> > --- a/bsps/shared/dev/serial/ns16550-context.c
> > +++ b/bsps/shared/dev/serial/ns16550-context.c
> > @@ -1,6 +1,6 @@
> >  /**
> >   *  @file
> > - *
> > + *
>
> Again: Please only change if it is necessary for your patch.
>
> >   *  This file contains the TTY driver for the National Semiconductor NS16550.
> >   *
> >   *  This part is widely cloned and second sourced.  It is found in a number
> > @@ -112,6 +112,8 @@ static uint32_t NS16550_GetBaudDivisor(ns16550_context *ctx, uint32_t baud)
> >        NS16550_FRACTIONAL_DIVIDER,
> >        fractionalDivider
> >      );
> > +  } else if (ctx->calculate_baud_divisor != NULL) {
> > +    baudDivisor = ctx->calculate_baud_divisor(ctx, baud);
> >    }
> >
> >    return baudDivisor;
> > @@ -165,7 +167,7 @@ bool ns16550_probe(rtems_termios_device_context *base)
> >
> >    ctx->modem_control = SP_MODEM_IRQ;
> >
> > -  pNS16550 = ctx->port;
> > +  pNS16550 = ctx->port;
>
> Again: Please only change if it is necessary for your patch.
>

It is however good to make style changes when you rework a file. Just
layer the patch on top of your functional changes.

> >    setReg   = ctx->set_reg;
> >    getReg   = ctx->get_reg;
> >
> >
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list