Components
Prev | Chapter 3. Management of Cards and Components | Next

## Components

After the card is created, you can attach the components (devices) to the card instance. In an ALSA driver, a component is represented as a struct snd_device object. A component can be a PCM instance, a control interface, a raw MIDI interface, etc. Each such instance has one component entry.

A component can be created via `snd_device_new()` function.

      snd_device_new(card, SNDRV_DEV_XXX, chip, &ops);

This takes the card pointer, the device-level (`SNDRV_DEV_XXX`), the data pointer, and the callback pointers (`&ops`). The device-level defines the type of components and the order of registration and de-registration. For most components, the device-level is already defined. For a user-defined component, you can use `SNDRV_DEV_LOWLEVEL`.

This function itself doesn't allocate the data space. The data must be allocated manually beforehand, and its pointer is passed as the argument. This pointer (`chip` in the above example) is used as the identifier for the instance.

Each pre-defined ALSA component such as ac97 and pcm calls `snd_device_new()` inside its constructor. The destructor for each component is defined in the callback pointers. Hence, you don't need to take care of calling a destructor for such a component.

If you wish to create your own component, you need to set the destructor function to the dev_free callback in the `ops`, so that it can be released automatically via `snd_card_free()`. The next example will show an implementation of chip-specific data.

Prev | Up | Next
Chapter 3. Management of Cards and Components | Home | Chip-Specific Data