Re: [PATCH v3 1/2] tty: serial: 8250: Add Mediatek UART driver

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

 




On 2014-08-12 at 15:31:51 +0200, Matthias Brugger <matthias.bgg@xxxxxxxxx> wrote:
> 2014-08-08 14:28 GMT+02:00 Tobias Klauser <tklauser@xxxxxxxxxx>:
> > On 2014-08-08 at 13:32:03 +0200, Matthias Brugger <matthias.bgg@xxxxxxxxx> wrote:
> >> This patch adds support for the UART block found on Mediatek SoCs.
> >> The device has a highspeed register which influences the calcualtion of the
> >> divisor. The chip lacks support for some baudrates. When requested, we set the
> >> divisor to the next smaller baudrate and adjust the c_cflag accordingly.
> >>
> >> Signed-off-by: Matthias Brugger <matthias.bgg@xxxxxxxxx>
> >> ---
> >>  drivers/tty/serial/8250/8250_mtk.c |  296 ++++++++++++++++++++++++++++++++++++
> >>  drivers/tty/serial/8250/Kconfig    |    7 +
> >>  drivers/tty/serial/8250/Makefile   |    1 +
> >>  3 files changed, 304 insertions(+)
> >>  create mode 100644 drivers/tty/serial/8250/8250_mtk.c
> >>
> >> diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c
> >> new file mode 100644
> >> index 0000000..d63080b
> >> --- /dev/null
> >> +++ b/drivers/tty/serial/8250/8250_mtk.c
> >> @@ -0,0 +1,296 @@
> >
> > [...]
> >
> >> +static int mtk8250_probe(struct platform_device *pdev)
> >> +{
> >> +     struct uart_8250_port uart = {};
> >> +     struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >> +     struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> >> +     struct mtk8250_data *data;
> >> +     int err;
> >> +
> >> +     if (!regs || !irq) {
> >> +             dev_err(&pdev->dev, "no registers/irq defined\n");
> >> +             return -EINVAL;
> >> +     }
> >> +
> >> +     spin_lock_init(&uart.port.lock);
> >> +     uart.port.mapbase = regs->start;
> >> +     uart.port.irq = irq->start;
> >> +     uart.port.pm = mtk8250_do_pm;
> >> +     uart.port.type = PORT_16550;
> >> +     uart.port.flags = UPF_BOOT_AUTOCONF | UPF_FIXED_PORT;
> >> +     uart.port.dev = &pdev->dev;
> >> +
> >> +     uart.port.membase = devm_ioremap(&pdev->dev, regs->start,
> >> +                                      resource_size(regs));
> >> +     if (!uart.port.membase)
> >> +             return -ENOMEM;
> >
> > You can use devm_ioremap_resource here and get rid of the check for
> > !regs above, since devm_ioremap_resource already does that.
> >
> >         regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >
> >         ...
> >
> >         uart.port.membase = devm_ioremap_resource(&pdev->dev, regs);
> >         if (IS_ERR(uart.port.membase))
> >                 return PTR_ERR(uart.port.membase);
> >
> 
> devm_ioremap_resource creates a busy resource region in the
> iomem_resource. This leads the UART to silently fail.
> I suppose that's why 8250_dw.c uses devm_ioremap instead of
> devm_ioremap_resource. The 8250_dw has the same issue.

Ah yes, of course. Sorry about that.

Thanks
Tobias
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux