diff options
Diffstat (limited to 'sound/soc/codecs/wm8731.c')
-rw-r--r-- | sound/soc/codecs/wm8731.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c index 8151b45a280..9956d654b6f 100644 --- a/sound/soc/codecs/wm8731.c +++ b/sound/soc/codecs/wm8731.c @@ -696,8 +696,8 @@ static int wm8731_init(struct snd_soc_device *socdev) /* register pcms */ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); if (ret < 0) { - kfree(codec->reg_cache); - return ret; + printk(KERN_ERR "wm8731: failed to create pcms\n"); + goto pcm_err; } /* power on device */ @@ -717,11 +717,18 @@ static int wm8731_init(struct snd_soc_device *socdev) wm8731_add_widgets(codec); ret = snd_soc_register_card(socdev); if (ret < 0) { - snd_soc_free_pcms(socdev); - snd_soc_dapm_free(socdev); + printk(KERN_ERR "wm8731: failed to register card\n"); + goto card_err; } return ret; + +card_err: + snd_soc_free_pcms(socdev); + snd_soc_dapm_free(socdev); +pcm_err: + kfree(codec->reg_cache); + return ret; } static struct snd_soc_device *wm8731_socdev; |