forked from Minki/linux
ALSA: hda/sigmatel: Use the new vmaster mute LED helper
Convert the mute LED handling in Sigmatel/IDT codec to the new vmaster mute helper. A point to be cautiously handled is that the value passed to the callback is inverted; the vmaster passes "enabled" (0 = mute), while LED classdev passes "brightness" (1 = mute). A positive side-effect by this change is that the driver gets also the enum controls for the mute behavior like other drivers already had. Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Link: https://lore.kernel.org/r/20200618110842.27238-12-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
929f718cb3
commit
d1d37c572c
@ -369,10 +369,9 @@ static unsigned int stac_vref_led_power_filter(struct hda_codec *codec,
|
||||
}
|
||||
|
||||
/* update mute-LED accoring to the master switch */
|
||||
static void stac_update_led_status(struct hda_codec *codec, int enabled)
|
||||
static void stac_update_led_status(struct hda_codec *codec, bool muted)
|
||||
{
|
||||
struct sigmatel_spec *spec = codec->spec;
|
||||
int muted = !enabled;
|
||||
|
||||
if (!spec->gpio_led)
|
||||
return;
|
||||
@ -396,9 +395,13 @@ static void stac_update_led_status(struct hda_codec *codec, int enabled)
|
||||
}
|
||||
|
||||
/* vmaster hook to update mute LED */
|
||||
static void stac_vmaster_hook(void *private_data, int val)
|
||||
static int stac_vmaster_hook(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
stac_update_led_status(private_data, val);
|
||||
struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
|
||||
|
||||
stac_update_led_status(codec, brightness);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* automute hook to handle GPIO mute and EAPD updates */
|
||||
@ -4316,7 +4319,7 @@ static int stac_parse_auto_config(struct hda_codec *codec)
|
||||
#endif
|
||||
|
||||
if (spec->gpio_led)
|
||||
spec->gen.vmaster_mute.hook = stac_vmaster_hook;
|
||||
snd_hda_gen_add_mute_led_cdev(codec, stac_vmaster_hook);
|
||||
|
||||
if (spec->aloopback_ctl &&
|
||||
snd_hda_get_bool_hint(codec, "loopback") == 1) {
|
||||
|
Loading…
Reference in New Issue
Block a user