Skip to content

Commit

Permalink
serial: abstraction for 8250 legacy ports
Browse files Browse the repository at this point in the history
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@linux.intel.com>
Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Alan Cox authored and Greg Kroah-Hartman committed Oct 22, 2010
1 parent 4e4e660 commit af7f374
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
17 changes: 17 additions & 0 deletions drivers/serial/8250.c
Original file line number Diff line number Diff line change
Expand Up @@ -2672,6 +2672,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;
Expand Down Expand Up @@ -2717,6 +2727,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);

}
}

Expand Down Expand Up @@ -3178,6 +3191,10 @@ int serial8250_register_port(struct uart_port *port)
if (port->pm)
uart->port.pm = port->pm;

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;
Expand Down
4 changes: 4 additions & 0 deletions include/linux/serial_8250.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,8 @@ extern void serial8250_do_set_termios(struct uart_port *port,
extern void serial8250_do_pm(struct uart_port *port, unsigned int state,
unsigned int oldstate);

extern void serial8250_set_isa_configurator(void (*v)
(int port, struct uart_port *up,
unsigned short *capabilities));

#endif

0 comments on commit af7f374

Please sign in to comment.