|
|
@@ -58,7 +58,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
|
|
|
struct resource resource;
|
|
|
struct device_node *np = ofdev->dev.of_node;
|
|
|
u32 clk, spd, prop;
|
|
|
- int ret;
|
|
|
+ int ret, irq;
|
|
|
|
|
|
memset(port, 0, sizeof *port);
|
|
|
|
|
|
@@ -143,21 +143,27 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
|
|
|
if (ret >= 0)
|
|
|
port->line = ret;
|
|
|
|
|
|
- port->irq = irq_of_parse_and_map(np, 0);
|
|
|
- if (!port->irq) {
|
|
|
- ret = -EPROBE_DEFER;
|
|
|
- goto err_unprepare;
|
|
|
+ irq = of_irq_get(np, 0);
|
|
|
+ if (irq < 0) {
|
|
|
+ if (irq == -EPROBE_DEFER) {
|
|
|
+ ret = -EPROBE_DEFER;
|
|
|
+ goto err_unprepare;
|
|
|
+ }
|
|
|
+ /* IRQ support not mandatory */
|
|
|
+ irq = 0;
|
|
|
}
|
|
|
|
|
|
+ port->irq = irq;
|
|
|
+
|
|
|
info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);
|
|
|
if (IS_ERR(info->rst)) {
|
|
|
ret = PTR_ERR(info->rst);
|
|
|
- goto err_dispose;
|
|
|
+ goto err_unprepare;
|
|
|
}
|
|
|
|
|
|
ret = reset_control_deassert(info->rst);
|
|
|
if (ret)
|
|
|
- goto err_dispose;
|
|
|
+ goto err_unprepare;
|
|
|
|
|
|
port->type = type;
|
|
|
port->uartclk = clk;
|
|
|
@@ -184,8 +190,6 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
|
|
|
port->handle_irq = fsl8250_handle_irq;
|
|
|
|
|
|
return 0;
|
|
|
-err_dispose:
|
|
|
- irq_dispose_mapping(port->irq);
|
|
|
err_unprepare:
|
|
|
clk_disable_unprepare(info->clk);
|
|
|
err_pmruntime:
|