aboutsummaryrefslogtreecommitdiff
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-05-22 14:58:31 -0700
committerKevin Hilman <khilman@linaro.org>2015-05-22 14:58:31 -0700
commit0c94ab754b26e23ecdd6ddb1607c7a3e3f0f27fc (patch)
tree3b7a294fef62f9e8196581807c70425c02bc780a /sound/pci/hda/hda_codec.c
parenta524c44bc75336d0b9d9b45ceb30e19354ff780e (diff)
parentc629522ee8c9983fbd7e572e10041e0a96904d15 (diff)
Merge tag 'v3.14.42' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into linux-linaro-lsk-v3.14lsk-v3.14-15.05
This is the 3.14.42 stable release * tag 'v3.14.42' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (26 commits) Linux 3.14.42 ARC: signal handling robustify UBI: fix soft lockup in ubi_check_volume() compal-laptop: Fix leaking hwmon device Drivers: hv: vmbus: Don't wait after requesting offers staging: panel: fix lcd type usb: gadget: printer: enqueue printer's response for setup request usb: host: ehci: use new USB_RESUME_TIMEOUT usb: host: oxu210hp: use new USB_RESUME_TIMEOUT usb: musb: use new USB_RESUME_TIMEOUT drm/radeon: add SI DPM quirk for Sapphire R9 270 Dual-X 2G GDDR5 3w-sas: fix command completion race 3w-9xxx: fix command completion race 3w-xxxx: fix command completion race ext4: fix data corruption caused by unwritten and delayed extents rbd: end I/O the entire obj_request on error tty/serial: at91: maxburst was missing for dma transfers ASoC: dapm: Enable autodisable on SOC_DAPM_SINGLE_TLV_AUTODISABLE serial: of-serial: Remove device_type = "serial" registration ALSA: hda - Add mute-LED mode control to Thinkpad ...
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index f6e5c4ed03ed..97ebc105cf3c 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -2082,6 +2082,16 @@ static void put_vol_mute(struct hda_codec *codec, unsigned int amp_caps,
snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);
}
+/* meta hook to call each driver's vmaster hook */
+static void vmaster_hook(void *private_data, int enabled)
+{
+ struct hda_vmaster_mute_hook *hook = private_data;
+
+ if (hook->mute_mode != HDA_VMUTE_FOLLOW_MASTER)
+ enabled = hook->mute_mode;
+ hook->hook(hook->codec, enabled);
+}
+
/**
* snd_hda_codec_amp_read - Read AMP value
* @codec: HD-audio codec
@@ -2917,9 +2927,9 @@ int snd_hda_add_vmaster_hook(struct hda_codec *codec,
if (!hook->hook || !hook->sw_kctl)
return 0;
- snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec);
hook->codec = codec;
hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER;
+ snd_ctl_add_vmaster_hook(hook->sw_kctl, vmaster_hook, hook);
if (!expose_enum_ctl)
return 0;
kctl = snd_ctl_new1(&vmaster_mute_mode, hook);
@@ -2942,14 +2952,7 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
*/
if (hook->codec->bus->shutdown)
return;
- switch (hook->mute_mode) {
- case HDA_VMUTE_FOLLOW_MASTER:
- snd_ctl_sync_vmaster_hook(hook->sw_kctl);
- break;
- default:
- hook->hook(hook->codec, hook->mute_mode);
- break;
- }
+ snd_ctl_sync_vmaster_hook(hook->sw_kctl);
}
EXPORT_SYMBOL_GPL(snd_hda_sync_vmaster_hook);