The current 8250_dw driver only supports MEM iotype. It is desired to have a platform device-based 8250 UART driver for ACPI FW with IO port iotype, so update the driver to support this. Note: a solution needs to be found for autconfig using MEM accessors only. Signed-off-by: John Garry <john.garry@xxxxxxxxxx> --- drivers/tty/serial/8250/8250_dw.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index cd1b94a..28fbc8f 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -405,7 +405,7 @@ static void dw8250_setup_port(struct uart_port *p) static int dw8250_probe(struct platform_device *pdev) { struct uart_8250_port uart = {}; - struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); + struct resource *regs; int irq = platform_get_irq(pdev, 0); struct uart_port *p = &uart.port; struct device *dev = &pdev->dev; @@ -413,6 +413,9 @@ static int dw8250_probe(struct platform_device *pdev) int err; u32 val; + regs = platform_get_resource(pdev, IORESOURCE_MEM, 0) ?: + platform_get_resource(pdev, IORESOURCE_IO, 0); + if (!regs) { dev_err(dev, "no registers defined\n"); return -EINVAL; @@ -425,22 +428,28 @@ static int dw8250_probe(struct platform_device *pdev) } spin_lock_init(&p->lock); - p->mapbase = regs->start; p->irq = irq; p->handle_irq = dw8250_handle_irq; p->pm = dw8250_do_pm; p->type = PORT_8250; p->flags = UPF_SHARE_IRQ | UPF_FIXED_PORT; p->dev = dev; - p->iotype = UPIO_MEM; - p->serial_in = dw8250_serial_in; - p->serial_out = dw8250_serial_out; p->set_ldisc = dw8250_set_ldisc; p->set_termios = dw8250_set_termios; - p->membase = devm_ioremap(dev, regs->start, resource_size(regs)); - if (!p->membase) - return -ENOMEM; + if ((regs->flags & IORESOURCE_TYPE_BITS) == IORESOURCE_MEM) { + p->mapbase = regs->start; + p->membase = devm_ioremap(dev, regs->start, + resource_size(regs)); + if (!p->membase) + return -ENOMEM; + p->iotype = UPIO_MEM; + p->serial_in = dw8250_serial_in; + p->serial_out = dw8250_serial_out; + } else { + p->iobase = regs->start; + p->iotype = UPIO_PORT; + } data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) -- 1.9.1 -- 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