Commit dec7e2c8 authored by Nuno Sá's avatar Nuno Sá Committed by Jonathan Cameron
Browse files

iio: adc: ab8500-gpadc: 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-9-nuno.sa@analog.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 9ac07597
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -925,8 +925,8 @@ static int ab8500_gpadc_read_raw(struct iio_dev *indio_dev,
	return -EINVAL;
}

static int ab8500_gpadc_of_xlate(struct iio_dev *indio_dev,
				 const struct of_phandle_args *iiospec)
static int ab8500_gpadc_fwnode_xlate(struct iio_dev *indio_dev,
				     const struct fwnode_reference_args *iiospec)
{
	int i;

@@ -938,7 +938,7 @@ static int ab8500_gpadc_of_xlate(struct iio_dev *indio_dev,
}

static const struct iio_info ab8500_gpadc_info = {
	.of_xlate = ab8500_gpadc_of_xlate,
	.fwnode_xlate = ab8500_gpadc_fwnode_xlate,
	.read_raw = ab8500_gpadc_read_raw,
};

@@ -968,7 +968,7 @@ static int ab8500_gpadc_runtime_resume(struct device *dev)
/**
 * ab8500_gpadc_parse_channel() - process devicetree channel configuration
 * @dev: pointer to containing device
 * @np: device tree node for the channel to configure
 * @fwnode: fw node for the channel to configure
 * @ch: channel info to fill in
 * @iio_chan: IIO channel specification to fill in
 *
@@ -976,15 +976,15 @@ static int ab8500_gpadc_runtime_resume(struct device *dev)
 * and define usage for things like AUX GPADC inputs more precisely.
 */
static int ab8500_gpadc_parse_channel(struct device *dev,
				      struct device_node *np,
				      struct fwnode_handle *fwnode,
				      struct ab8500_gpadc_chan_info *ch,
				      struct iio_chan_spec *iio_chan)
{
	const char *name = np->name;
	const char *name = fwnode_get_name(fwnode);
	u32 chan;
	int ret;

	ret = of_property_read_u32(np, "reg", &chan);
	ret = fwnode_property_read_u32(fwnode, "reg", &chan);
	if (ret) {
		dev_err(dev, "invalid channel number %s\n", name);
		return ret;
@@ -1021,22 +1021,20 @@ static int ab8500_gpadc_parse_channel(struct device *dev,
/**
 * ab8500_gpadc_parse_channels() - Parse the GPADC channels from DT
 * @gpadc: the GPADC to configure the channels for
 * @np: device tree node containing the channel configurations
 * @chans: the IIO channels we parsed
 * @nchans: the number of IIO channels we parsed
 */
static int ab8500_gpadc_parse_channels(struct ab8500_gpadc *gpadc,
				       struct device_node *np,
				       struct iio_chan_spec **chans_parsed,
				       unsigned int *nchans_parsed)
{
	struct device_node *child;
	struct fwnode_handle *child;
	struct ab8500_gpadc_chan_info *ch;
	struct iio_chan_spec *iio_chans;
	unsigned int nchans;
	int i;

	nchans = of_get_available_child_count(np);
	nchans = device_get_child_node_count(gpadc->dev);
	if (!nchans) {
		dev_err(gpadc->dev, "no channel children\n");
		return -ENODEV;
@@ -1054,7 +1052,7 @@ static int ab8500_gpadc_parse_channels(struct ab8500_gpadc *gpadc,
		return -ENOMEM;

	i = 0;
	for_each_available_child_of_node(np, child) {
	device_for_each_child_node(gpadc->dev, child) {
		struct iio_chan_spec *iio_chan;
		int ret;

@@ -1064,7 +1062,7 @@ static int ab8500_gpadc_parse_channels(struct ab8500_gpadc *gpadc,
		ret = ab8500_gpadc_parse_channel(gpadc->dev, child, ch,
						 iio_chan);
		if (ret) {
			of_node_put(child);
			fwnode_handle_put(child);
			return ret;
		}
		i++;
@@ -1081,7 +1079,6 @@ static int ab8500_gpadc_probe(struct platform_device *pdev)
	struct ab8500_gpadc *gpadc;
	struct iio_dev *indio_dev;
	struct device *dev = &pdev->dev;
	struct device_node *np = pdev->dev.of_node;
	struct iio_chan_spec *iio_chans;
	unsigned int n_iio_chans;
	int ret;
@@ -1096,7 +1093,7 @@ static int ab8500_gpadc_probe(struct platform_device *pdev)
	gpadc->dev = dev;
	gpadc->ab8500 = dev_get_drvdata(dev->parent);

	ret = ab8500_gpadc_parse_channels(gpadc, np, &iio_chans, &n_iio_chans);
	ret = ab8500_gpadc_parse_channels(gpadc, &iio_chans, &n_iio_chans);
	if (ret)
		return ret;