At Thu, 7 Nov 2013 14:08:41 +0100, David Henningsson wrote:
From: Kailang Yang kailang@realtek.com
The new codec ALC255 needs its own set of verbs to enable multifunction jacks.
(Context and whitespace adjustments by David Henningsson)
BugLink: https://bugs.launchpad.net/bugs/1248949 Tested-by: Doro Wu doro.wu@canonical.com Signed-off-by: David Henningsson david.henningsson@canonical.com
sound/pci/hda/patch_realtek.c | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+)
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index daf7205..ceadd65 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -588,6 +588,18 @@ static int alc_read_coef_idx(struct hda_codec *codec, return val; }
+static int alc_read_coefex_idx(struct hda_codec *codec,
hda_nid_t nid,
unsigned int coef_idx)
+{
- unsigned int val;
- snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX,
coef_idx);
- val = snd_hda_codec_read(codec, nid, 0,
AC_VERB_GET_PROC_COEF, 0);
- return val;
+}
Rewrite alc_read_coef_idx() using this new function, too, e.g.
#define alc_write_coef_idx(codec, idx, val) \ alc_read_coefex_idx(codec, 0x20, idx, val)
static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx, unsigned int coef_val) { @@ -597,6 +609,15 @@ static void alc_write_coef_idx(struct hda_codec *codec, unsigned int coef_idx, coef_val); }
+static void alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
unsigned int coef_idx, unsigned int coef_val)
+{
- snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX,
coef_idx);
- snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PROC_COEF,
coef_val);
+}
Ditto.
/* a special bypass for COEF 0; read the cached value at the second time */ static unsigned int alc_get_coef0(struct hda_codec *codec) { @@ -3109,6 +3130,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec) int val;
switch (codec->vendor_id) {
- case 0x10ec0255:
alc_write_coef_idx(codec, 0x1b, 0x0c0b);
alc_write_coef_idx(codec, 0x45, 0xd089);
val = alc_read_coefex_idx(codec, 0x57, 0x05);
alc_write_coefex_idx(codec, 0x57, 0x05, val & ~(1<<14));
alc_write_coef_idx(codec, 0x06, 0x6104);
alc_write_coefex_idx(codec, 0x57, 0x03, 0x8aa6);
Try to comment what these actually do. Not necessarily too detailed, but we need to have some ideas.
I regret to have merged the former Realtek headset patches that have lots of such verbs without certain comments.
thanks,
Takashi