summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/lm90.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index ae3b0a33d676..1c603272538a 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -101,6 +101,7 @@
#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>
@@ -108,7 +109,7 @@
#include <linux/hwmon.h>
#include <linux/kstrtox.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 +296,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 +2603,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 +2626,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,36 +2692,41 @@ 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,
- struct lm90_data *data)
+static int lm90_probe_channel(struct i2c_client *client,
+ struct fwnode_handle *child,
+ struct lm90_data *data)
{
u32 id;
s32 val;
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);
+ /*
+ * fwnode_property_read_u32() has no signed equivalent.
+ * temperature-offset-millicelsius is signed, so read and reinterpret it as s32 to
+ * preserve negative offsets values (same behavior as the old of_property_read_s32()).
+ */
+ err = fwnode_property_read_u32(child, "temperature-offset-millicelsius", (u32 *)&val);
if (!err) {
if (id == 0) {
dev_err(dev, "temperature-offset-millicelsius can't be set for internal channel\n");
@@ -2739,18 +2744,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 +2891,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);
@@ -2983,7 +2985,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,