| From 8822702f6e4c8917c83ba79e0ebf2c8c218910d4 Mon Sep 17 00:00:00 2001 |
| From: Hui Wang <hui.wang@canonical.com> |
| Date: Fri, 7 May 2021 10:44:52 +0800 |
| Subject: ALSA: hda/realtek: reset eapd coeff to default value for alc287 |
| |
| From: Hui Wang <hui.wang@canonical.com> |
| |
| commit 8822702f6e4c8917c83ba79e0ebf2c8c218910d4 upstream. |
| |
| Ubuntu users reported an audio bug on the Lenovo Yoga Slim 7 14IIL05, |
| he installed dual OS (Windows + Linux), if he booted to the Linux |
| from Windows, the Speaker can't work well, it has crackling noise, |
| if he poweroff the machine first after Windows, the Speaker worked |
| well. |
| |
| Before rebooting or shutdown from Windows, the Windows changes the |
| codec eapd coeff value, but the BIOS doesn't re-initialize its value, |
| when booting into the Linux from Windows, the eapd coeff value is not |
| correct. To fix it, set the codec default value to that coeff register |
| in the alsa driver. |
| |
| BugLink: http://bugs.launchpad.net/bugs/1925057 |
| Suggested-by: Kailang Yang <kailang@realtek.com> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Hui Wang <hui.wang@canonical.com> |
| Link: https://lore.kernel.org/r/20210507024452.8300-1-hui.wang@canonical.com |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/pci/hda/patch_realtek.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/sound/pci/hda/patch_realtek.c |
| +++ b/sound/pci/hda/patch_realtek.c |
| @@ -385,7 +385,6 @@ static void alc_fill_eapd_coef(struct hd |
| case 0x10ec0282: |
| case 0x10ec0283: |
| case 0x10ec0286: |
| - case 0x10ec0287: |
| case 0x10ec0288: |
| case 0x10ec0285: |
| case 0x10ec0298: |
| @@ -396,6 +395,10 @@ static void alc_fill_eapd_coef(struct hd |
| case 0x10ec0275: |
| alc_update_coef_idx(codec, 0xe, 0, 1<<0); |
| break; |
| + case 0x10ec0287: |
| + alc_update_coef_idx(codec, 0x10, 1<<9, 0); |
| + alc_write_coef_idx(codec, 0x8, 0x4ab7); |
| + break; |
| case 0x10ec0293: |
| alc_update_coef_idx(codec, 0xa, 1<<13, 0); |
| break; |