Linux IIO development
 help / color / mirror / Atom feed
From: Michael Hennerich <michael.hennerich@analog.com>
To: Jonathan Cameron <jic23@cam.ac.uk>
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 15:36:32 +0200	[thread overview]
Message-ID: <4E2436E0.9060501@analog.com> (raw)
In-Reply-To: <4E242D8C.8080300@cam.ac.uk>

On 07/18/2011 02:56 PM, Jonathan Cameron wrote:
> 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)
> ...
Yes technically seen they are all differential.

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


-- 
Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368;
Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin,
Margaret Seif

  reply	other threads:[~2011-07-18 13:36 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
2011-07-18 13:36         ` Michael Hennerich [this message]
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=4E2436E0.9060501@analog.com \
    --to=michael.hennerich@analog.com \
    --cc=Drivers@analog.com \
    --cc=device-drivers-devel@blackfin.uclinux.org \
    --cc=jic23@cam.ac.uk \
    --cc=linux-iio@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