|
@@ -1375,6 +1375,31 @@ int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
|
|
|
|
|
|
+/**
|
|
|
+ * snd_hda_codec_amp_update - update the AMP mono value
|
|
|
+ * @codec: HD-audio codec
|
|
|
+ * @nid: NID to read the AMP value
|
|
|
+ * @ch: channel to update (0 or 1)
|
|
|
+ * @dir: #HDA_INPUT or #HDA_OUTPUT
|
|
|
+ * @idx: the index value (only for input direction)
|
|
|
+ * @mask: bit mask to set
|
|
|
+ * @val: the bits value to set
|
|
|
+ *
|
|
|
+ * Update the AMP values for the given channel, direction and index.
|
|
|
+ */
|
|
|
+int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid,
|
|
|
+ int ch, int dir, int idx, int mask, int val)
|
|
|
+{
|
|
|
+ unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx);
|
|
|
+
|
|
|
+ /* enable fake mute if no h/w mute but min=mute */
|
|
|
+ if ((query_amp_caps(codec, nid, dir) &
|
|
|
+ (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE)
|
|
|
+ cmd |= AC_AMP_FAKE_MUTE;
|
|
|
+ return snd_hdac_regmap_update_raw(&codec->core, cmd, mask, val);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update);
|
|
|
+
|
|
|
/**
|
|
|
* snd_hda_codec_amp_stereo - update the AMP stereo values
|
|
|
* @codec: HD-audio codec
|