scsi: ufs: ufs-exynos: Add pre/post_hce_enable drv callbacks
authorChanho Park <chanho61.park@samsung.com>
Mon, 18 Oct 2021 12:42:11 +0000 (21:42 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 28 Oct 2021 03:10:11 +0000 (23:10 -0400)
Add driver-specific pre/post_hce_enable callbacks to execute extra
initializations before and after hce_enable_notify callback.

Link: https://lore.kernel.org/r/20211018124216.153072-11-chanho61.park@samsung.com
Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Kiwoong Kim <kwmad.kim@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Chanho Park <chanho61.park@samsung.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufs-exynos.c
drivers/scsi/ufs/ufs-exynos.h

index 91988ff24fb231b29038cf790c405245862165e6..f7d14cf075c766f8c7e000a8222ecde30d161d9c 100644 (file)
@@ -1136,6 +1136,12 @@ static int exynos_ufs_hce_enable_notify(struct ufs_hba *hba,
 
        switch (status) {
        case PRE_CHANGE:
+               if (ufs->drv_data->pre_hce_enable) {
+                       ret = ufs->drv_data->pre_hce_enable(ufs);
+                       if (ret)
+                               return ret;
+               }
+
                ret = exynos_ufs_host_reset(hba);
                if (ret)
                        return ret;
@@ -1145,6 +1151,10 @@ static int exynos_ufs_hce_enable_notify(struct ufs_hba *hba,
                exynos_ufs_calc_pwm_clk_div(ufs);
                if (!(ufs->opts & EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL))
                        exynos_ufs_enable_auto_ctrl_hcc(ufs);
+
+               if (ufs->drv_data->post_hce_enable)
+                       ret = ufs->drv_data->post_hce_enable(ufs);
+
                break;
        }
 
index 89955ae226dca470f545053427f16aa02f32f3f5..02308faea422826af9e98ffce03e3225191740c3 100644 (file)
@@ -154,6 +154,8 @@ struct exynos_ufs_drv_data {
                                struct ufs_pa_layer_attr *pwr);
        int (*post_pwr_change)(struct exynos_ufs *ufs,
                                struct ufs_pa_layer_attr *pwr);
+       int (*pre_hce_enable)(struct exynos_ufs *ufs);
+       int (*post_hce_enable)(struct exynos_ufs *ufs);
 };
 
 struct ufs_phy_time_cfg {