From: Kailang <kailang@realtek.com>
To: Takashi Iwai <tiwai@suse.de>,
"Maciej S. Szmigiero" <mail@maciej.szmigiero.name>
Cc: Jaroslav Kysela <perex@perex.cz>,
"linux-sound@vger.kernel.org" <linux-sound@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v2] ALSA: hda/realtek: Enable PC beep passthrough for HP EliteBook 855 G7
Date: Wed, 19 Feb 2025 06:00:20 +0000 [thread overview]
Message-ID: <8718c132e8674ca7a79330a672d8704a@realtek.com> (raw)
In-Reply-To: <87jz9o99ef.wl-tiwai@suse.de>
Please let me check with our AE team.
> -----Original Message-----
> From: Takashi Iwai <tiwai@suse.de>
> Sent: Monday, February 17, 2025 6:02 PM
> To: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
> Cc: Jaroslav Kysela <perex@perex.cz>; Takashi Iwai <tiwai@suse.com>; Kailang
> <kailang@realtek.com>; Oder Chiou <oder_chiou@realtek.com>; Shuming [范
> 書銘] <shumingf@realtek.com>; Qiu Wenbo <qiuwenbo@kylinos.com.cn>;
> linux-sound@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v2] ALSA: hda/realtek: Enable PC beep passthrough for HP
> EliteBook 855 G7
>
>
> External mail : This email originated from outside the organization. Do not
> reply, click links, or open attachments unless you recognize the sender and
> know the content is safe.
>
>
>
> On Sun, 16 Feb 2025 22:31:03 +0100,
> Maciej S. Szmigiero wrote:
> >
> > PC speaker works well on this platform in BIOS and in Linux until
> > sound card drivers are loaded. Then it stops working.
> >
> > There seems to be a beep generator node at 0x1a in this CODEC
> > (ALC269_TYPE_ALC215) but it seems to be only connected to capture
> > mixers at nodes 0x22 and 0x23.
> > If I unmute the mixer input for 0x1a at node 0x23 and start recording
> > from its "ALC285 Analog" capture device I can clearly hear beeps in
> > that recording.
> >
> > So the beep generator is indeed working properly, however I wasn't
> > able to figure out any way to connect it to speakers.
> >
> > However, the bits in the "Passthrough Control" register (0x36) seems
> > to work at least partially: by zeroing "B" and "h" and setting "S" I
> > can at least make the PIT PC speaker output appear either in this
> > laptop speakers or headphones (depending on whether they are connected
> or not).
> >
> >
> > There are some caveats, however:
> > * If the CODEC gets runtime-suspended the beeps stop so it needs HDA
> > beep device for keeping it awake during beeping.
> >
> > * If the beep generator node is generating any beep the PC beep
> > passthrough seems to be temporarily inhibited, so the HDA beep device
> > has to be prevented from using the actual beep generator node - but
> > the beep device is still necessary due to the previous point.
> >
> > * In contrast with other platforms here beep amplification has to be
> > disabled otherwise the beeps output are WAY louder than they were on
> > pure BIOS setup.
> >
> >
> > Unless someone (from Realtek probably) knows how to make the beep
> > generator node output appear in speakers / headphones using PC beep
> > passthrough seems to be the only way to make PC speaker beeping
> > actually work on this platform.
> >
> > Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
> > ---
> >
> > Since more than 6 weeks has now passed since the previous version of
> > this patch was posted, yet no better or other solution was provided
> > I'm re-submitting an updated version of the original patch.
> >
> > This solution has been working fine for me on this platform all that
> > time, without any obvious issues.
> >
> > Changes from v1:
> > * Correct the typo in !IS_ENABLED(CONFIG_INPUT_PCSPKR) code that the
> > kernel test robot found.
> >
> > * Change codec_warn() into dev_warn_once(hda_codec_dev(codec))
> > to avoid spamming the kernel log at runtime PM CODEC re-init.
>
> This is really a thing to be checked by Realtek people at first, as it's very
> vendor-specific thing.
>
> Kailang, please check this.
>
> And, except for that, I'm still concerned by the behavior change.
> Also the caveat you mentioned about the runtime PM raises some doubt, too.
>
>
> thanks,
>
> Takashi
>
> >
> > include/sound/hda_codec.h | 1 +
> > sound/pci/hda/hda_beep.c | 15 +++++++++------
> > sound/pci/hda/patch_realtek.c | 34
> +++++++++++++++++++++++++++++++++-
> > 3 files changed, 43 insertions(+), 7 deletions(-)
> >
> > diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h
> > index 575e55aa08ca..c1fe6290d04d 100644
> > --- a/include/sound/hda_codec.h
> > +++ b/include/sound/hda_codec.h
> > @@ -195,6 +195,7 @@ struct hda_codec {
> > /* beep device */
> > struct hda_beep *beep;
> > unsigned int beep_mode;
> > + bool beep_just_power_on;
> >
> > /* widget capabilities cache */
> > u32 *wcaps;
> > diff --git a/sound/pci/hda/hda_beep.c b/sound/pci/hda/hda_beep.c index
> > e51d47572557..13a7d92e8d8d 100644
> > --- a/sound/pci/hda/hda_beep.c
> > +++ b/sound/pci/hda/hda_beep.c
> > @@ -31,8 +31,9 @@ static void generate_tone(struct hda_beep *beep, int
> tone)
> > beep->power_hook(beep, true);
> > beep->playing = 1;
> > }
> > - snd_hda_codec_write(codec, beep->nid, 0,
> > - AC_VERB_SET_BEEP_CONTROL, tone);
> > + if (!codec->beep_just_power_on)
> > + snd_hda_codec_write(codec, beep->nid, 0,
> > + AC_VERB_SET_BEEP_CONTROL,
> tone);
> > if (!tone && beep->playing) {
> > beep->playing = 0;
> > if (beep->power_hook)
> > @@ -212,10 +213,12 @@ int snd_hda_attach_beep_device(struct
> hda_codec *codec, int nid)
> > struct hda_beep *beep;
> > int err;
> >
> > - if (!snd_hda_get_bool_hint(codec, "beep"))
> > - return 0; /* disabled explicitly by hints */
> > - if (codec->beep_mode == HDA_BEEP_MODE_OFF)
> > - return 0; /* disabled by module option */
> > + if (!codec->beep_just_power_on) {
> > + if (!snd_hda_get_bool_hint(codec, "beep"))
> > + return 0; /* disabled explicitly by hints */
> > + if (codec->beep_mode == HDA_BEEP_MODE_OFF)
> > + return 0; /* disabled by module option */
> > + }
> >
> > beep = kzalloc(sizeof(*beep), GFP_KERNEL);
> > if (beep == NULL)
> > diff --git a/sound/pci/hda/patch_realtek.c
> > b/sound/pci/hda/patch_realtek.c index 224616fbec4f..fff6e7c1c265
> > 100644
> > --- a/sound/pci/hda/patch_realtek.c
> > +++ b/sound/pci/hda/patch_realtek.c
> > @@ -28,6 +28,7 @@
> > #include <sound/hda_codec.h>
> > #include "hda_local.h"
> > #include "hda_auto_parser.h"
> > +#include "hda_beep.h"
> > #include "hda_jack.h"
> > #include "hda_generic.h"
> > #include "hda_component.h"
> > @@ -6923,6 +6924,30 @@ static void alc285_fixup_hp_envy_x360(struct
> hda_codec *codec,
> > }
> > }
> >
> > +static void alc285_fixup_hp_beep(struct hda_codec *codec,
> > + const struct hda_fixup *fix, int
> > +action) {
> > + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
> > + codec->beep_just_power_on = true;
> > + } else if (action == HDA_FIXUP_ACT_INIT) { #ifdef
> > +CONFIG_SND_HDA_INPUT_BEEP
> > + /*
> > + * Just enable loopback to internal speaker and headphone
> jack.
> > + * Disable amplification to get about the same beep
> volume as
> > + * was on pure BIOS setup before loading the driver.
> > + */
> > + alc_update_coef_idx(codec, 0x36, 0x7070, BIT(13));
> > +
> > + snd_hda_enable_beep_device(codec, 1);
> > +
> > +#if !IS_ENABLED(CONFIG_INPUT_PCSPKR)
> > + dev_warn_once(hda_codec_dev(codec),
> > + "enable CONFIG_INPUT_PCSPKR to get PC
> > +beeps\n"); #endif #endif
> > + }
> > +}
> > +
> > /* for hda_fixup_thinkpad_acpi() */
> > #include "thinkpad_helper.c"
> >
> > @@ -7707,6 +7732,7 @@ enum {
> > ALC285_FIXUP_HP_GPIO_LED,
> > ALC285_FIXUP_HP_MUTE_LED,
> > ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED,
> > + ALC285_FIXUP_HP_BEEP_MICMUTE_LED,
> > ALC236_FIXUP_HP_MUTE_LED_COEFBIT2,
> > ALC236_FIXUP_HP_GPIO_LED,
> > ALC236_FIXUP_HP_MUTE_LED,
> > @@ -9303,6 +9329,12 @@ static const struct hda_fixup alc269_fixups[] = {
> > .type = HDA_FIXUP_FUNC,
> > .v.func = alc285_fixup_hp_spectre_x360_mute_led,
> > },
> > + [ALC285_FIXUP_HP_BEEP_MICMUTE_LED] = {
> > + .type = HDA_FIXUP_FUNC,
> > + .v.func = alc285_fixup_hp_beep,
> > + .chained = true,
> > + .chain_id = ALC285_FIXUP_HP_MUTE_LED,
> > + },
> > [ALC236_FIXUP_HP_MUTE_LED_COEFBIT2] = {
> > .type = HDA_FIXUP_FUNC,
> > .v.func = alc236_fixup_hp_mute_led_coefbit2,
> > @@ -10392,7 +10424,7 @@ static const struct hda_quirk alc269_fixup_tbl[]
> = {
> > SND_PCI_QUIRK(0x103c, 0x8730, "HP ProBook 445 G7",
> ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
> > SND_PCI_QUIRK(0x103c, 0x8735, "HP ProBook 435 G7",
> ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
> > SND_PCI_QUIRK(0x103c, 0x8736, "HP",
> ALC285_FIXUP_HP_GPIO_AMP_INIT),
> > - SND_PCI_QUIRK(0x103c, 0x8760, "HP",
> ALC285_FIXUP_HP_MUTE_LED),
> > + SND_PCI_QUIRK(0x103c, 0x8760, "HP EliteBook 8{4,5}5 G7",
> > + ALC285_FIXUP_HP_BEEP_MICMUTE_LED),
> > SND_PCI_QUIRK(0x103c, 0x876e, "HP ENVY x360 Convertible
> 13-ay0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
> > SND_PCI_QUIRK(0x103c, 0x877a, "HP",
> ALC285_FIXUP_HP_MUTE_LED),
> > SND_PCI_QUIRK(0x103c, 0x877d, "HP",
> ALC236_FIXUP_HP_MUTE_LED),
prev parent reply other threads:[~2025-02-19 6:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-16 21:31 [PATCH v2] ALSA: hda/realtek: Enable PC beep passthrough for HP EliteBook 855 G7 Maciej S. Szmigiero
2025-02-17 10:02 ` Takashi Iwai
2025-02-17 10:11 ` Jaroslav Kysela
2025-02-17 10:17 ` Maciej S. Szmigiero
2025-02-17 10:52 ` Takashi Iwai
2025-02-17 13:18 ` Maciej S. Szmigiero
2025-02-19 8:27 ` Kailang
2025-02-19 8:32 ` Kailang
2025-02-19 11:16 ` Maciej S. Szmigiero
2025-03-03 12:45 ` Takashi Iwai
2025-03-04 6:26 ` Kailang
2025-03-04 8:30 ` Takashi Iwai
2025-02-19 8:39 ` Kailang
2025-02-19 6:00 ` Kailang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8718c132e8674ca7a79330a672d8704a@realtek.com \
--to=kailang@realtek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=mail@maciej.szmigiero.name \
--cc=perex@perex.cz \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.