All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: vamoirid <vassilisamir@gmail.com>
Cc: jic23@kernel.org, lars@metafoo.de, robh@kernel.org,
	krzk+dt@kernel.org, conor+dt@kernel.org, anshulusr@gmail.com,
	gustavograzs@gmail.com, linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 12/13] iio: chemical: bme680: Add triggered buffer support
Date: Fri, 11 Oct 2024 13:37:56 +0300	[thread overview]
Message-ID: <ZwkABN9RycsVPRwo@smile.fi.intel.com> (raw)
In-Reply-To: <20241010210030.33309-13-vassilisamir@gmail.com>

On Thu, Oct 10, 2024 at 11:00:29PM +0200, vamoirid wrote:
> From: Vasileios Amoiridis <vassilisamir@gmail.com>
> 
> Add triggered buffer and soft timestamp support. The available scan mask
> enables all the channels of the sensor in order to follow the operation of
> the sensor. The sensor basically starts to capture from all channels
> as long as it enters into FORCED mode.

...

>  	struct regulator_bulk_data supplies[BME680_NUM_SUPPLIES];
>  	int ambient_temp;
>  
> +	u8 buffer[ALIGN(sizeof(s32) * BME680_NUM_CHANNELS, sizeof(s64))
> +		  + sizeof(s64)] __aligned(sizeof(s64));

Can it be represented as a structure?
We also have aligned_s64 for the timestamp.

>  	union {
> -		u8 buf[3];
> +		u8 buf[15];
>  		unsigned int check;
>  		__be16 be16;
>  		u8 bme680_cal_buf_1[BME680_CALIB_RANGE_1_LEN];

...

> +static irqreturn_t bme680_trigger_handler(int irq, void *p)
> +{
> +	struct iio_poll_func *pf = p;
> +	struct iio_dev *indio_dev = pf->indio_dev;
> +	struct bme680_data *data = iio_priv(indio_dev);
> +	u32 adc_temp, adc_press, adc_humid, comp_press, comp_humid;

> +	s32 *chans = (s32 *)data->buffer;

With the structure in place this becomes much more readable.

> +	u16 adc_gas_res, gas_regs_val;
> +	s32 t_fine, comp_gas_res;
> +	s16 comp_temp;
> +	u8 gas_range;
> +	int ret;
> +
> +	guard(mutex)(&data->lock);
> +
> +	ret = bme680_set_mode(data, BME680_FORCED);
> +	if (ret < 0)
> +		goto out;
> +
> +	ret = bme680_wait_for_eoc(data);
> +	if (ret)
> +		goto out;
> +
> +	/* Burst read data regs */
> +	ret = regmap_bulk_read(data->regmap, BME680_REG_MEAS_STAT_0,
> +			       data->buf, sizeof(data->buf));
> +	if (ret) {
> +		dev_err(data->dev, "failed to burst read sensor data\n");
> +		goto out;
> +	}
> +	if (data->buf[0] & BME680_GAS_MEAS_BIT) {
> +		dev_err(data->dev, "gas measurement incomplete\n");
> +		goto out;
> +	}
> +
> +	/* Temperature calculations */
> +	adc_temp = FIELD_GET(BME680_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[5]));
> +	if (adc_temp == BME680_MEAS_SKIPPED) {
> +		dev_err(data->dev, "reading temperature skipped\n");
> +		goto out;
> +	}
> +	comp_temp = bme680_compensate_temp(data, adc_temp);
> +	t_fine = bme680_calc_t_fine(data, adc_temp);
> +
> +	/* Pressure calculations */
> +	adc_press = FIELD_GET(BME680_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[2]));
> +	if (adc_press == BME680_MEAS_SKIPPED) {
> +		dev_err(data->dev, "reading pressure skipped\n");
> +		goto out;
> +	}
> +	comp_press = bme680_compensate_press(data, adc_press, t_fine);

> +	pr_info("comp_press: %d\n", comp_press);

No debugging in the production code. Or if you really need that, it should
use dev_dbg().

> +	/* Humidity calculations */
> +	adc_humid = get_unaligned_be16(&data->buf[8]);
> +	if (adc_humid == BME680_MEAS_SKIPPED) {
> +		dev_err(data->dev, "reading humidity skipped\n");
> +		goto out;
> +	}
> +	comp_humid = bme680_compensate_humid(data, adc_humid, t_fine);

> +	pr_info("comp_humid: %d\n", comp_humid);

Ditto.

> +
> +	/* Gas calculations */
> +	gas_regs_val = get_unaligned_be16(&data->buf[13]);
> +	adc_gas_res = FIELD_GET(BME680_ADC_GAS_RES, gas_regs_val);
> +	if ((gas_regs_val & BME680_GAS_STAB_BIT) == 0) {
> +		dev_err(data->dev, "heater failed to reach the target temperature\n");
> +		goto out;
> +	}
> +	gas_range = FIELD_GET(BME680_GAS_RANGE_MASK, gas_regs_val);
> +	comp_gas_res = bme680_compensate_gas(data, adc_gas_res, gas_range);
> +	pr_info("comp_gas_res: %d\n", comp_gas_res);
> +
> +	chans[0] = comp_temp;
> +	chans[1] = comp_press;
> +	chans[2] = comp_humid;
> +	chans[3] = comp_gas_res;
> +
> +	/* Push to buffer */
> +	iio_push_to_buffers_with_timestamp(indio_dev, &data->buffer,
> +					   iio_get_time_ns(indio_dev));
> +out:
> +	iio_trigger_notify_done(indio_dev->trig);
> +	return IRQ_HANDLED;
> +}

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2024-10-11 10:38 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-10 21:00 [PATCH v1 00/13]: chemical: bme680: 2nd set of clean and add vamoirid
2024-10-10 21:00 ` [PATCH v1 01/13] iio: chemical: bme680: Fix indentation and unnecessary spaces vamoirid
2024-10-11  9:55   ` Andy Shevchenko
2024-10-11 18:45     ` Vasileios Aoiridis
2024-10-10 21:00 ` [PATCH v1 02/13] iio: chemical: bme680: avoid using camel case vamoirid
2024-10-11 10:00   ` Andy Shevchenko
2024-10-11 18:50     ` Vasileios Aoiridis
2024-10-12 20:34       ` Andy Shevchenko
2024-10-10 21:00 ` [PATCH v1 03/13] iio: chemical: bme680: fix startup time vamoirid
2024-10-11 10:00   ` Andy Shevchenko
2024-10-11 18:51     ` Vasileios Aoiridis
2024-10-12 11:45       ` Jonathan Cameron
2024-10-12 20:36       ` Andy Shevchenko
2024-10-10 21:00 ` [PATCH v1 04/13] iio: chemical: bme680: move to fsleep() vamoirid
2024-10-10 21:00 ` [PATCH v1 05/13] iio: chemical: bme680: refactorize set_mode() mode vamoirid
2024-10-11 10:02   ` Andy Shevchenko
2024-10-11 18:53     ` Vasileios Aoiridis
2024-10-12 11:48   ` Jonathan Cameron
2024-10-10 21:00 ` [PATCH v1 06/13] dt-bindings: iio: add binding for BME680 driver vamoirid
2024-10-11  3:11   ` Rob Herring (Arm)
2024-10-11  6:51   ` Krzysztof Kozlowski
2024-10-11 18:44     ` Vasileios Aoiridis
2024-10-12 11:49       ` Jonathan Cameron
2024-10-10 21:00 ` [PATCH v1 07/13] iio: chemical: bme680: add regulators vamoirid
2024-10-11 10:05   ` Andy Shevchenko
2024-10-11 18:55     ` Vasileios Aoiridis
2024-10-12 11:53   ` Jonathan Cameron
2024-10-10 21:00 ` [PATCH v1 08/13] iio: chemical: bme680: add power management vamoirid
2024-10-11 10:10   ` Andy Shevchenko
2024-10-11 19:02     ` Vasileios Aoiridis
2024-10-12 11:58       ` Jonathan Cameron
2024-10-12 20:40       ` Andy Shevchenko
2024-10-10 21:00 ` [PATCH v1 09/13] iio: chemical: bme680: Move ambient temperature to attributes vamoirid
2024-10-11 10:12   ` Andy Shevchenko
2024-10-11 19:03     ` Vasileios Aoiridis
2024-10-12 12:01   ` Jonathan Cameron
2024-10-14 20:14     ` Vasileios Amoiridis
2024-10-19 13:59       ` Jonathan Cameron
2024-10-19 17:51         ` Vasileios Amoiridis
2024-10-19 17:58           ` Vasileios Amoiridis
2024-10-10 21:00 ` [PATCH v1 10/13] iio: chemical: bme680: generalize read_*() functions vamoirid
2024-10-10 21:00 ` [PATCH v1 11/13] iio: chemical: bme680: Add SCALE and RAW channels vamoirid
2024-10-10 21:00 ` [PATCH v1 12/13] iio: chemical: bme680: Add triggered buffer support vamoirid
2024-10-11 10:37   ` Andy Shevchenko [this message]
2024-10-11 19:07     ` Vasileios Aoiridis
2024-10-12 12:04       ` Jonathan Cameron
2024-10-12 12:09         ` Jonathan Cameron
2024-10-10 21:00 ` [PATCH v1 13/13] iio: chemical: bme680: Add support for preheat current vamoirid
2024-10-11 10:39   ` Andy Shevchenko
2024-10-11 19:08     ` Vasileios Aoiridis
2024-10-12 20:47       ` Andy Shevchenko
2024-10-12 12:36   ` Jonathan Cameron
2024-10-11 10:42 ` [PATCH v1 00/13]: chemical: bme680: 2nd set of clean and add Andy Shevchenko
2024-10-11 18:39   ` Vasileios Aoiridis

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=ZwkABN9RycsVPRwo@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=anshulusr@gmail.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gustavograzs@gmail.com \
    --cc=jic23@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=vassilisamir@gmail.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.