On Mon, 18 Oct 2010, dirk.brandewie@xxxxxxxxx wrote: > From: Alan Cox <alan@xxxxxxxxxxxxxxx> > > Not every platform that has generic legacy 8250 ports manages to have them > clocked the right way or without errata. Provide a generic interface to > allow platforms to override the default behaviour in a manner that dumps > the complexity in *their* code not the 8250 driver. > > Signed-off-by: Alan Cox <alan@xxxxxxxxxxxxxxx> > Signed-off-by: Dirk Brandewie <dirk.brandewie@xxxxxxxxx> Acked-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > --- > drivers/serial/8250.c | 17 +++++++++++++++++ > include/linux/serial_8250.h | 4 ++++ > 2 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c > index 24110f6..feb595d 100644 > --- a/drivers/serial/8250.c > +++ b/drivers/serial/8250.c > @@ -2674,6 +2674,16 @@ static struct uart_ops serial8250_pops = { > > static struct uart_8250_port serial8250_ports[UART_NR]; > > +static void (*serial8250_isa_config)(int port, struct uart_port *up, > + unsigned short *capabilities); > + > +void serial8250_set_isa_configurator( > + void (*v)(int port, struct uart_port *up, unsigned short *capabilities)) > +{ > + serial8250_isa_config = v; > +} > +EXPORT_SYMBOL(serial8250_set_isa_configurator); > + > static void __init serial8250_isa_init_ports(void) > { > struct uart_8250_port *up; > @@ -2719,6 +2729,9 @@ static void __init serial8250_isa_init_ports(void) > up->port.regshift = old_serial_port[i].iomem_reg_shift; > set_io_from_upio(&up->port); > up->port.irqflags |= irqflag; > + if (serial8250_isa_config != NULL) > + serial8250_isa_config(i, &up->port, &up->capabilities); > + > } > } > > @@ -3177,6 +3190,10 @@ int serial8250_register_port(struct uart_port *port) > if (port->set_termios) > uart->port.set_termios = port->set_termios; > > + if (serial8250_isa_config != NULL) > + serial8250_isa_config(0, &uart->port, > + &uart->capabilities); > + > ret = uart_add_one_port(&serial8250_reg, &uart->port); > if (ret == 0) > ret = uart->port.line; > diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h > index 7638dea..1214c4d 100644 > --- a/include/linux/serial_8250.h > +++ b/include/linux/serial_8250.h > @@ -77,4 +77,8 @@ extern int setup_early_serial8250_console(char *cmdline); > extern void serial8250_do_set_termios(struct uart_port *port, > struct ktermios *termios, struct ktermios *old); > > +extern void serial8250_set_isa_configurator(void (*v) > + (int port, struct uart_port *up, > + unsigned short *capabilities)); > + > #endif > -- > 1.7.2.3 > > _______________________________________________ > sodaville mailing list > sodaville@xxxxxxxxxxxxx > https://www.linutronix.de/mailman/listinfo/sodaville > -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html