[[PageOutline]] = Ventana Audio = The Advanced Linux Sound Architecture (ALSA) system is the current audio driver subsystem in Linux. The hardware that is used: * [http://cache.freescale.com/files/analog/doc/data_sheet/SGTL5000.pdf?pspll=1 Freescale SGTL5000] with line level input and output (standard board configuration) or (custom board configuration) headphone level output (custom board configuration) - 45mW max into 16ohme@3.3V load, and mic input * tda1997x (HDMI Audio in)(i.MX6) * imxhdmisoc (HDMI Audio out)(i.MX6) For information regarding Audio / Video breakout adapters for Ventana see: * [wiki:ventana/breakoutadapters Audio / Video breakout Adapters] Note that by default, Ventana family boards that have analog audio have a default strapping of [http://en.wikipedia.org/wiki/Line_level line level] audio (both input and output). However, there is an option to load Headphone level output/Mic level input on request. Please contact sales@gateworks.com if you would like a special built with these loadings. == Devices == The following commands are useful when dealing with multiple audio devices (These commands are done on a GW5400 which has multiple sources of audio in/out - different boards will have different devices at varied locations): * see a list of all audio cards: {{{ $ cat /proc/asound/cards 0 [sgtl5000audio ]: sgtl5000-audio - sgtl5000-audio sgtl5000-audio 1 [tda1997xaudio ]: tda1997x-audio - tda1997x-audio tda1997x-audio 2 [imxhdmisoc ]: imx-hdmi-soc - imx-hdmi-soc imx-hdmi-soc }}} * There are 3 audio cards in the system: * 0: sgtl5000audio (Analog Audio in/out) * 1: tda1997xaudio (HDMI Audio in) * 2: imxhdmisoc (HDMI Audio out) * Note that this is only available for playback if the framebuffer is not blanked * see a list of all playback devices: {{{ $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sgtl5000audio [sgtl5000-audio], device 0: HiFi sgtl5000-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: imxhdmisoc [imx-hdmi-soc], device 0: IMX HDMI TX mxc-hdmi-soc-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 }}} * the above shows 2 playback capable devices: * card 0: the sgtl5000audio device which has one subdevice (0) - this can be represented as 'hw:0,0' * card 2: the imxhdmisoc device which has one subdevice (0) - this can be represented as 'hw:2,0' * Note that card 1 is not listed as it is an HDMI Audio input only and not capable of playback * see a list of all playback device 'names' {{{ $ aplay -L null Discard all samples (playback) or generate zero samples (capture) sysdefault:CARD=sgtl5000audio sgtl5000-audio, Default Audio Device sysdefault:CARD=imxhdmisoc imx-hdmi-soc, Default Audio Device }}} * the above shows 3 playback devices shown by name (Note that this is the name what can be used with 'aplay -D ' to specify playback device): * null - a null device * sysdefault:CARD=sgtl5000audio - Analog audio out * sysdefault:CARD=imxhdmisoc - HDMI audio out * see a list of all capture devices: {{{ root@ventana:~# arecord -l **** List of CAPTURE Hardware Devices **** card 0: sgtl5000audio [sgtl5000-audio], device 0: HiFi sgtl5000-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: tda1997xaudio [tda1997x-audio], device 0: IMX HDMI RX tda1997x-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 }}} * the above shows 2 capture capable devices: * card 0: the sgtl5000audio device which has one subdevice (0) - this can be represented as 'hw:0,0' * card 1: the tda1997xaudio device which has one subdevice (0) - this can be represented as 'hw:1,0' * Note that card 2 is not listed as it is an HDMI Audio output only and not capable of capture * see a list of all record device 'names': {{{ $ arecord -L null Discard all samples (playback) or generate zero samples (capture) sysdefault:CARD=sgtl5000audio sgtl5000-audio, Default Audio Device sysdefault:CARD=tda1997xaudio tda1997x-audio, Default Audio Device }}} * the above shows 3 capture devices shown by name (Note that this is the name what can be used with 'arecord -D ' to specify capture device): * 'null' - a null device * 'sysdefault:CARD=sgtl5000audio' - Analog audio in * 'sysdefault:CARD=tda1997xaudio' - HDMI audio in * display audio controls: {{{ amixer }}} * you can use the '-c ' parameter to amixer to specify a specific card (card number for /proc/asound/cards such as 'amixer -c 0' for the first card) * see 'amixer -h' for details on setting/getting various controls [=#amixer] == Mixer (mux/gain/volume) == The ALSA mixer controls the muxing of inputs to outputs, capture gains, and volume levels. The settings vary per card. You can use the amixer command to get/set/list available controls per card: * list controls for card0: {{{ amixer -c0 }}} [=#amixer-sgtl5000] === sgtl5000 (analog audio) === Note that by default, Ventana family boards that have analog audio have a default strapping of [http://en.wikipedia.org/wiki/Line_level line level] audio (both input and output). However, there is an option to load Headphone level output and/or Mic level input on request. Please contact sales@gateworks.com if you would like a special built with these loadings. [=#amixer-sgtl5000-lineout] ==== Line Level Audio Output ==== common amixer settings for line level audio: {{{ # set output level to max amixer -c 0 -q sset "PCM" 100% # set capture mux amixer -c 0 -q sset "Capture Mux" LINE_IN amixer -c 0 -q sset "Line In Function" on # set capture gain amixer -c 0 -q sset "Capture" 8 }}} [=#amixer-sgtl5000-hpout] ==== Headphone Level Audio Output ==== If you've ordered a board with HP level audio the following specifications apply: * sgtl5000 can drive 45mW max into a 16ohm load at 3.3V (53mA) common amixer settings for headphone level audio: {{{ # Set zero cross detect gain amixer -c 0 sset Headphone Playback ZC 60% }}} In addition, you will also have to make a change to your device tree file in the kernel. Below is a sample patch of what you will have to do (filename depends on product you've ordered) {{{ #!diff diff --git a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi index ed71beb..1c0b229 100644 --- a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi @@ -109,7 +109,7 @@ audio-codec = <&codec>; audio-routing = "LINE_IN", "Line In Jack", - "Line Out Jack", "LINE_OUT"; + "Headphone Jack", "HP_OUT"; mux-int-port = <1>; mux-ext-port = <4>; }; }}} The defaults for the analog audio (which are found by running 'amixer' with no args) are: * Output Level (PCM) (0 - 192) * Front Left: Playback 192 [100%] * Front Right: Playback 192 [100%] * Capture Mux (MIC_IN or LINE_IN) * MIC_IN * Capture Gain (0-15): * Front Left: Capture 5 [33%] * Front Right: Capture 6 [40%] [=#amixer-hdmi-out] === HDMI (digital audio) === The '''imxhdmisoc''' audio (output only) device can be used to send digital audio to a connected (and unblanked) HDMI monitor that has speakers. The '''tda1997xaudio''' audio (input only) device (on GW5400 models) can be used to capture digital audio from a connected (and unblanked) HDMI source that streams audio. Note that HDMI audio supports multiple sample-rates and the sample-rate available to capture depends on the incoming source stream. The source stream's audio sample rate can be found via sysfs /sys/bus/i2c/drivers/tda1997x/2-0048/audmode [=#alsa-utils] == ALSA utility (alsa-utils package) examples (arecord/aplay) == The alsa-utils package contains the arecord, aplay, amixer applications aplay: * playback pre-recorded sound to analog audio device (GW54xx/GW53xx/GW52xx) {{{ aplay -D sysdefault:CARD=sgtl5000audio /usr/share/sounds/alsa/Front_Center.wav }}} * playback pre-recorded sound to HDMI audio output device {{{ aplay -D sysdefault:CARD=imxhdmisoc /usr/share/sounds/alsa/Front_Center.wav }}} arecord: * record 10 seconds of CD quality audio (16bit, 44.1KHz, stereo) from analog audio device to /tmp/foo.wav {{{ arecord -D sysdefault:CARD=sgtl5000audio -f cd -d 10 -t wav /tmp/foo.wav }}} * make sure you have specified the capture gain and input device (see above) == Codecs == For Codec support (Encoder / Decoder) details please see: * [wiki:ventana/codec Ventana Codecs] [=#gstreamer] == Gstreamer examples == For GStreamer information and examples please see: * [wiki:Yocto/gstreamer/audio GStreamer Audio Wiki Page]