Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c4239e5 authored by Stanley Chu's avatar Stanley Chu
Browse files

UPSTREAM: scsi: ufs: ufs-mediatek: support linkoff state during suspend

If system suspend or runtime suspend mode is configured as linkoff state,
phy can be powered off and reference clock can be gated in MediaTek
Chipsets.

At the same time, remove redundant reference clock control in suspend and
resume callbacks because such control can be well-handled in setup_clocks
callback.

Bug: 151050916
(cherry picked from commit 2a06ff207445ddb7aa643751f85c54e7e3895fb4)
Link: https://lore.kernel.org/r/20200129105251.12466-3-stanley.chu@mediatek.com


Reviewed-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
Signed-off-by: default avatarStanley Chu <stanley.chu@mediatek.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Change-Id: Ie20657f1cd249ff6356d4a51f0d4dc6af1c2dd00
parent 2b1980ee
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,

	switch (status) {
	case PRE_CHANGE:
		if (!on) {
		if (!on && !ufshcd_is_link_active(hba)) {
			ufs_mtk_setup_ref_clk(hba, on);
			ret = phy_power_off(host->mphy);
		}
@@ -437,10 +437,11 @@ static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
		err = ufs_mtk_link_set_lpm(hba);
		if (err)
			return -EAGAIN;
		phy_power_off(host->mphy);
		ufs_mtk_setup_ref_clk(hba, false);
	}

	if (!ufshcd_is_link_active(hba))
		phy_power_off(host->mphy);

	return 0;
}

@@ -449,9 +450,10 @@ static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
	int err;

	if (ufshcd_is_link_hibern8(hba)) {
		ufs_mtk_setup_ref_clk(hba, true);
	if (!ufshcd_is_link_active(hba))
		phy_power_on(host->mphy);

	if (ufshcd_is_link_hibern8(hba)) {
		err = ufs_mtk_link_set_hpm(hba);
		if (err)
			return err;