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-usb: use bulk reset_control API

Switch qcom-qmp-usb 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-31-dmitry.baryshkov@linaro.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Dmitry Baryshkov and committed by
Vinod Koul
e991c2ee ccac0847

+18 -31
+18 -31
drivers/phy/qualcomm/phy-qcom-qmp-usb.c
··· 1446 1446 void __iomem *dp_com; 1447 1447 1448 1448 struct clk_bulk_data *clks; 1449 - struct reset_control **resets; 1449 + struct reset_control_bulk_data *resets; 1450 1450 struct regulator_bulk_data *vregs; 1451 1451 1452 1452 struct qmp_phy **phys; ··· 2009 2009 const struct qmp_phy_cfg *cfg = qphy->cfg; 2010 2010 void __iomem *pcs = qphy->pcs; 2011 2011 void __iomem *dp_com = qmp->dp_com; 2012 - int ret, i; 2012 + int ret; 2013 2013 2014 2014 /* turn on regulator supplies */ 2015 2015 ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); ··· 2018 2018 return ret; 2019 2019 } 2020 2020 2021 - for (i = 0; i < cfg->num_resets; i++) { 2022 - ret = reset_control_assert(qmp->resets[i]); 2023 - if (ret) { 2024 - dev_err(qmp->dev, "%s reset assert failed\n", 2025 - cfg->reset_list[i]); 2026 - goto err_disable_regulators; 2027 - } 2021 + ret = reset_control_bulk_assert(cfg->num_resets, qmp->resets); 2022 + if (ret) { 2023 + dev_err(qmp->dev, "reset assert failed\n"); 2024 + goto err_disable_regulators; 2028 2025 } 2029 2026 2030 - for (i = cfg->num_resets - 1; i >= 0; i--) { 2031 - ret = reset_control_deassert(qmp->resets[i]); 2032 - if (ret) { 2033 - dev_err(qmp->dev, "%s reset deassert failed\n", 2034 - qphy->cfg->reset_list[i]); 2035 - goto err_assert_reset; 2036 - } 2027 + ret = reset_control_bulk_deassert(cfg->num_resets, qmp->resets); 2028 + if (ret) { 2029 + dev_err(qmp->dev, "reset deassert failed\n"); 2030 + goto err_disable_regulators; 2037 2031 } 2038 2032 2039 2033 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); ··· 2068 2074 return 0; 2069 2075 2070 2076 err_assert_reset: 2071 - while (++i < cfg->num_resets) 2072 - reset_control_assert(qmp->resets[i]); 2077 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 2073 2078 err_disable_regulators: 2074 2079 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); 2075 2080 ··· 2079 2086 { 2080 2087 struct qcom_qmp *qmp = qphy->qmp; 2081 2088 const struct qmp_phy_cfg *cfg = qphy->cfg; 2082 - int i = cfg->num_resets; 2083 2089 2084 - while (--i >= 0) 2085 - reset_control_assert(qmp->resets[i]); 2090 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 2086 2091 2087 2092 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); 2088 2093 ··· 2367 2376 { 2368 2377 struct qcom_qmp *qmp = dev_get_drvdata(dev); 2369 2378 int i; 2379 + int ret; 2370 2380 2371 2381 qmp->resets = devm_kcalloc(dev, cfg->num_resets, 2372 2382 sizeof(*qmp->resets), GFP_KERNEL); 2373 2383 if (!qmp->resets) 2374 2384 return -ENOMEM; 2375 2385 2376 - for (i = 0; i < cfg->num_resets; i++) { 2377 - struct reset_control *rst; 2378 - const char *name = cfg->reset_list[i]; 2386 + for (i = 0; i < cfg->num_resets; i++) 2387 + qmp->resets[i].id = cfg->reset_list[i]; 2379 2388 2380 - rst = devm_reset_control_get_exclusive(dev, name); 2381 - if (IS_ERR(rst)) { 2382 - dev_err(dev, "failed to get %s reset\n", name); 2383 - return PTR_ERR(rst); 2384 - } 2385 - qmp->resets[i] = rst; 2386 - } 2389 + ret = devm_reset_control_bulk_get_exclusive(dev, cfg->num_resets, qmp->resets); 2390 + if (ret) 2391 + return dev_err_probe(dev, ret, "failed to get resets\n"); 2387 2392 2388 2393 return 0; 2389 2394 }