Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

phy: qcom-qmp-pcie: use bulk reset_control API

Switch qcom-qmp-pcie driver to use reset_control_bulk_assert / _deassert
functions rather than hardcoding the loops in the driver itself.

Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: Bjorn Andersson <bjorn.andersson@linaro.org> # UFS, PCIe and USB on SC8180X
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20220607213203.2819885-29-dmitry.baryshkov@linaro.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Dmitry Baryshkov and committed by
Vinod Koul
189ac6b8 1de24861

+18 -31
+18 -31
drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
··· 1334 1334 struct device *dev; 1335 1335 1336 1336 struct clk_bulk_data *clks; 1337 - struct reset_control **resets; 1337 + struct reset_control_bulk_data *resets; 1338 1338 struct regulator_bulk_data *vregs; 1339 1339 1340 1340 struct qmp_phy **phys; ··· 1789 1789 struct qcom_qmp *qmp = qphy->qmp; 1790 1790 const struct qmp_phy_cfg *cfg = qphy->cfg; 1791 1791 void __iomem *pcs = qphy->pcs; 1792 - int ret, i; 1792 + int ret; 1793 1793 1794 1794 /* turn on regulator supplies */ 1795 1795 ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); ··· 1798 1798 return ret; 1799 1799 } 1800 1800 1801 - for (i = 0; i < cfg->num_resets; i++) { 1802 - ret = reset_control_assert(qmp->resets[i]); 1803 - if (ret) { 1804 - dev_err(qmp->dev, "%s reset assert failed\n", 1805 - cfg->reset_list[i]); 1806 - goto err_disable_regulators; 1807 - } 1801 + ret = reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1802 + if (ret) { 1803 + dev_err(qmp->dev, "reset assert failed\n"); 1804 + goto err_disable_regulators; 1808 1805 } 1809 1806 1810 - for (i = cfg->num_resets - 1; i >= 0; i--) { 1811 - ret = reset_control_deassert(qmp->resets[i]); 1812 - if (ret) { 1813 - dev_err(qmp->dev, "%s reset deassert failed\n", 1814 - qphy->cfg->reset_list[i]); 1815 - goto err_assert_reset; 1816 - } 1807 + ret = reset_control_bulk_deassert(cfg->num_resets, qmp->resets); 1808 + if (ret) { 1809 + dev_err(qmp->dev, "reset deassert failed\n"); 1810 + goto err_disable_regulators; 1817 1811 } 1818 1812 1819 1813 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); ··· 1825 1831 return 0; 1826 1832 1827 1833 err_assert_reset: 1828 - while (++i < cfg->num_resets) 1829 - reset_control_assert(qmp->resets[i]); 1834 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1830 1835 err_disable_regulators: 1831 1836 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); 1832 1837 ··· 1836 1843 { 1837 1844 struct qcom_qmp *qmp = qphy->qmp; 1838 1845 const struct qmp_phy_cfg *cfg = qphy->cfg; 1839 - int i = cfg->num_resets; 1840 1846 1841 - while (--i >= 0) 1842 - reset_control_assert(qmp->resets[i]); 1847 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1843 1848 1844 1849 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); 1845 1850 ··· 2047 2056 { 2048 2057 struct qcom_qmp *qmp = dev_get_drvdata(dev); 2049 2058 int i; 2059 + int ret; 2050 2060 2051 2061 qmp->resets = devm_kcalloc(dev, cfg->num_resets, 2052 2062 sizeof(*qmp->resets), GFP_KERNEL); 2053 2063 if (!qmp->resets) 2054 2064 return -ENOMEM; 2055 2065 2056 - for (i = 0; i < cfg->num_resets; i++) { 2057 - struct reset_control *rst; 2058 - const char *name = cfg->reset_list[i]; 2066 + for (i = 0; i < cfg->num_resets; i++) 2067 + qmp->resets[i].id = cfg->reset_list[i]; 2059 2068 2060 - rst = devm_reset_control_get_exclusive(dev, name); 2061 - if (IS_ERR(rst)) { 2062 - dev_err(dev, "failed to get %s reset\n", name); 2063 - return PTR_ERR(rst); 2064 - } 2065 - qmp->resets[i] = rst; 2066 - } 2069 + ret = devm_reset_control_bulk_get_exclusive(dev, cfg->num_resets, qmp->resets); 2070 + if (ret) 2071 + return dev_err_probe(dev, ret, "failed to get resets\n"); 2067 2072 2068 2073 return 0; 2069 2074 }