From: Lars-Peter Clausen <lars@metafoo.de>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: linux-kernel@vger.kernel.org,
Dimitris Papastamos <dp@opensource.wolfsonmicro.com>,
Liam Girdwood <lrg@ti.com>, Samuel Oritz <sameo@linux.intel.com>,
Graeme Gregory <gg@slimlogic.co.uk>
Subject: Re: [PATCH 1/8] regmap: Add generic non-memory mapped register access API
Date: Tue, 21 Jun 2011 02:45:53 +0200 [thread overview]
Message-ID: <4DFFE9C1.5060003@metafoo.de> (raw)
In-Reply-To: <20110621001438.GD1905@opensource.wolfsonmicro.com>
On 06/21/2011 02:14 AM, Mark Brown wrote:
>
>>> +static void regmap_format_4_12_write(struct regmap *map,
>>> + unsigned int reg, unsigned int val)
>>> +{
>>> + u16 *out = map->work_buf;
>>> + *out = cpu_to_be16((reg << 12) | val);
>>> +}
>
>>> +static void regmap_format_7_9_write(struct regmap *map,
>>> + unsigned int reg, unsigned int val)
>>> +{
>>> + u16 *out = map->work_buf;
>>> + *out = cpu_to_be16((reg << 9) | val);
>>> +}
>
>> It would make sense to keep val_bits around and implement these two generically:
>> *out = cpu_to_be16((reg << map->format.val_bits) | val);
>
> I'm not sure it's worth it for the two cases we know about, and as with
> passing the map into these I like keeping the byte oriented assumption
> in the interfaces as much as possible as it makes things easier to think
> about.
Hm, ok I guess we can wait with this until there are actually other similar
formats which follow this scheme.
>
>>> +struct regmap *regmap_init(struct device *dev, struct regmap_config *config)
>
>> regmap_alloc would in my opinion be a better name.
>
> I like init, especially considering the plan to add cache support as
> there's more work in setting that up once you start doing the advanced
> caches.
If you take a look at other kernel apis _alloc is usually used if the structure
is allocated (and initialized) inside the function and _init is used when the
function initializes an already existing structure. And it also matches better
with regmap_free.
>
>>> + /*
>>> + * Some buses flag reads by setting the high bit in the
>>> + * register addresss; since it's always the high bit for all
>>> + * current formats we can do this here rather than in
>>> + * formatting. This may break if we get interesting formats.
>>> + */
>>> + if (map->bus->read_flag_in_reg)
>>> + u8[0] |= 0x80;
>
>> This is rather specific. Making this a per device mask or bit offset, would
>> make more sense in my opinion. I have for example one SPI codec device which
>> uses the 7th bit to indicate a read. And I also have devices on a custom bus,
>
> Can you say what device this is? I'm just going on the devices we've
> seen in the kernel so far here... Still easy enough to do.
>
The ad1836 for example really only uses 10 bits for data instead of 12.
The 11th bit is reserved and the 12th bit is used to indicate whether it is an
read or write. Though since gaps between register and data are not supported
data was made 12 bits wide and the upper 2 bits are always set to 0.
The adav801, which is going to be submitted upstream soon, uses a similar
scheme. First seven bits are register address, then 1 bit which indicates
read/write and then 8 bits data. We are currently using the same trick here and
made data 9 bits wide.
>>> +struct regmap_config {
>>> + int reg_bits;
>>> + int val_bits;
>
>> size_t for both?
>
> It doesn't seem particularly appropriate as we're working with a bit
> count not the usual byte count where size_t gets used and I can't see it
> ever making any difference.
I suggested it because the byte count in the regmap_format struct is size_t and
it calculated from the bit count.
next prev parent reply other threads:[~2011-06-21 0:47 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-20 12:46 [PATCH 0/8] Generic I2C and SPI register map library Mark Brown
2011-06-20 12:54 ` [PATCH 1/8] regmap: Add generic non-memory mapped register access API Mark Brown
2011-06-20 12:54 ` [PATCH 2/8] regmap: Add I2C bus support Mark Brown
2011-06-20 23:22 ` Lars-Peter Clausen
2011-06-20 23:41 ` Mark Brown
2011-06-21 0:01 ` Lars-Peter Clausen
2011-06-20 12:54 ` [PATCH 3/8] regmap: Add SPI " Mark Brown
2011-06-20 23:26 ` Lars-Peter Clausen
2011-06-20 23:45 ` Mark Brown
2011-06-21 0:00 ` Lars-Peter Clausen
2011-06-20 12:54 ` [PATCH 4/8] ASoC: Use new register map API for ASoC generic physical I/O Mark Brown
2011-06-20 12:54 ` [PATCH 5/8] mfd: Convert WM831x to use regmap API Mark Brown
2011-06-20 12:54 ` [PATCH 6/8] mfd: Convert WM8994 to use new register map API Mark Brown
2011-06-20 12:54 ` [PATCH 7/8] mfd: Convert pcf50633 " Mark Brown
2011-06-20 12:54 ` [PATCH 8/8] regulator: Convert tps65023 to use regmap API Mark Brown
2011-06-20 23:15 ` [PATCH 1/8] regmap: Add generic non-memory mapped register access API Lars-Peter Clausen
2011-06-21 0:14 ` Mark Brown
2011-06-21 0:45 ` Lars-Peter Clausen [this message]
2011-06-21 1:24 ` Mark Brown
2011-06-21 11:47 ` Dimitris Papastamos
2011-06-21 12:07 ` Mark Brown
2011-06-21 11:43 ` Dimitris Papastamos
2011-06-21 12:07 ` Mark Brown
-- strict thread matches above, loose matches on Subject: below --
2011-06-22 18:44 [PATCH 0/8] Generic I2C and SPI register map library Mark Brown
2011-06-22 18:45 ` [PATCH 1/8] regmap: Add generic non-memory mapped register access API Mark Brown
2011-06-22 19:03 ` Lars-Peter Clausen
2011-06-22 19:11 ` Mark Brown
2011-06-22 19:20 ` Lars-Peter Clausen
2011-06-22 19:42 ` Mark Brown
2011-07-01 0:22 ` Ben Hutchings
2011-07-01 2:38 ` Mark Brown
2011-06-30 5:58 [PATCH 0/8] regmap: Generic I2C and SPI register map library Mark Brown
2011-06-30 6:00 ` [PATCH 1/8] regmap: Add generic non-memory mapped register access API 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=4DFFE9C1.5060003@metafoo.de \
--to=lars@metafoo.de \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=dp@opensource.wolfsonmicro.com \
--cc=gg@slimlogic.co.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=lrg@ti.com \
--cc=sameo@linux.intel.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