提交 680cd536 编写于 作者: K Kusanagi Kouichi 提交者: Takashi Iwai

ALSA: hda: Add digital beep generator support for Realtek codecs.

A digital beep generator can be used via input layer.
Signed-off-by: NKusanagi Kouichi <slash@ma.neweb.ne.jp>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 123848e7
...@@ -39,7 +39,7 @@ struct hda_beep { ...@@ -39,7 +39,7 @@ struct hda_beep {
int snd_hda_attach_beep_device(struct hda_codec *codec, int nid); int snd_hda_attach_beep_device(struct hda_codec *codec, int nid);
void snd_hda_detach_beep_device(struct hda_codec *codec); void snd_hda_detach_beep_device(struct hda_codec *codec);
#else #else
#define snd_hda_attach_beep_device(...) #define snd_hda_attach_beep_device(...) 0
#define snd_hda_detach_beep_device(...) #define snd_hda_detach_beep_device(...)
#endif #endif
#endif #endif
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <sound/core.h> #include <sound/core.h>
#include "hda_codec.h" #include "hda_codec.h"
#include "hda_local.h" #include "hda_local.h"
#include "hda_beep.h"
#define ALC880_FRONT_EVENT 0x01 #define ALC880_FRONT_EVENT 0x01
#define ALC880_DCVOL_EVENT 0x02 #define ALC880_DCVOL_EVENT 0x02
...@@ -3187,6 +3188,7 @@ static void alc_free(struct hda_codec *codec) ...@@ -3187,6 +3188,7 @@ static void alc_free(struct hda_codec *codec)
alc_free_kctls(codec); alc_free_kctls(codec);
kfree(spec); kfree(spec);
snd_hda_detach_beep_device(codec);
codec->spec = NULL; /* to be sure */ codec->spec = NULL; /* to be sure */
} }
...@@ -4355,6 +4357,12 @@ static int patch_alc880(struct hda_codec *codec) ...@@ -4355,6 +4357,12 @@ static int patch_alc880(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC880_AUTO) if (board_config != ALC880_AUTO)
setup_preset(spec, &alc880_presets[board_config]); setup_preset(spec, &alc880_presets[board_config]);
...@@ -5882,6 +5890,12 @@ static int patch_alc260(struct hda_codec *codec) ...@@ -5882,6 +5890,12 @@ static int patch_alc260(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC260_AUTO) if (board_config != ALC260_AUTO)
setup_preset(spec, &alc260_presets[board_config]); setup_preset(spec, &alc260_presets[board_config]);
...@@ -7093,6 +7107,12 @@ static int patch_alc882(struct hda_codec *codec) ...@@ -7093,6 +7107,12 @@ static int patch_alc882(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC882_AUTO) if (board_config != ALC882_AUTO)
setup_preset(spec, &alc882_presets[board_config]); setup_preset(spec, &alc882_presets[board_config]);
...@@ -9093,6 +9113,12 @@ static int patch_alc883(struct hda_codec *codec) ...@@ -9093,6 +9113,12 @@ static int patch_alc883(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC883_AUTO) if (board_config != ALC883_AUTO)
setup_preset(spec, &alc883_presets[board_config]); setup_preset(spec, &alc883_presets[board_config]);
...@@ -11013,6 +11039,12 @@ static int patch_alc262(struct hda_codec *codec) ...@@ -11013,6 +11039,12 @@ static int patch_alc262(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC262_AUTO) if (board_config != ALC262_AUTO)
setup_preset(spec, &alc262_presets[board_config]); setup_preset(spec, &alc262_presets[board_config]);
...@@ -12051,6 +12083,12 @@ static int patch_alc268(struct hda_codec *codec) ...@@ -12051,6 +12083,12 @@ static int patch_alc268(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC268_AUTO) if (board_config != ALC268_AUTO)
setup_preset(spec, &alc268_presets[board_config]); setup_preset(spec, &alc268_presets[board_config]);
...@@ -12885,6 +12923,12 @@ static int patch_alc269(struct hda_codec *codec) ...@@ -12885,6 +12923,12 @@ static int patch_alc269(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC269_AUTO) if (board_config != ALC269_AUTO)
setup_preset(spec, &alc269_presets[board_config]); setup_preset(spec, &alc269_presets[board_config]);
...@@ -13978,6 +14022,12 @@ static int patch_alc861(struct hda_codec *codec) ...@@ -13978,6 +14022,12 @@ static int patch_alc861(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x23);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC861_AUTO) if (board_config != ALC861_AUTO)
setup_preset(spec, &alc861_presets[board_config]); setup_preset(spec, &alc861_presets[board_config]);
...@@ -14924,6 +14974,12 @@ static int patch_alc861vd(struct hda_codec *codec) ...@@ -14924,6 +14974,12 @@ static int patch_alc861vd(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x23);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC861VD_AUTO) if (board_config != ALC861VD_AUTO)
setup_preset(spec, &alc861vd_presets[board_config]); setup_preset(spec, &alc861vd_presets[board_config]);
...@@ -16733,6 +16789,12 @@ static int patch_alc662(struct hda_codec *codec) ...@@ -16733,6 +16789,12 @@ static int patch_alc662(struct hda_codec *codec)
} }
} }
err = snd_hda_attach_beep_device(codec, 0x1);
if (err < 0) {
alc_free(codec);
return err;
}
if (board_config != ALC662_AUTO) if (board_config != ALC662_AUTO)
setup_preset(spec, &alc662_presets[board_config]); setup_preset(spec, &alc662_presets[board_config]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册