Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-block.git] / drivers / scsi / ufs / ufs-qcom.c
index b4d1b5c229873b7cce08811e49b6f75ef2a4f985..ee4b1da1e2238a959a3084228319bdc2f3299a77 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (c) 2013-2016, Linux Foundation. All rights reserved.
  */
 
+#include <linux/acpi.h>
 #include <linux/time.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
@@ -161,6 +162,9 @@ static int ufs_qcom_init_lane_clks(struct ufs_qcom_host *host)
        int err = 0;
        struct device *dev = host->hba->dev;
 
+       if (has_acpi_companion(dev))
+               return 0;
+
        err = ufs_qcom_host_clk_get(dev, "rx_lane0_sync_clk",
                                        &host->rx_l0_sync_clk, false);
        if (err)
@@ -1127,9 +1131,13 @@ static int ufs_qcom_init(struct ufs_hba *hba)
                        __func__, err);
                goto out_variant_clear;
        } else if (IS_ERR(host->generic_phy)) {
-               err = PTR_ERR(host->generic_phy);
-               dev_err(dev, "%s: PHY get failed %d\n", __func__, err);
-               goto out_variant_clear;
+               if (has_acpi_companion(dev)) {
+                       host->generic_phy = NULL;
+               } else {
+                       err = PTR_ERR(host->generic_phy);
+                       dev_err(dev, "%s: PHY get failed %d\n", __func__, err);
+                       goto out_variant_clear;
+               }
        }
 
        err = ufs_qcom_bus_register(host);
@@ -1599,6 +1607,14 @@ static const struct of_device_id ufs_qcom_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, ufs_qcom_of_match);
 
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id ufs_qcom_acpi_match[] = {
+       { "QCOM24A5" },
+       { },
+};
+MODULE_DEVICE_TABLE(acpi, ufs_qcom_acpi_match);
+#endif
+
 static const struct dev_pm_ops ufs_qcom_pm_ops = {
        .suspend        = ufshcd_pltfrm_suspend,
        .resume         = ufshcd_pltfrm_resume,
@@ -1615,6 +1631,7 @@ static struct platform_driver ufs_qcom_pltform = {
                .name   = "ufshcd-qcom",
                .pm     = &ufs_qcom_pm_ops,
                .of_match_table = of_match_ptr(ufs_qcom_of_match),
+               .acpi_match_table = ACPI_PTR(ufs_qcom_acpi_match),
        },
 };
 module_platform_driver(ufs_qcom_pltform);