snd: hda: realtek: fix incorrect IS_REACHABLE() usage
PATCH 1/1 snd: hda: realtek: fix incorrect IS_REACHABLE() usage
From: Arnd Bergmann <[email protected]>
The alternative path leads to a build error after a recent change:
sound/pci/hda/patch_realtek.c: In function 'alc233_fixup_lenovo_low_en_micmute_led':include/linux/stddef.h:9:14: error: called object is not a function or function pointer
9 | #define NULL ((void *)0)
| ^
sound/pci/hda/patch_realtek.c:5041:49: note: in expansion of macro 'NULL'
5041 | #define alc233_fixup_lenovo_line2_mic_hotkey NULL
| ^~~~sound/pci/hda/patch_realtek.c:5063:9: note: in expansion of macro 'alc233_fixup_lenovo_line2_mic_hotkey'
5063 | alc233_fixup_lenovo_line2_mic_hotkey(codec, fix, action);
Using IS_REACHABLE() is somewhat questionable here anyway since it leads to the input code not working when the HDA driver is builtin but input is in a loadable module. Replace this with a hard compile-time dependency on CONFIG_INPUT. In practice this won't chance much other than solve the compiler error because it is rare to require sound output but no input support.
--- sound/pci/hda/Kconfig | 1 + sound/pci/hda/patch_realtek.c | 5 ----- 2 files changed, 1 insertion(+), 5 deletions(-)
sound/pci/hda/Kconfig +1 -0
@@ -222,6 +222,7 @@ comment "Set to Y if you want auto-loading the side codec driver" config SND_HDA_CODEC_REALTEK tristate "Build Realtek HD-audio codec support" + depends on INPUT select SND_HDA_GENERIC select SND_HDA_GENERIC_LEDS select SND_HDA_SCODEC_COMPONENT
sound/pci/hda/patch_realtek.c +0 -5
@@ -4927,7 +4927,6 @@ static void alc298_fixup_samsung_amp_v2_4_amps(struct hda_codec *codec,alc298_samsung_v2_init_amps (codec,4 ); } -#if IS_REACHABLE (CONFIG_INPUT )static void gpio2_mic_hotkey_event (struct hda_codec *codec,struct hda_jack_callback *event) {
@@ -5036,10 +5035,6 @@ static void alc233_fixup_lenovo_line2_mic_hotkey(struct hda_codec *codec, spec->kb_dev =NULL ; } } -#else /* INPUT */ -#define alc280_fixup_hp_gpio2_mic_hotkey NULL -#define alc233_fixup_lenovo_line2_mic_hotkey NULL -#endif /* INPUT */ static void alc269_fixup_hp_line1_mic1_led (struct hda_codec *codec,const struct hda_fixup *fix,int action)
Signature · 1 line
2.39.5
Quoted 22 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
The alternative path leads to a build error after a recent change:
sound/pci/hda/patch_realtek.c: In function 'alc233_fixup_lenovo_low_en_micmute_led':include/linux/stddef.h:9:14: error: called object is not a function or function pointer9 | #define NULL ((void *)0) | ^ sound/pci/hda/patch_realtek.c:5041:49: note: in expansion of macro 'NULL' 5041 | #define alc233_fixup_lenovo_line2_mic_hotkey NULL | ^~~~
sound/pci/hda/patch_realtek.c:5063:9: note: in expansion of macro 'alc233_fixup_lenovo_line2_mic_hotkey'
5063 |alc233_fixup_lenovo_line2_mic_hotkey(codec, fix, action);Using
IS_REACHABLE()is somewhat questionable here anyway since it leads to the input code not working when the HDA driver is builtin but input is in a loadable module. Replace this with a hard compile-time dependency onCONFIG_INPUT. In practice this won't chance much other than solve the compiler error because it is rare to require sound output but no input support.
Quoted 2 lines
Fixes f603b159231b ("ALSA: hda/realtek - add supported Mic Mute LED for Lenovo platform")Signed-off-by Arnd Bergmann <[email protected]>
Thanks for the patch. Indeed it's a very corner case, but I still hesitate to add a kconfig dependency. Can we take an alternative fix to define the proper dummy functions like below instead?
Takashi
-- 8< --
sound/pci/hda/patch_realtek.c +15 -2
@@ -5038,8 +5038,21 @@ static void alc233_fixup_lenovo_line2_mic_hotkey(struct hda_codec *codec, } }#else /* INPUT */ -#define alc280_fixup_hp_gpio2_mic_hotkey NULL -#define alc233_fixup_lenovo_line2_mic_hotkey NULL +static void alc280_fixup_hp_gpio2_mic_hotkey (struct hda_codec *codec, +const struct hda_fixup *fix, +int action) +{ +if (action ==HDA_FIXUP_ACT_PRE_PROBE ) +codec_info (codec,"Input is disabled, skipping quirk\n" ); +} + +static void alc233_fixup_lenovo_line2_mic_hotkey (struct hda_codec *codec, +const struct hda_fixup *fix, +int action) +{ +if (action ==HDA_FIXUP_ACT_PRE_PROBE ) +codec_info (codec,"Input is disabled, skipping quirk\n" ); +}#endif /* INPUT */ static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
Quoted 5 lines · Takashi Iwai
On Tue, 04 Mar 2025 15:25:55 +0100,
Thanks for the patch. Indeed it's a very corner case, but I still hesitate to add a kconfig dependency. Can we take an alternative fix to define the proper dummy functions like below instead?
I'm sure that works, and I had considered something like that, but I really dislike the IS_REACHABLE() use because I think it causes more problems than it solves. (I introduced the macro originally but regret that).
Note that the only way to disable input is to have manually flip CONFIG_EXPERT and CONFIG_TTY as well as the major GPU drivers that select it:
config INPUT
tristate "Generic input layer (needed for keyboard, mouse, ...)" if EXPERT default y
so in the end, there is very little difference between your patch and mine, as they both fix build testing on randconfig.
Arnd
Quoted 17 lines · Arnd Bergmann
Quoted 5 lines · Takashi Iwai
On Tue, 04 Mar 2025 15:25:55 +0100,
Thanks for the patch. Indeed it's a very corner case, but I still hesitate to add a kconfig dependency. Can we take an alternative fix to define the proper dummy functions like below instead?
I'm sure that works, and I had considered something like that, but I really dislike the
IS_REACHABLE()use because I think it causes more problems than it solves. (I introduced the macro originally but regret that).Note that the only way to disable input is to have manually flip
CONFIG_EXPERTandCONFIG_TTYas well as the major GPU drivers that select it:
Quoted 7 lines
config INPUT
tristate "Generic input layer (needed for keyboard, mouse, ...)" if EXPERT default yso in the end, there is very little difference between your patch and mine, as they both fix build testing on randconfig.
OK, I don't mind much, so I take your patch now, as this actually reduces the code size.
thanks,
Takashi