From: Flaviu Nistor <flaviu.nistor@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>, Jean Delvare <jdelvare@suse.com>
Cc: Flaviu Nistor <flaviu.nistor@gmail.com>,
linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] hwmon: (lm90) Switch channel parsing to fwnode APIs
Date: Mon, 13 Jul 2026 22:06:59 +0300 [thread overview]
Message-ID: <20260713190659.4511-1-flaviu.nistor@gmail.com> (raw)
Replace OF property handling with fwnode API in the probe function to read
the channels properties, improving the driver compatibility since this
method is not limited to Device Tree only.
Add also the needed headers for explicit include and clean up related
function naming.
Signed-off-by: Flaviu Nistor <flaviu.nistor@gmail.com>
---
drivers/hwmon/lm90.c | 48 +++++++++++++++++++++-----------------------
1 file changed, 23 insertions(+), 25 deletions(-)
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 4b9c0ccdf260..045977e30cf4 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -101,14 +101,16 @@
#include <linux/bits.h>
#include <linux/device.h>
#include <linux/err.h>
+#include <linux/fwnode.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/jiffies.h>
#include <linux/hwmon.h>
#include <linux/kstrtox.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
-#include <linux/of.h>
+#include <linux/property.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
@@ -295,7 +297,7 @@ static const struct i2c_device_id lm90_id[] = {
};
MODULE_DEVICE_TABLE(i2c, lm90_id);
-static const struct of_device_id __maybe_unused lm90_of_match[] = {
+static const struct of_device_id lm90_of_match[] = {
{
.compatible = "adi,adm1032",
.data = (void *)adm1032
@@ -2602,7 +2604,6 @@ static void lm90_stop_work(void *_data)
static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
{
- struct device_node *np = client->dev.of_node;
int config, convrate;
if (data->flags & LM90_HAVE_CONVRATE) {
@@ -2626,7 +2627,7 @@ static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
/* Check Temperature Range Select */
if (data->flags & LM90_HAVE_EXTENDED_TEMP) {
- if (of_property_read_bool(np, "ti,extended-range-enable"))
+ if (device_property_read_bool(&client->dev, "ti,extended-range-enable"))
config |= 0x04;
if (!(config & 0x04))
data->flags &= ~LM90_HAVE_EXTENDED_TEMP;
@@ -2692,8 +2693,8 @@ static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
return IRQ_NONE;
}
-static int lm90_probe_channel_from_dt(struct i2c_client *client,
- struct device_node *child,
+static int lm90_probe_channel(struct i2c_client *client,
+ struct fwnode_handle *child,
struct lm90_data *data)
{
u32 id;
@@ -2701,27 +2702,27 @@ static int lm90_probe_channel_from_dt(struct i2c_client *client,
int err;
struct device *dev = &client->dev;
- err = of_property_read_u32(child, "reg", &id);
+ err = fwnode_property_read_u32(child, "reg", &id);
if (err) {
- dev_err(dev, "missing reg property of %pOFn\n", child);
+ dev_err(dev, "missing reg property of %pfw\n", child);
return err;
}
if (id >= MAX_CHANNELS) {
- dev_err(dev, "invalid reg property value %d in %pOFn\n", id, child);
+ dev_err(dev, "invalid reg property value %d in %pfw\n", id, child);
return -EINVAL;
}
- err = of_property_read_string(child, "label", &data->channel_label[id]);
+ err = fwnode_property_read_string(child, "label", &data->channel_label[id]);
if (err == -ENODATA || err == -EILSEQ) {
- dev_err(dev, "invalid label property in %pOFn\n", child);
+ dev_err(dev, "invalid label property in %pfw\n", child);
return err;
}
if (data->channel_label[id])
data->channel_config[id] |= HWMON_T_LABEL;
- err = of_property_read_s32(child, "temperature-offset-millicelsius", &val);
+ err = fwnode_property_read_u32(child, "temperature-offset-millicelsius", &val);
if (!err) {
if (id == 0) {
dev_err(dev, "temperature-offset-millicelsius can't be set for internal channel\n");
@@ -2739,18 +2740,17 @@ static int lm90_probe_channel_from_dt(struct i2c_client *client,
return 0;
}
-static int lm90_parse_dt_channel_info(struct i2c_client *client,
- struct lm90_data *data)
+static int lm90_parse_channel_info(struct i2c_client *client,
+ struct lm90_data *data)
{
int err;
struct device *dev = &client->dev;
- const struct device_node *np = dev->of_node;
- for_each_child_of_node_scoped(np, child) {
- if (strcmp(child->name, "channel"))
+ device_for_each_child_node_scoped(dev, child) {
+ if (!fwnode_name_eq(child, "channel"))
continue;
- err = lm90_probe_channel_from_dt(client, child, data);
+ err = lm90_probe_channel(client, child, data);
if (err)
return err;
}
@@ -2887,12 +2887,10 @@ static int lm90_probe(struct i2c_client *client)
/* Set maximum conversion rate */
data->max_convrate = lm90_params[data->kind].max_convrate;
- /* Parse device-tree channel information */
- if (client->dev.of_node) {
- err = lm90_parse_dt_channel_info(client, data);
- if (err)
- return err;
- }
+ /* Parse channel information */
+ err = lm90_parse_channel_info(client, data);
+ if (err)
+ return err;
/* Initialize the LM90 chip */
err = lm90_init_client(client, data);
@@ -2985,7 +2983,7 @@ static struct i2c_driver lm90_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = "lm90",
- .of_match_table = of_match_ptr(lm90_of_match),
+ .of_match_table = lm90_of_match,
.pm = pm_sleep_ptr(&lm90_pm_ops),
},
.probe = lm90_probe,
--
2.34.1
next reply other threads:[~2026-07-13 19:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 19:06 Flaviu Nistor [this message]
2026-07-13 19:16 ` [PATCH] hwmon: (lm90) Switch channel parsing to fwnode APIs sashiko-bot
2026-07-14 12:22 ` Uwe Kleine-König
2026-07-14 14:43 ` Guenter Roeck
2026-07-14 17:09 ` Uwe Kleine-König
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=20260713190659.4511-1-flaviu.nistor@gmail.com \
--to=flaviu.nistor@gmail.com \
--cc=jdelvare@suse.com \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox