From: Mark Brown <broonie@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: Oder Chiou <oder_chiou@realtek.com>,
"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
"lgirdwood@gmail.com" <lgirdwood@gmail.com>,
Bard Liao <bardliao@realtek.com>,
Gustaw Lewandowski <gustaw.lewandowski@intel.com>,
Flove <flove@realtek.com>
Subject: Re: [PATCH v6] ASoC: add RT286 CODEC driver
Date: Thu, 8 May 2014 09:00:25 +0100 [thread overview]
Message-ID: <20140508080025.GA12304@sirena.org.uk> (raw)
In-Reply-To: <536B2C9D.9040807@metafoo.de>
[-- Attachment #1.1: Type: text/plain, Size: 3787 bytes --]
On Thu, May 08, 2014 at 09:05:01AM +0200, Lars-Peter Clausen wrote:
> On 05/07/2014 09:49 PM, Mark Brown wrote:
> >My first thought would be to extend those so we have callbacks when
> >required, to be honest I'd forgotten they weren't there already.
> But that's just the normal ..._EXT() controls with custom put/get handlers.
Hrm, yes. That's the issue - I have never really differentiated between
virtual and external enums here, the external controls are (as far as
DAPM is concerned) also virtual. To be honest I'd forgotten that there
were external controls in DAPM, there's only one user.
> >Right, to me that's not actually a register map at all since it's
> >missing so many of the assumptions that back up register maps.
> Well there is a register map, there is just no linear address space. It's
> more hierarchical, but you can still map that hierarchical addressing scheme
> to a linear one. I think what best describes HDA is object oriented RPC. You
The non-linear addressing isn't the worst bit, I'd say the worst bit is
that the read and write formats for the data aren't consistent with each
other. That's really the fundamental assumption here.
> have your objects, called nodes, each node has a unique identifier, called
> the node ID (NID). Then you have functions, called verbs, each verb has a
> specific ID. A node can support a certain set of verbs. And each verb has a
> verb specific payload, which is the functions signature. Most of the verbs
> are some kind of read/write register functions.
Yes, it makes sense as RPC (and hence as external controls as I have
been suggesting).
> So the address of the register in which the amplifier gain is stored is the
> NID + It's a amplifier you want to access + whether it's a input or output
> amplifier + whether it's left or right amplifier + amplifier index. You can
> map that onto a linear address space and in the regmap read/write callback
> do the mapping to the appropriate verb payload layout.
It is of course always going to be possible to map any set of settings
onto a register map, the question is if it accomplishes anything to do
so. Once you're talking about having a mapping function like that
which understands the contents of all the registers it sounds like the
contortions to fit into a register map are more effort than is being
saved and doing nothing for comprehensibility.
> >>the same data). In a sense this is similar to devices which have registers
> >>with different sizes, we also support these with custom regmap callbacks.
> >But those are only breaking that one assumption so they fit into the
> >idea of a register map much more readily - it's really only the physical
> >I/O code that actually notices anything, all the cache and other
> >operations can carry on uninterrupted.
> This is one of the reasons why I suggest using regmap. You probably still
> want caching, you probably still be able to sync the register cache, etc. If
> you don't use regmap you'd have to implement this on your own.
So how does HDA handle this? We can obviously keep recording settings
in the same way as we do for virtual enums, writing them out shouldn't
be so hard. The cache code isn't going to buy us much if we have to
write things out control by control anyway, it essentially just boils
down to a fancy list walk.
If you really want to reuse regmap having a write only regmap internal
to the driver (not presented to ASoC) which just remembers the last
value written to every NID/VID combination might work and at least
avoids the ugly bits with trying to convince ASoC there are registers
since you don't need to worry about reading the data back and can just
pretend that read values match written values since we never look at
them except to write them back out.
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2014-05-08 8:00 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-14 5:59 [PATCH v6] ASoC: add RT286 CODEC driver bardliao
2014-04-15 12:04 ` Mark Brown
2014-04-16 13:26 ` Bard Liao
2014-04-16 21:11 ` Mark Brown
2014-04-17 5:39 ` Bard Liao
2014-04-18 10:37 ` Mark Brown
2014-05-06 12:04 ` Bard Liao
2014-05-07 17:21 ` Mark Brown
2014-05-07 17:46 ` Lars-Peter Clausen
2014-05-07 18:07 ` Mark Brown
2014-05-07 18:21 ` Lars-Peter Clausen
2014-05-07 19:49 ` Mark Brown
2014-05-08 7:05 ` Lars-Peter Clausen
2014-05-08 8:00 ` Mark Brown [this message]
2014-05-08 8:57 ` Lars-Peter Clausen
2014-05-12 11:08 ` Bard Liao
2014-05-12 14:51 ` Lars-Peter Clausen
2014-05-12 20:29 ` Mark Brown
2014-06-04 12:08 ` Bard Liao
2014-06-04 12:37 ` 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=20140508080025.GA12304@sirena.org.uk \
--to=broonie@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=bardliao@realtek.com \
--cc=flove@realtek.com \
--cc=gustaw.lewandowski@intel.com \
--cc=lars@metafoo.de \
--cc=lgirdwood@gmail.com \
--cc=oder_chiou@realtek.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox