From: Jonathan Cameron <jic23@kernel.org>
To: Adi Nata <adinata.softwareengineer@gmail.com>
Cc: lorenzo@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com,
andy@kernel.org, linux-iio@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-kernel-mentees@lists.linux.dev
Subject: Re: [PATCH 1/5] iio: humidity: hts221: report available values via read_avail()
Date: Mon, 10 Aug 2026 01:09:43 +0100 [thread overview]
Message-ID: <20260810010943.014d8db1@jic23-huawei> (raw)
In-Reply-To: <20260808090026.34187-2-adinata.softwareengineer@gmail.com>
On Sat, 8 Aug 2026 17:00:22 +0800
Adi Nata <adinata.softwareengineer@gmail.com> wrote:
> Replace the custom oversampling_ratio_available sysfs attributes with
> the standard IIO read_avail() callback. This lets the IIO core create
> and format *_available attributes and exposes the lists to
> in-kernel consumers.
Sashiko points out that there is an ABI change in here as oddly
the driver uses
in_humidity_oversampling_ratio_available rather than
in_humidityrelative_oversampling_ratio_available
Which makes this an ABI fix. Therefore this should have a fixes
tag and be moved to the start of the set. Please check that logic
though as maybe I'm missing something.
J
>
> Signed-off-by: Adi Nata <adinata.softwareengineer@gmail.com>
> ---
> drivers/iio/humidity/hts221_core.c | 106 +++++++++++------------------
> 1 file changed, 40 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/iio/humidity/hts221_core.c b/drivers/iio/humidity/hts221_core.c
> index bfeb0a60d3af..76a391f421f5 100644
> --- a/drivers/iio/humidity/hts221_core.c
> +++ b/drivers/iio/humidity/hts221_core.c
> @@ -10,7 +10,6 @@
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/device.h>
> -#include <linux/iio/sysfs.h>
> #include <linux/delay.h>
> #include <linux/pm.h>
> #include <linux/regmap.h>
> @@ -49,7 +48,7 @@ struct hts221_odr {
> struct hts221_avg {
> u8 addr;
> u8 mask;
> - u16 avg_avl[HTS221_AVG_DEPTH];
> + int avg_avl[HTS221_AVG_DEPTH];
> };
>
> static const struct hts221_odr hts221_odr_table[] = {
> @@ -58,6 +57,8 @@ static const struct hts221_odr hts221_odr_table[] = {
> { 13, 0x03 }, /* 12.5Hz */
> };
>
> +static const int hts221_odr_avail[] = { 1, 7, 13 };
> +
> static const struct hts221_avg hts221_avg_list[] = {
> {
> .addr = 0x10,
> @@ -97,7 +98,11 @@ static const struct iio_chan_spec hts221_channels[] = {
> BIT(IIO_CHAN_INFO_OFFSET) |
> BIT(IIO_CHAN_INFO_SCALE) |
> BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
> + .info_mask_separate_available =
> + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
> .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
> + .info_mask_shared_by_all_available =
> + BIT(IIO_CHAN_INFO_SAMP_FREQ),
> .scan_index = 0,
> .scan_type = {
> .sign = 's',
> @@ -113,7 +118,11 @@ static const struct iio_chan_spec hts221_channels[] = {
> BIT(IIO_CHAN_INFO_OFFSET) |
> BIT(IIO_CHAN_INFO_SCALE) |
> BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
> + .info_mask_separate_available =
> + BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
> .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
> + .info_mask_shared_by_all_available =
> + BIT(IIO_CHAN_INFO_SAMP_FREQ),
> .scan_index = 1,
> .scan_type = {
> .sign = 's',
> @@ -192,53 +201,35 @@ static int hts221_update_avg(struct hts221_hw *hw,
> return 0;
> }
>
> -static ssize_t hts221_sysfs_sampling_freq(struct device *dev,
> - struct device_attribute *attr,
> - char *buf)
> -{
> - int i;
> - ssize_t len = 0;
> -
> - for (i = 0; i < ARRAY_SIZE(hts221_odr_table); i++)
> - len += scnprintf(buf + len, PAGE_SIZE - len, "%d ",
> - hts221_odr_table[i].hz);
> - buf[len - 1] = '\n';
> -
> - return len;
> -}
> -
> -static ssize_t
> -hts221_sysfs_rh_oversampling_avail(struct device *dev,
> - struct device_attribute *attr,
> - char *buf)
> -{
> - const struct hts221_avg *avg = &hts221_avg_list[HTS221_SENSOR_H];
> - ssize_t len = 0;
> - int i;
> -
> - for (i = 0; i < ARRAY_SIZE(avg->avg_avl); i++)
> - len += scnprintf(buf + len, PAGE_SIZE - len, "%d ",
> - avg->avg_avl[i]);
> - buf[len - 1] = '\n';
> -
> - return len;
> -}
> -
> -static ssize_t
> -hts221_sysfs_temp_oversampling_avail(struct device *dev,
> - struct device_attribute *attr,
> - char *buf)
> +static int hts221_read_avail(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + const int **vals, int *type, int *length,
> + long mask)
> {
> - const struct hts221_avg *avg = &hts221_avg_list[HTS221_SENSOR_T];
> - ssize_t len = 0;
> - int i;
> -
> - for (i = 0; i < ARRAY_SIZE(avg->avg_avl); i++)
> - len += scnprintf(buf + len, PAGE_SIZE - len, "%d ",
> - avg->avg_avl[i]);
> - buf[len - 1] = '\n';
> -
> - return len;
> + switch (mask) {
> + case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
> + switch (chan->type) {
> + case IIO_HUMIDITYRELATIVE:
> + *vals = hts221_avg_list[HTS221_SENSOR_H].avg_avl;
> + *length = ARRAY_SIZE(hts221_avg_list[HTS221_SENSOR_H].avg_avl);
> + break;
> + case IIO_TEMP:
> + *vals = hts221_avg_list[HTS221_SENSOR_T].avg_avl;
> + *length = ARRAY_SIZE(hts221_avg_list[HTS221_SENSOR_T].avg_avl);
> + break;
> + default:
> + return -EINVAL;
> + }
> + *type = IIO_VAL_INT;
> + return IIO_AVAIL_LIST;
> + case IIO_CHAN_INFO_SAMP_FREQ:
> + *vals = hts221_odr_avail;
> + *type = IIO_VAL_INT;
> + *length = ARRAY_SIZE(hts221_odr_avail);
> + return IIO_AVAIL_LIST;
> + default:
> + return -EINVAL;
> + }
> }
>
> int hts221_set_enable(struct hts221_hw *hw, bool enable)
> @@ -521,27 +512,10 @@ static int hts221_validate_trigger(struct iio_dev *iio_dev,
> return hw->trig == trig ? 0 : -EINVAL;
> }
>
> -static IIO_DEVICE_ATTR(in_humidity_oversampling_ratio_available, S_IRUGO,
> - hts221_sysfs_rh_oversampling_avail, NULL, 0);
> -static IIO_DEVICE_ATTR(in_temp_oversampling_ratio_available, S_IRUGO,
> - hts221_sysfs_temp_oversampling_avail, NULL, 0);
> -static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(hts221_sysfs_sampling_freq);
> -
> -static struct attribute *hts221_attributes[] = {
> - &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
> - &iio_dev_attr_in_humidity_oversampling_ratio_available.dev_attr.attr,
> - &iio_dev_attr_in_temp_oversampling_ratio_available.dev_attr.attr,
> - NULL,
> -};
> -
> -static const struct attribute_group hts221_attribute_group = {
> - .attrs = hts221_attributes,
> -};
> -
> static const struct iio_info hts221_info = {
> - .attrs = &hts221_attribute_group,
> .read_raw = hts221_read_raw,
> .write_raw = hts221_write_raw,
> + .read_avail = hts221_read_avail,
> .validate_trigger = hts221_validate_trigger,
> };
>
next prev parent reply other threads:[~2026-08-10 0:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-08 9:00 [PATCH 0/5] iio: humidity: hts221: update probe and logging implementations Adi Nata
2026-08-08 9:00 ` [PATCH 1/5] iio: humidity: hts221: report available values via read_avail() Adi Nata
2026-08-10 0:09 ` Jonathan Cameron [this message]
2026-08-08 9:00 ` [PATCH 2/5] iio: humidity: hts221: Add a blank line after variable declarations Adi Nata
2026-08-10 8:40 ` Andy Shevchenko
2026-08-08 9:00 ` [PATCH 3/5] iio: humidity: hts221: Allow unknown whoami for DT fallback Adi Nata
2026-08-10 8:43 ` Andy Shevchenko
2026-08-08 9:00 ` [PATCH 4/5] iio: humidity: hts221: use dev_err_probe() in probe paths Adi Nata
2026-08-10 8:45 ` Andy Shevchenko
2026-08-08 9:00 ` [PATCH 5/5] iio: humidity: hts221: fix division by zero in calibration parsing Adi Nata
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=20260810010943.014d8db1@jic23-huawei \
--to=jic23@kernel.org \
--cc=adinata.softwareengineer@gmail.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel-mentees@lists.linux.dev \
--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.