Fix sound issues (rhbz 1188741)
This commit is contained in:
parent
6bb1eb088b
commit
b9992ba31f
|
@ -0,0 +1,125 @@
|
|||
From e1e62b98ebddc3234f3259019d3236f66fc667f8 Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 16:01:22 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support Dell headset mode for ALC288
|
||||
|
||||
Dell create new platform with ALC288 codec.
|
||||
This patch will enable headset mode for Dino platform.
|
||||
|
||||
[slight code refactoring and compile fix by tiwai]
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 67 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 67 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index ceb599a..7b5c93e 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4121,6 +4121,29 @@ static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
|
||||
alc_fixup_headset_mode(codec, fix, action);
|
||||
}
|
||||
|
||||
+static void alc288_update_headset_jack_cb(struct hda_codec *codec,
|
||||
+ struct hda_jack_callback *jack)
|
||||
+{
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ int present;
|
||||
+
|
||||
+ alc_update_headset_jack_cb(codec, jack);
|
||||
+ /* Headset Mic enable or disable, only for Dell Dino */
|
||||
+ present = spec->gen.hp_jack_present ? 0x40 : 0;
|
||||
+ snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
|
||||
+ present);
|
||||
+}
|
||||
+
|
||||
+static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
|
||||
+ const struct hda_fixup *fix, int action)
|
||||
+{
|
||||
+ alc_fixup_headset_mode(codec, fix, action);
|
||||
+ if (action == HDA_FIXUP_ACT_PROBE) {
|
||||
+ struct alc_spec *spec = codec->spec;
|
||||
+ spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -4460,6 +4483,9 @@ enum {
|
||||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
|
||||
ALC280_FIXUP_HP_DOCK_PINS,
|
||||
+ ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
+ ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@@ -4948,6 +4974,33 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC280_FIXUP_HP_GPIO4
|
||||
},
|
||||
+ [ALC288_FIXUP_DELL_HEADSET_MODE] = {
|
||||
+ .type = HDA_FIXUP_FUNC,
|
||||
+ .v.func = alc_fixup_headset_mode_dell_alc288,
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
||||
+ .type = HDA_FIXUP_PINS,
|
||||
+ .v.pins = (const struct hda_pintbl[]) {
|
||||
+ { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
|
||||
+ { 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
|
||||
+ },
|
||||
+ [ALC288_FIXUP_DELL_XPS_13_GPIO6] = {
|
||||
+ .type = HDA_FIXUP_VERBS,
|
||||
+ .v.verbs = (const struct hda_verb[]) {
|
||||
+ {0x01, AC_VERB_SET_GPIO_MASK, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x40},
|
||||
+ {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
|
||||
+ { }
|
||||
+ },
|
||||
+ .chained = true,
|
||||
+ .chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
+ },
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@@ -5174,6 +5227,13 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{0x1b, 0x411111f0}, \
|
||||
{0x1e, 0x411111f0}
|
||||
|
||||
+#define ALC288_STANDARD_PINS \
|
||||
+ {0x17, 0x411111f0}, \
|
||||
+ {0x18, 0x411111f0}, \
|
||||
+ {0x19, 0x411111f0}, \
|
||||
+ {0x1a, 0x411111f0}, \
|
||||
+ {0x1e, 0x411111f0}
|
||||
+
|
||||
#define ALC290_STANDARD_PINS \
|
||||
{0x12, 0x99a30130}, \
|
||||
{0x13, 0x40000000}, \
|
||||
@@ -5369,6 +5429,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x19, 0x03a11020},
|
||||
{0x1d, 0x40e00001},
|
||||
{0x21, 0x0321101f}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL_XPS_13_GPIO6,
|
||||
+ ALC288_STANDARD_PINS,
|
||||
+ {0x12, 0x90a60120},
|
||||
+ {0x13, 0x40000000},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x1d, 0x4076832d},
|
||||
+ {0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x14, 0x411111f0},
|
||||
--
|
||||
2.1.0
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
From f3b703326541d0c1ce85f5e570f6d2b6bd4296ec Mon Sep 17 00:00:00 2001
|
||||
From: Kailang Yang <kailang@realtek.com>
|
||||
Date: Wed, 8 Apr 2015 15:01:17 +0800
|
||||
Subject: [PATCH] ALSA: hda/realtek - Support headset mode for ALC286/288
|
||||
|
||||
Support headset mode for ALC286 and ALC288 platforms.
|
||||
|
||||
Signed-off-by: Kailang Yang <kailang@realtek.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 77 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 77 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 7f46d06..ceb599a 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3542,6 +3542,14 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x42a3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3573,6 +3581,10 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3602,6 +3614,14 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
WRITE_COEF(0x26, 0x008c),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0),
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0x0008),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0x2000),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x19, 0xa208),
|
||||
WRITE_COEF(0x2e, 0xacf0),
|
||||
@@ -3635,6 +3655,13 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0x000c, 0);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
@@ -3670,6 +3697,14 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x76, 0x000e),
|
||||
WRITE_COEF(0x6c, 0x2400),
|
||||
@@ -3699,6 +3734,11 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3727,6 +3767,13 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xd429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3754,6 +3801,12 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3782,6 +3835,13 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
WRITE_COEF(0x32, 0x4ea3),
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x50, 0x2000, 0x2000),
|
||||
+ UPDATE_COEF(0x56, 0x0006, 0x0006),
|
||||
+ UPDATE_COEF(0x66, 0x0008, 0),
|
||||
+ UPDATE_COEF(0x67, 0x2000, 0),
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0292[] = {
|
||||
WRITE_COEF(0x6b, 0xe429),
|
||||
WRITE_COEF(0x76, 0x0008),
|
||||
@@ -3809,6 +3869,12 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
||||
case 0x10ec0283:
|
||||
alc_process_coef_fw(codec, coef0233);
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
|
||||
+ msleep(300);
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_process_coef_fw(codec, coef0292);
|
||||
break;
|
||||
@@ -3833,6 +3899,10 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
conteol) */
|
||||
{}
|
||||
};
|
||||
+ static struct coef_fw coef0288[] = {
|
||||
+ UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
|
||||
+ {}
|
||||
+ };
|
||||
static struct coef_fw coef0293[] = {
|
||||
UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
|
||||
WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
|
||||
@@ -3861,6 +3931,13 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
is_ctia = (val & 0x0070) == 0x0070;
|
||||
break;
|
||||
+ case 0x10ec0286:
|
||||
+ case 0x10ec0288:
|
||||
+ alc_process_coef_fw(codec, coef0288);
|
||||
+ msleep(350);
|
||||
+ val = alc_read_coef_idx(codec, 0x50);
|
||||
+ is_ctia = (val & 0x0070) == 0x0070;
|
||||
+ break;
|
||||
case 0x10ec0292:
|
||||
alc_write_coef_idx(codec, 0x6b, 0xd429);
|
||||
msleep(300);
|
||||
--
|
||||
2.1.0
|
||||
|
13
kernel.spec
13
kernel.spec
|
@ -40,7 +40,7 @@ Summary: The Linux kernel
|
|||
# For non-released -rc kernels, this will be appended after the rcX and
|
||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||
#
|
||||
%global baserelease 1
|
||||
%global baserelease 2
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
|
@ -635,6 +635,10 @@ Patch26180: Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
|||
Patch26181: Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
Patch26182: Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1188741
|
||||
Patch26183: 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
Patch26184: 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1385,6 +1389,10 @@ ApplyPatch Input-atmel_mxt_ts-implement-support-for-T100-touch-.patch
|
|||
ApplyPatch Input-atmel_mxt_ts-split-out-touchpad-initialisation.patch
|
||||
ApplyPatch Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
|
||||
|
||||
#rhbz 1188741
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-Dell-headset-mode-for-ALC28.patch
|
||||
ApplyPatch 0001-ALSA-hda-realtek-Support-headset-mode-for-ALC286-288.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2235,6 +2243,9 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Mon Apr 20 2015 Laura Abbott - 4.0.0-2
|
||||
- Fix sound issues (rhbz 1188741)
|
||||
|
||||
* Fri Apr 17 2015 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Add support for touchpad on Google Pixel 2 (rhbz 1209088)
|
||||
- Allow disabling raw mode in logitech-hidpp (rhbz 1210801)
|
||||
|
|
Loading…
Reference in New Issue