#include <linux/of_device.h>
 #include <linux/reset.h>
 #include <linux/spi/spi.h>
+#include <linux/acpi.h>
+#include <linux/property.h>
 
 #define QSPI_COMMAND1                          0x000
 #define QSPI_BIT_LENGTH(x)                     (((x) & 0x1f) << 0)
        u32 tx_tap = 0, rx_tap = 0;
        int req_mode;
 
-       if (speed != tqspi->cur_speed) {
+       if (!has_acpi_companion(tqspi->dev) && speed != tqspi->cur_speed) {
                clk_set_rate(tqspi->clk, speed);
                tqspi->cur_speed = speed;
        }
 static struct tegra_qspi_client_data *tegra_qspi_parse_cdata_dt(struct spi_device *spi)
 {
        struct tegra_qspi_client_data *cdata;
-       struct device_node *slave_np = spi->dev.of_node;
 
        cdata = devm_kzalloc(&spi->dev, sizeof(*cdata), GFP_KERNEL);
        if (!cdata)
                return NULL;
 
-       of_property_read_u32(slave_np, "nvidia,tx-clk-tap-delay",
-                            &cdata->tx_clk_tap_delay);
-       of_property_read_u32(slave_np, "nvidia,rx-clk-tap-delay",
-                            &cdata->rx_clk_tap_delay);
+       device_property_read_u32(&spi->dev, "nvidia,tx-clk-tap-delay",
+                                &cdata->tx_clk_tap_delay);
+       device_property_read_u32(&spi->dev, "nvidia,rx-clk-tap-delay",
+                                &cdata->rx_clk_tap_delay);
+
        return cdata;
 }
 
 
 MODULE_DEVICE_TABLE(of, tegra_qspi_of_match);
 
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id tegra_qspi_acpi_match[] = {
+       {
+               .id = "NVDA1213",
+               .driver_data = (kernel_ulong_t)&tegra210_qspi_soc_data,
+       }, {
+               .id = "NVDA1313",
+               .driver_data = (kernel_ulong_t)&tegra186_qspi_soc_data,
+       }, {
+               .id = "NVDA1413",
+               .driver_data = (kernel_ulong_t)&tegra234_qspi_soc_data,
+       },
+       {}
+};
+
+MODULE_DEVICE_TABLE(acpi, tegra_qspi_acpi_match);
+#endif
+
 static int tegra_qspi_probe(struct platform_device *pdev)
 {
        struct spi_master       *master;
                return qspi_irq;
        tqspi->irq = qspi_irq;
 
-       tqspi->clk = devm_clk_get(&pdev->dev, "qspi");
-       if (IS_ERR(tqspi->clk)) {
-               ret = PTR_ERR(tqspi->clk);
-               dev_err(&pdev->dev, "failed to get clock: %d\n", ret);
-               return ret;
+       if (!has_acpi_companion(tqspi->dev)) {
+               tqspi->clk = devm_clk_get(&pdev->dev, "qspi");
+               if (IS_ERR(tqspi->clk)) {
+                       ret = PTR_ERR(tqspi->clk);
+                       dev_err(&pdev->dev, "failed to get clock: %d\n", ret);
+                       return ret;
+               }
+
        }
 
        tqspi->max_buf_size = QSPI_FIFO_DEPTH << 2;
        struct spi_master *master = dev_get_drvdata(dev);
        struct tegra_qspi *tqspi = spi_master_get_devdata(master);
 
+       /* Runtime pm disabled with ACPI */
+       if (has_acpi_companion(tqspi->dev))
+               return 0;
        /* flush all write which are in PPSB queue by reading back */
        tegra_qspi_readl(tqspi, QSPI_COMMAND1);
 
        struct tegra_qspi *tqspi = spi_master_get_devdata(master);
        int ret;
 
+       /* Runtime pm disabled with ACPI */
+       if (has_acpi_companion(tqspi->dev))
+               return 0;
        ret = clk_prepare_enable(tqspi->clk);
        if (ret < 0)
                dev_err(tqspi->dev, "failed to enable clock: %d\n", ret);
                .name           = "tegra-qspi",
                .pm             = &tegra_qspi_pm_ops,
                .of_match_table = tegra_qspi_of_match,
+               .acpi_match_table = ACPI_PTR(tegra_qspi_acpi_match),
        },
        .probe =        tegra_qspi_probe,
        .remove =       tegra_qspi_remove,