TTY: serial, handle platform_get_irq retval properly
platform_get_irq can fail, so we should handle negative value when returned. [v2] platform_get_irq can actually return zero on some platforms. So do not remove checks for irq == 0 there. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Russell King <linux@arm.linux.org.uk> Cc: "Uwe Kleine-König" <kernel@pengutronix.de> Cc: Russell King <linux@armlinux.org.uk> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Laxman Dewangan <ldewangan@nvidia.com> Cc: Stephen Warren <swarren@wwwdotorg.org> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Alexandre Courbot <gnurou@gmail.com> Cc: linux-serial@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-tegra@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
934014d522
Коммит
394a9e2ca2
|
@ -2553,11 +2553,17 @@ static int sbsa_uart_probe(struct platform_device *pdev)
|
|||
if (!uap)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "cannot obtain irq\n");
|
||||
return ret;
|
||||
}
|
||||
uap->port.irq = ret;
|
||||
|
||||
uap->reg_offset = vendor_sbsa.reg_offset;
|
||||
uap->vendor = &vendor_sbsa;
|
||||
uap->fifosize = 32;
|
||||
uap->port.iotype = vendor_sbsa.access_32b ? UPIO_MEM32 : UPIO_MEM;
|
||||
uap->port.irq = platform_get_irq(pdev, 0);
|
||||
uap->port.ops = &sbsa_uart_pops;
|
||||
uap->fixed_baud = baudrate;
|
||||
|
||||
|
|
|
@ -1830,7 +1830,13 @@ static int lpuart_probe(struct platform_device *pdev)
|
|||
sport->port.dev = &pdev->dev;
|
||||
sport->port.type = PORT_LPUART;
|
||||
sport->port.iotype = UPIO_MEM;
|
||||
sport->port.irq = platform_get_irq(pdev, 0);
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "cannot obtain irq\n");
|
||||
return ret;
|
||||
}
|
||||
sport->port.irq = ret;
|
||||
|
||||
if (sport->lpuart32)
|
||||
sport->port.ops = &lpuart32_pops;
|
||||
else
|
||||
|
|
|
@ -1720,7 +1720,7 @@ static int __init pmz_init_port(struct uart_pmac_port *uap)
|
|||
|
||||
r_ports = platform_get_resource(uap->pdev, IORESOURCE_MEM, 0);
|
||||
irq = platform_get_irq(uap->pdev, 0);
|
||||
if (!r_ports || !irq)
|
||||
if (!r_ports || irq <= 0)
|
||||
return -ENODEV;
|
||||
|
||||
uap->port.mapbase = r_ports->start;
|
||||
|
|
|
@ -1317,7 +1317,12 @@ static int tegra_uart_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
u->iotype = UPIO_MEM32;
|
||||
u->irq = platform_get_irq(pdev, 0);
|
||||
ret = platform_get_irq(pdev, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "Couldn't get IRQ\n");
|
||||
return ret;
|
||||
}
|
||||
u->irq = ret;
|
||||
u->regshift = 2;
|
||||
ret = uart_add_one_port(&tegra_uart_driver, u);
|
||||
if (ret < 0) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче