hba->caps &= ~UFSHCD_CAP_WB_EN;
 }
 
-static void ufs_fixup_device_setup(struct ufs_hba *hba)
+static void ufshcd_fixup_dev_quirks(struct ufs_hba *hba)
 {
        struct ufs_dev_fix *f;
        struct ufs_dev_info *dev_info = &hba->dev_info;
        }
 }
 
+static void ufs_fixup_device_setup(struct ufs_hba *hba)
+{
+       /* fix by general quirk table */
+       ufshcd_fixup_dev_quirks(hba);
+
+       /* allow vendors to fix quirks */
+       ufshcd_vops_fixup_dev_quirks(hba);
+}
+
 static int ufs_get_device_desc(struct ufs_hba *hba)
 {
        int err;
 
 #include <scsi/scsi_eh.h>
 
 #include "ufs.h"
+#include "ufs_quirks.h"
 #include "ufshci.h"
 
 #define UFSHCD "ufshcd"
        void    (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme,
                                        enum ufs_notify_change_status);
        int     (*apply_dev_quirks)(struct ufs_hba *hba);
+       void    (*fixup_dev_quirks)(struct ufs_hba *hba);
        int     (*suspend)(struct ufs_hba *, enum ufs_pm_op);
        int     (*resume)(struct ufs_hba *, enum ufs_pm_op);
        void    (*dbg_register_dump)(struct ufs_hba *hba);
 
 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba);
 void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit);
-
 #define SD_ASCII_STD true
 #define SD_RAW false
 int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
        return 0;
 }
 
+static inline void ufshcd_vops_fixup_dev_quirks(struct ufs_hba *hba)
+{
+       if (hba->vops && hba->vops->fixup_dev_quirks)
+               hba->vops->fixup_dev_quirks(hba);
+}
+
 static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op)
 {
        if (hba->vops && hba->vops->suspend)