if (err)
goto err_setup;
- err = mtk_pcie_setup_irq(pcie);
- if (err)
- goto err_setup;
-
return 0;
err_setup:
pcie->soc = device_get_match_data(dev);
platform_set_drvdata(pdev, pcie);
+ err = mtk_pcie_setup_irq(pcie);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
+
err = mtk_pcie_setup(pcie);
if (err)
- return err;
+ goto err_tear_down_irq;
host->ops = &mtk_pcie_ops;
host->sysdata = pcie;
err = pci_host_probe(host);
- if (err) {
- mtk_pcie_irq_teardown(pcie);
- mtk_pcie_power_down(pcie);
- return err;
- }
+ if (err)
+ goto err_power_down_pcie;
return 0;
+
+err_power_down_pcie:
+ mtk_pcie_power_down(pcie);
+err_tear_down_irq:
+ mtk_pcie_irq_teardown(pcie);
+ return err;
}
static void mtk_pcie_remove(struct platform_device *pdev)
pci_remove_root_bus(host->bus);
pci_unlock_rescan_remove();
- mtk_pcie_irq_teardown(pcie);
mtk_pcie_power_down(pcie);
+ mtk_pcie_irq_teardown(pcie);
}
static void mtk_pcie_irq_save(struct mtk_gen3_pcie *pcie)