On Mon, Dec 06, 2021 at 03:04:22AM +0100, Linus Walleij wrote: > This switches to retrieveing the configuration of the NTC > from generic firmware properties so that we get neutral from > device tree: now ACPI or, more importantly, software nodes > can be used to spawn NTC devices provided they have the > required properties. > > This was inspired by the similar changes made to the IIO > drivers. > > This was tested on the Ux500 HREF with the NTC devices > probing from device tree just as fine after this as before. > > Cc: Peter Rosin <peda@xxxxxxxxxx> > Cc: Chris Lesiak <chris.lesiak@xxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Applied. Thanks, Guenter > --- > ChangeLog v1->v2: > - Rebase on the changes keeping the props parsing code in > a separate function. > --- > drivers/hwmon/ntc_thermistor.c | 36 ++++++++++++++++++---------------- > 1 file changed, 19 insertions(+), 17 deletions(-) > > diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c > index 12435ef66530..0c8b3dbcb38b 100644 > --- a/drivers/hwmon/ntc_thermistor.c > +++ b/drivers/hwmon/ntc_thermistor.c > @@ -9,10 +9,10 @@ > #include <linux/slab.h> > #include <linux/module.h> > #include <linux/math64.h> > +#include <linux/mod_devicetable.h> > #include <linux/platform_device.h> > +#include <linux/property.h> > #include <linux/err.h> > -#include <linux/of.h> > -#include <linux/of_device.h> > #include <linux/fixp-arith.h> > #include <linux/iio/consumer.h> > #include <linux/hwmon.h> > @@ -595,12 +595,11 @@ static const struct hwmon_chip_info ntc_chip_info = { > .info = ntc_info, > }; > > -static int ntc_thermistor_parse_dt(struct device *dev, > - struct ntc_data *data) > +static int ntc_thermistor_parse_props(struct device *dev, > + struct ntc_data *data) > { > struct iio_channel *chan; > enum iio_chan_type type; > - struct device_node *np = dev->of_node; > int ret; > > chan = devm_iio_channel_get(dev, NULL); > @@ -614,14 +613,19 @@ static int ntc_thermistor_parse_dt(struct device *dev, > if (type != IIO_VOLTAGE) > return -EINVAL; > > - if (of_property_read_u32(np, "pullup-uv", &data->pullup_uv)) > - return -ENODEV; > - if (of_property_read_u32(np, "pullup-ohm", &data->pullup_ohm)) > - return -ENODEV; > - if (of_property_read_u32(np, "pulldown-ohm", &data->pulldown_ohm)) > - return -ENODEV; > + ret = device_property_read_u32(dev, "pullup-uv", &data->pullup_uv); > + if (ret) > + return dev_err_probe(dev, ret, "pullup-uv not specified\n"); > + > + ret = device_property_read_u32(dev, "pullup-ohm", &data->pullup_ohm); > + if (ret) > + return dev_err_probe(dev, ret, "pullup-ohm not specified\n"); > + > + ret = device_property_read_u32(dev, "pulldown-ohm", &data->pulldown_ohm); > + if (ret) > + return dev_err_probe(dev, ret, "pulldown-ohm not specified\n"); > > - if (of_find_property(np, "connected-positive", NULL)) > + if (device_property_read_bool(dev, "connected-positive")) > data->connect = NTC_CONNECTED_POSITIVE; > else /* status change should be possible if not always on. */ > data->connect = NTC_CONNECTED_GROUND; > @@ -634,8 +638,6 @@ static int ntc_thermistor_parse_dt(struct device *dev, > static int ntc_thermistor_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > - const struct of_device_id *of_id = > - of_match_device(of_match_ptr(ntc_match), dev); > const struct platform_device_id *pdev_id; > struct device *hwmon_dev; > struct ntc_data *data; > @@ -645,7 +647,7 @@ static int ntc_thermistor_probe(struct platform_device *pdev) > if (!data) > return -ENOMEM; > > - ret = ntc_thermistor_parse_dt(dev, data); > + ret = ntc_thermistor_parse_props(dev, data); > if (ret) > return ret; > > @@ -660,7 +662,7 @@ static int ntc_thermistor_probe(struct platform_device *pdev) > return -EINVAL; > } > > - pdev_id = of_id ? of_id->data : platform_get_device_id(pdev); > + pdev_id = device_get_match_data(dev); > > if (pdev_id->driver_data >= ARRAY_SIZE(ntc_type)) { > dev_err(dev, "Unknown device type: %lu(%s)\n", > @@ -688,7 +690,7 @@ static int ntc_thermistor_probe(struct platform_device *pdev) > static struct platform_driver ntc_thermistor_driver = { > .driver = { > .name = "ntc-thermistor", > - .of_match_table = of_match_ptr(ntc_match), > + .of_match_table = ntc_match, > }, > .probe = ntc_thermistor_probe, > .id_table = ntc_thermistor_id,