Merge tag 'for-4.19/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device...
[linux-2.6-microblaze.git] / sound / ac97 / snd_ac97_compat.c
index 61544e0..8bab44f 100644 (file)
 
 #include "ac97_core.h"
 
+static void compat_ac97_release(struct device *dev)
+{
+       kfree(to_ac97_t(dev));
+}
+
 static void compat_ac97_reset(struct snd_ac97 *ac97)
 {
        struct ac97_codec_device *adev = to_ac97_device(ac97->private_data);
@@ -65,21 +70,31 @@ static struct snd_ac97_bus compat_soc_ac97_bus = {
 struct snd_ac97 *snd_ac97_compat_alloc(struct ac97_codec_device *adev)
 {
        struct snd_ac97 *ac97;
+       int ret;
 
        ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
        if (ac97 == NULL)
                return ERR_PTR(-ENOMEM);
 
-       ac97->dev = adev->dev;
        ac97->private_data = adev;
        ac97->bus = &compat_soc_ac97_bus;
+
+       ac97->dev.parent = &adev->dev;
+       ac97->dev.release = compat_ac97_release;
+       dev_set_name(&ac97->dev, "%s-compat", dev_name(&adev->dev));
+       ret = device_register(&ac97->dev);
+       if (ret) {
+               put_device(&ac97->dev);
+               return ERR_PTR(ret);
+       }
+
        return ac97;
 }
 EXPORT_SYMBOL_GPL(snd_ac97_compat_alloc);
 
 void snd_ac97_compat_release(struct snd_ac97 *ac97)
 {
-       kfree(ac97);
+       device_unregister(&ac97->dev);
 }
 EXPORT_SYMBOL_GPL(snd_ac97_compat_release);