ALSA: doc: Add device-managed resource section
Give brief explanations about the device-managed resources and the newly introduced snd_devm_card_new() helper. Link: https://lore.kernel.org/r/20210715075941.23332-5-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
c2b94954ad
commit
ac327f1b10
|
@ -4172,6 +4172,39 @@ module license as GPL, etc., otherwise the system is shown as “tainted”.
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
|
|
||||||
|
Device-Managed Resources
|
||||||
|
========================
|
||||||
|
|
||||||
|
In the examples above, all resources are allocated and released
|
||||||
|
manually. But human beings are lazy in nature, especially developers
|
||||||
|
are lazier. So there are some ways to automate the release part; it's
|
||||||
|
the (device-)managed resources aka devres or devm family. For
|
||||||
|
example, an object allocated via :c:func:`devm_kmalloc()` will be
|
||||||
|
freed automatically at unbinding the device.
|
||||||
|
|
||||||
|
ALSA core provides also the device-managed helper, namely,
|
||||||
|
:c:func:`snd_devm_card_new()` for creating a card object.
|
||||||
|
Call this functions instead of the normal :c:func:`snd_card_new()`,
|
||||||
|
and you can forget the explicit :c:func:`snd_card_free()` call, as
|
||||||
|
it's called automagically at error and removal paths.
|
||||||
|
|
||||||
|
One caveat is that the call of :c:func:`snd_card_free()` would be put
|
||||||
|
at the beginning of the call chain only after you call
|
||||||
|
:c:func:`snd_card_register()`.
|
||||||
|
|
||||||
|
Also, the ``private_free`` callback is always called at the card free,
|
||||||
|
so be careful to put the hardware clean-up procedure in
|
||||||
|
``private_free`` callback. It might be called even before you
|
||||||
|
actually set up at an earlier error path. For avoiding such an
|
||||||
|
invalid initialization, you can set ``private_free`` callback after
|
||||||
|
:c:func:`snd_card_register()` call succeeds.
|
||||||
|
|
||||||
|
Another thing to be remarked is that you should use device-managed
|
||||||
|
helpers for each component as much as possible once when you manage
|
||||||
|
the card in that way. Mixing up with the normal and the managed
|
||||||
|
resources may screw up the release order.
|
||||||
|
|
||||||
|
|
||||||
How To Put Your Driver Into ALSA Tree
|
How To Put Your Driver Into ALSA Tree
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue