void snd_hdac_ext_bus_exit(struct hdac_ext_bus *sbus);
 int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *sbus, int addr);
 void snd_hdac_ext_bus_device_exit(struct hdac_device *hdev);
+void snd_hdac_ext_bus_device_remove(struct hdac_ext_bus *ebus);
 
 #define ebus_to_hbus(ebus)     (&(ebus)->bus)
 #define hbus_to_ebus(_bus) \
 
        kfree(hdev);
 }
 EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_exit);
+
+/**
+ * snd_hdac_ext_bus_device_remove - remove HD-audio extended codec base devices
+ *
+ * @ebus: HD-audio extended bus
+ */
+void snd_hdac_ext_bus_device_remove(struct hdac_ext_bus *ebus)
+{
+       struct hdac_device *codec, *__codec;
+       /*
+        * we need to remove all the codec devices objects created in the
+        * snd_hdac_ext_bus_device_init
+        */
+       list_for_each_entry_safe(codec, __codec, &ebus->bus.codec_list, list) {
+               snd_hdac_device_unregister(codec);
+               put_device(&codec->dev);
+       }
+}
+EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_remove);