From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59CE63B8939 for ; Sat, 8 Aug 2026 09:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786179659; cv=none; b=IV5dPH95hqV6/qWtEzhpCiZ60coZbjGCDXYPRMPmi0CBri4hVuCVxcSqLtPy1YjjOpJU7DMAfTqMkRWRnCJAfyKqKQlxSH2HsmGMkToffvfftB2PNajmatXBEy9yKLyLqamtBPagWYtDnQ4cwcnjNse0wxOIWmSlFSa/N4xYzLA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786179659; c=relaxed/simple; bh=IKD1gKaNsgaVAcBRxbLjFsH0xtEpv4azMpvN9XRWifk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EmoiOPdh1uk/knkmt9LJRZN3OiK1APo5hK/o0yE/seT0Thkee9UY+sM4Iy7gYHLPU4lzFZ9wjoFieFcl84FbWKbPdHIWjZHxwc+Dt6JyZ7r6bRNVKKHYJF5WQoaNhE9koM+ys2DzE6gLZrDia0mljww5QDRD2yfFFSDk+XxYhns= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JDv6UNi7; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JDv6UNi7" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-848743155bcso80187b3a.0 for ; Sat, 08 Aug 2026 02:00:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786179656; x=1786784456; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Ge2ItlSoH59iRKQvJyLrgo1nbfxoN8NfgLJkyxe+oXw=; b=JDv6UNi7R/JJOEkTAS3sxRymdXep/egbQsjETJ8/9mLqzIKrDFXDn8BFkTir5vuBfz S3V2uP4Qjjv08r9vN7byUtySn+iEXgZ6cCz2+YbKnOrqI0JLNqVlNk1IcbgHqTYHOiaa P+JzACMkuaNA2ctjWSccx1MOEGGffAkNIdtx7p/trzqfQuJ2POsU452kAi5gtNqhqu4V p5XyVsKQz+A2EJ5F/YkRiV9MF77CgWAQmooWISFyu4gYee9GE5OIIt5vDMU7QpGZrKzC NXgp5cDHb2ED2OUe5Xv+cPzmHsYa1NvxrAt2Q8cIRZb9r9h28UiBpLIsQnidLupa4JEA x2NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786179656; x=1786784456; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Ge2ItlSoH59iRKQvJyLrgo1nbfxoN8NfgLJkyxe+oXw=; b=Jg49ta2NuX38I9/MV3c/AAzPq0wCa0b0Drvua2UAYvweB5Sc4c5kRrO8Iiazp0I5a3 X7z8XJdsoAkN07tmnEVPXSVRjx1fvwY4MTpqI7o7bSnv0jReJIRG0EWSkTGURvo3vxg4 7n6y6JQMxf1Fib0aLtpnGxR4IHjQwmDITQcfO1E0CkVdm0el55n2GKXKDZjwGUG6DQEL qOkZ3TNw2ewfgPIS2fFDN169q8L1uqc+5Hz0epoqLqAoCJTigs1kDk9ZGkzzVjk810KP 59bT9rDNoKz/SU98jjzBmgUicbq5uK3m1JRzEbmPXyN5yRuDUJDycEqRU7wGAsXPen0H kE/Q== X-Forwarded-Encrypted: i=1; AHgh+RpUdFix84/PgvSY9t2aTCYcZ654iJnq2U+jv7UjaLPoiA49hgBy1JaXNGy9UNnTxqJA7bUJFn7KjYGigkE=@vger.kernel.org X-Gm-Message-State: AOJu0YwNTVphX100XyMx+5quzIHnoFUDoZnO26wU76SNSxa+AN8rtzKe a/G6WO9ryfGETnns8CDn+skH6KcKZ5jrIgLhLaGrkNjswZWmfjW0NgXW X-Gm-Gg: AR+sD13WwWgq9isvz89EAJmv0aMePq5QhGgRwCcFp4M3OGijtCYxgQx7v+LO3hhM8k4 mIXjURZBbiUArzNDeiEJLKH4SNDryp2U1HnZbH+SK9Om8dBK/GSj8BXGH7/rQ5hxEsfqf1PY7pu 9fRbWYu68LK5CR75YyQFbC6ATwquVTS9VA4lx0Y2mGrm1QOcKPK6q991ovPLs8XPxBUGCWY+Zh+ Z5XMTEulkay76XP+lPq6qEvjNreTWt6Bpf6EiASxr1K0PLJWaWaQs1xMxSnE7jc0pitNZ0huJhv DSgVA+E1LpMggqBScmeb0+qO+5miv9z3BDv8WD0vd+3hB929wV/LTOQfhvcgU+SvfVEhBraXg7T +ak78vej/zwu5aoHqwg65/0iv+rb4LVG/AM3v206NPg78S/YynM4QOo7FxQLt0frCzL56shygBq Xjuc5li4ekuzUFvfFi30wWJHIGjfJP0zaNb6bgBra/1htrwxVge4UpCRMQtIxBivZ1K7dS5gf6g HMYbM2OufakxhgAx/0LQXmZr//vH7Q6CjY9L4yOo6D9l7ykM01lJEDn7ABwgPQ= X-Received: by 2002:a05:6a00:1391:b0:845:dfef:75b8 with SMTP id d2e1a72fcca58-84f4fdbfe20mr15922860b3a.15.1786179655627; Sat, 08 Aug 2026 02:00:55 -0700 (PDT) Received: from debian13.localdomain (bb219-75-96-14.singnet.com.sg. [219.75.96.14]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84f5a51e9f0sm1973871b3a.28.2026.08.08.02.00.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Aug 2026 02:00:55 -0700 (PDT) From: Adi Nata To: lorenzo@kernel.org, jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linux-kernel-mentees@lists.linux.dev, Adi Nata Subject: [PATCH 1/5] iio: humidity: hts221: report available values via read_avail() Date: Sat, 8 Aug 2026 17:00:22 +0800 Message-ID: <20260808090026.34187-2-adinata.softwareengineer@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260808090026.34187-1-adinata.softwareengineer@gmail.com> References: <20260808090026.34187-1-adinata.softwareengineer@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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. Signed-off-by: Adi Nata --- 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 #include #include -#include #include #include #include @@ -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, }; -- 2.47.3