Merge branch 'pci/controller/exynos'
- Use devm_clk_bulk_get_all_enable() to simplify clock setup (Shradha Todi) * pci/controller/exynos: PCI: exynos: Adapt to use bulk clock APIs
This commit is contained in:
commit
da3552d225
@ -54,43 +54,11 @@
|
|||||||
struct exynos_pcie {
|
struct exynos_pcie {
|
||||||
struct dw_pcie pci;
|
struct dw_pcie pci;
|
||||||
void __iomem *elbi_base;
|
void __iomem *elbi_base;
|
||||||
struct clk *clk;
|
struct clk_bulk_data *clks;
|
||||||
struct clk *bus_clk;
|
|
||||||
struct phy *phy;
|
struct phy *phy;
|
||||||
struct regulator_bulk_data supplies[2];
|
struct regulator_bulk_data supplies[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
static int exynos_pcie_init_clk_resources(struct exynos_pcie *ep)
|
|
||||||
{
|
|
||||||
struct device *dev = ep->pci.dev;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = clk_prepare_enable(ep->clk);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "cannot enable pcie rc clock");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = clk_prepare_enable(ep->bus_clk);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "cannot enable pcie bus clock");
|
|
||||||
goto err_bus_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_bus_clk:
|
|
||||||
clk_disable_unprepare(ep->clk);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void exynos_pcie_deinit_clk_resources(struct exynos_pcie *ep)
|
|
||||||
{
|
|
||||||
clk_disable_unprepare(ep->bus_clk);
|
|
||||||
clk_disable_unprepare(ep->clk);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void exynos_pcie_writel(void __iomem *base, u32 val, u32 reg)
|
static void exynos_pcie_writel(void __iomem *base, u32 val, u32 reg)
|
||||||
{
|
{
|
||||||
writel(val, base + reg);
|
writel(val, base + reg);
|
||||||
@ -332,17 +300,9 @@ static int exynos_pcie_probe(struct platform_device *pdev)
|
|||||||
if (IS_ERR(ep->elbi_base))
|
if (IS_ERR(ep->elbi_base))
|
||||||
return PTR_ERR(ep->elbi_base);
|
return PTR_ERR(ep->elbi_base);
|
||||||
|
|
||||||
ep->clk = devm_clk_get(dev, "pcie");
|
ret = devm_clk_bulk_get_all_enable(dev, &ep->clks);
|
||||||
if (IS_ERR(ep->clk)) {
|
if (ret < 0)
|
||||||
dev_err(dev, "Failed to get pcie rc clock\n");
|
return ret;
|
||||||
return PTR_ERR(ep->clk);
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->bus_clk = devm_clk_get(dev, "pcie_bus");
|
|
||||||
if (IS_ERR(ep->bus_clk)) {
|
|
||||||
dev_err(dev, "Failed to get pcie bus clock\n");
|
|
||||||
return PTR_ERR(ep->bus_clk);
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->supplies[0].supply = "vdd18";
|
ep->supplies[0].supply = "vdd18";
|
||||||
ep->supplies[1].supply = "vdd10";
|
ep->supplies[1].supply = "vdd10";
|
||||||
@ -351,10 +311,6 @@ static int exynos_pcie_probe(struct platform_device *pdev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = exynos_pcie_init_clk_resources(ep);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
ret = regulator_bulk_enable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
ret = regulator_bulk_enable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -369,7 +325,6 @@ static int exynos_pcie_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
fail_probe:
|
fail_probe:
|
||||||
phy_exit(ep->phy);
|
phy_exit(ep->phy);
|
||||||
exynos_pcie_deinit_clk_resources(ep);
|
|
||||||
regulator_bulk_disable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
regulator_bulk_disable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -383,7 +338,6 @@ static void exynos_pcie_remove(struct platform_device *pdev)
|
|||||||
exynos_pcie_assert_core_reset(ep);
|
exynos_pcie_assert_core_reset(ep);
|
||||||
phy_power_off(ep->phy);
|
phy_power_off(ep->phy);
|
||||||
phy_exit(ep->phy);
|
phy_exit(ep->phy);
|
||||||
exynos_pcie_deinit_clk_resources(ep);
|
|
||||||
regulator_bulk_disable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
regulator_bulk_disable(ARRAY_SIZE(ep->supplies), ep->supplies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user