From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 921AF48AE0F for ; Thu, 13 Aug 2026 15:31:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635110; cv=none; b=FU4AxQkIWEDdUbHWDwDLNWzEQAq1R+XnezcqIhQzBAzbtET2SIIBOsfmHUlykh7cIhjklfO4CsV95lqrKW1TZU/Uvpxn4oqskbSDNnKmba7Xtpg5EAJk89rFPh9jJOB94UTLIekUhadiS2l+mYW8PtA57TCXyYUBzJ78Rafq39M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635110; c=relaxed/simple; bh=lF29cWX1tHGjImIaJT5dMIBt9ZzlqVZT0rak3Y5g1HA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mow2RmTcrUh8OCA0zx4C3Ujc3fQx7dSjKfXobeSrlJUBzGPJQvTCHUBASF9fc6fQXK3kyIFyOG8c66v2ZlVQGGDwWs535qYcWIqAOqceUg49i1NnTis2/vYC2UdOqjsGmKguMGJ8H5tFZUDiVnUWfWyPq+BQ+gMJzJi5tzgG8aA= 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=XqHCt4/c; arc=none smtp.client-ip=209.85.215.181 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="XqHCt4/c" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-c9eefcf9175so2107895a12.3 for ; Thu, 13 Aug 2026 08:31:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786635108; x=1787239908; 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=B3+9o3R/kRPttqUDwWN7jjdrSbSX27cMxLLa8OmPEoE=; b=XqHCt4/cuH0PjiZkwq7TUQx/nUyZvxBmR0k2nMKvBimTETHcYQn2vJtc+aBE9cj0rJ K6NijqZvv6zTHwqbSO2j1xKC31Wn9rAAh6jkrgOSx5tJVPZOvvGRQhO8Lk3dSIZUjlvc qB679bcxIOP4Yv+WhTaYPqxuZKgPp0RIRhDRHnuqD8qxfDvoLNvYVpvE/oflDed06uHG IGaPJlefaeFjHvBn9u5e6oMxiWYS7pCgQtdF9VGeLBbpEy8fyZG3+daxd8yUIhALj5lY pOQbsQqkW4nKT4bmybXAjzxFHo0gu5q7cRqJp4vExfINJ+ml9r4N8A6CXYfg+BSzHKEt rSng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786635108; x=1787239908; 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=B3+9o3R/kRPttqUDwWN7jjdrSbSX27cMxLLa8OmPEoE=; b=A7h7uIvac9VhXDI/t4CHpE2GSCLdT/R7B9D0khMbYTsvk4Fk4kEQdYd9ou2VTuu0qX HwVS4fsGoEsQp4Nb2QiJtlpYPqNEMCrM3cX0uu4Y/MUJs/yyYXvElW6W8hL69Dmz+EuH 6QS/qYuEWAod1zw8u2rYbCsxuh3L8neClzzsrqJ5SD+a579fFu9HNo2J99kzZeLnUPms 7zawu0UmSmtW4oNrTaeos4hM7zAeHwzyY9sOiCXA3SmDVdOyMCNZuWA5QB8LAJ2h+6iw oB+5dMq+J42RDv6l+QwjXA5JhAfG9P8gYi5LtjLrwzp39cQv51Xwzj35ygaDGfamj90Z Yy7A== X-Forwarded-Encrypted: i=1; AHgh+RruXoBsiHWKw+VBaIqZ5qJmLcbXG7yg9vVE2S7xYZ/Go8ysCPOLEdY/4TroF6a9xm6cNUjMfabSJlbt1/w=@vger.kernel.org X-Gm-Message-State: AOJu0YykjMh+8UUG/zidZROhFqD948DROUkQqIIOXGHUo6hEWutfV8MF EEWDHIzpgFy0vBYmWvUq0l6hQ2ICfXVW2tVIUoBAK+yJyG3iQOV9BCcI X-Gm-Gg: AR+sD13sn0NZ81Y/cdLCzzPTA05ytiTE9Oz3oV1Uhl74Jb9CG6i5+2c0hHHJ3mDkb+L +/QmGe6mtyD13jOAkKAZ+09X+s4PtonL+G6cGlBvmx601v9unz8EN6OlseLP5PYGSb+fuWa1yDb 7WSIE5dGsdBhNnCACFcMeSHyBXbW9QPSe3nE3WkJP5Ggbl6Cbi7q9TiA0MNNVHbaoq+VhuuaAXh BY135dFgBJiVhhe2dAp7DsFDlHvbpHhtpqb4cUpeuyU4JzK7vQBD66SG6EHA8jC3ba219DtVVaD cEfaHA3VIW2aPOb7hhoXmDfI46k4CL+WDYfD0cFIIA+oVOQTjX4A6JS2NnqDPDUJyU9HcGclsOr 1rYDjYOxyXFFLtK1Q7tsleiboJxP4hN6tVOTciaEhOlUY6Iurcqj3zX+gfyOjz9m6ZRMShE/VfT B+LoJNKHFjcNfBuToLjI077YITHEHg6snClbKITfuwMrzCV0sl8pEv8EC0//mlqH25BHS5jWj0z oAW/v7HjhXdW7TtGJ+DRIw8g+sc+losNjXY5rJCu58r0/2ZNd9z4rlvdt0HnLvTT51cc9Gj X-Received: by 2002:a05:6a21:2d4c:b0:3b2:a809:ffe with SMTP id adf61e73a8af0-3cc5504409bmr9635887637.14.1786635107720; Thu, 13 Aug 2026 08:31:47 -0700 (PDT) Received: from debian13.localdomain (bb219-75-96-14.singnet.com.sg. [219.75.96.14]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31ec082943fsm7960604eec.29.2026.08.13.08.31.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 08:31:47 -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 v2 1/5] iio: humidity: hts221: report available values via read_avail() Date: Thu, 13 Aug 2026 23:31:25 +0800 Message-ID: <20260813153129.12423-2-adinata.softwareengineer@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260813153129.12423-1-adinata.softwareengineer@gmail.com> References: <20260813153129.12423-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. As a consequence, the incorrectly named in_humidity_oversampling_ratio_available attribute is replaced by the standard in_humidityrelative_oversampling_ratio_available name for the IIO_HUMIDITYRELATIVE channel. The temperature oversampling and sampling frequency available attribute names are unchanged. Fixes: e4a70e3e7d84 ("iio: humidity: add support to hts221 rh/temp combo device") 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