All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
To: Clemens Ladisch <clemens@ladisch.de>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>
Subject: Re: Some questions about userspace control elements
Date: Sat, 07 Feb 2015 10:58:19 +0900	[thread overview]
Message-ID: <54D5713B.2000406@sakamocchi.jp> (raw)
In-Reply-To: <54D48BA8.6060104@ladisch.de>

Hi Clemens,

On Feb 6 2015 18:38, Clemens Ladisch wrote:
> Takashi Sakamoto wrote:
>> On Feb 5 2015 08:51, Takashi Sakamoto wrote:
>>> sound/core/control.c:1188
>>> {{{
>>> kctl.count = info->owner ? info->owner : 1;
>>> }}}
>>>
>>> In this code, the value in struct snd_ctl_elem_info.owner is assigned to
>>> struct snd_kcontrol.count. The meaning of these two member is completely
>>> different but assigned.
> 
> There is hardware that has many identhtical controls.  To save memory,
> ALSA treats controls with .count > 1 as if there were multiple controls.
>
> This optimization is not visible in the userspace API.

In my understanding, it's due to the granularity of operation. If we
assume a PCI device has one register to express several control elements
as bitfield. One read or write operation can handle these controls. Such
control elements can be expressed in one ALSA control substance.

> The owner field is used because there is no other field to set the
> count.

No. In SNDRV_CTL_IOCTL_ELEM_ADD ioctl, struct snd_ctl_elem_info.count
has the number of elements in this control, there it's an abuse of
member unrelated to the count.

>> When any userspace control element are added, the value of struct
>> snd_ctl_elem_info.owner is zero because there's no API to set this
>> member in userspace
> 
> So far, setting this field has not been needed.  An API could be added.

I cannot find the advantage to add such API in userspace. The value of
owner field SHOULD be set just by lock/unlock API.

>>> I guess that the reason is to limit the number of event generated when
>>> the control element set is operated.
> 
> If a driver needs twenty identical controls, it could create one control
> with count=20, or twenty controls with count=1.  In both cases, twenty
> events are sent.

But this is not applied to userspace controls because a control with 20
elements can generate one events instead of 20.

This is ugly because it demands userspace applications to distinguish
kernel/userspace application in event handling.


Thanks

Takashi Sakamoto

  reply	other threads:[~2015-02-07  1:58 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-01 11:41 Some questions about userspace control elements Takashi Sakamoto
2015-02-01 17:50 ` Clemens Ladisch
2015-02-02 14:14   ` Takashi Sakamoto
2015-02-04 23:51   ` Takashi Sakamoto
2015-02-05  0:44     ` Takashi Sakamoto
2015-02-06  9:38       ` Clemens Ladisch
2015-02-07  1:58         ` Takashi Sakamoto [this message]
2015-02-07 15:45           ` Clemens Ladisch
2015-02-08 10:57             ` Takashi Sakamoto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54D5713B.2000406@sakamocchi.jp \
    --to=o-takashi@sakamocchi.jp \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.