[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