public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: "Patrik Dahlström" <risca@dalakolonin.se>
Cc: <linux-iio@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<letux-kernel@openphoenux.org>, <kernel@pyra-handheld.com>,
	<pgoudagunta@nvidia.com>, <hns@goldelico.com>, <jic23@kernel.org>,
	<lars@metafoo.de>, <linux-omap@vger.kernel.org>
Subject: Re: [PATCH v4 8/9] iio: adc: palmas: add support for iio threshold events
Date: Thu, 13 Apr 2023 11:28:30 +0100	[thread overview]
Message-ID: <20230413112830.00006279@Huawei.com> (raw)
In-Reply-To: <20230408114825.824505-9-risca@dalakolonin.se>

On Sat,  8 Apr 2023 13:48:24 +0200
Patrik Dahlström <risca@dalakolonin.se> wrote:

> The palmas gpadc block has support for monitoring up to 2 ADC channels
> and issue an interrupt if they reach past a set threshold. This change
> hooks into the IIO events system and exposes to userspace the ability to
> configure these threshold values for each channel, but only allow up to
> 2 such thresholds to be enabled at any given time. Trying to enable a
> third channel will result in an error.
> 
> Userspace is expected to input calibrated, as opposed to raw, values as
> threshold. However, it is not enough to do the opposite of what is done
> when converting the other way around. To account for tolerances in the
> ADC, the calculated raw threshold should be adjusted based on the ADC
> specifications for the device. These specifications include the integral
> nonlinearity (INL), offset, and gain error. To adjust the high
> threshold, use the following equation:
> 
>   (calibrated value + INL) * Gain error + offset = maximum value  [1]
> 
> Likewise, use the following equation for the low threshold:
> 
>   (calibrated value - INL) * Gain error - offset = minimum value
> 
> The gain error is a combination of gain error, as listed in the
> datasheet, and gain error drift due to temperature and supply. The exact
> values for these specifications vary between palmas devices. This patch
> sets the values found in TWL6035, TWL6037 datasheet.
> 
> [1] TI Application Report, SLIA087A, Guide to Using the GPADC in
>     TPS65903x, TPS65917-Q1, TPS65919-Q1, and TPS65916 Devices.
> 
> Signed-off-by: Patrik Dahlström <risca@dalakolonin.se>

0-day found some stuff we'd missed in here.

I've fixed it up and pushed out again.

> ---
...
> +static int palmas_gpadc_write_event_value(struct iio_dev *indio_dev,
> +					  const struct iio_chan_spec *chan,
> +					  enum iio_event_type type,
> +					  enum iio_event_direction dir,
> +					  enum iio_event_info info,
> +					  int val, int val2)
> +{
> +	struct palmas_gpadc *adc = iio_priv(indio_dev);
> +	int adc_chan = chan->channel;
> +	int old;
> +	int ret;
> +
> +	if (adc_chan > PALMAS_ADC_CH_MAX || type != IIO_EV_TYPE_THRESH)
> +		return -EINVAL;
> +
> +	mutex_lock(&adc->lock);
> +	switch (info) {
> +	case IIO_EV_INFO_VALUE:
> +		if (val < 0 || val > 0xFFF) {
> +			ret = -EINVAL;
> +			break;

Should be goto out_unlock; Found because old is undefined.

> +		}
> +		if (dir == IIO_EV_DIR_RISING) {
> +			old = adc->thresholds[adc_chan].high;
> +			adc->thresholds[adc_chan].high = val;
> +		}

Whilst here should be } else {

Tidied both up force an update on the testing branch.

> +		else {
> +			old = adc->thresholds[adc_chan].low;
> +			adc->thresholds[adc_chan].low = val;
> +		}
> +		ret = 0;
> +		break;
> +	default:
> +		ret = -EINVAL;
> +		goto out_unlock;
> +	}
> +
> +	if (val != old && palmas_gpadc_get_event(adc, adc_chan, dir))
> +		ret = palmas_gpadc_reconfigure_event_channels(adc);
> +
> +out_unlock:
> +	mutex_unlock(&adc->lock);
> +
> +	return ret;
> +}
> +

  reply	other threads:[~2023-04-13 10:28 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-08 11:48 [PATCH v4 0/9] iio: adc: palmas_gpadc: add iio events Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 1/9] iio: adc: palmas_gpadc: fix NULL dereference on rmmod Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 2/9] iio: adc: palmas: Take probe fully device managed Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 3/9] iio: adc: palmas: remove adc_wakeupX_data Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 4/9] iio: adc: palmas: replace "wakeup" with "event" Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 5/9] iio: adc: palmas: use iio_event_direction for threshold polarity Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 6/9] iio: adc: palmas: move eventX_enable into palmas_adc_event Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 7/9] iio: adc: palmas: always reset events on unload Patrik Dahlström
2023-04-08 11:48 ` [PATCH v4 8/9] iio: adc: palmas: add support for iio threshold events Patrik Dahlström
2023-04-13 10:28   ` Jonathan Cameron [this message]
2023-04-08 11:48 ` [PATCH v4 9/9] iio: adc: palmas: don't alter event config on suspend/resume Patrik Dahlström
2023-04-12 20:22 ` [PATCH v4 0/9] iio: adc: palmas_gpadc: add iio events Jonathan Cameron

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=20230413112830.00006279@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=hns@goldelico.com \
    --cc=jic23@kernel.org \
    --cc=kernel@pyra-handheld.com \
    --cc=lars@metafoo.de \
    --cc=letux-kernel@openphoenux.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=pgoudagunta@nvidia.com \
    --cc=risca@dalakolonin.se \
    /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