static int exynos_ufs_parse_dt(struct device *dev, struct exynos_ufs *ufs)
 {
        struct device_node *np = dev->of_node;
-       struct exynos_ufs_drv_data *drv_data = &exynos_ufs_drvs;
        struct exynos_ufs_uic_attr *attr;
        int ret = 0;
 
-       while (drv_data->compatible) {
-               if (of_device_is_compatible(np, drv_data->compatible)) {
-                       ufs->drv_data = drv_data;
-                       break;
-               }
-               drv_data++;
-       }
+       ufs->drv_data = device_get_match_data(dev);
 
        if (ufs->drv_data && ufs->drv_data->uic_attr) {
                attr = ufs->drv_data->uic_attr;
 };
 
 static struct exynos_ufs_drv_data exynos_ufs_drvs = {
-       .compatible             = "samsung,exynos7-ufs",
        .uic_attr               = &exynos7_uic_attr,
        .quirks                 = UFSHCD_QUIRK_PRDT_BYTE_GRAN |
                                  UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR |
 
 };
 
 struct exynos_ufs_drv_data {
-       char *compatible;
        struct exynos_ufs_uic_attr *uic_attr;
        unsigned int quirks;
        unsigned int opts;
        struct ufs_pa_layer_attr dev_req_params;
        struct ufs_phy_time_cfg t_cfg;
        ktime_t entry_hibern8_t;
-       struct exynos_ufs_drv_data *drv_data;
+       const struct exynos_ufs_drv_data *drv_data;
 
        u32 opts;
 #define EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL                BIT(0)