|
@@ -38,10 +38,11 @@
|
|
|
*/
|
|
|
#define HDA_COMPOSE_AMP_VAL_OFS(nid,chs,idx,dir,ofs) \
|
|
|
((nid) | ((chs)<<16) | ((dir)<<18) | ((idx)<<19) | ((ofs)<<23))
|
|
|
+#define HDA_AMP_VAL_MIN_MUTE (1<<29)
|
|
|
#define HDA_COMPOSE_AMP_VAL(nid,chs,idx,dir) \
|
|
|
HDA_COMPOSE_AMP_VAL_OFS(nid, chs, idx, dir, 0)
|
|
|
/* mono volume with index (index=0,1,...) (channel=1,2) */
|
|
|
-#define HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, channel, xindex, direction) \
|
|
|
+#define HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, channel, xindex, dir, flags) \
|
|
|
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xcidx, \
|
|
|
.subdevice = HDA_SUBDEV_AMP_FLAG, \
|
|
|
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
|
|
@@ -51,16 +52,20 @@
|
|
|
.get = snd_hda_mixer_amp_volume_get, \
|
|
|
.put = snd_hda_mixer_amp_volume_put, \
|
|
|
.tlv = { .c = snd_hda_mixer_amp_tlv }, \
|
|
|
- .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, xindex, direction) }
|
|
|
+ .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, xindex, dir) | flags }
|
|
|
/* stereo volume with index */
|
|
|
#define HDA_CODEC_VOLUME_IDX(xname, xcidx, nid, xindex, direction) \
|
|
|
- HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, 3, xindex, direction)
|
|
|
+ HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, 3, xindex, direction, 0)
|
|
|
/* mono volume */
|
|
|
#define HDA_CODEC_VOLUME_MONO(xname, nid, channel, xindex, direction) \
|
|
|
- HDA_CODEC_VOLUME_MONO_IDX(xname, 0, nid, channel, xindex, direction)
|
|
|
+ HDA_CODEC_VOLUME_MONO_IDX(xname, 0, nid, channel, xindex, direction, 0)
|
|
|
/* stereo volume */
|
|
|
#define HDA_CODEC_VOLUME(xname, nid, xindex, direction) \
|
|
|
HDA_CODEC_VOLUME_MONO(xname, nid, 3, xindex, direction)
|
|
|
+/* stereo volume with min=mute */
|
|
|
+#define HDA_CODEC_VOLUME_MIN_MUTE(xname, nid, xindex, direction) \
|
|
|
+ HDA_CODEC_VOLUME_MONO_IDX(xname, 0, nid, 3, xindex, direction, \
|
|
|
+ HDA_AMP_VAL_MIN_MUTE)
|
|
|
/* mono mute switch with index (index=0,1,...) (channel=1,2) */
|
|
|
#define HDA_CODEC_MUTE_MONO_IDX(xname, xcidx, nid, channel, xindex, direction) \
|
|
|
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xcidx, \
|
|
@@ -581,6 +586,7 @@ int snd_hda_check_amp_list_power(struct hda_codec *codec,
|
|
|
#define get_amp_direction(kc) (((kc)->private_value >> 18) & 0x1)
|
|
|
#define get_amp_index(kc) (((kc)->private_value >> 19) & 0xf)
|
|
|
#define get_amp_offset(kc) (((kc)->private_value >> 23) & 0x3f)
|
|
|
+#define get_amp_min_mute(kc) (((kc)->private_value >> 29) & 0x1)
|
|
|
|
|
|
/*
|
|
|
* CEA Short Audio Descriptor data
|