Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Momentics® Development Suite 6.3.0 Service Pack 3 Audio Driver Patch for the Intel 82801G (ICH7 Family) High Definition Audio Controller (Patch ID 684) Release Notes

QNX® Momentics® Development Suite 6.3.0 Service Pack 3 Audio Driver Patch for the Intel 82801G (ICH7 Family) High Definition Audio Controller (Patch ID 684) Release Notes

Date of this edition: December 10, 2007

Target OS: This patch is compatible with x86, PPCBE, ARMLE, and SHLE targets that are running QNX® Neutrino® 6.3.0 SP3 or 6.3.2.

Host OS: In order to apply this patch, you must have installed QNX Momentics 6.3.0 SP3 or 6.3.2 as a self-hosted QNX® Neutrino® system, or on one of the following host OSs:

Version of QNX Momentics Microsoft Windows Linux Solaris
6.3.0 SP3 Windows Vista, XP SP2, 2000 SP4, or NT SP6a Linux Red Hat 8 or 9, Red Hat Enterprise WS 3 or 4, Red Hat Fedora Core 3 or 4, Debian 3.1, or SUSE 10 7, 8, 9, or 10
6.3.2 Windows Vista, XP SP2, or 2000 SP4 Linux Red Hat Enterprise Workstation 4 or 5, Red Hat Fedora Core 6 or 7, Ubuntu 6.0.6 LTS or 7.0.4, or SUSE 10 Not supported

Note: For the most up-to-date version of these notes, go to our website (www.qnx.com), log into your myQNX account, and then go to the Download Center.

Contents

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

What's in this patch?

This patch contains updates to the following binaries:

  • libasound.so
  • libasound.so.2
  • deva-ctrl-intel_hda.so
  • deva-mixer-hda.so

as well as to the following system header:

  • <sys/asoundlib.h>

Installed files

This file is installed in $QNX_TARGET/:

  • usr/include/sys/asoundlib.h

The following files are installed under $QNX_TARGET/ in the directory for each supported target:

  • ARMLE:
    • armle/lib/libasound.so
    • armle/lib/libasound.so.2
  • PPCBE:
    • ppcbe/lib/libasound.so
    • ppcbe/lib/libasound.so.2
  • SHLE:
    • shle/lib/libasound.so
    • shle/lib/libasound.so.2
  • x86:
    • x86/lib/dll/deva-ctrl-intel_hda.so
    • x86/lib/dll/deva-mixer-hda.so
    • x86/lib/libasound.so
    • x86/lib/libasound.so.2

Fixed issues

This patch addresses the following issues:

  • We've created an audio driver for the Intel 82801G (ICH7 Family) High Definition Audio Controller. This driver supports the STAC9200 HD audio codec. (Ref# 40078, 40535)
  • The libasound.so library includes these new functions:
    snd_mixer_open_name()
    Create a connection and handle to a mixer device specified by name
    snd_pcm_open_name()
    Create a handle and open a connection to an audio interface specified by name

    For more information, see below. (Ref# 51349)

Known issues

None currently known.

New functions

snd_mixer_open_name()

Synopsis:

#include <sys/asoundlib.h>

int snd_mixer_open_name( snd_mixer_t **handle, 
                         char *name );

Arguments:

handle
A pointer to a location where snd_mixer_open_name() can store a handle for the mixer device.
name
The full path of the mixer device to open (e.g. /dev/snd/mixerC0).

Description

The snd_mixer_open_name() function creates a handle and opens a connection to the named mixer device. You'll use this handle when calling the other snd_mixer_* functions.

Returns:

Zero on success, or a negative value on error.

Errors:

-EACCES
Search permission is denied on a component of the path prefix, or the device exists and the permissions specified are denied.
-EINTR
The open() operation was interrupted by a signal.
-EMFILE
Too many file descriptors are currently in use by this process.
-ENFILE
Too many files are currently open in the system.
-ENOENT
The named device doesn't exist.
-ENOMEM
Not enough memory is available for the data structure.
-SND_ERROR_INCOMPATIBLE_VERSION
The audio driver version is incompatible with the client library that the application is using.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

snd_pcm_open_name()

Synopsis:

#include <sys/asoundlib.h>

int snd_pcm_open_name( snd_pcm_t **handle, 
                       char *name, 
                       int mode );

Arguments:

handle
A pointer to a location where snd_pcm_open_name() can store a handle for the audio interface. You'll need this handle when you call the other snd_pcm_* functions.
name
The name of the PCM device to open. You can specify either a base name (e.g. navi) or a full path (e.g. /dev/snd/pcmC0D0p).
mode
One of:
  • SND_PCM_OPEN_PLAYBACK — open the playback channel (direction).
  • SND_PCM_OPEN_CAPTURE — open the capture channel (direction).

You can OR this flag with any of the above:

  • SND_PCM_OPEN_NONBLOCK — force the mode to be nonblocking. This affects any reading from or writing to the device that you do later; you can query the device any time without blocking.

    You can change the blocking setup later by calling snd_pcm_nonblock_mode().

Description:

The snd_pcm_open_name() function creates a handle and opens a connection to the named PCM audio interface. This function is primarily intended to be used with symbolic device names available with the 4.3 release of audio. It also checks if the protocol is compatible to prevent the use of programs written to an older API with newer drivers.

There are no defaults; your application must specify all the arguments to this function.

Returns:

Zero on success, or a negative error code.

Errors:

-EINVAL
The mode is invalid.
-ENOENT
The named device doesn't exist.
-ENOMEM
Not enough memory is available to allocate the control structures.
-SND_ERROR_INCOMPATIBLE_VERSION
The audio driver version is incompatible with the client library that the application is using.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

Caveats:

Successfully opening a PCM channel doesn't guarantee that there are enough audio resources free to handle your application. Audio resources (e.g. subchannels) are allocated when you configure the channel by calling snd_pcm_channel_params() or snd_pcm_plugin_params().

New DLLs

deva-ctrl-intel_hda.so: sound driver for the Intel High Definition Audio controllers


Note: You must be root to start this driver.

Syntax:

Direct invocation (also causes a new io-audio process to start):

io-audio -d intel_hda [pci=xx] &

Mounting (requires that io-audio already be running):

mount -Tio-audio [-opci=xx] /lib/dll/deva-ctrl-intel_hda.so &

Runs on:

x86

Options:

pci xx
The PCI index of the card you want to attach to. If you don't specify this option, the driver attempts to find the first unused card in the system.

Description:

The deva-ctrl-intel_hda.so shared object is a device driver DLL used by the io-audio manager. It uses the API described in the Audio Developer's Guide.

While deva-ctrl-intel_hda.so is running, you can use applications with sound (e.g. mmplay) and those that control the sound system (e.g. mixer).

Examples:

Invoke deva-ctrl-intel_hda.so directly from io-audio:

io-audio -d intel_hda &

Mount deva-ctrl-intel_hda.so (io-audio must be running):

mount -Tio-audio /lib/dll/deva-ctrl-intel_hda.so &

Files:

deva-mixer-hda.so
Supports the mixer.

Errors:

When an error occurs, deva-ctrl-intel_hda.so sends a description of the error to the system logger (see slogger).

deva-mixer-hda.so: mixer DLL for High Definition Audio codecs


Note: You can't invoke this shared object. An audio driver (deva-ctrl-*) loads it if the driver determines that your hardware needs it.

Runs on:

All supported platforms.

Description:

The deva-mixer-hda.so shared object provides an interface between High Definition Audio codecs and an audio driver.


Note: The Dll has support for a subset of the codecs in production; your particular codec may not yet be supported.

Errors:

When an error occurs, deva-mixer-hda.so sends a description of the error to the system logger (see slogger).

Technical support

If you have any questions, comments, or problems with a QNX product, please contact Technical Support. For more information, see the How to Get Help chapter of the Welcome to QNX Momentics guide or visit our website, www.qnx.com.