|
@@ -174,14 +174,40 @@ static inline bool codec_probed(struct hda_codec *codec)
|
|
|
return device_attach(hda_codec_dev(codec)) > 0 && codec->preset;
|
|
|
}
|
|
|
|
|
|
-/* try to auto-load and bind the codec module */
|
|
|
-static void codec_bind_module(struct hda_codec *codec)
|
|
|
+/* try to auto-load codec module */
|
|
|
+static void request_codec_module(struct hda_codec *codec)
|
|
|
{
|
|
|
#ifdef MODULE
|
|
|
char modalias[32];
|
|
|
+ const char *mod = NULL;
|
|
|
+
|
|
|
+ switch (codec->probe_id) {
|
|
|
+ case HDA_CODEC_ID_GENERIC_HDMI:
|
|
|
+#if IS_MODULE(CONFIG_SND_HDA_CODEC_HDMI)
|
|
|
+ mod = "snd-hda-codec-hdmi";
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+ case HDA_CODEC_ID_GENERIC:
|
|
|
+#if IS_MODULE(CONFIG_SND_HDA_GENERIC)
|
|
|
+ mod = "snd-hda-codec-generic";
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ snd_hdac_codec_modalias(&codec->core, modalias, sizeof(modalias));
|
|
|
+ mod = modalias;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mod)
|
|
|
+ request_module(mod);
|
|
|
+#endif /* MODULE */
|
|
|
+}
|
|
|
|
|
|
- snd_hdac_codec_modalias(&codec->core, modalias, sizeof(modalias));
|
|
|
- request_module(modalias);
|
|
|
+/* try to auto-load and bind the codec module */
|
|
|
+static void codec_bind_module(struct hda_codec *codec)
|
|
|
+{
|
|
|
+#ifdef MODULE
|
|
|
+ request_codec_module(codec);
|
|
|
if (codec_probed(codec))
|
|
|
return;
|
|
|
#endif
|
|
@@ -218,17 +244,13 @@ static int codec_bind_generic(struct hda_codec *codec)
|
|
|
|
|
|
if (is_likely_hdmi_codec(codec)) {
|
|
|
codec->probe_id = HDA_CODEC_ID_GENERIC_HDMI;
|
|
|
-#if IS_MODULE(CONFIG_SND_HDA_CODEC_HDMI)
|
|
|
- request_module("snd-hda-codec-hdmi");
|
|
|
-#endif
|
|
|
+ request_codec_module(codec);
|
|
|
if (codec_probed(codec))
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
codec->probe_id = HDA_CODEC_ID_GENERIC;
|
|
|
-#if IS_MODULE(CONFIG_SND_HDA_GENERIC)
|
|
|
- request_module("snd-hda-codec-generic");
|
|
|
-#endif
|
|
|
+ request_codec_module(codec);
|
|
|
if (codec_probed(codec))
|
|
|
return 0;
|
|
|
return -ENODEV;
|