diff options
Diffstat (limited to 'drivers/tty/serial/bcm63xx_uart.c')
| -rw-r--r-- | drivers/tty/serial/bcm63xx_uart.c | 27 | 
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c index 649d5129c4b..231519022b7 100644 --- a/drivers/tty/serial/bcm63xx_uart.c +++ b/drivers/tty/serial/bcm63xx_uart.c @@ -29,10 +29,9 @@  #include <linux/sysrq.h>  #include <linux/serial.h>  #include <linux/serial_core.h> - -#include <bcm63xx_irq.h> -#include <bcm63xx_regs.h> -#include <bcm63xx_io.h> +#include <linux/serial_bcm63xx.h> +#include <linux/io.h> +#include <linux/of.h>  #define BCM63XX_NR_UARTS	2 @@ -81,13 +80,13 @@ static struct uart_port ports[BCM63XX_NR_UARTS];  static inline unsigned int bcm_uart_readl(struct uart_port *port,  					 unsigned int offset)  { -	return bcm_readl(port->membase + offset); +	return __raw_readl(port->membase + offset);  }  static inline void bcm_uart_writel(struct uart_port *port,  				  unsigned int value, unsigned int offset)  { -	bcm_writel(value, port->membase + offset); +	__raw_writel(value, port->membase + offset);  }  /* @@ -568,7 +567,7 @@ static void bcm_uart_set_termios(struct uart_port *port,  		port->read_status_mask |= UART_FIFO_FRAMEERR_MASK;  		port->read_status_mask |= UART_FIFO_PARERR_MASK;  	} -	if (new->c_iflag & (BRKINT)) +	if (new->c_iflag & (IGNBRK | BRKINT))  		port->read_status_mask |= UART_FIFO_BRKDET_MASK;  	port->ignore_status_mask = 0; @@ -591,7 +590,7 @@ static int bcm_uart_request_port(struct uart_port *port)  {  	unsigned int size; -	size = RSET_UART_SIZE; +	size = UART_REG_SIZE;  	if (!request_mem_region(port->mapbase, size, "bcm63xx")) {  		dev_err(port->dev, "Memory region busy\n");  		return -EBUSY; @@ -611,7 +610,7 @@ static int bcm_uart_request_port(struct uart_port *port)   */  static void bcm_uart_release_port(struct uart_port *port)  { -	release_mem_region(port->mapbase, RSET_UART_SIZE); +	release_mem_region(port->mapbase, UART_REG_SIZE);  	iounmap(port->membase);  } @@ -808,6 +807,9 @@ static int bcm_uart_probe(struct platform_device *pdev)  	struct clk *clk;  	int ret; +	if (pdev->dev.of_node) +		pdev->id = of_alias_get_id(pdev->dev.of_node, "uart"); +  	if (pdev->id < 0 || pdev->id >= BCM63XX_NR_UARTS)  		return -EINVAL; @@ -859,6 +861,12 @@ static int bcm_uart_remove(struct platform_device *pdev)  	return 0;  } +static const struct of_device_id bcm63xx_of_match[] = { +	{ .compatible = "brcm,bcm6345-uart" }, +	{ /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, bcm63xx_of_match); +  /*   * platform driver stuff   */ @@ -868,6 +876,7 @@ static struct platform_driver bcm_uart_platform_driver = {  	.driver	= {  		.owner = THIS_MODULE,  		.name  = "bcm63xx_uart", +		.of_match_table = bcm63xx_of_match,  	},  };  | 
