On Thu, Jun 22, 2023 at 03:40:19PM -0400, Adrien Thierry wrote: > The downstream driver [1] implements set_suspend(), which deals with > both runtime and system sleep/resume. The upstream driver already has > runtime PM ops, so add the system sleep PM ops as well, reusing the same > code as the runtime PM ops. > > [1] https://git.codelinaro.org/clo/la/kernel/msm-5.4/-/blob/LV.AU.1.2.1.r2-05300-gen3meta.0/drivers/usb/phy/phy-msm-snps-hs.c > > Signed-off-by: Adrien Thierry <athierry@xxxxxxxxxx> > --- > drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c b/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c > index ce1d2f8b568a..378a5029f61e 100644 > --- a/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c > +++ b/drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c > @@ -179,7 +179,7 @@ static inline void qcom_snps_hsphy_write_mask(void __iomem *base, u32 offset, > readl_relaxed(base + offset); > } > > -static int qcom_snps_hsphy_suspend(struct qcom_snps_hsphy *hsphy) > +static int qcom_snps_hsphy_do_suspend(struct qcom_snps_hsphy *hsphy) > { > dev_dbg(&hsphy->phy->dev, "Suspend QCOM SNPS PHY\n"); > > @@ -199,7 +199,7 @@ static int qcom_snps_hsphy_suspend(struct qcom_snps_hsphy *hsphy) > return 0; > } > > -static int qcom_snps_hsphy_resume(struct qcom_snps_hsphy *hsphy) > +static int qcom_snps_hsphy_do_resume(struct qcom_snps_hsphy *hsphy) > { > int ret; > > @@ -214,25 +214,25 @@ static int qcom_snps_hsphy_resume(struct qcom_snps_hsphy *hsphy) > return 0; > } > > -static int __maybe_unused qcom_snps_hsphy_runtime_suspend(struct device *dev) > +static int __maybe_unused qcom_snps_hsphy_suspend(struct device *dev) > { > struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev); > > if (!hsphy->phy_initialized) > return 0; > > - qcom_snps_hsphy_suspend(hsphy); > + qcom_snps_hsphy_do_suspend(hsphy); > return 0; > } > > -static int __maybe_unused qcom_snps_hsphy_runtime_resume(struct device *dev) > +static int __maybe_unused qcom_snps_hsphy_resume(struct device *dev) > { > struct qcom_snps_hsphy *hsphy = dev_get_drvdata(dev); > > if (!hsphy->phy_initialized) > return 0; > > - qcom_snps_hsphy_resume(hsphy); > + qcom_snps_hsphy_do_resume(hsphy); > return 0; > } > > @@ -518,8 +518,10 @@ static const struct of_device_id qcom_snps_hsphy_of_match_table[] = { > MODULE_DEVICE_TABLE(of, qcom_snps_hsphy_of_match_table); > > static const struct dev_pm_ops qcom_snps_hsphy_pm_ops = { > - SET_RUNTIME_PM_OPS(qcom_snps_hsphy_runtime_suspend, > - qcom_snps_hsphy_runtime_resume, NULL) > + SET_RUNTIME_PM_OPS(qcom_snps_hsphy_suspend, > + qcom_snps_hsphy_resume, NULL) > + SET_SYSTEM_SLEEP_PM_OPS(qcom_snps_hsphy_suspend, > + qcom_snps_hsphy_resume) Won't this cause issues if you system suspend the device while it's already runtime suspended? Regards, Bjorn > }; > > static void qcom_snps_hsphy_override_param_update_val( > -- > 2.40.1 >