From: Jonathan Cameron <jic23@cam.ac.uk>
To: michael.hennerich@analog.com
Cc: "linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
"device-drivers-devel@blackfin.uclinux.org"
<device-drivers-devel@blackfin.uclinux.org>,
Drivers <Drivers@analog.com>
Subject: Re: [PATCH 2/2] iio: adc: New driver for AD7280A Lithium Ion Battery Monitoring System
Date: Mon, 18 Jul 2011 13:56:44 +0100 [thread overview]
Message-ID: <4E242D8C.8080300@cam.ac.uk> (raw)
In-Reply-To: <4E242BA8.8020006@analog.com>
On 07/18/11 13:48, Michael Hennerich wrote:
> On 07/18/2011 01:43 PM, Jonathan Cameron wrote:
>> On 07/15/11 13:59, michael.hennerich@analog.com wrote:
>>> From: Michael Hennerich<michael.hennerich@analog.com>
>> Hi Michael, although anyone reading the datasheets will quickly
>> discover that this isn't a simple laptop style battery monitor,
>> it's probably worth making that clear in the patch title or
>> at very least here.
>>
>> Driver is pretty clear. Couple of nitpicks / queries inline.
>>
>> Thanks
>>
>> Jonathan
>>>
>>> Signed-off-by: Michael Hennerich<michael.hennerich@analog.com>
>>> ---
...
>>> +static irqreturn_t ad7280_event_handler(int irq, void *private)
>>> +{
>>> + struct iio_dev *dev_info = private;
>>> +
>>> + iio_push_event(dev_info, 0,
>>> + IIO_UNMOD_EVENT_CODE(IIO_IN,
>>> + 0,
>>> + IIO_EV_TYPE_THRESH,
>>> + IIO_EV_DIR_EITHER),
>>> + iio_get_time_ns());
>> You have thresholds for temp and voltage below, but only voltage
>> event. I wonder if the right thing here is to issue two events
>> (subject to what is enabled). If everything is turned on, there
>> doesn't seem to be anyway to tell what happened. If the event
>> is consistent, I guess you could write a strobe function that would
>> enable events up the chain and see when it kicked in. That would
>> tell you where it came from. No idea if one ever wants to know though.
> Alternatively I could read all channels in the stack and compare
> against the set thresholds. I think that would make the most sense here.
Good point. That's much simpler.
>
>>
>>> +
>>> + return IRQ_HANDLED;
>>> +}
>>> +
>>> +static IIO_DEVICE_ATTR(in_thresh_low_value,
>>> + S_IRUGO | S_IWUSR,
>>> + ad7280_read_channel_config,
>>> + ad7280_write_channel_config,
>>> + AD7280A_CELL_UNDERVOLTAGE);
>>> +
>>> +static IIO_DEVICE_ATTR(in_thresh_high_value,
>>> + S_IRUGO | S_IWUSR,
>>> + ad7280_read_channel_config,
>>> + ad7280_write_channel_config,
>>> + AD7280A_CELL_OVERVOLTAGE);
>>> +
>>> +static IIO_DEVICE_ATTR(temp_thresh_low_value,
>>> + S_IRUGO | S_IWUSR,
>>> + ad7280_read_channel_config,
>>> + ad7280_write_channel_config,
>>> + AD7280A_AUX_ADC_UNDERVOLTAGE);
>>> +
>>> +static IIO_DEVICE_ATTR(temp_thresh_high_value,
>>> + S_IRUGO | S_IWUSR,
>>> + ad7280_read_channel_config,
>>> + ad7280_write_channel_config,
>>> + AD7280A_AUX_ADC_OVERVOLTAGE);
>> These are shared over all channels? Hmm. That's not a case
>> I'd considered when writing the chan spec stuff for events,
>> perhaps we need to allow for 'shared' events. Technically
>> the only abi meeting approach right now is to have these
>> for every channel. So write one channels threshold value
>> then a read would tell you they have all changed.
> Technically I could have different thresholds for any single
> device in the chain, each featuring 6 cell and 6 temp/aux channels.
>
> But in practice, you would set them to all being the same.
> What prevents us from having the shared event thresholds?
The difficulty in concisely specifying them in the chan spec
structures. Good point though, it's fine abi wise. Maybe
just leave these as you have them here for now and we can
think about how to concisely map them into the chan_spec
stuff at a later date..
>
>>> +
>>> +
>>> +static struct attribute *ad7280_event_attributes[] = {
>>> +&iio_dev_attr_in_thresh_low_value.dev_attr.attr,
>>> +&iio_dev_attr_in_thresh_high_value.dev_attr.attr,
>>> +&iio_dev_attr_temp_thresh_low_value.dev_attr.attr,
>>> +&iio_dev_attr_temp_thresh_high_value.dev_attr.attr,
>>> + NULL,
>>> +};
>>> +
>>> +static struct attribute_group ad7280_event_attrs_group = {
>>> + .attrs = ad7280_event_attributes,
>>> +};
>>> +
>>> +static int ad7280_read_raw(struct iio_dev *dev_info,
>>> + struct iio_chan_spec const *chan,
>>> + int *val,
>>> + int *val2,
>>> + long m)
>>> +{
>>> + struct ad7280_state *st = iio_priv(dev_info);
>>> + unsigned int scale_uv;
>>> + int ret;
>>> +
>>> + switch (m) {
>>> + case 0:
>>> + mutex_lock(&dev_info->mlock);
>>> + switch (chan->type) {
>>> + case IIO_IN:
>>> + ret = ad7280_read_channel(st, chan->address>> 8,
>>> + chan->address& 0xFF);
>>> + break;
>>> + case IIO_IN_DIFF:
>>> + ret = ad7280_read_all_channels(st, st->scan_cnt, NULL);
>> Err... Really need some explanation for what this channel is!
> Voltage across all cells.
Fair enough. So are the other voltages not differential as well? (across a given
cell rather than referred to a base voltage)
...
>>> +
>>> +#endif /* IIO_ADC_AD7280_H_ */
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
> Thanks for the review.
>
You are welcome.
next prev parent reply other threads:[~2011-07-18 12:56 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-15 12:59 [PATCH 1/2] iio: core: deconstify members of struct iio_chan_spec michael.hennerich
2011-07-15 12:59 ` [PATCH 2/2] iio: adc: New driver for AD7280A Lithium Ion Battery Monitoring System michael.hennerich
2011-07-18 11:43 ` Jonathan Cameron
2011-07-18 12:48 ` Michael Hennerich
2011-07-18 12:56 ` Jonathan Cameron [this message]
2011-07-18 13:36 ` Michael Hennerich
2011-07-18 13:41 ` Jonathan Cameron
2011-07-18 13:47 ` Michael Hennerich
2011-07-18 15:06 ` Michael Hennerich
2011-07-18 15:12 ` Jonathan Cameron
2011-07-15 13:19 ` [PATCH 1/2] iio: core: deconstify members of struct iio_chan_spec Jonathan Cameron
-- strict thread matches above, loose matches on Subject: below --
2011-07-20 13:03 michael.hennerich
2011-07-20 13:03 ` [PATCH 2/2] iio: adc: New driver for AD7280A Lithium Ion Battery Monitoring System michael.hennerich
2011-07-20 13:03 ` michael.hennerich
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=4E242D8C.8080300@cam.ac.uk \
--to=jic23@cam.ac.uk \
--cc=Drivers@analog.com \
--cc=device-drivers-devel@blackfin.uclinux.org \
--cc=linux-iio@vger.kernel.org \
--cc=michael.hennerich@analog.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.