From cf6bed3a0370ce8c7bae86677cde8dcd1e7de2da Mon Sep 17 00:00:00 2001 From: Shawn Lin Date: Wed, 9 Mar 2022 17:48:27 +0800 Subject: [PATCH] PCI: rockchip: dw: Simplify clock handling Use new API to manage them. Signed-off-by: Shawn Lin Change-Id: Id8536ddda7fe14ede9d6df2435c34243913e39a1 --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 49 ++++--------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 8b1575d9187e..5401cbcf470e 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -1129,49 +1129,18 @@ static int rk_pcie_add_ep(struct rk_pcie *rk_pcie) return 0; } -static void rk_pcie_clk_deinit(struct rk_pcie *rk_pcie) -{ - clk_bulk_disable(rk_pcie->clk_cnt, rk_pcie->clks); - clk_bulk_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); -} - static int rk_pcie_clk_init(struct rk_pcie *rk_pcie) { struct device *dev = rk_pcie->pci->dev; - struct property *prop; - const char *name; - int i = 0, ret, count; + int ret; - count = of_property_count_strings(dev->of_node, "clock-names"); - if (count < 1) + rk_pcie->clk_cnt = devm_clk_bulk_get_all(dev, &rk_pcie->clks); + if (rk_pcie->clk_cnt < 1) return -ENODEV; - rk_pcie->clks = devm_kcalloc(dev, count, - sizeof(struct clk_bulk_data), - GFP_KERNEL); - if (!rk_pcie->clks) - return -ENOMEM; - - rk_pcie->clk_cnt = count; - - of_property_for_each_string(dev->of_node, "clock-names", prop, name) { - rk_pcie->clks[i].id = name; - if (!rk_pcie->clks[i].id) - return -ENOMEM; - i++; - } - - ret = devm_clk_bulk_get(dev, count, rk_pcie->clks); - if (ret) - return ret; - - ret = clk_bulk_prepare(count, rk_pcie->clks); - if (ret) - return ret; - - ret = clk_bulk_enable(count, rk_pcie->clks); + ret = clk_bulk_prepare_enable(rk_pcie->clk_cnt, rk_pcie->clks); if (ret) { - clk_bulk_unprepare(count, rk_pcie->clks); + dev_err(dev, "failed to prepare enable pcie bulk clks: %d\n", ret); return ret; } @@ -1902,7 +1871,7 @@ disable_phy: phy_power_off(rk_pcie->phy); phy_exit(rk_pcie->phy); deinit_clk: - rk_pcie_clk_deinit(rk_pcie); + clk_bulk_disable_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); disable_vpcie3v3: rk_pcie_disable_power(rk_pcie); release_driver: @@ -2053,7 +2022,7 @@ no_l2: phy_power_off(rk_pcie->phy); phy_exit(rk_pcie->phy); - clk_bulk_disable(rk_pcie->clk_cnt, rk_pcie->clks); + clk_bulk_disable_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); rk_pcie->in_suspend = true; @@ -2077,9 +2046,9 @@ static int __maybe_unused rockchip_dw_pcie_resume(struct device *dev) if (ret) return ret; - ret = clk_bulk_enable(rk_pcie->clk_cnt, rk_pcie->clks); + ret = clk_bulk_prepare_enable(rk_pcie->clk_cnt, rk_pcie->clks); if (ret) { - clk_bulk_unprepare(rk_pcie->clk_cnt, rk_pcie->clks); + dev_err(dev, "failed to prepare enable pcie bulk clks: %d\n", ret); return ret; }