
Add a new get_max_pwr_mode callback to permit the UFS controller driver manipulate the max_pwr_mode struct right before setting the new pwr_mode to the UFS device.
It can be used to limit the HS Gear with errata and hardware limitations on some UFS controllers.
Signed-off-by: Neil Armstrong neil.armstrong@linaro.org --- drivers/ufs/ufs.c | 2 +- drivers/ufs/ufs.h | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/ufs/ufs.c b/drivers/ufs/ufs.c index de8ba011d57..1edd31677b2 100644 --- a/drivers/ufs/ufs.c +++ b/drivers/ufs/ufs.c @@ -1744,7 +1744,7 @@ static int ufshcd_get_max_pwr_mode(struct ufs_hba *hba) }
hba->max_pwr_info.is_valid = true; - return 0; + return ufshcd_ops_get_max_pwr_mode(hba, &hba->max_pwr_info); }
static int ufshcd_change_power_mode(struct ufs_hba *hba, diff --git a/drivers/ufs/ufs.h b/drivers/ufs/ufs.h index faaebf1f9f7..fb47d0cd3a4 100644 --- a/drivers/ufs/ufs.h +++ b/drivers/ufs/ufs.h @@ -696,6 +696,8 @@ struct ufs_dev_cmd {
struct ufs_hba_ops { int (*init)(struct ufs_hba *hba); + int (*get_max_pwr_mode)(struct ufs_hba *hba, + struct ufs_pwr_mode_info *max_pwr_info); int (*hce_enable_notify)(struct ufs_hba *hba, enum ufs_notify_change_status); int (*link_startup_notify)(struct ufs_hba *hba, @@ -861,6 +863,15 @@ static inline int ufshcd_ops_init(struct ufs_hba *hba) return 0; }
+static inline int ufshcd_ops_get_max_pwr_mode(struct ufs_hba *hba, + struct ufs_pwr_mode_info *max_pwr_info) +{ + if (hba->ops && hba->ops->get_max_pwr_mode) + return hba->ops->get_max_pwr_mode(hba, max_pwr_info); + + return 0; +} + static inline int ufshcd_ops_hce_enable_notify(struct ufs_hba *hba, bool status) {