ALSA: hdac: Add API for removing hdac extended device
authorVinod Koul <vinod.koul@intel.com>
Fri, 21 Aug 2015 10:17:40 +0000 (15:47 +0530)
committerTakashi Iwai <tiwai@suse.de>
Fri, 21 Aug 2015 10:34:00 +0000 (12:34 +0200)
The HDAC extended device objects are created by HDAC extended bus on probe.
When controller is removed they should be removed as well, so add API
snd_hdac_ext_bus_device_remove for this

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/hdaudio_ext.h
sound/hda/ext/hdac_ext_bus.c

index 0f89df1511dc5d9cfb19be3d8c4dec8342f65aa5..148267b76ab7752b94171bd9f4f4b1c2a5e0d788 100644 (file)
@@ -34,6 +34,7 @@ int snd_hdac_ext_bus_init(struct hdac_ext_bus *sbus, struct device *dev,
 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) \
index 0aa5d9eb6c3fd37d20185f41694e510bec1eff27..cf69202f7da0b59e571486097e63dc3456f3d9ad 100644 (file)
@@ -172,3 +172,22 @@ void snd_hdac_ext_bus_device_exit(struct hdac_device *hdev)
        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);