summaryrefslogtreecommitdiff
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2021-12-06 05:04:21 +0300
committerGuenter Roeck <linux@roeck-us.net>2021-12-27 02:02:06 +0300
commite0149eebe47b9fe50cf85f23bcaeed81d7356c99 (patch)
tree866c527fe52f3ad6737ae2a476c76073cec5f155 /drivers/hwmon
parentd75553790b9f44f9a6023a51ca5283ef4688f339 (diff)
downloadlinux-e0149eebe47b9fe50cf85f23bcaeed81d7356c99.tar.xz
hwmon: (ntc_thermistor) Move and refactor DT parsing
Move the parsing of the DT config right above probe(). Allocate the state container for the driver in probe() instead of inside the DT config parsing function: as a result return an int instead of a pointer. Drop the check for !np: we can only probe from DT right now so no risk of ending up here. Cc: Peter Rosin <peda@axentia.se> Cc: Chris Lesiak <chris.lesiak@licor.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20211206020423.62402-1-linus.walleij@linaro.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/ntc_thermistor.c93
1 files changed, 43 insertions, 50 deletions
diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
index ed638ebd0923..12435ef66530 100644
--- a/drivers/hwmon/ntc_thermistor.c
+++ b/drivers/hwmon/ntc_thermistor.c
@@ -403,49 +403,6 @@ static const struct of_device_id ntc_match[] = {
};
MODULE_DEVICE_TABLE(of, ntc_match);
-static struct ntc_data *ntc_thermistor_parse_dt(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;
-
- if (!np)
- return NULL;
-
- data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
- if (!data)
- return ERR_PTR(-ENOMEM);
-
- chan = devm_iio_channel_get(dev, NULL);
- if (IS_ERR(chan))
- return ERR_CAST(chan);
-
- ret = iio_get_channel_type(chan, &type);
- if (ret < 0)
- return ERR_PTR(ret);
-
- if (type != IIO_VOLTAGE)
- return ERR_PTR(-EINVAL);
-
- if (of_property_read_u32(np, "pullup-uv", &data->pullup_uv))
- return ERR_PTR(-ENODEV);
- if (of_property_read_u32(np, "pullup-ohm", &data->pullup_ohm))
- return ERR_PTR(-ENODEV);
- if (of_property_read_u32(np, "pulldown-ohm", &data->pulldown_ohm))
- return ERR_PTR(-ENODEV);
-
- if (of_find_property(np, "connected-positive", NULL))
- data->connect = NTC_CONNECTED_POSITIVE;
- else /* status change should be possible if not always on. */
- data->connect = NTC_CONNECTED_GROUND;
-
- data->chan = chan;
-
- return data;
-}
-
static inline u64 div64_u64_safe(u64 dividend, u64 divisor)
{
if (divisor == 0 && dividend == 0)
@@ -638,6 +595,42 @@ 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)
+{
+ 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);
+ if (IS_ERR(chan))
+ return PTR_ERR(chan);
+
+ ret = iio_get_channel_type(chan, &type);
+ if (ret < 0)
+ return ret;
+
+ 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;
+
+ if (of_find_property(np, "connected-positive", NULL))
+ data->connect = NTC_CONNECTED_POSITIVE;
+ else /* status change should be possible if not always on. */
+ data->connect = NTC_CONNECTED_GROUND;
+
+ data->chan = chan;
+
+ return 0;
+}
+
static int ntc_thermistor_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -646,15 +639,15 @@ static int ntc_thermistor_probe(struct platform_device *pdev)
const struct platform_device_id *pdev_id;
struct device *hwmon_dev;
struct ntc_data *data;
+ int ret;
- data = ntc_thermistor_parse_dt(dev);
- if (IS_ERR(data))
- return PTR_ERR(data);
+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
- if (!data) {
- dev_err(dev, "No platform init data supplied.\n");
- return -ENODEV;
- }
+ ret = ntc_thermistor_parse_dt(dev, data);
+ if (ret)
+ return ret;
if (data->pullup_uv == 0 ||
(data->pullup_ohm == 0 && data->connect ==