ALSA: control: delegate TLV eventing to each driver
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 24 Aug 2017 01:46:14 +0000 (10:46 +0900)
committerTakashi Iwai <tiwai@suse.de>
Thu, 24 Aug 2017 07:15:13 +0000 (09:15 +0200)
commitfb8027ebfd4b8a3050edba66805bc360ed9b3f11
tree15b0e8fdb6b8293c20fba0ef3a4839fd1b30f9f1
parent5d3806eea2dd19b083c729a32aded6d012ead5ae
ALSA: control: delegate TLV eventing to each driver

In a design of ALSA control core, a set of elements is represented by
'struct snd_kcontrol' to share common attributes. The set of elements
shares TLV (Type-Length-Value) data, too.

On the other hand, in ALSA control interface/protocol for applications,
a TLV operation is committed to an element. Totally, the operation can
have sub-effect to the other elements in the set. For example, TLV_WRITE
operation is expected to change TLV data, which returns to applications.
Applications attempt to change the TLV data per element, but in the above
design, they can effect to elements in the same set.

As a default, ALSA control core has no implementation except for TLV_READ
operation. Thus, the above design looks to have no issue. However, in
kernel APIs of ALSA control component, developers can program a handler
for any request of the TLV operation. Therefore, for elements in a set
which has the handler, applications can commit TLV_WRITE and TLV_COMMAND
requests.

For the above scenario, ALSA control core assist notification. When the
handler returns positive value, the core queueing an event for a requested
element. However, this includes design defects that the event is not
queued for the other element in a set. Actually, developers can program
the handlers to keep per-element TLV data, but it depends on each driver.

As of v4.13-rc6, there's no driver in tree to utilize the notification,
except for user-defined element set. This commit delegates the notification
into each driver to prevent developers from the design defects.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/control.c