# Macro HdmiPCM - Generate ALSA control section for hdmi: PCM device
#
# Arguments:
#   Device - hardware PCM device
#   Index - hdmi: device index and control index
#

DefineMacro.HdmiPCM {
	LibraryConfig.generic.Config.hdmi-pcm.pcm.hdmi."${var:__Index}" {
		@args [ CARD AES0 AES1 AES2 AES3 ]
		@args.CARD {
			type string
		}
		@args.AES0 {
			type integer
		}
		@args.AES1 {
			type integer
		}
		@args.AES2 {
			type integer
		}
		@args.AES3 {
			type integer
		}
		type hooks
		slave.pcm {
			type hw
			card $CARD
			device "${evali:$__Device}"
		}
		hooks.0 {
			type ctl_elems
			hook_args [
			{
				name "IEC958 Playback Default"
				index "${evali:$__Index}"
				lock true
				preserve true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				name "IEC958 Playback Switch"
				index "${evali:$__Index}"
				value true
			}
			]
		}
		hint.device "${evali:$__Device}"
	}
}

# Macro HdmiPCMSave - Save the generated ALSA control for hdmi: PCM device(s)
#		      generated inside 'hdmi-pcm' section by prior calls to
#		      HdmiPCM macro
#
# Arguments:
#   [Name] - Optional name excluding the .conf extension to use for the
#	     configuration file, defaults to "42-hdmi-pcm"
#

DefineMacro.HdmiPCMSave {
	If.name {
		Condition {
			Type String
			Empty "${var:-__Name}"
		}
		True.Define.__Name "42-hdmi-pcm"
	}

	FixedBootSequence [
		cfg-save "${var:LibDir}/${var:__Name}.conf:hdmi-pcm"
	]
}

# Macro SofHdmiDevice - Create hdmi PCM device for a sound card if passthrough
#			is supported
#
# Arguments:
#   Iec61937Devices - Comma separated list of PCM device ids supporting iec61937
#		      passthrough
#   Dev - Hardware PCM device to match in Iec61937Devices for iec61937 support
#   Idx - hdmi: device index and control index
#

DefineMacro.HdmiDevice.If.iec61937 {
	Condition {
		Type RegexMatch
		Regex "((^|,)[${var:__Dev}](,|$))"
		String "${var:__Iec61937Devices}"
	}
	True.Macro.0.HdmiPCM { Device "${var:__Dev}" Index "${var:__Idx}" }
}
