Commit e7c672d0 authored by Nuno Sá's avatar Nuno Sá Committed by Jonathan Cameron

iio: adc: qcom-spmi-vadc: convert to device properties

Make the conversion to firmware agnostic device properties. As part of
the conversion the IIO inkern interface 'of_xlate()' is also converted to
'fwnode_xlate()'. The goal is to completely drop 'of_xlate' and hence OF
dependencies from IIO.
Signed-off-by: default avatarNuno Sá <nuno.sa@analog.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20220715122903.332535-12-nuno.sa@analog.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 9e90c177
...@@ -13,8 +13,9 @@ ...@@ -13,8 +13,9 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/math64.h> #include <linux/math64.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h> #include <linux/mod_devicetable.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/log2.h> #include <linux/log2.h>
...@@ -481,8 +482,8 @@ static int vadc_read_raw(struct iio_dev *indio_dev, ...@@ -481,8 +482,8 @@ static int vadc_read_raw(struct iio_dev *indio_dev,
return ret; return ret;
} }
static int vadc_of_xlate(struct iio_dev *indio_dev, static int vadc_fwnode_xlate(struct iio_dev *indio_dev,
const struct of_phandle_args *iiospec) const struct fwnode_reference_args *iiospec)
{ {
struct vadc_priv *vadc = iio_priv(indio_dev); struct vadc_priv *vadc = iio_priv(indio_dev);
unsigned int i; unsigned int i;
...@@ -496,7 +497,7 @@ static int vadc_of_xlate(struct iio_dev *indio_dev, ...@@ -496,7 +497,7 @@ static int vadc_of_xlate(struct iio_dev *indio_dev,
static const struct iio_info vadc_info = { static const struct iio_info vadc_info = {
.read_raw = vadc_read_raw, .read_raw = vadc_read_raw,
.of_xlate = vadc_of_xlate, .fwnode_xlate = vadc_fwnode_xlate,
}; };
struct vadc_channels { struct vadc_channels {
...@@ -647,15 +648,15 @@ static const struct vadc_channels vadc_chans[] = { ...@@ -647,15 +648,15 @@ static const struct vadc_channels vadc_chans[] = {
VADC_CHAN_NO_SCALE(LR_MUX3_BUF_PU1_PU2_XO_THERM, 0) VADC_CHAN_NO_SCALE(LR_MUX3_BUF_PU1_PU2_XO_THERM, 0)
}; };
static int vadc_get_dt_channel_data(struct device *dev, static int vadc_get_fw_channel_data(struct device *dev,
struct vadc_channel_prop *prop, struct vadc_channel_prop *prop,
struct device_node *node) struct fwnode_handle *fwnode)
{ {
const char *name = node->name; const char *name = fwnode_get_name(fwnode);
u32 chan, value, varr[2]; u32 chan, value, varr[2];
int ret; int ret;
ret = of_property_read_u32(node, "reg", &chan); ret = fwnode_property_read_u32(fwnode, "reg", &chan);
if (ret) { if (ret) {
dev_err(dev, "invalid channel number %s\n", name); dev_err(dev, "invalid channel number %s\n", name);
return ret; return ret;
...@@ -669,7 +670,7 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -669,7 +670,7 @@ static int vadc_get_dt_channel_data(struct device *dev,
/* the channel has DT description */ /* the channel has DT description */
prop->channel = chan; prop->channel = chan;
ret = of_property_read_u32(node, "qcom,decimation", &value); ret = fwnode_property_read_u32(fwnode, "qcom,decimation", &value);
if (!ret) { if (!ret) {
ret = qcom_vadc_decimation_from_dt(value); ret = qcom_vadc_decimation_from_dt(value);
if (ret < 0) { if (ret < 0) {
...@@ -682,7 +683,7 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -682,7 +683,7 @@ static int vadc_get_dt_channel_data(struct device *dev,
prop->decimation = VADC_DEF_DECIMATION; prop->decimation = VADC_DEF_DECIMATION;
} }
ret = of_property_read_u32_array(node, "qcom,pre-scaling", varr, 2); ret = fwnode_property_read_u32_array(fwnode, "qcom,pre-scaling", varr, 2);
if (!ret) { if (!ret) {
ret = vadc_prescaling_from_dt(varr[0], varr[1]); ret = vadc_prescaling_from_dt(varr[0], varr[1]);
if (ret < 0) { if (ret < 0) {
...@@ -695,7 +696,7 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -695,7 +696,7 @@ static int vadc_get_dt_channel_data(struct device *dev,
prop->prescale = vadc_chans[prop->channel].prescale_index; prop->prescale = vadc_chans[prop->channel].prescale_index;
} }
ret = of_property_read_u32(node, "qcom,hw-settle-time", &value); ret = fwnode_property_read_u32(fwnode, "qcom,hw-settle-time", &value);
if (!ret) { if (!ret) {
ret = vadc_hw_settle_time_from_dt(value); ret = vadc_hw_settle_time_from_dt(value);
if (ret < 0) { if (ret < 0) {
...@@ -708,7 +709,7 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -708,7 +709,7 @@ static int vadc_get_dt_channel_data(struct device *dev,
prop->hw_settle_time = VADC_DEF_HW_SETTLE_TIME; prop->hw_settle_time = VADC_DEF_HW_SETTLE_TIME;
} }
ret = of_property_read_u32(node, "qcom,avg-samples", &value); ret = fwnode_property_read_u32(fwnode, "qcom,avg-samples", &value);
if (!ret) { if (!ret) {
ret = vadc_avg_samples_from_dt(value); ret = vadc_avg_samples_from_dt(value);
if (ret < 0) { if (ret < 0) {
...@@ -721,7 +722,7 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -721,7 +722,7 @@ static int vadc_get_dt_channel_data(struct device *dev,
prop->avg_samples = VADC_DEF_AVG_SAMPLES; prop->avg_samples = VADC_DEF_AVG_SAMPLES;
} }
if (of_property_read_bool(node, "qcom,ratiometric")) if (fwnode_property_read_bool(fwnode, "qcom,ratiometric"))
prop->calibration = VADC_CALIB_RATIOMETRIC; prop->calibration = VADC_CALIB_RATIOMETRIC;
else else
prop->calibration = VADC_CALIB_ABSOLUTE; prop->calibration = VADC_CALIB_ABSOLUTE;
...@@ -731,16 +732,16 @@ static int vadc_get_dt_channel_data(struct device *dev, ...@@ -731,16 +732,16 @@ static int vadc_get_dt_channel_data(struct device *dev,
return 0; return 0;
} }
static int vadc_get_dt_data(struct vadc_priv *vadc, struct device_node *node) static int vadc_get_fw_data(struct vadc_priv *vadc)
{ {
const struct vadc_channels *vadc_chan; const struct vadc_channels *vadc_chan;
struct iio_chan_spec *iio_chan; struct iio_chan_spec *iio_chan;
struct vadc_channel_prop prop; struct vadc_channel_prop prop;
struct device_node *child; struct fwnode_handle *child;
unsigned int index = 0; unsigned int index = 0;
int ret; int ret;
vadc->nchannels = of_get_available_child_count(node); vadc->nchannels = device_get_child_node_count(vadc->dev);
if (!vadc->nchannels) if (!vadc->nchannels)
return -EINVAL; return -EINVAL;
...@@ -756,10 +757,10 @@ static int vadc_get_dt_data(struct vadc_priv *vadc, struct device_node *node) ...@@ -756,10 +757,10 @@ static int vadc_get_dt_data(struct vadc_priv *vadc, struct device_node *node)
iio_chan = vadc->iio_chans; iio_chan = vadc->iio_chans;
for_each_available_child_of_node(node, child) { device_for_each_child_node(vadc->dev, child) {
ret = vadc_get_dt_channel_data(vadc->dev, &prop, child); ret = vadc_get_fw_channel_data(vadc->dev, &prop, child);
if (ret) { if (ret) {
of_node_put(child); fwnode_handle_put(child);
return ret; return ret;
} }
...@@ -848,7 +849,6 @@ static int vadc_check_revision(struct vadc_priv *vadc) ...@@ -848,7 +849,6 @@ static int vadc_check_revision(struct vadc_priv *vadc)
static int vadc_probe(struct platform_device *pdev) static int vadc_probe(struct platform_device *pdev)
{ {
struct device_node *node = pdev->dev.of_node;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
struct vadc_priv *vadc; struct vadc_priv *vadc;
...@@ -860,7 +860,7 @@ static int vadc_probe(struct platform_device *pdev) ...@@ -860,7 +860,7 @@ static int vadc_probe(struct platform_device *pdev)
if (!regmap) if (!regmap)
return -ENODEV; return -ENODEV;
ret = of_property_read_u32(node, "reg", &reg); ret = device_property_read_u32(dev, "reg", &reg);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -880,7 +880,7 @@ static int vadc_probe(struct platform_device *pdev) ...@@ -880,7 +880,7 @@ static int vadc_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
ret = vadc_get_dt_data(vadc, node); ret = vadc_get_fw_data(vadc);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment