From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: Francesco Lavra <flavra@baylibre.com>
Cc: "Lorenzo Bianconi" <lorenzo@kernel.org>,
"Jonathan Cameron" <jic23@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 7/9] iio: imu: st_lsm6dsx: make event management functions generic
Date: Thu, 30 Oct 2025 10:15:41 +0200 [thread overview]
Message-ID: <aQMerfm6peHvHAz2@smile.fi.intel.com> (raw)
In-Reply-To: <20251030072752.349633-8-flavra@baylibre.com>
On Thu, Oct 30, 2025 at 08:27:50AM +0100, Francesco Lavra wrote:
> In preparation for adding support for more event types, use an
> array indexed by event ID instead of a scalar value to store
> enabled events, and refactor the functions to configure and report
> events so that their implementation is not specific for wakeup
> events. Move the logic to update the global event interrupt enable
> flag from st_lsm6dsx_event_setup() to its calling function, so that
> it can take into account also event sources different from the
> source being configured. While changing the signature of the
> st_lsm6dsx_event_setup() function, opportunistically add the
> currently unused `axis` parameter, which will be used when adding
> support for enabling and disabling events on a per axis basis.
...
> mutex_lock(&hw->conf_lock);
> - if (enable_event || !(hw->fifo_mask & BIT(sensor->id)))
> + if (!enable_event) {
> + enum st_lsm6dsx_event_id other_event;
> +
> + for (other_event = 0; other_event < ST_LSM6DSX_EVENT_MAX; other_event++) {
> + if (other_event != event && hw->enable_event[other_event]) {
> + any_events_enabled = true;
> + break;
> + }
> + }
> + }
> + if (enable_event || !any_events_enabled) {
> + const struct st_lsm6dsx_reg *reg = &hw->settings->event_settings.enable_reg;
> +
> + if (reg->addr) {
> + err = regmap_update_bits(hw->regmap, reg->addr, reg->mask,
> + ST_LSM6DSX_SHIFT_VAL(state, reg->mask));
> + if (err < 0)
> + goto unlock_out;
> + }
> + }
> + if (enable_event || (!any_events_enabled && !(hw->fifo_mask & BIT(sensor->id))))
> err = __st_lsm6dsx_sensor_set_enable(sensor, state);
> +unlock_out:
> mutex_unlock(&hw->conf_lock);
> if (err < 0)
> return err;
This whole block is hard to read. Perhaps you need to refactor it to have something like
if (enable_event) {
err = call_helper1();
...
err = __st_lsm6dsx_sensor_set_enable(sensor, state);
} else {
any_events_enabled = call_helper2();
if (!any_events_enabled) {
err = call_helper1();
...
if (!(hw->fifo_mask & BIT(sensor->id)))
err = __st_lsm6dsx_sensor_set_enable(sensor, state);
}
}
With this you can see that actually helper1 can be modified (with one
additional parameter) to combination of
new_helper1()
{
err = call_helper1();
...
if (!(hw->fifo_mask & BIT(sensor->id)))
return __st_lsm6dsx_sensor_set_enable(sensor, state);
return 0;
}
And the above goes as
if (enable_event) {
err = new_helper1(false);
} else {
any_events_enabled = call_helper2();
if (!any_events_enabled)
err = new_helper1(hw->fifo_mask & BIT(sensor->id));
}
with assumed good names given this looks to me much easier to understand.
...
> +static bool
> +st_lsm6dsx_report_motion_event(struct st_lsm6dsx_hw *hw)
Why not one line?
> +{
> + bool events_found;
Seems useless. Is this function going to be expanded down in the series?
> + events_found = st_lsm6dsx_report_events(hw, ST_LSM6DSX_EVENT_WAKEUP, IIO_EV_TYPE_THRESH,
> + IIO_EV_DIR_EITHER);
Indentation.
> + return events_found;
> +}
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-10-30 8:15 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-30 7:27 [PATCH 0/9] st_lsm6dsx: add tap event detection Francesco Lavra
2025-10-30 7:27 ` [PATCH 1/9] iio: imu: st_lsm6dsx: dynamically initialize iio_chan_spec data Francesco Lavra
2025-10-30 7:57 ` Andy Shevchenko
2025-10-30 11:03 ` Francesco Lavra
2025-10-30 16:42 ` Lorenzo Bianconi
2025-10-31 8:04 ` Francesco Lavra
2025-10-31 8:09 ` Andy Shevchenko
2025-10-31 8:26 ` Francesco Lavra
2025-10-31 8:32 ` Andy Shevchenko
2025-10-31 11:43 ` Francesco Lavra
2025-11-02 11:16 ` Jonathan Cameron
2025-11-03 9:24 ` Francesco Lavra
2025-11-09 13:32 ` Jonathan Cameron
2025-10-30 7:27 ` [PATCH 2/9] iio: imu: st_lsm6dsx: make event_settings more generic Francesco Lavra
2025-10-30 16:44 ` Lorenzo Bianconi
2025-10-31 8:08 ` Francesco Lavra
2025-10-30 7:27 ` [PATCH 3/9] iio: imu: st_lsm6dsx: move wakeup event enable mask to event_src Francesco Lavra
2025-10-30 7:59 ` Andy Shevchenko
2025-10-30 7:27 ` [PATCH 4/9] iio: imu: st_lsm6dsx: dynamically allocate iio_event_spec structs Francesco Lavra
2025-11-02 11:22 ` Jonathan Cameron
2025-10-30 7:27 ` [PATCH 5/9] iio: imu: st_lsm6dsx: rework code to check for enabled events Francesco Lavra
2025-10-30 7:27 ` [PATCH 6/9] iio: imu: st_lsm6dsx: remove event_threshold field from hw struct Francesco Lavra
2025-10-30 8:01 ` Andy Shevchenko
2025-10-30 11:10 ` Francesco Lavra
2025-10-30 13:49 ` Andy Shevchenko
2025-11-02 11:29 ` Jonathan Cameron
2025-11-02 13:45 ` Andy Shevchenko
2025-11-03 9:34 ` Francesco Lavra
2025-11-03 9:40 ` Andy Shevchenko
2025-11-03 14:53 ` David Lechner
2025-11-09 13:31 ` Jonathan Cameron
2025-10-30 7:27 ` [PATCH 7/9] iio: imu: st_lsm6dsx: make event management functions generic Francesco Lavra
2025-10-30 8:15 ` Andy Shevchenko [this message]
2025-10-30 11:17 ` Francesco Lavra
2025-10-30 13:36 ` Andy Shevchenko
2025-11-02 11:33 ` Jonathan Cameron
2025-10-30 7:27 ` [PATCH 8/9] iio: imu: st_lsm6dsx: add event configurability on a per axis basis Francesco Lavra
2025-10-30 8:24 ` Andy Shevchenko
2025-10-30 11:23 ` Francesco Lavra
2025-10-30 13:56 ` Andy Shevchenko
2025-11-17 19:23 ` Francesco Lavra
2025-11-18 10:44 ` Andy Shevchenko
2025-11-18 11:01 ` Francesco Lavra
2025-11-20 9:05 ` Andy Shevchenko
2025-11-20 11:43 ` Francesco Lavra
2025-11-20 13:59 ` Andy Shevchenko
2025-11-20 18:31 ` Andy Shevchenko
2025-11-21 9:14 ` Francesco Lavra
2025-11-21 9:31 ` Andy Shevchenko
2025-11-21 14:57 ` Francesco Lavra
2025-12-07 15:11 ` Jonathan Cameron
2025-10-30 7:27 ` [PATCH 9/9] iio: imu: st_lsm6dsx: add tap event detection Francesco Lavra
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=aQMerfm6peHvHAz2@smile.fi.intel.com \
--to=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=flavra@baylibre.com \
--cc=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=nuno.sa@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.