public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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
> 


  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