mirror of
https://github.com/torvalds/linux.git
synced 2024-10-23 13:40:56 +00:00
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: Nuno Sá <nuno.sa@analog.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/20220715122903.332535-12-nuno.sa@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
9e90c1772f
commit
e7c672d06b
|
@ -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,
|
||||||
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,
|
||||||
|
|
||||||
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[] = {
|
||||||
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,
|
||||||
/* 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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
if (!regmap)
|
if (!regmap)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ret = of_property_read_u32(node, "reg", ®);
|
ret = device_property_read_u32(dev, "reg", ®);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user