ALSA: hda - Build PCMs and controls at codec driver probe
This makes the code flow easier -- instead of the controller driver calling snd_hda_build_pcms() and snd_hda_build_controls() explicitly, the codec driver itself builds PCMs and controls at probe time. Then the controller driver only needs to call snd_card_register(). Also, this allows us the full bind/unbind control, too. Even when a codec driver is bound later, it automatically registers the new PCM and controls by itself. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
@@ -106,16 +106,28 @@ static int hda_codec_driver_probe(struct device *dev)
|
||||
}
|
||||
|
||||
err = codec->preset->patch(codec);
|
||||
if (err < 0) {
|
||||
module_put(owner);
|
||||
goto error;
|
||||
if (err < 0)
|
||||
goto error_module;
|
||||
|
||||
err = snd_hda_codec_build_pcms(codec);
|
||||
if (err < 0)
|
||||
goto error_module;
|
||||
err = snd_hda_codec_build_controls(codec);
|
||||
if (err < 0)
|
||||
goto error_module;
|
||||
if (codec->card->registered) {
|
||||
err = snd_card_register(codec->card);
|
||||
if (err < 0)
|
||||
goto error_module;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_module:
|
||||
module_put(owner);
|
||||
|
||||
error:
|
||||
codec->preset = NULL;
|
||||
memset(&codec->patch_ops, 0, sizeof(codec->patch_ops));
|
||||
snd_hda_codec_cleanup_for_unbind(codec);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user