File: //usr/share/alsa/topology/broadwell/broadwell.conf
# Dynamic Firmware Configuration for Broadwell
# TLV
SectionTLV."hsw_vol_tlv" {
	Comment "TLV used by both global and stream volumes"
	scale {
		min "-9000"
		step "300"
		mute "1"
	}
}
# Controls
SectionControlMixer."Master Playback Volume" {
	Comment "Global DSP volume"
	# control belongs to this index group
	index "1"
	# Channel register and shift for Front Left/Right
	channel."FL" {
		reg "0"
		shift "0"
	}
	channel."FR" {
		reg "0"
		shift "8"
	}
	# max control value and whether value is inverted
	max "31"
	invert "false"
	# control uses bespoke driver get/put/info ID 0
	ops."ctl" {
		info "volsw"
		get "256"
		put "256"
	}
	# uses TLV data above
	tlv "hsw_vol_tlv"
}
SectionControlMixer."Media0 Playback Volume" {
	Comment "Offload 0 volume"
	# control belongs to this index group
	index "1"
	# Channel register and shift for Front Left/Right
	channel."FL" {
		reg "1"
		shift "0"
	}
	channel."FR" {
		reg "1"
		shift "8"
	}
	# max control value and whether value is inverted
	max "31"
	invert "false"
	# control uses bespoke driver get/put/info ID 0
	ops."ctl" {
		info "volsw"
		get "257"
		put "257"
	}
	# uses TLV data above
	tlv "hsw_vol_tlv"
}
SectionControlMixer."Media1 Playback Volume" {
	Comment "Offload 1 volume"
	# control belongs to this index group
	index "1"
	# Channel register and shift for Front Left/Right
	channel."FL" {
		reg "2"
		shift "0"
	}
	channel."FR" {
		reg "2"
		shift "8"
	}
	# max control value and whether value is inverted
	max "31"
	invert "false"
	# control uses bespoke driver get/put/info ID 0
	ops."ctl" {
		info "volsw"
		get "257"
		put "257"
	}
	# uses TLV data above
	tlv "hsw_vol_tlv"
}
SectionControlMixer."Mic Capture Volume" {
	Comment "Mic Capture volume"
	# control belongs to this index group
	index "1"
	# Channel register and shift for Front Left/Right
	channel."FL" {
		reg "0"
		shift "0"
	}
	channel."FR" {
		reg "0"
		shift "8"
	}
	# max control value and whether value is inverted
	max "31"
	invert "false"
	# control uses bespoke driver get/put/info ID 0
	ops."ctl" {
		info "volsw"
		get "257"
		put "257"
	}
	# uses TLV data above
	tlv "hsw_vol_tlv"
}
SectionWidget."SSP0 CODEC IN" {
	index "1"
	type "aif_in"
	no_pm "true"
	shift "0"
	invert "0"
}
SectionWidget."SSP0 CODEC OUT" {
	index "1"
	type "aif_out"
	no_pm "true"
	shift "0"
	invert "0"
}
SectionWidget."SSP1 BT IN" {
	index "1"
	type "aif_in"
	no_pm "true"
	shift "0"
	invert "0"
}
SectionWidget."SSP1 BT OUT" {
	index "1"
	type "aif_out"
	no_pm "true"
	shift "0"
	invert "0"
}
SectionWidget."Playback VMixer" {
	index "1"
	type "mixer"
	no_pm "true"
	shift "0"
	invert "0"
}
# PCM Configurations supported by FW
SectionPCMConfig."PCM 48k Stereo 24bit" {
	config."playback" {
		format "S24_LE"
		rate "48000"
		channels "2"
		tdm_slot "0xf"
	}
	config."capture" {
		format "S24_LE"
		rate "48000"
		channels "2"
		tdm_slot "0xf"
	}
}
SectionPCMConfig."PCM 48k Stereo 16bit" {
	config."playback" {
		format "S16_LE"
		rate "48000"
		channels "2"
		tdm_slot "0xf"
	}
	config."capture" {
		format "S16_LE"
		rate "48000"
		channels "2"
		tdm_slot "0xf"
	}
}
SectionPCMConfig."PCM 48k 2P/4C 16bit" {
	config."playback" {
		format "S16_LE"
		rate "48000"
		channels "2"
		tdm_slot "0xf"
	}
	config."capture" {
		format "S16_LE"
		rate "48000"
		channels "4"
		tdm_slot "0xf"
	}
}
# PCM capabilities supported by FW
SectionPCMCapabilities."System Playback" {
	formats "S24_LE,S16_LE"
	rate_min "48000"
	rate_max "48000"
	channels_min "2"
	channels_max "2"
}
SectionPCMCapabilities."Analog Capture" {
	formats "S24_LE,S16_LE"
	rate_min "48000"
	rate_max "48000"
	channels_min "2"
	channels_max "4"
}
SectionPCMCapabilities."Loopback Capture" {
	formats "S24_LE,S16_LE"
	rate_min "48000"
	rate_max "48000"
	channels_min "2"
	channels_max "2"
}
SectionPCMCapabilities."Offload0 Playback" {
	formats "S24_LE,S16_LE"
	rate_min "8000"
	rate_max "192000"
	channels_min "2"
	channels_max "2"
}
SectionPCMCapabilities."Offload1 Playback" {
	formats "S24_LE,S16_LE"
	rate_min "8000"
	rate_max "192000"
	channels_min "2"
	channels_max "2"
}
# PCM devices exported by Firmware
SectionPCM."System Playback/Capture" {
	index "1"
	# used for binding to the PCM
	id "0"
	dai."System Pin" {
		id "0"
	}
	pcm."playback" {
		capabilities "System Playback"
		configs [
			"PCM 48k Stereo 24bit"
			"PCM 48k Stereo 16bit"
		]
	}
	pcm."capture" {
		capabilities "Analog Capture"
		configs [
			"PCM 48k Stereo 24bit"
			"PCM 48k Stereo 16bit"
			"PCM 48k 2P/4C 16bit"
		]
	}
}
SectionPCM."Offload0 Playback" {
	index "1"
	# used for binding to the PCM
	id "1"
	dai."Offload0 Pin" {
		id "1"
	}
	pcm."playback" {
		capabilities "Offload0 Playback"
		configs [
			"PCM 48k Stereo 24bit"
			"PCM 48k Stereo 16bit"
		]
	}
}
SectionPCM."Offload1 Playback" {
	index "1"
	# used for binding to the PCM
	id "2"
	dai."Offload1 Pin" {
		id "2"
	}
	pcm."playback" {
		capabilities "Offload1 Playback"
		configs [
			"PCM 48k Stereo 24bit"
			"PCM 48k Stereo 16bit"
		]
	}
}
SectionPCM."Loopback PCM" {
	index "1"
	# used for binding to the PCM
	id "3"
	dai."Loopback Pin" {
		id "3"
	}
	pcm."capture" {
		capabilities "Loopback Capture"
		configs [
			"PCM 48k Stereo 24bit"
			"PCM 48k Stereo 16bit"
		]
	}
}
SectionGraph."dsp" {
	index "1"
	lines [
		"Playback VMixer, , System Playback"
		"Playback VMixer, , Offload0 Playback"
		"Playback VMixer, , Offload1 Playback"
		"SSP0 CODEC OUT, , Playback VMixer"
		"Loopback Capture, , Playback VMixer"
		"Analog Capture, , SSP0 CODEC IN"
	]
}
SectionHWConfig."CodecHWConfig" {
	id "1"
	format "I2S"		# physical audio format.
	bclk   "codec_slave"	# platform is master of bit clock (codec is slave)
	fsync  "codec_slave"	# platform is master of fsync (codec is slave)
}
SectionLink."Codec" {
	# used for binding to the physical link
	id "0"
	hw_configs [
		"CodecHWConfig"
	]
	default_hw_conf_id "1"
}