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

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

authored by

Dmitry Baryshkov and committed by
Vinod Koul
1de24861 65753f38

+18 -31
+18 -31
drivers/phy/qualcomm/phy-qcom-qmp-combo.c
··· 741 741 void __iomem *dp_com; 742 742 743 743 struct clk_bulk_data *clks; 744 - struct reset_control **resets; 744 + struct reset_control_bulk_data *resets; 745 745 struct regulator_bulk_data *vregs; 746 746 747 747 struct qmp_phy **phys; ··· 1586 1586 const struct qmp_phy_cfg *cfg = qphy->cfg; 1587 1587 void __iomem *pcs = qphy->pcs; 1588 1588 void __iomem *dp_com = qmp->dp_com; 1589 - int ret, i; 1589 + int ret; 1590 1590 1591 1591 mutex_lock(&qmp->phy_mutex); 1592 1592 if (qmp->init_count++) { ··· 1601 1601 goto err_unlock; 1602 1602 } 1603 1603 1604 - for (i = 0; i < cfg->num_resets; i++) { 1605 - ret = reset_control_assert(qmp->resets[i]); 1606 - if (ret) { 1607 - dev_err(qmp->dev, "%s reset assert failed\n", 1608 - cfg->reset_list[i]); 1609 - goto err_disable_regulators; 1610 - } 1604 + ret = reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1605 + if (ret) { 1606 + dev_err(qmp->dev, "reset assert failed\n"); 1607 + goto err_disable_regulators; 1611 1608 } 1612 1609 1613 - for (i = cfg->num_resets - 1; i >= 0; i--) { 1614 - ret = reset_control_deassert(qmp->resets[i]); 1615 - if (ret) { 1616 - dev_err(qmp->dev, "%s reset deassert failed\n", 1617 - qphy->cfg->reset_list[i]); 1618 - goto err_assert_reset; 1619 - } 1610 + ret = reset_control_bulk_deassert(cfg->num_resets, qmp->resets); 1611 + if (ret) { 1612 + dev_err(qmp->dev, "reset deassert failed\n"); 1613 + goto err_disable_regulators; 1620 1614 } 1621 1615 1622 1616 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); ··· 1653 1659 return 0; 1654 1660 1655 1661 err_assert_reset: 1656 - while (++i < cfg->num_resets) 1657 - reset_control_assert(qmp->resets[i]); 1662 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1658 1663 err_disable_regulators: 1659 1664 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); 1660 1665 err_unlock: ··· 1666 1673 { 1667 1674 struct qcom_qmp *qmp = qphy->qmp; 1668 1675 const struct qmp_phy_cfg *cfg = qphy->cfg; 1669 - int i = cfg->num_resets; 1670 1676 1671 1677 mutex_lock(&qmp->phy_mutex); 1672 1678 if (--qmp->init_count) { ··· 1675 1683 1676 1684 reset_control_assert(qmp->ufs_reset); 1677 1685 1678 - while (--i >= 0) 1679 - reset_control_assert(qmp->resets[i]); 1686 + reset_control_bulk_assert(cfg->num_resets, qmp->resets); 1680 1687 1681 1688 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); 1682 1689 ··· 1985 1994 { 1986 1995 struct qcom_qmp *qmp = dev_get_drvdata(dev); 1987 1996 int i; 1997 + int ret; 1988 1998 1989 1999 qmp->resets = devm_kcalloc(dev, cfg->num_resets, 1990 2000 sizeof(*qmp->resets), GFP_KERNEL); 1991 2001 if (!qmp->resets) 1992 2002 return -ENOMEM; 1993 2003 1994 - for (i = 0; i < cfg->num_resets; i++) { 1995 - struct reset_control *rst; 1996 - const char *name = cfg->reset_list[i]; 2004 + for (i = 0; i < cfg->num_resets; i++) 2005 + qmp->resets[i].id = cfg->reset_list[i]; 1997 2006 1998 - rst = devm_reset_control_get_exclusive(dev, name); 1999 - if (IS_ERR(rst)) { 2000 - dev_err(dev, "failed to get %s reset\n", name); 2001 - return PTR_ERR(rst); 2002 - } 2003 - qmp->resets[i] = rst; 2004 - } 2007 + ret = devm_reset_control_bulk_get_exclusive(dev, cfg->num_resets, qmp->resets); 2008 + if (ret) 2009 + return dev_err_probe(dev, ret, "failed to get resets\n"); 2005 2010 2006 2011 return 0; 2007 2012 }