From: Robert Jarzmik <robert.jarzmik@free.fr>
To: Mark Brown <broonie@sirena.org.uk>
Cc: alsa-devel@alsa-project.org, lrg@kernel.org
Subject: Re: SoC scenarii API
Date: Tue, 13 Jan 2009 23:31:27 +0100 [thread overview]
Message-ID: <87tz82yh1c.fsf@free.fr> (raw)
In-Reply-To: <20090113155602.GD11651@sirena.org.uk> (Mark Brown's message of "Tue\, 13 Jan 2009 15\:56\:04 +0000")
Mark Brown <broonie@sirena.org.uk> writes:
> On Tue, Jan 13, 2009 at 12:36:13PM +0100, Robert Jarzmik wrote:
>
>> As mioa701 submission was stopped due to the need of a generic scenarii API,
>> this a first attempt to design such an API in order to unblock mioa701
>> submission.
>
> You can still carry on submitting the core machine support and then
> patch it to add the scenario stuff later. That'd probably make review
> slightly easier too since it'd identify the new stuff explicitly.
Mmm ... at the risk of having another hardware incident ... why not ? Let's take
chances and see if another mio overheats.
> In general I'd like to see more exploration of the use cases that this
> is intended to satisfy, including in terms of the mioa701 itself. The
> documentation should make it clear that this is not intended to be a
> scalable solution and is only intended to be useful for hardware that is
> very limited.
More comments then ? You know how poor my english is, you'll have to cope with
it, sorry ... I'll add some information at the beginning.
> What are you using for user space - is it one of the standard stacks
> like FSO? Looking at the features you've got I'm a bit concerned that
No. Userspace is Trolltech's Qtopia over alsa-lib.
> the scenarios may get limiting in future: with both bluetooth and GSM
> things are already pretty complex. The only thing it's missing compared
> to OpenMoko is WiFi. For example, with your current scenarios I'm not
> sure if it'd be possible to record a call or do simultaneous record and
> playback?
You're right. That functionnality is not available. That's the price to pay,
somehow.
> For dealing with overheating I *expect* that you only need to
> have the machine driver prevent particular combinations of outputs being
> simultaneously enabled.
Ah, I feel you're right. The problem is, we don't have the specification, so we
cannot be sure what creates the overheating.
> That said, this looks mostly reasonable as a scenario API. I assume
> that it creates new controls for the master volume and for selecting the
> scenario?
Yes, namely "SoC Volume" and "SoC Mode".
> The main issues I can see are with how state transitions are
> managed and with how machine drivers interact with this if they need to
> update the configuration at run time.
Ah, the missing pre_scenario() and post_scenario() handlers in snd_soc_scenario
I guess. I thought about these and forgot them. Will these deal with your
concern ?
>
>> struct setup_mixmux {
>> char *mixname; /* Codec Mixer or Muxer name */
>> int val; /* Codec Mixer or Muxer value to enforce */
>> };
>
> This structure needs namespacing. Also, "Mux" not "Muxer".
Right, I'll amend that.
>
>> /**
>> * struct soc_scenario - describes one sound usecase
>
> snd_soc_scenario.
>
>> * @name: Scenario name, value as will be seen in alsa "SoC Mode" alsa control
>> * @pin_setup: Pin configuration to perform on scenario activation
>> * Table of all pins, as they should be configured. Each elements is a
>> * pin_change value, describing how to handle a specific pin.
>> * Table size must be the same as in snd_soc_scenario_init().
>
> The table size ought to be specified in only one place.
>
>> * @mixer_cleanup: Mixers/muxes to set up in phase (b)
>> * Table of all mixers/muxes to modify, NULL terminated.
>> * @mixer_setup: Mixers/muxers to set up in phase (c)
>> * Table of all mixers/muxes to modify, NULL terminated
>
> Hrm. This all feels either too flexible or too inflexible WRT state
> transitions. If you do need to impose ordering beyond what DAPM can
> figure out for itself then I'd expect to see any number of steps being
> allowed. If that isn't required then the intermediate step could just
> be dropped. If there were going to be some sort of "idle" state to
> transition through I'd expect to just see that identified and then the
> switchover to do a state->idle->state transition.
As you wish. mixer_cleanup can be removed, as a state->idle->state will do the
same thing.
> This might also be better with snd_ctl_elem_values so that it can cope
> with any control - there's definitely a need for configuring PGAs
> per-scenario, for example.
Right, I'll amend that.
> Please also use a number of elements parameter for consistency with the rest
> of the API (both here and ASoC wide).
OK.
>
>> struct soc_scenario {
>> const char *name; /* scenario name */
>> const unsigned char pin_setup[]; /* pin_change for pins */
>> const struct setup_mixmux mixes_cleanup[]; /* mix cleanup */
>> const struct setup_mixmux mixes_setup[]; /* mix setup */
>
> More natural would be pointers to arrays...
Maybe. I was thinking of some macro magic to define each soc_scenario (thus the
const). Let me activate thing a bit about it.
>
>> int snd_soc_scenario_init(struct snd_soc_codec *codec,
>> struct soc_scenario *scenario, int nb_scenarii,
>
> Please make this take a snd_soc_card rather than a snd_soc_codec. Most
> of the card-wide APIs currently take a codec but this is in the process
> of being fixed. Also, scenarios is the more usual plural in English.
> For consistency with the rest of the API it'd be nice to use num rather
> than nb.
OK.
> Some of the documentation about the situations where this API should be
> used should go with this function.
>
>> char *pin_names[], int nb_pins);
>
> I'm not sure why the pin names are specified separately here? Would it
> not be better to just use the pin lists in the scenarios.
There are _no_ pin lists in scenarios. The scenarios only define a transition
for each pin index. The actual pins are initialized once in the init function
(ie. pin_names[0] = "Rear Speaker" for example). Then, in each scenario,
pin_setup[0] will tell what to do to "Rear Speaker" : leave it, activate it or
deactivate it.
>> /**
>> * snd_soc_scenario_init - initialize soc scenarii
>> * @codec: codec used for the init
>> */
>> void snd_soc_scenario_release(struct snd_soc_codec *code);
>
> I sense bitrot :)
Yes ...
I'll send an update soon.
--
Robert
next prev parent reply other threads:[~2009-01-13 22:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-13 11:36 SoC scenarii API Robert Jarzmik
2009-01-13 15:56 ` Mark Brown
2009-01-13 22:31 ` Robert Jarzmik [this message]
2009-01-13 23:14 ` Mark Brown
2009-02-20 19:04 ` Robert Jarzmik
2009-03-08 19:17 ` Mark Brown
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=87tz82yh1c.fsf@free.fr \
--to=robert.jarzmik@free.fr \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@sirena.org.uk \
--cc=lrg@kernel.org \
/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.