int (*link_power)(struct hdac_bus *bus, bool enable);
 };
 
+/*
+ * ops used for ASoC HDA codec drivers
+ */
+struct hdac_ext_bus_ops {
+       int (*hdev_attach)(struct hdac_device *hdev);
+       int (*hdev_detach)(struct hdac_device *hdev);
+};
+
 /*
  * Lowlevel I/O operators
  */
        struct device *dev;
        const struct hdac_bus_ops *ops;
        const struct hdac_io_ops *io_ops;
+       const struct hdac_ext_bus_ops *ext_ops;
 
        /* h/w resources */
        unsigned long addr;
 
 
 int snd_hdac_ext_bus_init(struct hdac_bus *bus, struct device *dev,
                      const struct hdac_bus_ops *ops,
-                     const struct hdac_io_ops *io_ops);
+                     const struct hdac_io_ops *io_ops,
+                     const struct hdac_ext_bus_ops *ext_ops);
 
 void snd_hdac_ext_bus_exit(struct hdac_bus *bus);
 int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr,
 
  */
 int snd_hdac_ext_bus_init(struct hdac_bus *bus, struct device *dev,
                        const struct hdac_bus_ops *ops,
-                       const struct hdac_io_ops *io_ops)
+                       const struct hdac_io_ops *io_ops,
+                       const struct hdac_ext_bus_ops *ext_ops)
 {
        int ret;
        static int idx;
        if (ret < 0)
                return ret;
 
+       bus->ext_ops = ext_ops;
        INIT_LIST_HEAD(&bus->hlink_list);
        bus->idx = idx++;
 
 
        }
 
        bus = skl_to_bus(skl);
-       snd_hdac_ext_bus_init(bus, &pci->dev, &bus_core_ops, io_ops);
+       snd_hdac_ext_bus_init(bus, &pci->dev, &bus_core_ops, io_ops, NULL);
        bus->use_posbuf = 1;
        skl->pci = pci;
        INIT_WORK(&skl->probe_work, skl_probe_work);