Re: [sodaville] [PATCH] serial: abstraction for 8250 legacy ports

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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


[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux