From: Srinivas KANDAGATLA <srinivas.kandagatla@st.com>
To: Mark Brown <broonie@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [RFC] regmap: Add regmap_field APIs
Date: Wed, 05 Jun 2013 10:21:23 +0100 [thread overview]
Message-ID: <51AF0313.6000205@st.com> (raw)
In-Reply-To: <20130604210137.GV31367@sirena.org.uk>
On 04/06/13 22:01, Mark Brown wrote:
> On Tue, May 28, 2013 at 03:58:00PM +0100, Srinivas KANDAGATLA wrote:
>
>> +#define REGMAP_FIELD_INIT(regmap, reg, lsb, msb) { \
>> + .regmap = regmap, \
>> + .reg = reg, \
>> + .lsb = lsb, \
>> + .msb = msb, \
>> + }
>
> Having a macro for this is really odd since macros are generally only
> used at compile time but the regmap is only available at runtime and
> this...
>
Yes, I think the macro is bit over do.. I will remove it.
>> +static inline void regmap_field_init(struct regmap_field *field,
>> + struct regmap *regmap, unsigned int reg,
>> + unsigned int lsb, unsigned int msb)
>> +{
>> + field->regmap = regmap;
>> + field->reg = reg;
>> + field->lsb = lsb;
>> + field->msb = msb;
>> +}
>
> ...is a bit awkward since you can't use it with static data. I think
> either the read/write/modify APIs should be changed to take both the map
> and the field as arguments (with the field only containing the bitfield
> definitions) or the init function should be something that allocates a
> new, runtime only structure from static data.
I agree with you and I think init function should allocate and
initialize the regmap_field and return it, and the read/write apis will
take the field and value. This approach looks neat.
Is it ok if we rename the regmap_field_init function to
regmap_field_alloc, as it will make it obvious that its allocating
memory which should be freed?
I also thought we could add devm version of it as well.
With this change here is what the init/alloc function would look like:
static void _regmap_field_init(struct regmap_field *field,
struct regmap *regmap, unsigned int reg,
unsigned int lsb, unsigned int msb)
{
field->regmap = regmap;
field->reg = reg;
field->lsb = lsb;
field->msb = msb;
}
struct regmap_field *devm_regmap_field_alloc(struct device *dev,
struct regmap *regmap, unsigned int reg,
unsigned int lsb, unsigned int msb)
{
struct regmap_field *field = devm_kzalloc(dev,
sizeof(*field), GFP_KERNEL);
if (!field)
return ERR_PTR(-ENOMEM);
_regmap_field_init(field, regmap, reg, lsb, msb);
return field;
}
EXPORT_SYMBOL_GPL(devm_regmap_field_alloc);
struct regmap_field *regmap_field_alloc(struct regmap *regmap,
unsigned int reg, unsigned int lsb, unsigned int msb)
{
struct regmap_field *field = kzalloc(sizeof(*field), GFP_KERNEL);
if (!field)
return ERR_PTR(-ENOMEM);
_regmap_field_init(field, regmap, reg, lsb, msb);
return field;
}
EXPORT_SYMBOL_GPL(regmap_field_alloc);
In header file..
static void inline regmap_field_free(struct regmap_field *field)
{
kfree(field);
}
static void inline devm_regmap_field_free(struct device *dev, struct
regmap_field *field)
{
devm_kfree(dev, field);
}
Thanks,
srini
>
next prev parent reply other threads:[~2013-06-05 9:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-28 14:58 [RFC] regmap: Add regmap_field APIs Srinivas KANDAGATLA
2013-05-31 6:31 ` Srinivas KANDAGATLA
2013-06-01 18:38 ` Mark Brown
2013-06-04 21:01 ` Mark Brown
2013-06-05 9:21 ` Srinivas KANDAGATLA [this message]
2013-06-05 11:41 ` Mark Brown
2013-06-05 14:41 ` Srinivas KANDAGATLA
2013-06-05 15:59 ` Mark Brown
2013-06-09 16:00 ` Lars-Peter Clausen
2013-06-10 7:09 ` Srinivas KANDAGATLA
2013-06-10 9:15 ` Mark Brown
2013-06-10 10:27 ` Srinivas KANDAGATLA
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=51AF0313.6000205@st.com \
--to=srinivas.kandagatla@st.com \
--cc=broonie@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox