Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Mark Brown <broonie@kernel.org>
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, 08 May 2014 10:57:44 +0200	[thread overview]
Message-ID: <536B4708.8080203@metafoo.de> (raw)
In-Reply-To: <20140508080025.GA12304@sirena.org.uk>

On 05/08/2014 10:00 AM, Mark Brown wrote:
[...]
>> 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.

There is still structure, the mapping function does not have to understand 
each register it only has to understand each verb and the driver uses maybe 
6-7 different verbs, so it is not that bad. The code would basically look 
like this:

write_reg(addr, val)
{
	verb = EXTRACT_VERB(addr);
	nid = EXTRACT_NID(addr);
	pid = EXTRACT_PID(addr);

	switch (verb) {
	case VERB1:
		return write_verb1(nid, pid, val):
	case VERB2:
		return write_verb2(nid, pid, val):
	....
	}
}

Where pid is verb specific additional addressing information that is used in 
the verbs payload.

>
>>>> 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.

It's not just the DAPM stuff, but also the normal controls, for which we do 
not have per control caching.

>
> 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.

Yes kind of.

  reply	other threads:[~2014-05-08  8:57 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
2014-05-08  8:57                           ` Lars-Peter Clausen [this message]
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=536B4708.8080203@metafoo.de \
    --to=lars@metafoo.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=bardliao@realtek.com \
    --cc=broonie@kernel.org \
    --cc=flove@realtek.com \
    --cc=gustaw.lewandowski@intel.com \
    --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