> From: Zhe Wang <zhe.wang1@xxxxxxxxxx> > > Some UFS devices require that the VCC should drop below 0.1V after > turning off, otherwise device may not resume successfully. And > because the power-off rate is different on different SOC platforms. > Therefore, we hope that the delay can be modified by vendor to > adjust the most appropriate delay value. > > Signed-off-by: Zhe Wang <zhe.wang1@xxxxxxxxxx> > --- > V1 -> V2 > - move turnoff_delay_us to struct ufs_vreg instead > - replace usleep_range with ufshcd_delay_us > > drivers/ufs/core/ufshcd.c | 9 ++++++++- > include/ufs/ufs.h | 1 + > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > index 7256e6c43ca6..386ff6ed2f20 100644 > --- a/drivers/ufs/core/ufshcd.c > +++ b/drivers/ufs/core/ufshcd.c > @@ -89,6 +89,9 @@ > /* Polling time to wait for fDeviceInit */ > #define FDEVICEINIT_COMPL_TIMEOUT 1500 /* millisecs */ > > +/* Default value of turn off VCC rail: 5000us */ > +#define UFS_VCC_TURNOFF_DELAY_US 5000 > + > #define ufshcd_toggle_vreg(_dev, _vreg, _on) \ > ({ \ > int _ret; \ > @@ -7784,6 +7787,10 @@ static int ufs_get_device_desc(struct ufs_hba *hba) > > ufs_fixup_device_setup(hba); > > + if (hba->dev_quirks & UFS_DEVICE_QUIRK_DELAY_AFTER_LPM && > + !hba->vreg_info.vcc->turnoff_delay_us) > + hba->vreg_info.vcc->turnoff_delay_us = > UFS_VCC_TURNOFF_DELAY_US; > + You answered my question to your v1 - where otherwise you are setting this value: "We are still preparing and discussing our own UFS host driver code, which will be uploaded once we are done." Well until then - this isn't very useful. Thanks, Avri > ufshcd_wb_probe(hba, desc_buf); > > ufshcd_temp_notif_probe(hba, desc_buf); > @@ -8918,7 +8925,7 @@ static void ufshcd_vreg_set_lpm(struct ufs_hba *hba) > */ > if (vcc_off && hba->vreg_info.vcc && > hba->dev_quirks & UFS_DEVICE_QUIRK_DELAY_AFTER_LPM) > - usleep_range(5000, 5100); > + ufshcd_delay_us(hba->vreg_info.vcc->turnoff_delay_us, 100); > } > > #ifdef CONFIG_PM > diff --git a/include/ufs/ufs.h b/include/ufs/ufs.h > index 1bba3fead2ce..792335dfd70b 100644 > --- a/include/ufs/ufs.h > +++ b/include/ufs/ufs.h > @@ -569,6 +569,7 @@ struct ufs_vreg { > bool always_on; > bool enabled; > int max_uA; > + u32 turnoff_delay_us; > }; > > struct ufs_vreg_info { > -- > 2.17.1