# Android ALSA configuration file for the WM8994 audio.


##################################################################################################################
#
#	{name "Playback Path"		value 2}		# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
#								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 9:R_SPK_HP
#	{name "Capture MIC Path"	value 1} 		# 0:Main Mic 1:Ear MIC 2:BT MIC
#	{name "Voice Call Path"		value 1}		# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
#
##################################################################################################################


##
## Mixer Devices
##

ctl.AndroidPlayback {
	type hw
	card 0
}

ctl.AndroidRecord {
	type hw
	card 0
}


##
## Playback Devices
##

pcm.AndroidPlayback {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
		]
	}
}

pcm.AndroidPlayback_Earpiece {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 1}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Speaker {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headset {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 3}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headphone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 4}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Bluetooth {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 5}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Earpiece_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 1}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headset_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 3}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headphone_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 4}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Bluetooth_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 5}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_Headset_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 6}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_Headphone_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 6}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Earpiece_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 7}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 7}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headset_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 8}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Headphone_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 9}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Bluetooth_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 5}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_Headset_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 10}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Speaker_Headphone_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Playback Path"	value 10}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidPlayback_Earpiece_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 1}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Speaker_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Headset_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 3}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Headphone_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 4}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Bluetooth_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 5}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Speaker_Headset_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidPlayback_Speaker_Headphone_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio playback"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Voice Call Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}


##
## Capture  device
##

pcm.AndroidRecord {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Microphone {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Earpiece_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Headset_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 1} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Headphone_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Bluetooth_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio capture"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 2} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_Headset_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_Headphone_normal {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio capture"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Playback Path"	value 2}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidRecord_Headset_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio capture"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Playback Path"	value 3}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidRecord_Headphone_ringtone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0	# Must be of type "digital audio capture"
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{name "Playback Path"	value 4}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
								# 6:SPK_HP 7:R_SPK 8:R_HP 9:R_HP_NO_MIC 10:R_SPK_HP
		]
	}
}

pcm.AndroidRecord_Earpiece_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Headset_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 1} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Headphone_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Bluetooth_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 2} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
		]
	}
}

pcm.AndroidRecord_Speaker_Headset_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 1} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
			{name "Voice Call Path"		value 3}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}

pcm.AndroidRecord_Speaker_Headphone_incall {
	type hooks
	slave.pcm default
	hooks.0 {
		type ctl_elems
		hook_args [
			# Enable audio output from the DSP
			{name "Capture MIC Path"	value 0} 	# 0:Main Mic 1:Ear MIC 2:BT MIC
			{name "Voice Call Path"		value 4}	# 0:OFF 1:RCV 2:SPK 3:HP 4:HP_NO_MIC 5:BT
		]
	}
}
