diff mbox series

[v2] staging: iio: meter: Drop ade7854 driver

Message ID 20230129160805.747745-1-jic23@kernel.org (mailing list archive)
State Accepted
Headers show
Series [v2] staging: iio: meter: Drop ade7854 driver | expand

Commit Message

Jonathan Cameron Jan. 29, 2023, 4:08 p.m. UTC
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

This driver is so far from making correct use of the IIO infrastructure
and ABI that if someone wanted to make the driver suitable for moving
out of staging, they would more or less be starting from scratch.

As such there is little point in keeping the existing code in staging.

Note this was only user of the meter.h header so that is dropped.
There are no other drivers in the staging/iio/meter directory so drop
the build system files as well.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/staging/iio/Kconfig             |   1 -
 drivers/staging/iio/Makefile            |   1 -
 drivers/staging/iio/meter/Kconfig       |  37 --
 drivers/staging/iio/meter/Makefile      |   8 -
 drivers/staging/iio/meter/ade7854-i2c.c | 153 -------
 drivers/staging/iio/meter/ade7854-spi.c | 160 -------
 drivers/staging/iio/meter/ade7854.c     | 556 ------------------------
 drivers/staging/iio/meter/ade7854.h     | 173 --------
 drivers/staging/iio/meter/meter.h       | 398 -----------------
 9 files changed, 1487 deletions(-)

Comments

Jonathan Cameron Feb. 5, 2023, 3:09 p.m. UTC | #1
On Sun, 29 Jan 2023 16:08:05 +0000
Jonathan Cameron <jic23@kernel.org> wrote:

> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> This driver is so far from making correct use of the IIO infrastructure
> and ABI that if someone wanted to make the driver suitable for moving
> out of staging, they would more or less be starting from scratch.
> 
> As such there is little point in keeping the existing code in staging.
> 
> Note this was only user of the meter.h header so that is dropped.
> There are no other drivers in the staging/iio/meter directory so drop
> the build system files as well.
> 
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Ping. 

If I don't hear any one speaking out in favour of keeping this driver
I'll drop it - probably early in next cycle.

Not really expecting review for a driver drop :)

Jonathan

> ---
>  drivers/staging/iio/Kconfig             |   1 -
>  drivers/staging/iio/Makefile            |   1 -
>  drivers/staging/iio/meter/Kconfig       |  37 --
>  drivers/staging/iio/meter/Makefile      |   8 -
>  drivers/staging/iio/meter/ade7854-i2c.c | 153 -------
>  drivers/staging/iio/meter/ade7854-spi.c | 160 -------
>  drivers/staging/iio/meter/ade7854.c     | 556 ------------------------
>  drivers/staging/iio/meter/ade7854.h     | 173 --------
>  drivers/staging/iio/meter/meter.h       | 398 -----------------
>  9 files changed, 1487 deletions(-)
> 
> diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
> index afd05bf3345e..d3968fe2ebb8 100644
> --- a/drivers/staging/iio/Kconfig
> +++ b/drivers/staging/iio/Kconfig
> @@ -10,7 +10,6 @@ source "drivers/staging/iio/adc/Kconfig"
>  source "drivers/staging/iio/addac/Kconfig"
>  source "drivers/staging/iio/frequency/Kconfig"
>  source "drivers/staging/iio/impedance-analyzer/Kconfig"
> -source "drivers/staging/iio/meter/Kconfig"
>  source "drivers/staging/iio/resolver/Kconfig"
>  
>  endmenu
> diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile
> index 5ed56fe57e14..c50f1019f829 100644
> --- a/drivers/staging/iio/Makefile
> +++ b/drivers/staging/iio/Makefile
> @@ -8,5 +8,4 @@ obj-y += adc/
>  obj-y += addac/
>  obj-y += frequency/
>  obj-y += impedance-analyzer/
> -obj-y += meter/
>  obj-y += resolver/
> diff --git a/drivers/staging/iio/meter/Kconfig b/drivers/staging/iio/meter/Kconfig
> deleted file mode 100644
> index aa6a3e7f6cdb..000000000000
> --- a/drivers/staging/iio/meter/Kconfig
> +++ /dev/null
> @@ -1,37 +0,0 @@
> -# SPDX-License-Identifier: GPL-2.0
> -#
> -# IIO meter drivers configuration
> -#
> -menu "Active energy metering IC"
> -
> -config ADE7854
> -	tristate "Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver"
> -	depends on SPI || I2C
> -	help
> -	  Say yes here to build support for Analog Devices ADE7854/58/68/78 Polyphase
> -	  Multifunction Energy Metering IC Driver.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called ade7854.
> -
> -config ADE7854_I2C
> -	tristate "support I2C bus connection"
> -	depends on ADE7854 && I2C
> -	default y
> -	help
> -	  Say Y here if you have ADE7854/58/68/78 hooked to an I2C bus.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called ade7854-i2c.
> -
> -config ADE7854_SPI
> -	tristate "support SPI bus connection"
> -	depends on ADE7854 && SPI
> -	default y
> -	help
> -	  Say Y here if you have ADE7854/58/68/78 hooked to a SPI bus.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called ade7854-spi.
> -
> -endmenu
> diff --git a/drivers/staging/iio/meter/Makefile b/drivers/staging/iio/meter/Makefile
> deleted file mode 100644
> index ed4547e38f3a..000000000000
> --- a/drivers/staging/iio/meter/Makefile
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -# SPDX-License-Identifier: GPL-2.0
> -#
> -# Makefile for metering ic drivers
> -#
> -
> -obj-$(CONFIG_ADE7854) += ade7854.o
> -obj-$(CONFIG_ADE7854_I2C) += ade7854-i2c.o
> -obj-$(CONFIG_ADE7854_SPI) += ade7854-spi.o
> diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
> deleted file mode 100644
> index 572d714eb0dd..000000000000
> --- a/drivers/staging/iio/meter/ade7854-i2c.c
> +++ /dev/null
> @@ -1,153 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (I2C Bus)
> - *
> - * Copyright 2010 Analog Devices Inc.
> - */
> -
> -#include <linux/device.h>
> -#include <linux/kernel.h>
> -#include <linux/i2c.h>
> -#include <linux/slab.h>
> -#include <linux/module.h>
> -
> -#include <linux/iio/iio.h>
> -#include "ade7854.h"
> -
> -static int ade7854_i2c_write_reg(struct device *dev,
> -				 u16 reg_address,
> -				 u32 val,
> -				 int bits)
> -{
> -	int ret;
> -	int count;
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	mutex_lock(&st->buf_lock);
> -	st->tx[0] = (reg_address >> 8) & 0xFF;
> -	st->tx[1] = reg_address & 0xFF;
> -
> -	switch (bits) {
> -	case 8:
> -		st->tx[2] = val & 0xFF;
> -		count = 3;
> -		break;
> -	case 16:
> -		st->tx[2] = (val >> 8) & 0xFF;
> -		st->tx[3] = val & 0xFF;
> -		count = 4;
> -		break;
> -	case 24:
> -		st->tx[2] = (val >> 16) & 0xFF;
> -		st->tx[3] = (val >> 8) & 0xFF;
> -		st->tx[4] = val & 0xFF;
> -		count = 5;
> -		break;
> -	case 32:
> -		st->tx[2] = (val >> 24) & 0xFF;
> -		st->tx[3] = (val >> 16) & 0xFF;
> -		st->tx[4] = (val >> 8) & 0xFF;
> -		st->tx[5] = val & 0xFF;
> -		count = 6;
> -		break;
> -	default:
> -		ret = -EINVAL;
> -		goto unlock;
> -	}
> -
> -	ret = i2c_master_send(st->i2c, st->tx, count);
> -
> -unlock:
> -	mutex_unlock(&st->buf_lock);
> -
> -	if (ret < 0)
> -		return ret;
> -
> -	return 0;
> -}
> -
> -static int ade7854_i2c_read_reg(struct device *dev,
> -				u16 reg_address,
> -				u32 *val,
> -				int bits)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	int ret;
> -
> -	mutex_lock(&st->buf_lock);
> -	st->tx[0] = (reg_address >> 8) & 0xFF;
> -	st->tx[1] = reg_address & 0xFF;
> -
> -	ret = i2c_master_send(st->i2c, st->tx, 2);
> -	if (ret < 0)
> -		goto unlock;
> -
> -	ret = i2c_master_recv(st->i2c, st->rx, bits);
> -	if (ret < 0)
> -		goto unlock;
> -
> -	switch (bits) {
> -	case 8:
> -		*val = st->rx[0];
> -		break;
> -	case 16:
> -		*val = (st->rx[0] << 8) | st->rx[1];
> -		break;
> -	case 24:
> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
> -		break;
> -	case 32:
> -		*val = (st->rx[0] << 24) | (st->rx[1] << 16) |
> -			(st->rx[2] << 8) | st->rx[3];
> -		break;
> -	default:
> -		ret = -EINVAL;
> -		goto unlock;
> -	}
> -
> -unlock:
> -	mutex_unlock(&st->buf_lock);
> -	return ret;
> -}
> -
> -static int ade7854_i2c_probe(struct i2c_client *client)
> -{
> -	struct ade7854_state *st;
> -	struct iio_dev *indio_dev;
> -
> -	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
> -	if (!indio_dev)
> -		return -ENOMEM;
> -	st = iio_priv(indio_dev);
> -	i2c_set_clientdata(client, indio_dev);
> -	st->read_reg = ade7854_i2c_read_reg;
> -	st->write_reg = ade7854_i2c_write_reg;
> -	st->i2c = client;
> -	st->irq = client->irq;
> -
> -	return ade7854_probe(indio_dev, &client->dev);
> -}
> -
> -static const struct i2c_device_id ade7854_id[] = {
> -	{ "ade7854", 0 },
> -	{ "ade7858", 0 },
> -	{ "ade7868", 0 },
> -	{ "ade7878", 0 },
> -	{ }
> -};
> -MODULE_DEVICE_TABLE(i2c, ade7854_id);
> -
> -static struct i2c_driver ade7854_i2c_driver = {
> -	.driver = {
> -		.name = "ade7854",
> -	},
> -	.probe_new = ade7854_i2c_probe,
> -	.id_table = ade7854_id,
> -};
> -module_i2c_driver(ade7854_i2c_driver);
> -
> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");
> -MODULE_LICENSE("GPL v2");
> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
> deleted file mode 100644
> index f12a6c8b3e88..000000000000
> --- a/drivers/staging/iio/meter/ade7854-spi.c
> +++ /dev/null
> @@ -1,160 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (SPI Bus)
> - *
> - * Copyright 2010 Analog Devices Inc.
> - */
> -
> -#include <linux/device.h>
> -#include <linux/kernel.h>
> -#include <linux/spi/spi.h>
> -#include <linux/slab.h>
> -#include <linux/module.h>
> -
> -#include <linux/iio/iio.h>
> -#include "ade7854.h"
> -
> -static int ade7854_spi_write_reg(struct device *dev,
> -				 u16 reg_address,
> -				 u32 val,
> -				 int bits)
> -{
> -	int ret;
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	struct spi_transfer xfer = {
> -		.tx_buf = st->tx,
> -		.bits_per_word = 8,
> -		.len = 4,
> -	};
> -
> -	mutex_lock(&st->buf_lock);
> -	st->tx[0] = ADE7854_WRITE_REG;
> -	st->tx[1] = (reg_address >> 8) & 0xFF;
> -	st->tx[2] = reg_address & 0xFF;
> -	switch (bits) {
> -	case 8:
> -		st->tx[3] = val & 0xFF;
> -		break;
> -	case 16:
> -		xfer.len = 5;
> -		st->tx[3] = (val >> 8) & 0xFF;
> -		st->tx[4] = val & 0xFF;
> -		break;
> -	case 24:
> -		xfer.len = 6;
> -		st->tx[3] = (val >> 16) & 0xFF;
> -		st->tx[4] = (val >> 8) & 0xFF;
> -		st->tx[5] = val & 0xFF;
> -		break;
> -	case 32:
> -		xfer.len = 7;
> -		st->tx[3] = (val >> 24) & 0xFF;
> -		st->tx[4] = (val >> 16) & 0xFF;
> -		st->tx[5] = (val >> 8) & 0xFF;
> -		st->tx[6] = val & 0xFF;
> -		break;
> -	default:
> -		ret = -EINVAL;
> -		goto unlock;
> -	}
> -
> -	ret = spi_sync_transfer(st->spi, &xfer, 1);
> -unlock:
> -	mutex_unlock(&st->buf_lock);
> -
> -	return ret;
> -}
> -
> -static int ade7854_spi_read_reg(struct device *dev,
> -				u16 reg_address,
> -				u32 *val,
> -				int bits)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	int ret;
> -	struct spi_transfer xfers[] = {
> -		{
> -			.tx_buf = st->tx,
> -			.bits_per_word = 8,
> -			.len = 3,
> -		}, {
> -			.rx_buf = st->rx,
> -			.bits_per_word = 8,
> -			.len = bits,
> -		}
> -	};
> -
> -	mutex_lock(&st->buf_lock);
> -
> -	st->tx[0] = ADE7854_READ_REG;
> -	st->tx[1] = (reg_address >> 8) & 0xFF;
> -	st->tx[2] = reg_address & 0xFF;
> -
> -	ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
> -	if (ret < 0) {
> -		dev_err(&st->spi->dev, "problem when reading register 0x%02X",
> -			reg_address);
> -		goto unlock;
> -	}
> -
> -	switch (bits) {
> -	case 8:
> -		*val = st->rx[0];
> -		break;
> -	case 16:
> -		*val = be16_to_cpup((const __be16 *)st->rx);
> -		break;
> -	case 24:
> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
> -		break;
> -	case 32:
> -		*val = be32_to_cpup((const __be32 *)st->rx);
> -		break;
> -	}
> -
> -unlock:
> -	mutex_unlock(&st->buf_lock);
> -	return ret;
> -}
> -
> -static int ade7854_spi_probe(struct spi_device *spi)
> -{
> -	struct ade7854_state *st;
> -	struct iio_dev *indio_dev;
> -
> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
> -	if (!indio_dev)
> -		return -ENOMEM;
> -	st = iio_priv(indio_dev);
> -	spi_set_drvdata(spi, indio_dev);
> -	st->read_reg = ade7854_spi_read_reg;
> -	st->write_reg = ade7854_spi_write_reg;
> -	st->irq = spi->irq;
> -	st->spi = spi;
> -
> -	return ade7854_probe(indio_dev, &spi->dev);
> -}
> -
> -static const struct spi_device_id ade7854_id[] = {
> -	{ "ade7854", 0 },
> -	{ "ade7858", 0 },
> -	{ "ade7868", 0 },
> -	{ "ade7878", 0 },
> -	{ }
> -};
> -MODULE_DEVICE_TABLE(spi, ade7854_id);
> -
> -static struct spi_driver ade7854_driver = {
> -	.driver = {
> -		.name = "ade7854",
> -	},
> -	.probe = ade7854_spi_probe,
> -	.id_table = ade7854_id,
> -};
> -module_spi_driver(ade7854_driver);
> -
> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
> -MODULE_LICENSE("GPL v2");
> diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c
> deleted file mode 100644
> index 68da6ecde6a3..000000000000
> --- a/drivers/staging/iio/meter/ade7854.c
> +++ /dev/null
> @@ -1,556 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver
> - *
> - * Copyright 2010 Analog Devices Inc.
> - */
> -
> -#include <linux/interrupt.h>
> -#include <linux/irq.h>
> -#include <linux/delay.h>
> -#include <linux/mutex.h>
> -#include <linux/device.h>
> -#include <linux/kernel.h>
> -#include <linux/slab.h>
> -#include <linux/sysfs.h>
> -#include <linux/list.h>
> -#include <linux/module.h>
> -
> -#include <linux/iio/iio.h>
> -#include <linux/iio/sysfs.h>
> -#include "meter.h"
> -#include "ade7854.h"
> -
> -static ssize_t ade7854_read_8bit(struct device *dev,
> -				 struct device_attribute *attr,
> -				 char *buf)
> -{
> -	int ret;
> -	u32 val = 0;
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -
> -	ret = st->read_reg(dev, this_attr->address, &val, 8);
> -	if (ret < 0)
> -		return ret;
> -
> -	return sprintf(buf, "%u\n", val);
> -}
> -
> -static ssize_t ade7854_read_16bit(struct device *dev,
> -				  struct device_attribute *attr,
> -				  char *buf)
> -{
> -	int ret;
> -	u32 val = 0;
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -
> -	ret = st->read_reg(dev, this_attr->address, &val, 16);
> -	if (ret < 0)
> -		return ret;
> -
> -	return sprintf(buf, "%u\n", val);
> -}
> -
> -static ssize_t ade7854_read_24bit(struct device *dev,
> -				  struct device_attribute *attr,
> -				  char *buf)
> -{
> -	int ret;
> -	u32 val;
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -
> -	ret = st->read_reg(dev, this_attr->address, &val, 24);
> -	if (ret < 0)
> -		return ret;
> -
> -	return sprintf(buf, "%u\n", val);
> -}
> -
> -static ssize_t ade7854_read_32bit(struct device *dev,
> -				  struct device_attribute *attr,
> -				  char *buf)
> -{
> -	int ret;
> -	u32 val = 0;
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	ret = st->read_reg(dev, this_attr->address, &val, 32);
> -	if (ret < 0)
> -		return ret;
> -
> -	return sprintf(buf, "%u\n", val);
> -}
> -
> -static ssize_t ade7854_write_8bit(struct device *dev,
> -				  struct device_attribute *attr,
> -				  const char *buf,
> -				  size_t len)
> -{
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	int ret;
> -	u8 val;
> -
> -	ret = kstrtou8(buf, 10, &val);
> -	if (ret)
> -		goto error_ret;
> -	ret = st->write_reg(dev, this_attr->address, val, 8);
> -
> -error_ret:
> -	return ret ? ret : len;
> -}
> -
> -static ssize_t ade7854_write_16bit(struct device *dev,
> -				   struct device_attribute *attr,
> -				   const char *buf,
> -				   size_t len)
> -{
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	int ret;
> -	u16 val;
> -
> -	ret = kstrtou16(buf, 10, &val);
> -	if (ret)
> -		goto error_ret;
> -	ret = st->write_reg(dev, this_attr->address, val, 16);
> -
> -error_ret:
> -	return ret ? ret : len;
> -}
> -
> -static ssize_t ade7854_write_24bit(struct device *dev,
> -				   struct device_attribute *attr,
> -				   const char *buf,
> -				   size_t len)
> -{
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	int ret;
> -	u32 val;
> -
> -	ret = kstrtou32(buf, 10, &val);
> -	if (ret)
> -		goto error_ret;
> -	ret = st->write_reg(dev, this_attr->address, val, 24);
> -
> -error_ret:
> -	return ret ? ret : len;
> -}
> -
> -static ssize_t ade7854_write_32bit(struct device *dev,
> -				   struct device_attribute *attr,
> -				   const char *buf,
> -				   size_t len)
> -{
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	int ret;
> -	u32 val;
> -
> -	ret = kstrtou32(buf, 10, &val);
> -	if (ret)
> -		goto error_ret;
> -	ret = st->write_reg(dev, this_attr->address, val, 32);
> -
> -error_ret:
> -	return ret ? ret : len;
> -}
> -
> -static int ade7854_reset(struct device *dev)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	u32 val;
> -
> -	st->read_reg(dev, ADE7854_CONFIG, &val, 16);
> -	val |= BIT(7); /* Software Chip Reset */
> -
> -	return st->write_reg(dev, ADE7854_CONFIG, val, 16);
> -}
> -
> -static IIO_DEV_ATTR_AIGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AIGAIN);
> -static IIO_DEV_ATTR_BIGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BIGAIN);
> -static IIO_DEV_ATTR_CIGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CIGAIN);
> -static IIO_DEV_ATTR_NIGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_NIGAIN);
> -static IIO_DEV_ATTR_AVGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AVGAIN);
> -static IIO_DEV_ATTR_BVGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BVGAIN);
> -static IIO_DEV_ATTR_CVGAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CVGAIN);
> -static IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AVAGAIN);
> -static IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BVAGAIN);
> -static IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CVAGAIN);
> -static IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AWATTOS);
> -static IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BWATTOS);
> -static IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CWATTOS);
> -static IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AVARGAIN);
> -static IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BVARGAIN);
> -static IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CVARGAIN);
> -static IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_AVAROS);
> -static IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_BVAROS);
> -static IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(0644,
> -		ade7854_read_24bit,
> -		ade7854_write_24bit,
> -		ADE7854_CVAROS);
> -static IIO_DEV_ATTR_VPEAK(0644,
> -		ade7854_read_32bit,
> -		ade7854_write_32bit,
> -		ADE7854_VPEAK);
> -static IIO_DEV_ATTR_IPEAK(0644,
> -		ade7854_read_32bit,
> -		ade7854_write_32bit,
> -		ADE7854_IPEAK);
> -static IIO_DEV_ATTR_APHCAL(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_APHCAL);
> -static IIO_DEV_ATTR_BPHCAL(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_BPHCAL);
> -static IIO_DEV_ATTR_CPHCAL(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CPHCAL);
> -static IIO_DEV_ATTR_CF1DEN(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CF1DEN);
> -static IIO_DEV_ATTR_CF2DEN(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CF2DEN);
> -static IIO_DEV_ATTR_CF3DEN(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CF3DEN);
> -static IIO_DEV_ATTR_LINECYC(0644,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_LINECYC);
> -static IIO_DEV_ATTR_SAGCYC(0644,
> -		ade7854_read_8bit,
> -		ade7854_write_8bit,
> -		ADE7854_SAGCYC);
> -static IIO_DEV_ATTR_CFCYC(0644,
> -		ade7854_read_8bit,
> -		ade7854_write_8bit,
> -		ADE7854_CFCYC);
> -static IIO_DEV_ATTR_PEAKCYC(0644,
> -		ade7854_read_8bit,
> -		ade7854_write_8bit,
> -		ADE7854_PEAKCYC);
> -static IIO_DEV_ATTR_CHKSUM(ade7854_read_24bit,
> -		ADE7854_CHECKSUM);
> -static IIO_DEV_ATTR_ANGLE0(ade7854_read_24bit,
> -		ADE7854_ANGLE0);
> -static IIO_DEV_ATTR_ANGLE1(ade7854_read_24bit,
> -		ADE7854_ANGLE1);
> -static IIO_DEV_ATTR_ANGLE2(ade7854_read_24bit,
> -		ADE7854_ANGLE2);
> -static IIO_DEV_ATTR_AIRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_AIRMS);
> -static IIO_DEV_ATTR_BIRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_BIRMS);
> -static IIO_DEV_ATTR_CIRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_CIRMS);
> -static IIO_DEV_ATTR_NIRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_NIRMS);
> -static IIO_DEV_ATTR_AVRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_AVRMS);
> -static IIO_DEV_ATTR_BVRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_BVRMS);
> -static IIO_DEV_ATTR_CVRMS(0444,
> -		ade7854_read_24bit,
> -		NULL,
> -		ADE7854_CVRMS);
> -static IIO_DEV_ATTR_AIRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_AIRMSOS);
> -static IIO_DEV_ATTR_BIRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_BIRMSOS);
> -static IIO_DEV_ATTR_CIRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CIRMSOS);
> -static IIO_DEV_ATTR_AVRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_AVRMSOS);
> -static IIO_DEV_ATTR_BVRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_BVRMSOS);
> -static IIO_DEV_ATTR_CVRMSOS(0444,
> -		ade7854_read_16bit,
> -		ade7854_write_16bit,
> -		ADE7854_CVRMSOS);
> -static IIO_DEV_ATTR_VOLT_A(ade7854_read_24bit,
> -		ADE7854_VAWV);
> -static IIO_DEV_ATTR_VOLT_B(ade7854_read_24bit,
> -		ADE7854_VBWV);
> -static IIO_DEV_ATTR_VOLT_C(ade7854_read_24bit,
> -		ADE7854_VCWV);
> -static IIO_DEV_ATTR_CURRENT_A(ade7854_read_24bit,
> -		ADE7854_IAWV);
> -static IIO_DEV_ATTR_CURRENT_B(ade7854_read_24bit,
> -		ADE7854_IBWV);
> -static IIO_DEV_ATTR_CURRENT_C(ade7854_read_24bit,
> -		ADE7854_ICWV);
> -static IIO_DEV_ATTR_AWATTHR(ade7854_read_32bit,
> -		ADE7854_AWATTHR);
> -static IIO_DEV_ATTR_BWATTHR(ade7854_read_32bit,
> -		ADE7854_BWATTHR);
> -static IIO_DEV_ATTR_CWATTHR(ade7854_read_32bit,
> -		ADE7854_CWATTHR);
> -static IIO_DEV_ATTR_AFWATTHR(ade7854_read_32bit,
> -		ADE7854_AFWATTHR);
> -static IIO_DEV_ATTR_BFWATTHR(ade7854_read_32bit,
> -		ADE7854_BFWATTHR);
> -static IIO_DEV_ATTR_CFWATTHR(ade7854_read_32bit,
> -		ADE7854_CFWATTHR);
> -static IIO_DEV_ATTR_AVARHR(ade7854_read_32bit,
> -		ADE7854_AVARHR);
> -static IIO_DEV_ATTR_BVARHR(ade7854_read_32bit,
> -		ADE7854_BVARHR);
> -static IIO_DEV_ATTR_CVARHR(ade7854_read_32bit,
> -		ADE7854_CVARHR);
> -static IIO_DEV_ATTR_AVAHR(ade7854_read_32bit,
> -		ADE7854_AVAHR);
> -static IIO_DEV_ATTR_BVAHR(ade7854_read_32bit,
> -		ADE7854_BVAHR);
> -static IIO_DEV_ATTR_CVAHR(ade7854_read_32bit,
> -		ADE7854_CVAHR);
> -
> -static int ade7854_set_irq(struct device *dev, bool enable)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -
> -	int ret;
> -	u32 irqen;
> -
> -	ret = st->read_reg(dev, ADE7854_MASK0, &irqen, 32);
> -	if (ret < 0)
> -		return ret;
> -
> -	if (enable)
> -		irqen |= BIT(17); /* 1: interrupt enabled when all periodical
> -				   * (at 8 kHz rate) DSP computations finish.
> -				   */
> -	else
> -		irqen &= ~BIT(17);
> -
> -	return st->write_reg(dev, ADE7854_MASK0, irqen, 32);
> -}
> -
> -static int ade7854_initial_setup(struct iio_dev *indio_dev)
> -{
> -	int ret;
> -	struct device *dev = &indio_dev->dev;
> -
> -	/* Disable IRQ */
> -	ret = ade7854_set_irq(dev, false);
> -	if (ret) {
> -		dev_err(dev, "disable irq failed");
> -		goto err_ret;
> -	}
> -
> -	ade7854_reset(dev);
> -	usleep_range(ADE7854_STARTUP_DELAY, ADE7854_STARTUP_DELAY + 100);
> -
> -err_ret:
> -	return ret;
> -}
> -
> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("8000");
> -
> -static IIO_CONST_ATTR(name, "ade7854");
> -
> -static struct attribute *ade7854_attributes[] = {
> -	&iio_dev_attr_aigain.dev_attr.attr,
> -	&iio_dev_attr_bigain.dev_attr.attr,
> -	&iio_dev_attr_cigain.dev_attr.attr,
> -	&iio_dev_attr_nigain.dev_attr.attr,
> -	&iio_dev_attr_avgain.dev_attr.attr,
> -	&iio_dev_attr_bvgain.dev_attr.attr,
> -	&iio_dev_attr_cvgain.dev_attr.attr,
> -	&iio_dev_attr_linecyc.dev_attr.attr,
> -	&iio_dev_attr_sagcyc.dev_attr.attr,
> -	&iio_dev_attr_cfcyc.dev_attr.attr,
> -	&iio_dev_attr_peakcyc.dev_attr.attr,
> -	&iio_dev_attr_chksum.dev_attr.attr,
> -	&iio_dev_attr_apparent_power_a_gain.dev_attr.attr,
> -	&iio_dev_attr_apparent_power_b_gain.dev_attr.attr,
> -	&iio_dev_attr_apparent_power_c_gain.dev_attr.attr,
> -	&iio_dev_attr_active_power_a_offset.dev_attr.attr,
> -	&iio_dev_attr_active_power_b_offset.dev_attr.attr,
> -	&iio_dev_attr_active_power_c_offset.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_a_gain.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_b_gain.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_c_gain.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_a_offset.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_b_offset.dev_attr.attr,
> -	&iio_dev_attr_reactive_power_c_offset.dev_attr.attr,
> -	&iio_dev_attr_awatthr.dev_attr.attr,
> -	&iio_dev_attr_bwatthr.dev_attr.attr,
> -	&iio_dev_attr_cwatthr.dev_attr.attr,
> -	&iio_dev_attr_afwatthr.dev_attr.attr,
> -	&iio_dev_attr_bfwatthr.dev_attr.attr,
> -	&iio_dev_attr_cfwatthr.dev_attr.attr,
> -	&iio_dev_attr_avarhr.dev_attr.attr,
> -	&iio_dev_attr_bvarhr.dev_attr.attr,
> -	&iio_dev_attr_cvarhr.dev_attr.attr,
> -	&iio_dev_attr_angle0.dev_attr.attr,
> -	&iio_dev_attr_angle1.dev_attr.attr,
> -	&iio_dev_attr_angle2.dev_attr.attr,
> -	&iio_dev_attr_avahr.dev_attr.attr,
> -	&iio_dev_attr_bvahr.dev_attr.attr,
> -	&iio_dev_attr_cvahr.dev_attr.attr,
> -	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
> -	&iio_const_attr_name.dev_attr.attr,
> -	&iio_dev_attr_vpeak.dev_attr.attr,
> -	&iio_dev_attr_ipeak.dev_attr.attr,
> -	&iio_dev_attr_aphcal.dev_attr.attr,
> -	&iio_dev_attr_bphcal.dev_attr.attr,
> -	&iio_dev_attr_cphcal.dev_attr.attr,
> -	&iio_dev_attr_cf1den.dev_attr.attr,
> -	&iio_dev_attr_cf2den.dev_attr.attr,
> -	&iio_dev_attr_cf3den.dev_attr.attr,
> -	&iio_dev_attr_airms.dev_attr.attr,
> -	&iio_dev_attr_birms.dev_attr.attr,
> -	&iio_dev_attr_cirms.dev_attr.attr,
> -	&iio_dev_attr_nirms.dev_attr.attr,
> -	&iio_dev_attr_avrms.dev_attr.attr,
> -	&iio_dev_attr_bvrms.dev_attr.attr,
> -	&iio_dev_attr_cvrms.dev_attr.attr,
> -	&iio_dev_attr_airmsos.dev_attr.attr,
> -	&iio_dev_attr_birmsos.dev_attr.attr,
> -	&iio_dev_attr_cirmsos.dev_attr.attr,
> -	&iio_dev_attr_avrmsos.dev_attr.attr,
> -	&iio_dev_attr_bvrmsos.dev_attr.attr,
> -	&iio_dev_attr_cvrmsos.dev_attr.attr,
> -	&iio_dev_attr_volt_a.dev_attr.attr,
> -	&iio_dev_attr_volt_b.dev_attr.attr,
> -	&iio_dev_attr_volt_c.dev_attr.attr,
> -	&iio_dev_attr_current_a.dev_attr.attr,
> -	&iio_dev_attr_current_b.dev_attr.attr,
> -	&iio_dev_attr_current_c.dev_attr.attr,
> -	NULL,
> -};
> -
> -static const struct attribute_group ade7854_attribute_group = {
> -	.attrs = ade7854_attributes,
> -};
> -
> -static const struct iio_info ade7854_info = {
> -	.attrs = &ade7854_attribute_group,
> -};
> -
> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
> -{
> -	int ret;
> -	struct ade7854_state *st = iio_priv(indio_dev);
> -	/* setup the industrialio driver allocated elements */
> -	mutex_init(&st->buf_lock);
> -
> -	indio_dev->dev.parent = dev;
> -	indio_dev->info = &ade7854_info;
> -	indio_dev->modes = INDIO_DIRECT_MODE;
> -
> -	ret = devm_iio_device_register(dev, indio_dev);
> -	if (ret)
> -		return ret;
> -
> -	/* Get the device into a sane initial state */
> -	return ade7854_initial_setup(indio_dev);
> -}
> -EXPORT_SYMBOL(ade7854_probe);
> -
> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Energy Meter");
> -MODULE_LICENSE("GPL v2");
> diff --git a/drivers/staging/iio/meter/ade7854.h b/drivers/staging/iio/meter/ade7854.h
> deleted file mode 100644
> index 7a49f8f1016f..000000000000
> --- a/drivers/staging/iio/meter/ade7854.h
> +++ /dev/null
> @@ -1,173 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _ADE7854_H
> -#define _ADE7854_H
> -
> -#define ADE7854_AIGAIN    0x4380
> -#define ADE7854_AVGAIN    0x4381
> -#define ADE7854_BIGAIN    0x4382
> -#define ADE7854_BVGAIN    0x4383
> -#define ADE7854_CIGAIN    0x4384
> -#define ADE7854_CVGAIN    0x4385
> -#define ADE7854_NIGAIN    0x4386
> -#define ADE7854_AIRMSOS   0x4387
> -#define ADE7854_AVRMSOS   0x4388
> -#define ADE7854_BIRMSOS   0x4389
> -#define ADE7854_BVRMSOS   0x438A
> -#define ADE7854_CIRMSOS   0x438B
> -#define ADE7854_CVRMSOS   0x438C
> -#define ADE7854_NIRMSOS   0x438D
> -#define ADE7854_AVAGAIN   0x438E
> -#define ADE7854_BVAGAIN   0x438F
> -#define ADE7854_CVAGAIN   0x4390
> -#define ADE7854_AWGAIN    0x4391
> -#define ADE7854_AWATTOS   0x4392
> -#define ADE7854_BWGAIN    0x4393
> -#define ADE7854_BWATTOS   0x4394
> -#define ADE7854_CWGAIN    0x4395
> -#define ADE7854_CWATTOS   0x4396
> -#define ADE7854_AVARGAIN  0x4397
> -#define ADE7854_AVAROS    0x4398
> -#define ADE7854_BVARGAIN  0x4399
> -#define ADE7854_BVAROS    0x439A
> -#define ADE7854_CVARGAIN  0x439B
> -#define ADE7854_CVAROS    0x439C
> -#define ADE7854_AFWGAIN   0x439D
> -#define ADE7854_AFWATTOS  0x439E
> -#define ADE7854_BFWGAIN   0x439F
> -#define ADE7854_BFWATTOS  0x43A0
> -#define ADE7854_CFWGAIN   0x43A1
> -#define ADE7854_CFWATTOS  0x43A2
> -#define ADE7854_AFVARGAIN 0x43A3
> -#define ADE7854_AFVAROS   0x43A4
> -#define ADE7854_BFVARGAIN 0x43A5
> -#define ADE7854_BFVAROS   0x43A6
> -#define ADE7854_CFVARGAIN 0x43A7
> -#define ADE7854_CFVAROS   0x43A8
> -#define ADE7854_VATHR1    0x43A9
> -#define ADE7854_VATHR0    0x43AA
> -#define ADE7854_WTHR1     0x43AB
> -#define ADE7854_WTHR0     0x43AC
> -#define ADE7854_VARTHR1   0x43AD
> -#define ADE7854_VARTHR0   0x43AE
> -#define ADE7854_RSV       0x43AF
> -#define ADE7854_VANOLOAD  0x43B0
> -#define ADE7854_APNOLOAD  0x43B1
> -#define ADE7854_VARNOLOAD 0x43B2
> -#define ADE7854_VLEVEL    0x43B3
> -#define ADE7854_DICOEFF   0x43B5
> -#define ADE7854_HPFDIS    0x43B6
> -#define ADE7854_ISUMLVL   0x43B8
> -#define ADE7854_ISUM      0x43BF
> -#define ADE7854_AIRMS     0x43C0
> -#define ADE7854_AVRMS     0x43C1
> -#define ADE7854_BIRMS     0x43C2
> -#define ADE7854_BVRMS     0x43C3
> -#define ADE7854_CIRMS     0x43C4
> -#define ADE7854_CVRMS     0x43C5
> -#define ADE7854_NIRMS     0x43C6
> -#define ADE7854_RUN       0xE228
> -#define ADE7854_AWATTHR   0xE400
> -#define ADE7854_BWATTHR   0xE401
> -#define ADE7854_CWATTHR   0xE402
> -#define ADE7854_AFWATTHR  0xE403
> -#define ADE7854_BFWATTHR  0xE404
> -#define ADE7854_CFWATTHR  0xE405
> -#define ADE7854_AVARHR    0xE406
> -#define ADE7854_BVARHR    0xE407
> -#define ADE7854_CVARHR    0xE408
> -#define ADE7854_AFVARHR   0xE409
> -#define ADE7854_BFVARHR   0xE40A
> -#define ADE7854_CFVARHR   0xE40B
> -#define ADE7854_AVAHR     0xE40C
> -#define ADE7854_BVAHR     0xE40D
> -#define ADE7854_CVAHR     0xE40E
> -#define ADE7854_IPEAK     0xE500
> -#define ADE7854_VPEAK     0xE501
> -#define ADE7854_STATUS0   0xE502
> -#define ADE7854_STATUS1   0xE503
> -#define ADE7854_OILVL     0xE507
> -#define ADE7854_OVLVL     0xE508
> -#define ADE7854_SAGLVL    0xE509
> -#define ADE7854_MASK0     0xE50A
> -#define ADE7854_MASK1     0xE50B
> -#define ADE7854_IAWV      0xE50C
> -#define ADE7854_IBWV      0xE50D
> -#define ADE7854_ICWV      0xE50E
> -#define ADE7854_VAWV      0xE510
> -#define ADE7854_VBWV      0xE511
> -#define ADE7854_VCWV      0xE512
> -#define ADE7854_AWATT     0xE513
> -#define ADE7854_BWATT     0xE514
> -#define ADE7854_CWATT     0xE515
> -#define ADE7854_AVA       0xE519
> -#define ADE7854_BVA       0xE51A
> -#define ADE7854_CVA       0xE51B
> -#define ADE7854_CHECKSUM  0xE51F
> -#define ADE7854_VNOM      0xE520
> -#define ADE7854_PHSTATUS  0xE600
> -#define ADE7854_ANGLE0    0xE601
> -#define ADE7854_ANGLE1    0xE602
> -#define ADE7854_ANGLE2    0xE603
> -#define ADE7854_PERIOD    0xE607
> -#define ADE7854_PHNOLOAD  0xE608
> -#define ADE7854_LINECYC   0xE60C
> -#define ADE7854_ZXTOUT    0xE60D
> -#define ADE7854_COMPMODE  0xE60E
> -#define ADE7854_GAIN      0xE60F
> -#define ADE7854_CFMODE    0xE610
> -#define ADE7854_CF1DEN    0xE611
> -#define ADE7854_CF2DEN    0xE612
> -#define ADE7854_CF3DEN    0xE613
> -#define ADE7854_APHCAL    0xE614
> -#define ADE7854_BPHCAL    0xE615
> -#define ADE7854_CPHCAL    0xE616
> -#define ADE7854_PHSIGN    0xE617
> -#define ADE7854_CONFIG    0xE618
> -#define ADE7854_MMODE     0xE700
> -#define ADE7854_ACCMODE   0xE701
> -#define ADE7854_LCYCMODE  0xE702
> -#define ADE7854_PEAKCYC   0xE703
> -#define ADE7854_SAGCYC    0xE704
> -#define ADE7854_CFCYC     0xE705
> -#define ADE7854_HSDC_CFG  0xE706
> -#define ADE7854_CONFIG2   0xEC01
> -
> -#define ADE7854_READ_REG   0x1
> -#define ADE7854_WRITE_REG  0x0
> -
> -#define ADE7854_MAX_TX    7
> -#define ADE7854_MAX_RX    7
> -#define ADE7854_STARTUP_DELAY 1000
> -
> -#define ADE7854_SPI_SLOW	(u32)(300 * 1000)
> -#define ADE7854_SPI_BURST	(u32)(1000 * 1000)
> -#define ADE7854_SPI_FAST	(u32)(2000 * 1000)
> -
> -/**
> - * struct ade7854_state - device instance specific data
> - * @spi:		actual spi_device
> - * @read_reg		Wrapper function for I2C and SPI read
> - * @write_reg		Wrapper function for I2C and SPI write
> - * @indio_dev:		industrial I/O device structure
> - * @buf_lock:		mutex to protect tx and rx
> - * @tx:			transmit buffer
> - * @rx:			receive buffer
> - **/
> -struct ade7854_state {
> -	struct spi_device *spi;
> -	struct i2c_client *i2c;
> -	int (*read_reg)(struct device *dev, u16 reg_address, u32 *val,
> -			int bits);
> -	int (*write_reg)(struct device *dev, u16 reg_address, u32 val,
> -			 int bits);
> -	int irq;
> -	struct mutex buf_lock;
> -	u8 tx[ADE7854_MAX_TX] __aligned(IIO_DMA_MINALIGN);
> -	u8 rx[ADE7854_MAX_RX];
> -
> -};
> -
> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev);
> -int ade7854_remove(struct iio_dev *indio_dev);
> -
> -#endif
> diff --git a/drivers/staging/iio/meter/meter.h b/drivers/staging/iio/meter/meter.h
> deleted file mode 100644
> index 5ed59bf30a25..000000000000
> --- a/drivers/staging/iio/meter/meter.h
> +++ /dev/null
> @@ -1,398 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _METER_H
> -#define _METER_H
> -
> -#include <linux/iio/sysfs.h>
> -
> -/* metering ic types of attribute */
> -
> -#define IIO_DEV_ATTR_CURRENT_A_OFFSET(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_a_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_B_OFFSET(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_b_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_C_OFFSET(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_c_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_A_OFFSET(_mode, _show, _store, _addr)      \
> -	IIO_DEVICE_ATTR(volt_a_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_B_OFFSET(_mode, _show, _store, _addr)      \
> -	IIO_DEVICE_ATTR(volt_b_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_C_OFFSET(_mode, _show, _store, _addr)      \
> -	IIO_DEVICE_ATTR(volt_c_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(reactive_power_a_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(reactive_power_b_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(reactive_power_c_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(active_power_a_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(active_power_b_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(active_power_c_offset, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_A_GAIN(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_a_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_B_GAIN(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_b_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_C_GAIN(_mode, _show, _store, _addr)	\
> -	IIO_DEVICE_ATTR(current_c_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(apparent_power_a_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(apparent_power_b_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(apparent_power_c_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(active_power_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(active_power_a_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(active_power_b_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)   \
> -	IIO_DEVICE_ATTR(active_power_c_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(reactive_power_a_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(reactive_power_b_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)     \
> -	IIO_DEVICE_ATTR(reactive_power_c_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_A(_show, _addr)			\
> -	IIO_DEVICE_ATTR(current_a, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_B(_show, _addr)			\
> -	IIO_DEVICE_ATTR(current_b, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CURRENT_C(_show, _addr)			\
> -	IIO_DEVICE_ATTR(current_c, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_A(_show, _addr)			\
> -	IIO_DEVICE_ATTR(volt_a, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_B(_show, _addr)			\
> -	IIO_DEVICE_ATTR(volt_b, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_VOLT_C(_show, _addr)			\
> -	IIO_DEVICE_ATTR(volt_c, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_AENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(aenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_LENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(lenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_RAENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(raenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_LAENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(laenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_VAENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(vaenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_LVAENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(lvaenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_RVAENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(rvaenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_LVARENERGY(_show, _addr)			\
> -	IIO_DEVICE_ATTR(lvarenergy, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CHKSUM(_show, _addr)                       \
> -	IIO_DEVICE_ATTR(chksum, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_ANGLE0(_show, _addr)                       \
> -	IIO_DEVICE_ATTR(angle0, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_ANGLE1(_show, _addr)                       \
> -	IIO_DEVICE_ATTR(angle1, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_ANGLE2(_show, _addr)                       \
> -	IIO_DEVICE_ATTR(angle2, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_AWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(awatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_BWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(bwatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(cwatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_AFWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(afwatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_BFWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(bfwatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CFWATTHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(cfwatthr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_AVARHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(avarhr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_BVARHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(bvarhr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CVARHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(cvarhr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_AVAHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(avahr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_BVAHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(bvahr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_CVAHR(_show, _addr)			\
> -	IIO_DEVICE_ATTR(cvahr, 0444, _show, NULL, _addr)
> -
> -#define IIO_DEV_ATTR_IOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(ios, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_PHCAL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(phcal, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_APHCAL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(aphcal, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BPHCAL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bphcal, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CPHCAL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cphcal, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_APOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(apos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AAPOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(aapos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BAPOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bapos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CAPOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(capos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AVRMSGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(avrmsgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BVRMSGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bvrmsgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CVRMSGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cvrmsgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AIGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(aigain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BIGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bigain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CIGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cigain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_NIGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(nigain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AVGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(avgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BVGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bvgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CVGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cvgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_WGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(wgain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_WDIV(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(wdiv, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CFNUM(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cfnum, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CFDEN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cfden, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CF1DEN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cf1den, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CF2DEN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cf2den, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CF3DEN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cf3den, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_IRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(irms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vrms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AIRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(airms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BIRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(birms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CIRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cirms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_NIRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(nirms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AVRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(avrms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BVRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bvrms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CVRMS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cvrms, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_IRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(irmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vrmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AIRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(airmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BIRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(birmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CIRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cirmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_AVRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(avrmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_BVRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(bvrmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CVRMSOS(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cvrmsos, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VAGAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vagain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_PGA_GAIN(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(pga_gain, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VADIV(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vadiv, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_LINECYC(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(linecyc, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_SAGCYC(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(sagcyc, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_CFCYC(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(cfcyc, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_PEAKCYC(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(peakcyc, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_SAGLVL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(saglvl, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_IPKLVL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(ipklvl, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VPKLVL(_mode, _show, _store, _addr)                \
> -	IIO_DEVICE_ATTR(vpklvl, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_IPEAK(_mode, _show, _store, _addr)			\
> -	IIO_DEVICE_ATTR(ipeak, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_RIPEAK(_mode, _show, _store, _addr)		\
> -	IIO_DEVICE_ATTR(ripeak, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VPEAK(_mode, _show, _store, _addr)			\
> -	IIO_DEVICE_ATTR(vpeak, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_RVPEAK(_mode, _show, _store, _addr)		\
> -	IIO_DEVICE_ATTR(rvpeak, _mode, _show, _store, _addr)
> -
> -#define IIO_DEV_ATTR_VPERIOD(_mode, _show, _store, _addr)		\
> -	IIO_DEVICE_ATTR(vperiod, _mode, _show, _store, _addr)
> -
> -/* active energy register, AENERGY, is more than half full */
> -#define IIO_EVENT_ATTR_AENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(aenergy_half_full, _evlist, _show, _store, _mask)
> -
> -/* a SAG on the line voltage */
> -#define IIO_EVENT_ATTR_LINE_VOLT_SAG(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(line_volt_sag, _evlist, _show, _store, _mask)
> -
> -/*
> - * Indicates the end of energy accumulation over an integer number
> - * of half line cycles
> - */
> -#define IIO_EVENT_ATTR_CYCEND(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(cycend, _evlist, _show, _store, _mask)
> -
> -/* on the rising and falling edge of the voltage waveform */
> -#define IIO_EVENT_ATTR_ZERO_CROSS(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(zero_cross, _evlist, _show, _store, _mask)
> -
> -/* the active energy register has overflowed */
> -#define IIO_EVENT_ATTR_AENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(aenergy_overflow, _evlist, _show, _store, _mask)
> -
> -/* the apparent energy register has overflowed */
> -#define IIO_EVENT_ATTR_VAENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(vaenergy_overflow, _evlist, _show, _store, _mask)
> -
> -/* the active energy register, VAENERGY, is more than half full */
> -#define IIO_EVENT_ATTR_VAENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(vaenergy_half_full, _evlist, _show, _store, _mask)
> -
> -/* the power has gone from negative to positive */
> -#define IIO_EVENT_ATTR_PPOS(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(ppos, _evlist, _show, _store, _mask)
> -
> -/* the power has gone from positive to negative */
> -#define IIO_EVENT_ATTR_PNEG(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(pneg, _evlist, _show, _store, _mask)
> -
> -/* waveform sample from Channel 1 has exceeded the IPKLVL value */
> -#define IIO_EVENT_ATTR_IPKLVL_EXC(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(ipklvl_exc, _evlist, _show, _store, _mask)
> -
> -/* waveform sample from Channel 2 has exceeded the VPKLVL value */
> -#define IIO_EVENT_ATTR_VPKLVL_EXC(_evlist, _show, _store, _mask) \
> -	IIO_EVENT_ATTR_SH(vpklvl_exc, _evlist, _show, _store, _mask)
> -
> -#endif /* _METER_H */
Lars-Peter Clausen Feb. 5, 2023, 3:22 p.m. UTC | #2
On 2/5/23 07:09, Jonathan Cameron wrote:
> On Sun, 29 Jan 2023 16:08:05 +0000
> Jonathan Cameron <jic23@kernel.org> wrote:
>
>> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>>
>> This driver is so far from making correct use of the IIO infrastructure
>> and ABI that if someone wanted to make the driver suitable for moving
>> out of staging, they would more or less be starting from scratch.
>>
>> As such there is little point in keeping the existing code in staging.
>>
>> Note this was only user of the meter.h header so that is dropped.
>> There are no other drivers in the staging/iio/meter directory so drop
>> the build system files as well.
>>
>> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Ping.
>
> If I don't hear any one speaking out in favour of keeping this driver
> I'll drop it - probably early in next cycle.
>
> Not really expecting review for a driver drop :)

Lets just drop it. Its been more than 12 years in staging now, that's 
long enough.

Acked-by: Lars-Peter Clausen <lars@metafoo.de>

>
> Jonathan
>
>> ---
>>   drivers/staging/iio/Kconfig             |   1 -
>>   drivers/staging/iio/Makefile            |   1 -
>>   drivers/staging/iio/meter/Kconfig       |  37 --
>>   drivers/staging/iio/meter/Makefile      |   8 -
>>   drivers/staging/iio/meter/ade7854-i2c.c | 153 -------
>>   drivers/staging/iio/meter/ade7854-spi.c | 160 -------
>>   drivers/staging/iio/meter/ade7854.c     | 556 ------------------------
>>   drivers/staging/iio/meter/ade7854.h     | 173 --------
>>   drivers/staging/iio/meter/meter.h       | 398 -----------------
>>   9 files changed, 1487 deletions(-)
>>
>> diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
>> index afd05bf3345e..d3968fe2ebb8 100644
>> --- a/drivers/staging/iio/Kconfig
>> +++ b/drivers/staging/iio/Kconfig
>> @@ -10,7 +10,6 @@ source "drivers/staging/iio/adc/Kconfig"
>>   source "drivers/staging/iio/addac/Kconfig"
>>   source "drivers/staging/iio/frequency/Kconfig"
>>   source "drivers/staging/iio/impedance-analyzer/Kconfig"
>> -source "drivers/staging/iio/meter/Kconfig"
>>   source "drivers/staging/iio/resolver/Kconfig"
>>   
>>   endmenu
>> diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile
>> index 5ed56fe57e14..c50f1019f829 100644
>> --- a/drivers/staging/iio/Makefile
>> +++ b/drivers/staging/iio/Makefile
>> @@ -8,5 +8,4 @@ obj-y += adc/
>>   obj-y += addac/
>>   obj-y += frequency/
>>   obj-y += impedance-analyzer/
>> -obj-y += meter/
>>   obj-y += resolver/
>> diff --git a/drivers/staging/iio/meter/Kconfig b/drivers/staging/iio/meter/Kconfig
>> deleted file mode 100644
>> index aa6a3e7f6cdb..000000000000
>> --- a/drivers/staging/iio/meter/Kconfig
>> +++ /dev/null
>> @@ -1,37 +0,0 @@
>> -# SPDX-License-Identifier: GPL-2.0
>> -#
>> -# IIO meter drivers configuration
>> -#
>> -menu "Active energy metering IC"
>> -
>> -config ADE7854
>> -	tristate "Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver"
>> -	depends on SPI || I2C
>> -	help
>> -	  Say yes here to build support for Analog Devices ADE7854/58/68/78 Polyphase
>> -	  Multifunction Energy Metering IC Driver.
>> -
>> -	  To compile this driver as a module, choose M here: the
>> -	  module will be called ade7854.
>> -
>> -config ADE7854_I2C
>> -	tristate "support I2C bus connection"
>> -	depends on ADE7854 && I2C
>> -	default y
>> -	help
>> -	  Say Y here if you have ADE7854/58/68/78 hooked to an I2C bus.
>> -
>> -	  To compile this driver as a module, choose M here: the
>> -	  module will be called ade7854-i2c.
>> -
>> -config ADE7854_SPI
>> -	tristate "support SPI bus connection"
>> -	depends on ADE7854 && SPI
>> -	default y
>> -	help
>> -	  Say Y here if you have ADE7854/58/68/78 hooked to a SPI bus.
>> -
>> -	  To compile this driver as a module, choose M here: the
>> -	  module will be called ade7854-spi.
>> -
>> -endmenu
>> diff --git a/drivers/staging/iio/meter/Makefile b/drivers/staging/iio/meter/Makefile
>> deleted file mode 100644
>> index ed4547e38f3a..000000000000
>> --- a/drivers/staging/iio/meter/Makefile
>> +++ /dev/null
>> @@ -1,8 +0,0 @@
>> -# SPDX-License-Identifier: GPL-2.0
>> -#
>> -# Makefile for metering ic drivers
>> -#
>> -
>> -obj-$(CONFIG_ADE7854) += ade7854.o
>> -obj-$(CONFIG_ADE7854_I2C) += ade7854-i2c.o
>> -obj-$(CONFIG_ADE7854_SPI) += ade7854-spi.o
>> diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
>> deleted file mode 100644
>> index 572d714eb0dd..000000000000
>> --- a/drivers/staging/iio/meter/ade7854-i2c.c
>> +++ /dev/null
>> @@ -1,153 +0,0 @@
>> -// SPDX-License-Identifier: GPL-2.0+
>> -/*
>> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (I2C Bus)
>> - *
>> - * Copyright 2010 Analog Devices Inc.
>> - */
>> -
>> -#include <linux/device.h>
>> -#include <linux/kernel.h>
>> -#include <linux/i2c.h>
>> -#include <linux/slab.h>
>> -#include <linux/module.h>
>> -
>> -#include <linux/iio/iio.h>
>> -#include "ade7854.h"
>> -
>> -static int ade7854_i2c_write_reg(struct device *dev,
>> -				 u16 reg_address,
>> -				 u32 val,
>> -				 int bits)
>> -{
>> -	int ret;
>> -	int count;
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	mutex_lock(&st->buf_lock);
>> -	st->tx[0] = (reg_address >> 8) & 0xFF;
>> -	st->tx[1] = reg_address & 0xFF;
>> -
>> -	switch (bits) {
>> -	case 8:
>> -		st->tx[2] = val & 0xFF;
>> -		count = 3;
>> -		break;
>> -	case 16:
>> -		st->tx[2] = (val >> 8) & 0xFF;
>> -		st->tx[3] = val & 0xFF;
>> -		count = 4;
>> -		break;
>> -	case 24:
>> -		st->tx[2] = (val >> 16) & 0xFF;
>> -		st->tx[3] = (val >> 8) & 0xFF;
>> -		st->tx[4] = val & 0xFF;
>> -		count = 5;
>> -		break;
>> -	case 32:
>> -		st->tx[2] = (val >> 24) & 0xFF;
>> -		st->tx[3] = (val >> 16) & 0xFF;
>> -		st->tx[4] = (val >> 8) & 0xFF;
>> -		st->tx[5] = val & 0xFF;
>> -		count = 6;
>> -		break;
>> -	default:
>> -		ret = -EINVAL;
>> -		goto unlock;
>> -	}
>> -
>> -	ret = i2c_master_send(st->i2c, st->tx, count);
>> -
>> -unlock:
>> -	mutex_unlock(&st->buf_lock);
>> -
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	return 0;
>> -}
>> -
>> -static int ade7854_i2c_read_reg(struct device *dev,
>> -				u16 reg_address,
>> -				u32 *val,
>> -				int bits)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	int ret;
>> -
>> -	mutex_lock(&st->buf_lock);
>> -	st->tx[0] = (reg_address >> 8) & 0xFF;
>> -	st->tx[1] = reg_address & 0xFF;
>> -
>> -	ret = i2c_master_send(st->i2c, st->tx, 2);
>> -	if (ret < 0)
>> -		goto unlock;
>> -
>> -	ret = i2c_master_recv(st->i2c, st->rx, bits);
>> -	if (ret < 0)
>> -		goto unlock;
>> -
>> -	switch (bits) {
>> -	case 8:
>> -		*val = st->rx[0];
>> -		break;
>> -	case 16:
>> -		*val = (st->rx[0] << 8) | st->rx[1];
>> -		break;
>> -	case 24:
>> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
>> -		break;
>> -	case 32:
>> -		*val = (st->rx[0] << 24) | (st->rx[1] << 16) |
>> -			(st->rx[2] << 8) | st->rx[3];
>> -		break;
>> -	default:
>> -		ret = -EINVAL;
>> -		goto unlock;
>> -	}
>> -
>> -unlock:
>> -	mutex_unlock(&st->buf_lock);
>> -	return ret;
>> -}
>> -
>> -static int ade7854_i2c_probe(struct i2c_client *client)
>> -{
>> -	struct ade7854_state *st;
>> -	struct iio_dev *indio_dev;
>> -
>> -	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
>> -	if (!indio_dev)
>> -		return -ENOMEM;
>> -	st = iio_priv(indio_dev);
>> -	i2c_set_clientdata(client, indio_dev);
>> -	st->read_reg = ade7854_i2c_read_reg;
>> -	st->write_reg = ade7854_i2c_write_reg;
>> -	st->i2c = client;
>> -	st->irq = client->irq;
>> -
>> -	return ade7854_probe(indio_dev, &client->dev);
>> -}
>> -
>> -static const struct i2c_device_id ade7854_id[] = {
>> -	{ "ade7854", 0 },
>> -	{ "ade7858", 0 },
>> -	{ "ade7868", 0 },
>> -	{ "ade7878", 0 },
>> -	{ }
>> -};
>> -MODULE_DEVICE_TABLE(i2c, ade7854_id);
>> -
>> -static struct i2c_driver ade7854_i2c_driver = {
>> -	.driver = {
>> -		.name = "ade7854",
>> -	},
>> -	.probe_new = ade7854_i2c_probe,
>> -	.id_table = ade7854_id,
>> -};
>> -module_i2c_driver(ade7854_i2c_driver);
>> -
>> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");
>> -MODULE_LICENSE("GPL v2");
>> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
>> deleted file mode 100644
>> index f12a6c8b3e88..000000000000
>> --- a/drivers/staging/iio/meter/ade7854-spi.c
>> +++ /dev/null
>> @@ -1,160 +0,0 @@
>> -// SPDX-License-Identifier: GPL-2.0+
>> -/*
>> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (SPI Bus)
>> - *
>> - * Copyright 2010 Analog Devices Inc.
>> - */
>> -
>> -#include <linux/device.h>
>> -#include <linux/kernel.h>
>> -#include <linux/spi/spi.h>
>> -#include <linux/slab.h>
>> -#include <linux/module.h>
>> -
>> -#include <linux/iio/iio.h>
>> -#include "ade7854.h"
>> -
>> -static int ade7854_spi_write_reg(struct device *dev,
>> -				 u16 reg_address,
>> -				 u32 val,
>> -				 int bits)
>> -{
>> -	int ret;
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	struct spi_transfer xfer = {
>> -		.tx_buf = st->tx,
>> -		.bits_per_word = 8,
>> -		.len = 4,
>> -	};
>> -
>> -	mutex_lock(&st->buf_lock);
>> -	st->tx[0] = ADE7854_WRITE_REG;
>> -	st->tx[1] = (reg_address >> 8) & 0xFF;
>> -	st->tx[2] = reg_address & 0xFF;
>> -	switch (bits) {
>> -	case 8:
>> -		st->tx[3] = val & 0xFF;
>> -		break;
>> -	case 16:
>> -		xfer.len = 5;
>> -		st->tx[3] = (val >> 8) & 0xFF;
>> -		st->tx[4] = val & 0xFF;
>> -		break;
>> -	case 24:
>> -		xfer.len = 6;
>> -		st->tx[3] = (val >> 16) & 0xFF;
>> -		st->tx[4] = (val >> 8) & 0xFF;
>> -		st->tx[5] = val & 0xFF;
>> -		break;
>> -	case 32:
>> -		xfer.len = 7;
>> -		st->tx[3] = (val >> 24) & 0xFF;
>> -		st->tx[4] = (val >> 16) & 0xFF;
>> -		st->tx[5] = (val >> 8) & 0xFF;
>> -		st->tx[6] = val & 0xFF;
>> -		break;
>> -	default:
>> -		ret = -EINVAL;
>> -		goto unlock;
>> -	}
>> -
>> -	ret = spi_sync_transfer(st->spi, &xfer, 1);
>> -unlock:
>> -	mutex_unlock(&st->buf_lock);
>> -
>> -	return ret;
>> -}
>> -
>> -static int ade7854_spi_read_reg(struct device *dev,
>> -				u16 reg_address,
>> -				u32 *val,
>> -				int bits)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	int ret;
>> -	struct spi_transfer xfers[] = {
>> -		{
>> -			.tx_buf = st->tx,
>> -			.bits_per_word = 8,
>> -			.len = 3,
>> -		}, {
>> -			.rx_buf = st->rx,
>> -			.bits_per_word = 8,
>> -			.len = bits,
>> -		}
>> -	};
>> -
>> -	mutex_lock(&st->buf_lock);
>> -
>> -	st->tx[0] = ADE7854_READ_REG;
>> -	st->tx[1] = (reg_address >> 8) & 0xFF;
>> -	st->tx[2] = reg_address & 0xFF;
>> -
>> -	ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
>> -	if (ret < 0) {
>> -		dev_err(&st->spi->dev, "problem when reading register 0x%02X",
>> -			reg_address);
>> -		goto unlock;
>> -	}
>> -
>> -	switch (bits) {
>> -	case 8:
>> -		*val = st->rx[0];
>> -		break;
>> -	case 16:
>> -		*val = be16_to_cpup((const __be16 *)st->rx);
>> -		break;
>> -	case 24:
>> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
>> -		break;
>> -	case 32:
>> -		*val = be32_to_cpup((const __be32 *)st->rx);
>> -		break;
>> -	}
>> -
>> -unlock:
>> -	mutex_unlock(&st->buf_lock);
>> -	return ret;
>> -}
>> -
>> -static int ade7854_spi_probe(struct spi_device *spi)
>> -{
>> -	struct ade7854_state *st;
>> -	struct iio_dev *indio_dev;
>> -
>> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
>> -	if (!indio_dev)
>> -		return -ENOMEM;
>> -	st = iio_priv(indio_dev);
>> -	spi_set_drvdata(spi, indio_dev);
>> -	st->read_reg = ade7854_spi_read_reg;
>> -	st->write_reg = ade7854_spi_write_reg;
>> -	st->irq = spi->irq;
>> -	st->spi = spi;
>> -
>> -	return ade7854_probe(indio_dev, &spi->dev);
>> -}
>> -
>> -static const struct spi_device_id ade7854_id[] = {
>> -	{ "ade7854", 0 },
>> -	{ "ade7858", 0 },
>> -	{ "ade7868", 0 },
>> -	{ "ade7878", 0 },
>> -	{ }
>> -};
>> -MODULE_DEVICE_TABLE(spi, ade7854_id);
>> -
>> -static struct spi_driver ade7854_driver = {
>> -	.driver = {
>> -		.name = "ade7854",
>> -	},
>> -	.probe = ade7854_spi_probe,
>> -	.id_table = ade7854_id,
>> -};
>> -module_spi_driver(ade7854_driver);
>> -
>> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
>> -MODULE_LICENSE("GPL v2");
>> diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c
>> deleted file mode 100644
>> index 68da6ecde6a3..000000000000
>> --- a/drivers/staging/iio/meter/ade7854.c
>> +++ /dev/null
>> @@ -1,556 +0,0 @@
>> -// SPDX-License-Identifier: GPL-2.0+
>> -/*
>> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver
>> - *
>> - * Copyright 2010 Analog Devices Inc.
>> - */
>> -
>> -#include <linux/interrupt.h>
>> -#include <linux/irq.h>
>> -#include <linux/delay.h>
>> -#include <linux/mutex.h>
>> -#include <linux/device.h>
>> -#include <linux/kernel.h>
>> -#include <linux/slab.h>
>> -#include <linux/sysfs.h>
>> -#include <linux/list.h>
>> -#include <linux/module.h>
>> -
>> -#include <linux/iio/iio.h>
>> -#include <linux/iio/sysfs.h>
>> -#include "meter.h"
>> -#include "ade7854.h"
>> -
>> -static ssize_t ade7854_read_8bit(struct device *dev,
>> -				 struct device_attribute *attr,
>> -				 char *buf)
>> -{
>> -	int ret;
>> -	u32 val = 0;
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -
>> -	ret = st->read_reg(dev, this_attr->address, &val, 8);
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	return sprintf(buf, "%u\n", val);
>> -}
>> -
>> -static ssize_t ade7854_read_16bit(struct device *dev,
>> -				  struct device_attribute *attr,
>> -				  char *buf)
>> -{
>> -	int ret;
>> -	u32 val = 0;
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -
>> -	ret = st->read_reg(dev, this_attr->address, &val, 16);
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	return sprintf(buf, "%u\n", val);
>> -}
>> -
>> -static ssize_t ade7854_read_24bit(struct device *dev,
>> -				  struct device_attribute *attr,
>> -				  char *buf)
>> -{
>> -	int ret;
>> -	u32 val;
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -
>> -	ret = st->read_reg(dev, this_attr->address, &val, 24);
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	return sprintf(buf, "%u\n", val);
>> -}
>> -
>> -static ssize_t ade7854_read_32bit(struct device *dev,
>> -				  struct device_attribute *attr,
>> -				  char *buf)
>> -{
>> -	int ret;
>> -	u32 val = 0;
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	ret = st->read_reg(dev, this_attr->address, &val, 32);
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	return sprintf(buf, "%u\n", val);
>> -}
>> -
>> -static ssize_t ade7854_write_8bit(struct device *dev,
>> -				  struct device_attribute *attr,
>> -				  const char *buf,
>> -				  size_t len)
>> -{
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	int ret;
>> -	u8 val;
>> -
>> -	ret = kstrtou8(buf, 10, &val);
>> -	if (ret)
>> -		goto error_ret;
>> -	ret = st->write_reg(dev, this_attr->address, val, 8);
>> -
>> -error_ret:
>> -	return ret ? ret : len;
>> -}
>> -
>> -static ssize_t ade7854_write_16bit(struct device *dev,
>> -				   struct device_attribute *attr,
>> -				   const char *buf,
>> -				   size_t len)
>> -{
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	int ret;
>> -	u16 val;
>> -
>> -	ret = kstrtou16(buf, 10, &val);
>> -	if (ret)
>> -		goto error_ret;
>> -	ret = st->write_reg(dev, this_attr->address, val, 16);
>> -
>> -error_ret:
>> -	return ret ? ret : len;
>> -}
>> -
>> -static ssize_t ade7854_write_24bit(struct device *dev,
>> -				   struct device_attribute *attr,
>> -				   const char *buf,
>> -				   size_t len)
>> -{
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	int ret;
>> -	u32 val;
>> -
>> -	ret = kstrtou32(buf, 10, &val);
>> -	if (ret)
>> -		goto error_ret;
>> -	ret = st->write_reg(dev, this_attr->address, val, 24);
>> -
>> -error_ret:
>> -	return ret ? ret : len;
>> -}
>> -
>> -static ssize_t ade7854_write_32bit(struct device *dev,
>> -				   struct device_attribute *attr,
>> -				   const char *buf,
>> -				   size_t len)
>> -{
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	int ret;
>> -	u32 val;
>> -
>> -	ret = kstrtou32(buf, 10, &val);
>> -	if (ret)
>> -		goto error_ret;
>> -	ret = st->write_reg(dev, this_attr->address, val, 32);
>> -
>> -error_ret:
>> -	return ret ? ret : len;
>> -}
>> -
>> -static int ade7854_reset(struct device *dev)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	u32 val;
>> -
>> -	st->read_reg(dev, ADE7854_CONFIG, &val, 16);
>> -	val |= BIT(7); /* Software Chip Reset */
>> -
>> -	return st->write_reg(dev, ADE7854_CONFIG, val, 16);
>> -}
>> -
>> -static IIO_DEV_ATTR_AIGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AIGAIN);
>> -static IIO_DEV_ATTR_BIGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BIGAIN);
>> -static IIO_DEV_ATTR_CIGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CIGAIN);
>> -static IIO_DEV_ATTR_NIGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_NIGAIN);
>> -static IIO_DEV_ATTR_AVGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AVGAIN);
>> -static IIO_DEV_ATTR_BVGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BVGAIN);
>> -static IIO_DEV_ATTR_CVGAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CVGAIN);
>> -static IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AVAGAIN);
>> -static IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BVAGAIN);
>> -static IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CVAGAIN);
>> -static IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AWATTOS);
>> -static IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BWATTOS);
>> -static IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CWATTOS);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AVARGAIN);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BVARGAIN);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CVARGAIN);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_AVAROS);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_BVAROS);
>> -static IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(0644,
>> -		ade7854_read_24bit,
>> -		ade7854_write_24bit,
>> -		ADE7854_CVAROS);
>> -static IIO_DEV_ATTR_VPEAK(0644,
>> -		ade7854_read_32bit,
>> -		ade7854_write_32bit,
>> -		ADE7854_VPEAK);
>> -static IIO_DEV_ATTR_IPEAK(0644,
>> -		ade7854_read_32bit,
>> -		ade7854_write_32bit,
>> -		ADE7854_IPEAK);
>> -static IIO_DEV_ATTR_APHCAL(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_APHCAL);
>> -static IIO_DEV_ATTR_BPHCAL(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_BPHCAL);
>> -static IIO_DEV_ATTR_CPHCAL(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CPHCAL);
>> -static IIO_DEV_ATTR_CF1DEN(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CF1DEN);
>> -static IIO_DEV_ATTR_CF2DEN(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CF2DEN);
>> -static IIO_DEV_ATTR_CF3DEN(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CF3DEN);
>> -static IIO_DEV_ATTR_LINECYC(0644,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_LINECYC);
>> -static IIO_DEV_ATTR_SAGCYC(0644,
>> -		ade7854_read_8bit,
>> -		ade7854_write_8bit,
>> -		ADE7854_SAGCYC);
>> -static IIO_DEV_ATTR_CFCYC(0644,
>> -		ade7854_read_8bit,
>> -		ade7854_write_8bit,
>> -		ADE7854_CFCYC);
>> -static IIO_DEV_ATTR_PEAKCYC(0644,
>> -		ade7854_read_8bit,
>> -		ade7854_write_8bit,
>> -		ADE7854_PEAKCYC);
>> -static IIO_DEV_ATTR_CHKSUM(ade7854_read_24bit,
>> -		ADE7854_CHECKSUM);
>> -static IIO_DEV_ATTR_ANGLE0(ade7854_read_24bit,
>> -		ADE7854_ANGLE0);
>> -static IIO_DEV_ATTR_ANGLE1(ade7854_read_24bit,
>> -		ADE7854_ANGLE1);
>> -static IIO_DEV_ATTR_ANGLE2(ade7854_read_24bit,
>> -		ADE7854_ANGLE2);
>> -static IIO_DEV_ATTR_AIRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_AIRMS);
>> -static IIO_DEV_ATTR_BIRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_BIRMS);
>> -static IIO_DEV_ATTR_CIRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_CIRMS);
>> -static IIO_DEV_ATTR_NIRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_NIRMS);
>> -static IIO_DEV_ATTR_AVRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_AVRMS);
>> -static IIO_DEV_ATTR_BVRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_BVRMS);
>> -static IIO_DEV_ATTR_CVRMS(0444,
>> -		ade7854_read_24bit,
>> -		NULL,
>> -		ADE7854_CVRMS);
>> -static IIO_DEV_ATTR_AIRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_AIRMSOS);
>> -static IIO_DEV_ATTR_BIRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_BIRMSOS);
>> -static IIO_DEV_ATTR_CIRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CIRMSOS);
>> -static IIO_DEV_ATTR_AVRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_AVRMSOS);
>> -static IIO_DEV_ATTR_BVRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_BVRMSOS);
>> -static IIO_DEV_ATTR_CVRMSOS(0444,
>> -		ade7854_read_16bit,
>> -		ade7854_write_16bit,
>> -		ADE7854_CVRMSOS);
>> -static IIO_DEV_ATTR_VOLT_A(ade7854_read_24bit,
>> -		ADE7854_VAWV);
>> -static IIO_DEV_ATTR_VOLT_B(ade7854_read_24bit,
>> -		ADE7854_VBWV);
>> -static IIO_DEV_ATTR_VOLT_C(ade7854_read_24bit,
>> -		ADE7854_VCWV);
>> -static IIO_DEV_ATTR_CURRENT_A(ade7854_read_24bit,
>> -		ADE7854_IAWV);
>> -static IIO_DEV_ATTR_CURRENT_B(ade7854_read_24bit,
>> -		ADE7854_IBWV);
>> -static IIO_DEV_ATTR_CURRENT_C(ade7854_read_24bit,
>> -		ADE7854_ICWV);
>> -static IIO_DEV_ATTR_AWATTHR(ade7854_read_32bit,
>> -		ADE7854_AWATTHR);
>> -static IIO_DEV_ATTR_BWATTHR(ade7854_read_32bit,
>> -		ADE7854_BWATTHR);
>> -static IIO_DEV_ATTR_CWATTHR(ade7854_read_32bit,
>> -		ADE7854_CWATTHR);
>> -static IIO_DEV_ATTR_AFWATTHR(ade7854_read_32bit,
>> -		ADE7854_AFWATTHR);
>> -static IIO_DEV_ATTR_BFWATTHR(ade7854_read_32bit,
>> -		ADE7854_BFWATTHR);
>> -static IIO_DEV_ATTR_CFWATTHR(ade7854_read_32bit,
>> -		ADE7854_CFWATTHR);
>> -static IIO_DEV_ATTR_AVARHR(ade7854_read_32bit,
>> -		ADE7854_AVARHR);
>> -static IIO_DEV_ATTR_BVARHR(ade7854_read_32bit,
>> -		ADE7854_BVARHR);
>> -static IIO_DEV_ATTR_CVARHR(ade7854_read_32bit,
>> -		ADE7854_CVARHR);
>> -static IIO_DEV_ATTR_AVAHR(ade7854_read_32bit,
>> -		ADE7854_AVAHR);
>> -static IIO_DEV_ATTR_BVAHR(ade7854_read_32bit,
>> -		ADE7854_BVAHR);
>> -static IIO_DEV_ATTR_CVAHR(ade7854_read_32bit,
>> -		ADE7854_CVAHR);
>> -
>> -static int ade7854_set_irq(struct device *dev, bool enable)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -
>> -	int ret;
>> -	u32 irqen;
>> -
>> -	ret = st->read_reg(dev, ADE7854_MASK0, &irqen, 32);
>> -	if (ret < 0)
>> -		return ret;
>> -
>> -	if (enable)
>> -		irqen |= BIT(17); /* 1: interrupt enabled when all periodical
>> -				   * (at 8 kHz rate) DSP computations finish.
>> -				   */
>> -	else
>> -		irqen &= ~BIT(17);
>> -
>> -	return st->write_reg(dev, ADE7854_MASK0, irqen, 32);
>> -}
>> -
>> -static int ade7854_initial_setup(struct iio_dev *indio_dev)
>> -{
>> -	int ret;
>> -	struct device *dev = &indio_dev->dev;
>> -
>> -	/* Disable IRQ */
>> -	ret = ade7854_set_irq(dev, false);
>> -	if (ret) {
>> -		dev_err(dev, "disable irq failed");
>> -		goto err_ret;
>> -	}
>> -
>> -	ade7854_reset(dev);
>> -	usleep_range(ADE7854_STARTUP_DELAY, ADE7854_STARTUP_DELAY + 100);
>> -
>> -err_ret:
>> -	return ret;
>> -}
>> -
>> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("8000");
>> -
>> -static IIO_CONST_ATTR(name, "ade7854");
>> -
>> -static struct attribute *ade7854_attributes[] = {
>> -	&iio_dev_attr_aigain.dev_attr.attr,
>> -	&iio_dev_attr_bigain.dev_attr.attr,
>> -	&iio_dev_attr_cigain.dev_attr.attr,
>> -	&iio_dev_attr_nigain.dev_attr.attr,
>> -	&iio_dev_attr_avgain.dev_attr.attr,
>> -	&iio_dev_attr_bvgain.dev_attr.attr,
>> -	&iio_dev_attr_cvgain.dev_attr.attr,
>> -	&iio_dev_attr_linecyc.dev_attr.attr,
>> -	&iio_dev_attr_sagcyc.dev_attr.attr,
>> -	&iio_dev_attr_cfcyc.dev_attr.attr,
>> -	&iio_dev_attr_peakcyc.dev_attr.attr,
>> -	&iio_dev_attr_chksum.dev_attr.attr,
>> -	&iio_dev_attr_apparent_power_a_gain.dev_attr.attr,
>> -	&iio_dev_attr_apparent_power_b_gain.dev_attr.attr,
>> -	&iio_dev_attr_apparent_power_c_gain.dev_attr.attr,
>> -	&iio_dev_attr_active_power_a_offset.dev_attr.attr,
>> -	&iio_dev_attr_active_power_b_offset.dev_attr.attr,
>> -	&iio_dev_attr_active_power_c_offset.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_a_gain.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_b_gain.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_c_gain.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_a_offset.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_b_offset.dev_attr.attr,
>> -	&iio_dev_attr_reactive_power_c_offset.dev_attr.attr,
>> -	&iio_dev_attr_awatthr.dev_attr.attr,
>> -	&iio_dev_attr_bwatthr.dev_attr.attr,
>> -	&iio_dev_attr_cwatthr.dev_attr.attr,
>> -	&iio_dev_attr_afwatthr.dev_attr.attr,
>> -	&iio_dev_attr_bfwatthr.dev_attr.attr,
>> -	&iio_dev_attr_cfwatthr.dev_attr.attr,
>> -	&iio_dev_attr_avarhr.dev_attr.attr,
>> -	&iio_dev_attr_bvarhr.dev_attr.attr,
>> -	&iio_dev_attr_cvarhr.dev_attr.attr,
>> -	&iio_dev_attr_angle0.dev_attr.attr,
>> -	&iio_dev_attr_angle1.dev_attr.attr,
>> -	&iio_dev_attr_angle2.dev_attr.attr,
>> -	&iio_dev_attr_avahr.dev_attr.attr,
>> -	&iio_dev_attr_bvahr.dev_attr.attr,
>> -	&iio_dev_attr_cvahr.dev_attr.attr,
>> -	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
>> -	&iio_const_attr_name.dev_attr.attr,
>> -	&iio_dev_attr_vpeak.dev_attr.attr,
>> -	&iio_dev_attr_ipeak.dev_attr.attr,
>> -	&iio_dev_attr_aphcal.dev_attr.attr,
>> -	&iio_dev_attr_bphcal.dev_attr.attr,
>> -	&iio_dev_attr_cphcal.dev_attr.attr,
>> -	&iio_dev_attr_cf1den.dev_attr.attr,
>> -	&iio_dev_attr_cf2den.dev_attr.attr,
>> -	&iio_dev_attr_cf3den.dev_attr.attr,
>> -	&iio_dev_attr_airms.dev_attr.attr,
>> -	&iio_dev_attr_birms.dev_attr.attr,
>> -	&iio_dev_attr_cirms.dev_attr.attr,
>> -	&iio_dev_attr_nirms.dev_attr.attr,
>> -	&iio_dev_attr_avrms.dev_attr.attr,
>> -	&iio_dev_attr_bvrms.dev_attr.attr,
>> -	&iio_dev_attr_cvrms.dev_attr.attr,
>> -	&iio_dev_attr_airmsos.dev_attr.attr,
>> -	&iio_dev_attr_birmsos.dev_attr.attr,
>> -	&iio_dev_attr_cirmsos.dev_attr.attr,
>> -	&iio_dev_attr_avrmsos.dev_attr.attr,
>> -	&iio_dev_attr_bvrmsos.dev_attr.attr,
>> -	&iio_dev_attr_cvrmsos.dev_attr.attr,
>> -	&iio_dev_attr_volt_a.dev_attr.attr,
>> -	&iio_dev_attr_volt_b.dev_attr.attr,
>> -	&iio_dev_attr_volt_c.dev_attr.attr,
>> -	&iio_dev_attr_current_a.dev_attr.attr,
>> -	&iio_dev_attr_current_b.dev_attr.attr,
>> -	&iio_dev_attr_current_c.dev_attr.attr,
>> -	NULL,
>> -};
>> -
>> -static const struct attribute_group ade7854_attribute_group = {
>> -	.attrs = ade7854_attributes,
>> -};
>> -
>> -static const struct iio_info ade7854_info = {
>> -	.attrs = &ade7854_attribute_group,
>> -};
>> -
>> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
>> -{
>> -	int ret;
>> -	struct ade7854_state *st = iio_priv(indio_dev);
>> -	/* setup the industrialio driver allocated elements */
>> -	mutex_init(&st->buf_lock);
>> -
>> -	indio_dev->dev.parent = dev;
>> -	indio_dev->info = &ade7854_info;
>> -	indio_dev->modes = INDIO_DIRECT_MODE;
>> -
>> -	ret = devm_iio_device_register(dev, indio_dev);
>> -	if (ret)
>> -		return ret;
>> -
>> -	/* Get the device into a sane initial state */
>> -	return ade7854_initial_setup(indio_dev);
>> -}
>> -EXPORT_SYMBOL(ade7854_probe);
>> -
>> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Energy Meter");
>> -MODULE_LICENSE("GPL v2");
>> diff --git a/drivers/staging/iio/meter/ade7854.h b/drivers/staging/iio/meter/ade7854.h
>> deleted file mode 100644
>> index 7a49f8f1016f..000000000000
>> --- a/drivers/staging/iio/meter/ade7854.h
>> +++ /dev/null
>> @@ -1,173 +0,0 @@
>> -/* SPDX-License-Identifier: GPL-2.0 */
>> -#ifndef _ADE7854_H
>> -#define _ADE7854_H
>> -
>> -#define ADE7854_AIGAIN    0x4380
>> -#define ADE7854_AVGAIN    0x4381
>> -#define ADE7854_BIGAIN    0x4382
>> -#define ADE7854_BVGAIN    0x4383
>> -#define ADE7854_CIGAIN    0x4384
>> -#define ADE7854_CVGAIN    0x4385
>> -#define ADE7854_NIGAIN    0x4386
>> -#define ADE7854_AIRMSOS   0x4387
>> -#define ADE7854_AVRMSOS   0x4388
>> -#define ADE7854_BIRMSOS   0x4389
>> -#define ADE7854_BVRMSOS   0x438A
>> -#define ADE7854_CIRMSOS   0x438B
>> -#define ADE7854_CVRMSOS   0x438C
>> -#define ADE7854_NIRMSOS   0x438D
>> -#define ADE7854_AVAGAIN   0x438E
>> -#define ADE7854_BVAGAIN   0x438F
>> -#define ADE7854_CVAGAIN   0x4390
>> -#define ADE7854_AWGAIN    0x4391
>> -#define ADE7854_AWATTOS   0x4392
>> -#define ADE7854_BWGAIN    0x4393
>> -#define ADE7854_BWATTOS   0x4394
>> -#define ADE7854_CWGAIN    0x4395
>> -#define ADE7854_CWATTOS   0x4396
>> -#define ADE7854_AVARGAIN  0x4397
>> -#define ADE7854_AVAROS    0x4398
>> -#define ADE7854_BVARGAIN  0x4399
>> -#define ADE7854_BVAROS    0x439A
>> -#define ADE7854_CVARGAIN  0x439B
>> -#define ADE7854_CVAROS    0x439C
>> -#define ADE7854_AFWGAIN   0x439D
>> -#define ADE7854_AFWATTOS  0x439E
>> -#define ADE7854_BFWGAIN   0x439F
>> -#define ADE7854_BFWATTOS  0x43A0
>> -#define ADE7854_CFWGAIN   0x43A1
>> -#define ADE7854_CFWATTOS  0x43A2
>> -#define ADE7854_AFVARGAIN 0x43A3
>> -#define ADE7854_AFVAROS   0x43A4
>> -#define ADE7854_BFVARGAIN 0x43A5
>> -#define ADE7854_BFVAROS   0x43A6
>> -#define ADE7854_CFVARGAIN 0x43A7
>> -#define ADE7854_CFVAROS   0x43A8
>> -#define ADE7854_VATHR1    0x43A9
>> -#define ADE7854_VATHR0    0x43AA
>> -#define ADE7854_WTHR1     0x43AB
>> -#define ADE7854_WTHR0     0x43AC
>> -#define ADE7854_VARTHR1   0x43AD
>> -#define ADE7854_VARTHR0   0x43AE
>> -#define ADE7854_RSV       0x43AF
>> -#define ADE7854_VANOLOAD  0x43B0
>> -#define ADE7854_APNOLOAD  0x43B1
>> -#define ADE7854_VARNOLOAD 0x43B2
>> -#define ADE7854_VLEVEL    0x43B3
>> -#define ADE7854_DICOEFF   0x43B5
>> -#define ADE7854_HPFDIS    0x43B6
>> -#define ADE7854_ISUMLVL   0x43B8
>> -#define ADE7854_ISUM      0x43BF
>> -#define ADE7854_AIRMS     0x43C0
>> -#define ADE7854_AVRMS     0x43C1
>> -#define ADE7854_BIRMS     0x43C2
>> -#define ADE7854_BVRMS     0x43C3
>> -#define ADE7854_CIRMS     0x43C4
>> -#define ADE7854_CVRMS     0x43C5
>> -#define ADE7854_NIRMS     0x43C6
>> -#define ADE7854_RUN       0xE228
>> -#define ADE7854_AWATTHR   0xE400
>> -#define ADE7854_BWATTHR   0xE401
>> -#define ADE7854_CWATTHR   0xE402
>> -#define ADE7854_AFWATTHR  0xE403
>> -#define ADE7854_BFWATTHR  0xE404
>> -#define ADE7854_CFWATTHR  0xE405
>> -#define ADE7854_AVARHR    0xE406
>> -#define ADE7854_BVARHR    0xE407
>> -#define ADE7854_CVARHR    0xE408
>> -#define ADE7854_AFVARHR   0xE409
>> -#define ADE7854_BFVARHR   0xE40A
>> -#define ADE7854_CFVARHR   0xE40B
>> -#define ADE7854_AVAHR     0xE40C
>> -#define ADE7854_BVAHR     0xE40D
>> -#define ADE7854_CVAHR     0xE40E
>> -#define ADE7854_IPEAK     0xE500
>> -#define ADE7854_VPEAK     0xE501
>> -#define ADE7854_STATUS0   0xE502
>> -#define ADE7854_STATUS1   0xE503
>> -#define ADE7854_OILVL     0xE507
>> -#define ADE7854_OVLVL     0xE508
>> -#define ADE7854_SAGLVL    0xE509
>> -#define ADE7854_MASK0     0xE50A
>> -#define ADE7854_MASK1     0xE50B
>> -#define ADE7854_IAWV      0xE50C
>> -#define ADE7854_IBWV      0xE50D
>> -#define ADE7854_ICWV      0xE50E
>> -#define ADE7854_VAWV      0xE510
>> -#define ADE7854_VBWV      0xE511
>> -#define ADE7854_VCWV      0xE512
>> -#define ADE7854_AWATT     0xE513
>> -#define ADE7854_BWATT     0xE514
>> -#define ADE7854_CWATT     0xE515
>> -#define ADE7854_AVA       0xE519
>> -#define ADE7854_BVA       0xE51A
>> -#define ADE7854_CVA       0xE51B
>> -#define ADE7854_CHECKSUM  0xE51F
>> -#define ADE7854_VNOM      0xE520
>> -#define ADE7854_PHSTATUS  0xE600
>> -#define ADE7854_ANGLE0    0xE601
>> -#define ADE7854_ANGLE1    0xE602
>> -#define ADE7854_ANGLE2    0xE603
>> -#define ADE7854_PERIOD    0xE607
>> -#define ADE7854_PHNOLOAD  0xE608
>> -#define ADE7854_LINECYC   0xE60C
>> -#define ADE7854_ZXTOUT    0xE60D
>> -#define ADE7854_COMPMODE  0xE60E
>> -#define ADE7854_GAIN      0xE60F
>> -#define ADE7854_CFMODE    0xE610
>> -#define ADE7854_CF1DEN    0xE611
>> -#define ADE7854_CF2DEN    0xE612
>> -#define ADE7854_CF3DEN    0xE613
>> -#define ADE7854_APHCAL    0xE614
>> -#define ADE7854_BPHCAL    0xE615
>> -#define ADE7854_CPHCAL    0xE616
>> -#define ADE7854_PHSIGN    0xE617
>> -#define ADE7854_CONFIG    0xE618
>> -#define ADE7854_MMODE     0xE700
>> -#define ADE7854_ACCMODE   0xE701
>> -#define ADE7854_LCYCMODE  0xE702
>> -#define ADE7854_PEAKCYC   0xE703
>> -#define ADE7854_SAGCYC    0xE704
>> -#define ADE7854_CFCYC     0xE705
>> -#define ADE7854_HSDC_CFG  0xE706
>> -#define ADE7854_CONFIG2   0xEC01
>> -
>> -#define ADE7854_READ_REG   0x1
>> -#define ADE7854_WRITE_REG  0x0
>> -
>> -#define ADE7854_MAX_TX    7
>> -#define ADE7854_MAX_RX    7
>> -#define ADE7854_STARTUP_DELAY 1000
>> -
>> -#define ADE7854_SPI_SLOW	(u32)(300 * 1000)
>> -#define ADE7854_SPI_BURST	(u32)(1000 * 1000)
>> -#define ADE7854_SPI_FAST	(u32)(2000 * 1000)
>> -
>> -/**
>> - * struct ade7854_state - device instance specific data
>> - * @spi:		actual spi_device
>> - * @read_reg		Wrapper function for I2C and SPI read
>> - * @write_reg		Wrapper function for I2C and SPI write
>> - * @indio_dev:		industrial I/O device structure
>> - * @buf_lock:		mutex to protect tx and rx
>> - * @tx:			transmit buffer
>> - * @rx:			receive buffer
>> - **/
>> -struct ade7854_state {
>> -	struct spi_device *spi;
>> -	struct i2c_client *i2c;
>> -	int (*read_reg)(struct device *dev, u16 reg_address, u32 *val,
>> -			int bits);
>> -	int (*write_reg)(struct device *dev, u16 reg_address, u32 val,
>> -			 int bits);
>> -	int irq;
>> -	struct mutex buf_lock;
>> -	u8 tx[ADE7854_MAX_TX] __aligned(IIO_DMA_MINALIGN);
>> -	u8 rx[ADE7854_MAX_RX];
>> -
>> -};
>> -
>> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev);
>> -int ade7854_remove(struct iio_dev *indio_dev);
>> -
>> -#endif
>> diff --git a/drivers/staging/iio/meter/meter.h b/drivers/staging/iio/meter/meter.h
>> deleted file mode 100644
>> index 5ed59bf30a25..000000000000
>> --- a/drivers/staging/iio/meter/meter.h
>> +++ /dev/null
>> @@ -1,398 +0,0 @@
>> -/* SPDX-License-Identifier: GPL-2.0 */
>> -#ifndef _METER_H
>> -#define _METER_H
>> -
>> -#include <linux/iio/sysfs.h>
>> -
>> -/* metering ic types of attribute */
>> -
>> -#define IIO_DEV_ATTR_CURRENT_A_OFFSET(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_a_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_B_OFFSET(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_b_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_C_OFFSET(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_c_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_A_OFFSET(_mode, _show, _store, _addr)      \
>> -	IIO_DEVICE_ATTR(volt_a_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_B_OFFSET(_mode, _show, _store, _addr)      \
>> -	IIO_DEVICE_ATTR(volt_b_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_C_OFFSET(_mode, _show, _store, _addr)      \
>> -	IIO_DEVICE_ATTR(volt_c_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(reactive_power_a_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(reactive_power_b_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(reactive_power_c_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(active_power_a_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(active_power_b_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(active_power_c_offset, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_A_GAIN(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_a_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_B_GAIN(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_b_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_C_GAIN(_mode, _show, _store, _addr)	\
>> -	IIO_DEVICE_ATTR(current_c_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(apparent_power_a_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(apparent_power_b_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(apparent_power_c_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(active_power_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(active_power_a_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(active_power_b_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)   \
>> -	IIO_DEVICE_ATTR(active_power_c_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(reactive_power_a_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(reactive_power_b_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)     \
>> -	IIO_DEVICE_ATTR(reactive_power_c_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_A(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(current_a, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_B(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(current_b, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CURRENT_C(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(current_c, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_A(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(volt_a, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_B(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(volt_b, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOLT_C(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(volt_c, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_AENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(aenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_LENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(lenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_RAENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(raenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_LAENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(laenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_VAENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(vaenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_LVAENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(lvaenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_RVAENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(rvaenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_LVARENERGY(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(lvarenergy, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CHKSUM(_show, _addr)                       \
>> -	IIO_DEVICE_ATTR(chksum, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_ANGLE0(_show, _addr)                       \
>> -	IIO_DEVICE_ATTR(angle0, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_ANGLE1(_show, _addr)                       \
>> -	IIO_DEVICE_ATTR(angle1, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_ANGLE2(_show, _addr)                       \
>> -	IIO_DEVICE_ATTR(angle2, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_AWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(awatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_BWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(bwatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(cwatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_AFWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(afwatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_BFWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(bfwatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CFWATTHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(cfwatthr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVARHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(avarhr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVARHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(bvarhr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVARHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(cvarhr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVAHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(avahr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVAHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(bvahr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVAHR(_show, _addr)			\
>> -	IIO_DEVICE_ATTR(cvahr, 0444, _show, NULL, _addr)
>> -
>> -#define IIO_DEV_ATTR_IOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(ios, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_PHCAL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(phcal, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_APHCAL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(aphcal, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BPHCAL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bphcal, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CPHCAL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cphcal, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_APOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(apos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AAPOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(aapos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BAPOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bapos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CAPOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(capos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVRMSGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(avrmsgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVRMSGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bvrmsgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVRMSGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cvrmsgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AIGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(aigain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BIGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bigain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CIGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cigain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_NIGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(nigain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(avgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bvgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cvgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_WGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(wgain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_WDIV(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(wdiv, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CFNUM(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cfnum, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CFDEN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cfden, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CF1DEN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cf1den, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CF2DEN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cf2den, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CF3DEN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cf3den, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_IRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(irms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vrms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AIRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(airms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BIRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(birms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CIRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cirms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_NIRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(nirms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(avrms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bvrms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVRMS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cvrms, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_IRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(irmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vrmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AIRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(airmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BIRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(birmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CIRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cirmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_AVRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(avrmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_BVRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(bvrmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CVRMSOS(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cvrmsos, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VAGAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vagain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_PGA_GAIN(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(pga_gain, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VADIV(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vadiv, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_LINECYC(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(linecyc, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_SAGCYC(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(sagcyc, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_CFCYC(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(cfcyc, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_PEAKCYC(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(peakcyc, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_SAGLVL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(saglvl, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_IPKLVL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(ipklvl, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VPKLVL(_mode, _show, _store, _addr)                \
>> -	IIO_DEVICE_ATTR(vpklvl, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_IPEAK(_mode, _show, _store, _addr)			\
>> -	IIO_DEVICE_ATTR(ipeak, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_RIPEAK(_mode, _show, _store, _addr)		\
>> -	IIO_DEVICE_ATTR(ripeak, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VPEAK(_mode, _show, _store, _addr)			\
>> -	IIO_DEVICE_ATTR(vpeak, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_RVPEAK(_mode, _show, _store, _addr)		\
>> -	IIO_DEVICE_ATTR(rvpeak, _mode, _show, _store, _addr)
>> -
>> -#define IIO_DEV_ATTR_VPERIOD(_mode, _show, _store, _addr)		\
>> -	IIO_DEVICE_ATTR(vperiod, _mode, _show, _store, _addr)
>> -
>> -/* active energy register, AENERGY, is more than half full */
>> -#define IIO_EVENT_ATTR_AENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(aenergy_half_full, _evlist, _show, _store, _mask)
>> -
>> -/* a SAG on the line voltage */
>> -#define IIO_EVENT_ATTR_LINE_VOLT_SAG(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(line_volt_sag, _evlist, _show, _store, _mask)
>> -
>> -/*
>> - * Indicates the end of energy accumulation over an integer number
>> - * of half line cycles
>> - */
>> -#define IIO_EVENT_ATTR_CYCEND(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(cycend, _evlist, _show, _store, _mask)
>> -
>> -/* on the rising and falling edge of the voltage waveform */
>> -#define IIO_EVENT_ATTR_ZERO_CROSS(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(zero_cross, _evlist, _show, _store, _mask)
>> -
>> -/* the active energy register has overflowed */
>> -#define IIO_EVENT_ATTR_AENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(aenergy_overflow, _evlist, _show, _store, _mask)
>> -
>> -/* the apparent energy register has overflowed */
>> -#define IIO_EVENT_ATTR_VAENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(vaenergy_overflow, _evlist, _show, _store, _mask)
>> -
>> -/* the active energy register, VAENERGY, is more than half full */
>> -#define IIO_EVENT_ATTR_VAENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(vaenergy_half_full, _evlist, _show, _store, _mask)
>> -
>> -/* the power has gone from negative to positive */
>> -#define IIO_EVENT_ATTR_PPOS(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(ppos, _evlist, _show, _store, _mask)
>> -
>> -/* the power has gone from positive to negative */
>> -#define IIO_EVENT_ATTR_PNEG(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(pneg, _evlist, _show, _store, _mask)
>> -
>> -/* waveform sample from Channel 1 has exceeded the IPKLVL value */
>> -#define IIO_EVENT_ATTR_IPKLVL_EXC(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(ipklvl_exc, _evlist, _show, _store, _mask)
>> -
>> -/* waveform sample from Channel 2 has exceeded the VPKLVL value */
>> -#define IIO_EVENT_ATTR_VPKLVL_EXC(_evlist, _show, _store, _mask) \
>> -	IIO_EVENT_ATTR_SH(vpklvl_exc, _evlist, _show, _store, _mask)
>> -
>> -#endif /* _METER_H */
Jonathan Cameron Feb. 8, 2023, 7:10 p.m. UTC | #3
On Sun, 5 Feb 2023 07:22:16 -0800
Lars-Peter Clausen <lars@metafoo.de> wrote:

> On 2/5/23 07:09, Jonathan Cameron wrote:
> > On Sun, 29 Jan 2023 16:08:05 +0000
> > Jonathan Cameron <jic23@kernel.org> wrote:
> >  
> >> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >>
> >> This driver is so far from making correct use of the IIO infrastructure
> >> and ABI that if someone wanted to make the driver suitable for moving
> >> out of staging, they would more or less be starting from scratch.
> >>
> >> As such there is little point in keeping the existing code in staging.
> >>
> >> Note this was only user of the meter.h header so that is dropped.
> >> There are no other drivers in the staging/iio/meter directory so drop
> >> the build system files as well.
> >>
> >> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>  
> > Ping.
> >
> > If I don't hear any one speaking out in favour of keeping this driver
> > I'll drop it - probably early in next cycle.
> >
> > Not really expecting review for a driver drop :)  
> 
> Lets just drop it. Its been more than 12 years in staging now, that's 
> long enough.

I've not given up hope on all of the others in that category
(I even have hardware for one of the device somewhere :)

> 
> Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Thanks, applied.
> 
> >
> > Jonathan
> >  
> >> ---
> >>   drivers/staging/iio/Kconfig             |   1 -
> >>   drivers/staging/iio/Makefile            |   1 -
> >>   drivers/staging/iio/meter/Kconfig       |  37 --
> >>   drivers/staging/iio/meter/Makefile      |   8 -
> >>   drivers/staging/iio/meter/ade7854-i2c.c | 153 -------
> >>   drivers/staging/iio/meter/ade7854-spi.c | 160 -------
> >>   drivers/staging/iio/meter/ade7854.c     | 556 ------------------------
> >>   drivers/staging/iio/meter/ade7854.h     | 173 --------
> >>   drivers/staging/iio/meter/meter.h       | 398 -----------------
> >>   9 files changed, 1487 deletions(-)
> >>
> >> diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
> >> index afd05bf3345e..d3968fe2ebb8 100644
> >> --- a/drivers/staging/iio/Kconfig
> >> +++ b/drivers/staging/iio/Kconfig
> >> @@ -10,7 +10,6 @@ source "drivers/staging/iio/adc/Kconfig"
> >>   source "drivers/staging/iio/addac/Kconfig"
> >>   source "drivers/staging/iio/frequency/Kconfig"
> >>   source "drivers/staging/iio/impedance-analyzer/Kconfig"
> >> -source "drivers/staging/iio/meter/Kconfig"
> >>   source "drivers/staging/iio/resolver/Kconfig"
> >>   
> >>   endmenu
> >> diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile
> >> index 5ed56fe57e14..c50f1019f829 100644
> >> --- a/drivers/staging/iio/Makefile
> >> +++ b/drivers/staging/iio/Makefile
> >> @@ -8,5 +8,4 @@ obj-y += adc/
> >>   obj-y += addac/
> >>   obj-y += frequency/
> >>   obj-y += impedance-analyzer/
> >> -obj-y += meter/
> >>   obj-y += resolver/
> >> diff --git a/drivers/staging/iio/meter/Kconfig b/drivers/staging/iio/meter/Kconfig
> >> deleted file mode 100644
> >> index aa6a3e7f6cdb..000000000000
> >> --- a/drivers/staging/iio/meter/Kconfig
> >> +++ /dev/null
> >> @@ -1,37 +0,0 @@
> >> -# SPDX-License-Identifier: GPL-2.0
> >> -#
> >> -# IIO meter drivers configuration
> >> -#
> >> -menu "Active energy metering IC"
> >> -
> >> -config ADE7854
> >> -	tristate "Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver"
> >> -	depends on SPI || I2C
> >> -	help
> >> -	  Say yes here to build support for Analog Devices ADE7854/58/68/78 Polyphase
> >> -	  Multifunction Energy Metering IC Driver.
> >> -
> >> -	  To compile this driver as a module, choose M here: the
> >> -	  module will be called ade7854.
> >> -
> >> -config ADE7854_I2C
> >> -	tristate "support I2C bus connection"
> >> -	depends on ADE7854 && I2C
> >> -	default y
> >> -	help
> >> -	  Say Y here if you have ADE7854/58/68/78 hooked to an I2C bus.
> >> -
> >> -	  To compile this driver as a module, choose M here: the
> >> -	  module will be called ade7854-i2c.
> >> -
> >> -config ADE7854_SPI
> >> -	tristate "support SPI bus connection"
> >> -	depends on ADE7854 && SPI
> >> -	default y
> >> -	help
> >> -	  Say Y here if you have ADE7854/58/68/78 hooked to a SPI bus.
> >> -
> >> -	  To compile this driver as a module, choose M here: the
> >> -	  module will be called ade7854-spi.
> >> -
> >> -endmenu
> >> diff --git a/drivers/staging/iio/meter/Makefile b/drivers/staging/iio/meter/Makefile
> >> deleted file mode 100644
> >> index ed4547e38f3a..000000000000
> >> --- a/drivers/staging/iio/meter/Makefile
> >> +++ /dev/null
> >> @@ -1,8 +0,0 @@
> >> -# SPDX-License-Identifier: GPL-2.0
> >> -#
> >> -# Makefile for metering ic drivers
> >> -#
> >> -
> >> -obj-$(CONFIG_ADE7854) += ade7854.o
> >> -obj-$(CONFIG_ADE7854_I2C) += ade7854-i2c.o
> >> -obj-$(CONFIG_ADE7854_SPI) += ade7854-spi.o
> >> diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
> >> deleted file mode 100644
> >> index 572d714eb0dd..000000000000
> >> --- a/drivers/staging/iio/meter/ade7854-i2c.c
> >> +++ /dev/null
> >> @@ -1,153 +0,0 @@
> >> -// SPDX-License-Identifier: GPL-2.0+
> >> -/*
> >> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (I2C Bus)
> >> - *
> >> - * Copyright 2010 Analog Devices Inc.
> >> - */
> >> -
> >> -#include <linux/device.h>
> >> -#include <linux/kernel.h>
> >> -#include <linux/i2c.h>
> >> -#include <linux/slab.h>
> >> -#include <linux/module.h>
> >> -
> >> -#include <linux/iio/iio.h>
> >> -#include "ade7854.h"
> >> -
> >> -static int ade7854_i2c_write_reg(struct device *dev,
> >> -				 u16 reg_address,
> >> -				 u32 val,
> >> -				 int bits)
> >> -{
> >> -	int ret;
> >> -	int count;
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	mutex_lock(&st->buf_lock);
> >> -	st->tx[0] = (reg_address >> 8) & 0xFF;
> >> -	st->tx[1] = reg_address & 0xFF;
> >> -
> >> -	switch (bits) {
> >> -	case 8:
> >> -		st->tx[2] = val & 0xFF;
> >> -		count = 3;
> >> -		break;
> >> -	case 16:
> >> -		st->tx[2] = (val >> 8) & 0xFF;
> >> -		st->tx[3] = val & 0xFF;
> >> -		count = 4;
> >> -		break;
> >> -	case 24:
> >> -		st->tx[2] = (val >> 16) & 0xFF;
> >> -		st->tx[3] = (val >> 8) & 0xFF;
> >> -		st->tx[4] = val & 0xFF;
> >> -		count = 5;
> >> -		break;
> >> -	case 32:
> >> -		st->tx[2] = (val >> 24) & 0xFF;
> >> -		st->tx[3] = (val >> 16) & 0xFF;
> >> -		st->tx[4] = (val >> 8) & 0xFF;
> >> -		st->tx[5] = val & 0xFF;
> >> -		count = 6;
> >> -		break;
> >> -	default:
> >> -		ret = -EINVAL;
> >> -		goto unlock;
> >> -	}
> >> -
> >> -	ret = i2c_master_send(st->i2c, st->tx, count);
> >> -
> >> -unlock:
> >> -	mutex_unlock(&st->buf_lock);
> >> -
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	return 0;
> >> -}
> >> -
> >> -static int ade7854_i2c_read_reg(struct device *dev,
> >> -				u16 reg_address,
> >> -				u32 *val,
> >> -				int bits)
> >> -{
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	int ret;
> >> -
> >> -	mutex_lock(&st->buf_lock);
> >> -	st->tx[0] = (reg_address >> 8) & 0xFF;
> >> -	st->tx[1] = reg_address & 0xFF;
> >> -
> >> -	ret = i2c_master_send(st->i2c, st->tx, 2);
> >> -	if (ret < 0)
> >> -		goto unlock;
> >> -
> >> -	ret = i2c_master_recv(st->i2c, st->rx, bits);
> >> -	if (ret < 0)
> >> -		goto unlock;
> >> -
> >> -	switch (bits) {
> >> -	case 8:
> >> -		*val = st->rx[0];
> >> -		break;
> >> -	case 16:
> >> -		*val = (st->rx[0] << 8) | st->rx[1];
> >> -		break;
> >> -	case 24:
> >> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
> >> -		break;
> >> -	case 32:
> >> -		*val = (st->rx[0] << 24) | (st->rx[1] << 16) |
> >> -			(st->rx[2] << 8) | st->rx[3];
> >> -		break;
> >> -	default:
> >> -		ret = -EINVAL;
> >> -		goto unlock;
> >> -	}
> >> -
> >> -unlock:
> >> -	mutex_unlock(&st->buf_lock);
> >> -	return ret;
> >> -}
> >> -
> >> -static int ade7854_i2c_probe(struct i2c_client *client)
> >> -{
> >> -	struct ade7854_state *st;
> >> -	struct iio_dev *indio_dev;
> >> -
> >> -	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
> >> -	if (!indio_dev)
> >> -		return -ENOMEM;
> >> -	st = iio_priv(indio_dev);
> >> -	i2c_set_clientdata(client, indio_dev);
> >> -	st->read_reg = ade7854_i2c_read_reg;
> >> -	st->write_reg = ade7854_i2c_write_reg;
> >> -	st->i2c = client;
> >> -	st->irq = client->irq;
> >> -
> >> -	return ade7854_probe(indio_dev, &client->dev);
> >> -}
> >> -
> >> -static const struct i2c_device_id ade7854_id[] = {
> >> -	{ "ade7854", 0 },
> >> -	{ "ade7858", 0 },
> >> -	{ "ade7868", 0 },
> >> -	{ "ade7878", 0 },
> >> -	{ }
> >> -};
> >> -MODULE_DEVICE_TABLE(i2c, ade7854_id);
> >> -
> >> -static struct i2c_driver ade7854_i2c_driver = {
> >> -	.driver = {
> >> -		.name = "ade7854",
> >> -	},
> >> -	.probe_new = ade7854_i2c_probe,
> >> -	.id_table = ade7854_id,
> >> -};
> >> -module_i2c_driver(ade7854_i2c_driver);
> >> -
> >> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> >> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");
> >> -MODULE_LICENSE("GPL v2");
> >> diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
> >> deleted file mode 100644
> >> index f12a6c8b3e88..000000000000
> >> --- a/drivers/staging/iio/meter/ade7854-spi.c
> >> +++ /dev/null
> >> @@ -1,160 +0,0 @@
> >> -// SPDX-License-Identifier: GPL-2.0+
> >> -/*
> >> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (SPI Bus)
> >> - *
> >> - * Copyright 2010 Analog Devices Inc.
> >> - */
> >> -
> >> -#include <linux/device.h>
> >> -#include <linux/kernel.h>
> >> -#include <linux/spi/spi.h>
> >> -#include <linux/slab.h>
> >> -#include <linux/module.h>
> >> -
> >> -#include <linux/iio/iio.h>
> >> -#include "ade7854.h"
> >> -
> >> -static int ade7854_spi_write_reg(struct device *dev,
> >> -				 u16 reg_address,
> >> -				 u32 val,
> >> -				 int bits)
> >> -{
> >> -	int ret;
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	struct spi_transfer xfer = {
> >> -		.tx_buf = st->tx,
> >> -		.bits_per_word = 8,
> >> -		.len = 4,
> >> -	};
> >> -
> >> -	mutex_lock(&st->buf_lock);
> >> -	st->tx[0] = ADE7854_WRITE_REG;
> >> -	st->tx[1] = (reg_address >> 8) & 0xFF;
> >> -	st->tx[2] = reg_address & 0xFF;
> >> -	switch (bits) {
> >> -	case 8:
> >> -		st->tx[3] = val & 0xFF;
> >> -		break;
> >> -	case 16:
> >> -		xfer.len = 5;
> >> -		st->tx[3] = (val >> 8) & 0xFF;
> >> -		st->tx[4] = val & 0xFF;
> >> -		break;
> >> -	case 24:
> >> -		xfer.len = 6;
> >> -		st->tx[3] = (val >> 16) & 0xFF;
> >> -		st->tx[4] = (val >> 8) & 0xFF;
> >> -		st->tx[5] = val & 0xFF;
> >> -		break;
> >> -	case 32:
> >> -		xfer.len = 7;
> >> -		st->tx[3] = (val >> 24) & 0xFF;
> >> -		st->tx[4] = (val >> 16) & 0xFF;
> >> -		st->tx[5] = (val >> 8) & 0xFF;
> >> -		st->tx[6] = val & 0xFF;
> >> -		break;
> >> -	default:
> >> -		ret = -EINVAL;
> >> -		goto unlock;
> >> -	}
> >> -
> >> -	ret = spi_sync_transfer(st->spi, &xfer, 1);
> >> -unlock:
> >> -	mutex_unlock(&st->buf_lock);
> >> -
> >> -	return ret;
> >> -}
> >> -
> >> -static int ade7854_spi_read_reg(struct device *dev,
> >> -				u16 reg_address,
> >> -				u32 *val,
> >> -				int bits)
> >> -{
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	int ret;
> >> -	struct spi_transfer xfers[] = {
> >> -		{
> >> -			.tx_buf = st->tx,
> >> -			.bits_per_word = 8,
> >> -			.len = 3,
> >> -		}, {
> >> -			.rx_buf = st->rx,
> >> -			.bits_per_word = 8,
> >> -			.len = bits,
> >> -		}
> >> -	};
> >> -
> >> -	mutex_lock(&st->buf_lock);
> >> -
> >> -	st->tx[0] = ADE7854_READ_REG;
> >> -	st->tx[1] = (reg_address >> 8) & 0xFF;
> >> -	st->tx[2] = reg_address & 0xFF;
> >> -
> >> -	ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
> >> -	if (ret < 0) {
> >> -		dev_err(&st->spi->dev, "problem when reading register 0x%02X",
> >> -			reg_address);
> >> -		goto unlock;
> >> -	}
> >> -
> >> -	switch (bits) {
> >> -	case 8:
> >> -		*val = st->rx[0];
> >> -		break;
> >> -	case 16:
> >> -		*val = be16_to_cpup((const __be16 *)st->rx);
> >> -		break;
> >> -	case 24:
> >> -		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
> >> -		break;
> >> -	case 32:
> >> -		*val = be32_to_cpup((const __be32 *)st->rx);
> >> -		break;
> >> -	}
> >> -
> >> -unlock:
> >> -	mutex_unlock(&st->buf_lock);
> >> -	return ret;
> >> -}
> >> -
> >> -static int ade7854_spi_probe(struct spi_device *spi)
> >> -{
> >> -	struct ade7854_state *st;
> >> -	struct iio_dev *indio_dev;
> >> -
> >> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
> >> -	if (!indio_dev)
> >> -		return -ENOMEM;
> >> -	st = iio_priv(indio_dev);
> >> -	spi_set_drvdata(spi, indio_dev);
> >> -	st->read_reg = ade7854_spi_read_reg;
> >> -	st->write_reg = ade7854_spi_write_reg;
> >> -	st->irq = spi->irq;
> >> -	st->spi = spi;
> >> -
> >> -	return ade7854_probe(indio_dev, &spi->dev);
> >> -}
> >> -
> >> -static const struct spi_device_id ade7854_id[] = {
> >> -	{ "ade7854", 0 },
> >> -	{ "ade7858", 0 },
> >> -	{ "ade7868", 0 },
> >> -	{ "ade7878", 0 },
> >> -	{ }
> >> -};
> >> -MODULE_DEVICE_TABLE(spi, ade7854_id);
> >> -
> >> -static struct spi_driver ade7854_driver = {
> >> -	.driver = {
> >> -		.name = "ade7854",
> >> -	},
> >> -	.probe = ade7854_spi_probe,
> >> -	.id_table = ade7854_id,
> >> -};
> >> -module_spi_driver(ade7854_driver);
> >> -
> >> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> >> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
> >> -MODULE_LICENSE("GPL v2");
> >> diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c
> >> deleted file mode 100644
> >> index 68da6ecde6a3..000000000000
> >> --- a/drivers/staging/iio/meter/ade7854.c
> >> +++ /dev/null
> >> @@ -1,556 +0,0 @@
> >> -// SPDX-License-Identifier: GPL-2.0+
> >> -/*
> >> - * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver
> >> - *
> >> - * Copyright 2010 Analog Devices Inc.
> >> - */
> >> -
> >> -#include <linux/interrupt.h>
> >> -#include <linux/irq.h>
> >> -#include <linux/delay.h>
> >> -#include <linux/mutex.h>
> >> -#include <linux/device.h>
> >> -#include <linux/kernel.h>
> >> -#include <linux/slab.h>
> >> -#include <linux/sysfs.h>
> >> -#include <linux/list.h>
> >> -#include <linux/module.h>
> >> -
> >> -#include <linux/iio/iio.h>
> >> -#include <linux/iio/sysfs.h>
> >> -#include "meter.h"
> >> -#include "ade7854.h"
> >> -
> >> -static ssize_t ade7854_read_8bit(struct device *dev,
> >> -				 struct device_attribute *attr,
> >> -				 char *buf)
> >> -{
> >> -	int ret;
> >> -	u32 val = 0;
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -
> >> -	ret = st->read_reg(dev, this_attr->address, &val, 8);
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	return sprintf(buf, "%u\n", val);
> >> -}
> >> -
> >> -static ssize_t ade7854_read_16bit(struct device *dev,
> >> -				  struct device_attribute *attr,
> >> -				  char *buf)
> >> -{
> >> -	int ret;
> >> -	u32 val = 0;
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -
> >> -	ret = st->read_reg(dev, this_attr->address, &val, 16);
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	return sprintf(buf, "%u\n", val);
> >> -}
> >> -
> >> -static ssize_t ade7854_read_24bit(struct device *dev,
> >> -				  struct device_attribute *attr,
> >> -				  char *buf)
> >> -{
> >> -	int ret;
> >> -	u32 val;
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -
> >> -	ret = st->read_reg(dev, this_attr->address, &val, 24);
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	return sprintf(buf, "%u\n", val);
> >> -}
> >> -
> >> -static ssize_t ade7854_read_32bit(struct device *dev,
> >> -				  struct device_attribute *attr,
> >> -				  char *buf)
> >> -{
> >> -	int ret;
> >> -	u32 val = 0;
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	ret = st->read_reg(dev, this_attr->address, &val, 32);
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	return sprintf(buf, "%u\n", val);
> >> -}
> >> -
> >> -static ssize_t ade7854_write_8bit(struct device *dev,
> >> -				  struct device_attribute *attr,
> >> -				  const char *buf,
> >> -				  size_t len)
> >> -{
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	int ret;
> >> -	u8 val;
> >> -
> >> -	ret = kstrtou8(buf, 10, &val);
> >> -	if (ret)
> >> -		goto error_ret;
> >> -	ret = st->write_reg(dev, this_attr->address, val, 8);
> >> -
> >> -error_ret:
> >> -	return ret ? ret : len;
> >> -}
> >> -
> >> -static ssize_t ade7854_write_16bit(struct device *dev,
> >> -				   struct device_attribute *attr,
> >> -				   const char *buf,
> >> -				   size_t len)
> >> -{
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	int ret;
> >> -	u16 val;
> >> -
> >> -	ret = kstrtou16(buf, 10, &val);
> >> -	if (ret)
> >> -		goto error_ret;
> >> -	ret = st->write_reg(dev, this_attr->address, val, 16);
> >> -
> >> -error_ret:
> >> -	return ret ? ret : len;
> >> -}
> >> -
> >> -static ssize_t ade7854_write_24bit(struct device *dev,
> >> -				   struct device_attribute *attr,
> >> -				   const char *buf,
> >> -				   size_t len)
> >> -{
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	int ret;
> >> -	u32 val;
> >> -
> >> -	ret = kstrtou32(buf, 10, &val);
> >> -	if (ret)
> >> -		goto error_ret;
> >> -	ret = st->write_reg(dev, this_attr->address, val, 24);
> >> -
> >> -error_ret:
> >> -	return ret ? ret : len;
> >> -}
> >> -
> >> -static ssize_t ade7854_write_32bit(struct device *dev,
> >> -				   struct device_attribute *attr,
> >> -				   const char *buf,
> >> -				   size_t len)
> >> -{
> >> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	int ret;
> >> -	u32 val;
> >> -
> >> -	ret = kstrtou32(buf, 10, &val);
> >> -	if (ret)
> >> -		goto error_ret;
> >> -	ret = st->write_reg(dev, this_attr->address, val, 32);
> >> -
> >> -error_ret:
> >> -	return ret ? ret : len;
> >> -}
> >> -
> >> -static int ade7854_reset(struct device *dev)
> >> -{
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	u32 val;
> >> -
> >> -	st->read_reg(dev, ADE7854_CONFIG, &val, 16);
> >> -	val |= BIT(7); /* Software Chip Reset */
> >> -
> >> -	return st->write_reg(dev, ADE7854_CONFIG, val, 16);
> >> -}
> >> -
> >> -static IIO_DEV_ATTR_AIGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AIGAIN);
> >> -static IIO_DEV_ATTR_BIGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BIGAIN);
> >> -static IIO_DEV_ATTR_CIGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CIGAIN);
> >> -static IIO_DEV_ATTR_NIGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_NIGAIN);
> >> -static IIO_DEV_ATTR_AVGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AVGAIN);
> >> -static IIO_DEV_ATTR_BVGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BVGAIN);
> >> -static IIO_DEV_ATTR_CVGAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CVGAIN);
> >> -static IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AVAGAIN);
> >> -static IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BVAGAIN);
> >> -static IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CVAGAIN);
> >> -static IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AWATTOS);
> >> -static IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BWATTOS);
> >> -static IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CWATTOS);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AVARGAIN);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BVARGAIN);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CVARGAIN);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_AVAROS);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_BVAROS);
> >> -static IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(0644,
> >> -		ade7854_read_24bit,
> >> -		ade7854_write_24bit,
> >> -		ADE7854_CVAROS);
> >> -static IIO_DEV_ATTR_VPEAK(0644,
> >> -		ade7854_read_32bit,
> >> -		ade7854_write_32bit,
> >> -		ADE7854_VPEAK);
> >> -static IIO_DEV_ATTR_IPEAK(0644,
> >> -		ade7854_read_32bit,
> >> -		ade7854_write_32bit,
> >> -		ADE7854_IPEAK);
> >> -static IIO_DEV_ATTR_APHCAL(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_APHCAL);
> >> -static IIO_DEV_ATTR_BPHCAL(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_BPHCAL);
> >> -static IIO_DEV_ATTR_CPHCAL(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CPHCAL);
> >> -static IIO_DEV_ATTR_CF1DEN(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CF1DEN);
> >> -static IIO_DEV_ATTR_CF2DEN(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CF2DEN);
> >> -static IIO_DEV_ATTR_CF3DEN(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CF3DEN);
> >> -static IIO_DEV_ATTR_LINECYC(0644,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_LINECYC);
> >> -static IIO_DEV_ATTR_SAGCYC(0644,
> >> -		ade7854_read_8bit,
> >> -		ade7854_write_8bit,
> >> -		ADE7854_SAGCYC);
> >> -static IIO_DEV_ATTR_CFCYC(0644,
> >> -		ade7854_read_8bit,
> >> -		ade7854_write_8bit,
> >> -		ADE7854_CFCYC);
> >> -static IIO_DEV_ATTR_PEAKCYC(0644,
> >> -		ade7854_read_8bit,
> >> -		ade7854_write_8bit,
> >> -		ADE7854_PEAKCYC);
> >> -static IIO_DEV_ATTR_CHKSUM(ade7854_read_24bit,
> >> -		ADE7854_CHECKSUM);
> >> -static IIO_DEV_ATTR_ANGLE0(ade7854_read_24bit,
> >> -		ADE7854_ANGLE0);
> >> -static IIO_DEV_ATTR_ANGLE1(ade7854_read_24bit,
> >> -		ADE7854_ANGLE1);
> >> -static IIO_DEV_ATTR_ANGLE2(ade7854_read_24bit,
> >> -		ADE7854_ANGLE2);
> >> -static IIO_DEV_ATTR_AIRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_AIRMS);
> >> -static IIO_DEV_ATTR_BIRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_BIRMS);
> >> -static IIO_DEV_ATTR_CIRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_CIRMS);
> >> -static IIO_DEV_ATTR_NIRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_NIRMS);
> >> -static IIO_DEV_ATTR_AVRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_AVRMS);
> >> -static IIO_DEV_ATTR_BVRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_BVRMS);
> >> -static IIO_DEV_ATTR_CVRMS(0444,
> >> -		ade7854_read_24bit,
> >> -		NULL,
> >> -		ADE7854_CVRMS);
> >> -static IIO_DEV_ATTR_AIRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_AIRMSOS);
> >> -static IIO_DEV_ATTR_BIRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_BIRMSOS);
> >> -static IIO_DEV_ATTR_CIRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CIRMSOS);
> >> -static IIO_DEV_ATTR_AVRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_AVRMSOS);
> >> -static IIO_DEV_ATTR_BVRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_BVRMSOS);
> >> -static IIO_DEV_ATTR_CVRMSOS(0444,
> >> -		ade7854_read_16bit,
> >> -		ade7854_write_16bit,
> >> -		ADE7854_CVRMSOS);
> >> -static IIO_DEV_ATTR_VOLT_A(ade7854_read_24bit,
> >> -		ADE7854_VAWV);
> >> -static IIO_DEV_ATTR_VOLT_B(ade7854_read_24bit,
> >> -		ADE7854_VBWV);
> >> -static IIO_DEV_ATTR_VOLT_C(ade7854_read_24bit,
> >> -		ADE7854_VCWV);
> >> -static IIO_DEV_ATTR_CURRENT_A(ade7854_read_24bit,
> >> -		ADE7854_IAWV);
> >> -static IIO_DEV_ATTR_CURRENT_B(ade7854_read_24bit,
> >> -		ADE7854_IBWV);
> >> -static IIO_DEV_ATTR_CURRENT_C(ade7854_read_24bit,
> >> -		ADE7854_ICWV);
> >> -static IIO_DEV_ATTR_AWATTHR(ade7854_read_32bit,
> >> -		ADE7854_AWATTHR);
> >> -static IIO_DEV_ATTR_BWATTHR(ade7854_read_32bit,
> >> -		ADE7854_BWATTHR);
> >> -static IIO_DEV_ATTR_CWATTHR(ade7854_read_32bit,
> >> -		ADE7854_CWATTHR);
> >> -static IIO_DEV_ATTR_AFWATTHR(ade7854_read_32bit,
> >> -		ADE7854_AFWATTHR);
> >> -static IIO_DEV_ATTR_BFWATTHR(ade7854_read_32bit,
> >> -		ADE7854_BFWATTHR);
> >> -static IIO_DEV_ATTR_CFWATTHR(ade7854_read_32bit,
> >> -		ADE7854_CFWATTHR);
> >> -static IIO_DEV_ATTR_AVARHR(ade7854_read_32bit,
> >> -		ADE7854_AVARHR);
> >> -static IIO_DEV_ATTR_BVARHR(ade7854_read_32bit,
> >> -		ADE7854_BVARHR);
> >> -static IIO_DEV_ATTR_CVARHR(ade7854_read_32bit,
> >> -		ADE7854_CVARHR);
> >> -static IIO_DEV_ATTR_AVAHR(ade7854_read_32bit,
> >> -		ADE7854_AVAHR);
> >> -static IIO_DEV_ATTR_BVAHR(ade7854_read_32bit,
> >> -		ADE7854_BVAHR);
> >> -static IIO_DEV_ATTR_CVAHR(ade7854_read_32bit,
> >> -		ADE7854_CVAHR);
> >> -
> >> -static int ade7854_set_irq(struct device *dev, bool enable)
> >> -{
> >> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -
> >> -	int ret;
> >> -	u32 irqen;
> >> -
> >> -	ret = st->read_reg(dev, ADE7854_MASK0, &irqen, 32);
> >> -	if (ret < 0)
> >> -		return ret;
> >> -
> >> -	if (enable)
> >> -		irqen |= BIT(17); /* 1: interrupt enabled when all periodical
> >> -				   * (at 8 kHz rate) DSP computations finish.
> >> -				   */
> >> -	else
> >> -		irqen &= ~BIT(17);
> >> -
> >> -	return st->write_reg(dev, ADE7854_MASK0, irqen, 32);
> >> -}
> >> -
> >> -static int ade7854_initial_setup(struct iio_dev *indio_dev)
> >> -{
> >> -	int ret;
> >> -	struct device *dev = &indio_dev->dev;
> >> -
> >> -	/* Disable IRQ */
> >> -	ret = ade7854_set_irq(dev, false);
> >> -	if (ret) {
> >> -		dev_err(dev, "disable irq failed");
> >> -		goto err_ret;
> >> -	}
> >> -
> >> -	ade7854_reset(dev);
> >> -	usleep_range(ADE7854_STARTUP_DELAY, ADE7854_STARTUP_DELAY + 100);
> >> -
> >> -err_ret:
> >> -	return ret;
> >> -}
> >> -
> >> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("8000");
> >> -
> >> -static IIO_CONST_ATTR(name, "ade7854");
> >> -
> >> -static struct attribute *ade7854_attributes[] = {
> >> -	&iio_dev_attr_aigain.dev_attr.attr,
> >> -	&iio_dev_attr_bigain.dev_attr.attr,
> >> -	&iio_dev_attr_cigain.dev_attr.attr,
> >> -	&iio_dev_attr_nigain.dev_attr.attr,
> >> -	&iio_dev_attr_avgain.dev_attr.attr,
> >> -	&iio_dev_attr_bvgain.dev_attr.attr,
> >> -	&iio_dev_attr_cvgain.dev_attr.attr,
> >> -	&iio_dev_attr_linecyc.dev_attr.attr,
> >> -	&iio_dev_attr_sagcyc.dev_attr.attr,
> >> -	&iio_dev_attr_cfcyc.dev_attr.attr,
> >> -	&iio_dev_attr_peakcyc.dev_attr.attr,
> >> -	&iio_dev_attr_chksum.dev_attr.attr,
> >> -	&iio_dev_attr_apparent_power_a_gain.dev_attr.attr,
> >> -	&iio_dev_attr_apparent_power_b_gain.dev_attr.attr,
> >> -	&iio_dev_attr_apparent_power_c_gain.dev_attr.attr,
> >> -	&iio_dev_attr_active_power_a_offset.dev_attr.attr,
> >> -	&iio_dev_attr_active_power_b_offset.dev_attr.attr,
> >> -	&iio_dev_attr_active_power_c_offset.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_a_gain.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_b_gain.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_c_gain.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_a_offset.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_b_offset.dev_attr.attr,
> >> -	&iio_dev_attr_reactive_power_c_offset.dev_attr.attr,
> >> -	&iio_dev_attr_awatthr.dev_attr.attr,
> >> -	&iio_dev_attr_bwatthr.dev_attr.attr,
> >> -	&iio_dev_attr_cwatthr.dev_attr.attr,
> >> -	&iio_dev_attr_afwatthr.dev_attr.attr,
> >> -	&iio_dev_attr_bfwatthr.dev_attr.attr,
> >> -	&iio_dev_attr_cfwatthr.dev_attr.attr,
> >> -	&iio_dev_attr_avarhr.dev_attr.attr,
> >> -	&iio_dev_attr_bvarhr.dev_attr.attr,
> >> -	&iio_dev_attr_cvarhr.dev_attr.attr,
> >> -	&iio_dev_attr_angle0.dev_attr.attr,
> >> -	&iio_dev_attr_angle1.dev_attr.attr,
> >> -	&iio_dev_attr_angle2.dev_attr.attr,
> >> -	&iio_dev_attr_avahr.dev_attr.attr,
> >> -	&iio_dev_attr_bvahr.dev_attr.attr,
> >> -	&iio_dev_attr_cvahr.dev_attr.attr,
> >> -	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
> >> -	&iio_const_attr_name.dev_attr.attr,
> >> -	&iio_dev_attr_vpeak.dev_attr.attr,
> >> -	&iio_dev_attr_ipeak.dev_attr.attr,
> >> -	&iio_dev_attr_aphcal.dev_attr.attr,
> >> -	&iio_dev_attr_bphcal.dev_attr.attr,
> >> -	&iio_dev_attr_cphcal.dev_attr.attr,
> >> -	&iio_dev_attr_cf1den.dev_attr.attr,
> >> -	&iio_dev_attr_cf2den.dev_attr.attr,
> >> -	&iio_dev_attr_cf3den.dev_attr.attr,
> >> -	&iio_dev_attr_airms.dev_attr.attr,
> >> -	&iio_dev_attr_birms.dev_attr.attr,
> >> -	&iio_dev_attr_cirms.dev_attr.attr,
> >> -	&iio_dev_attr_nirms.dev_attr.attr,
> >> -	&iio_dev_attr_avrms.dev_attr.attr,
> >> -	&iio_dev_attr_bvrms.dev_attr.attr,
> >> -	&iio_dev_attr_cvrms.dev_attr.attr,
> >> -	&iio_dev_attr_airmsos.dev_attr.attr,
> >> -	&iio_dev_attr_birmsos.dev_attr.attr,
> >> -	&iio_dev_attr_cirmsos.dev_attr.attr,
> >> -	&iio_dev_attr_avrmsos.dev_attr.attr,
> >> -	&iio_dev_attr_bvrmsos.dev_attr.attr,
> >> -	&iio_dev_attr_cvrmsos.dev_attr.attr,
> >> -	&iio_dev_attr_volt_a.dev_attr.attr,
> >> -	&iio_dev_attr_volt_b.dev_attr.attr,
> >> -	&iio_dev_attr_volt_c.dev_attr.attr,
> >> -	&iio_dev_attr_current_a.dev_attr.attr,
> >> -	&iio_dev_attr_current_b.dev_attr.attr,
> >> -	&iio_dev_attr_current_c.dev_attr.attr,
> >> -	NULL,
> >> -};
> >> -
> >> -static const struct attribute_group ade7854_attribute_group = {
> >> -	.attrs = ade7854_attributes,
> >> -};
> >> -
> >> -static const struct iio_info ade7854_info = {
> >> -	.attrs = &ade7854_attribute_group,
> >> -};
> >> -
> >> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
> >> -{
> >> -	int ret;
> >> -	struct ade7854_state *st = iio_priv(indio_dev);
> >> -	/* setup the industrialio driver allocated elements */
> >> -	mutex_init(&st->buf_lock);
> >> -
> >> -	indio_dev->dev.parent = dev;
> >> -	indio_dev->info = &ade7854_info;
> >> -	indio_dev->modes = INDIO_DIRECT_MODE;
> >> -
> >> -	ret = devm_iio_device_register(dev, indio_dev);
> >> -	if (ret)
> >> -		return ret;
> >> -
> >> -	/* Get the device into a sane initial state */
> >> -	return ade7854_initial_setup(indio_dev);
> >> -}
> >> -EXPORT_SYMBOL(ade7854_probe);
> >> -
> >> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> >> -MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Energy Meter");
> >> -MODULE_LICENSE("GPL v2");
> >> diff --git a/drivers/staging/iio/meter/ade7854.h b/drivers/staging/iio/meter/ade7854.h
> >> deleted file mode 100644
> >> index 7a49f8f1016f..000000000000
> >> --- a/drivers/staging/iio/meter/ade7854.h
> >> +++ /dev/null
> >> @@ -1,173 +0,0 @@
> >> -/* SPDX-License-Identifier: GPL-2.0 */
> >> -#ifndef _ADE7854_H
> >> -#define _ADE7854_H
> >> -
> >> -#define ADE7854_AIGAIN    0x4380
> >> -#define ADE7854_AVGAIN    0x4381
> >> -#define ADE7854_BIGAIN    0x4382
> >> -#define ADE7854_BVGAIN    0x4383
> >> -#define ADE7854_CIGAIN    0x4384
> >> -#define ADE7854_CVGAIN    0x4385
> >> -#define ADE7854_NIGAIN    0x4386
> >> -#define ADE7854_AIRMSOS   0x4387
> >> -#define ADE7854_AVRMSOS   0x4388
> >> -#define ADE7854_BIRMSOS   0x4389
> >> -#define ADE7854_BVRMSOS   0x438A
> >> -#define ADE7854_CIRMSOS   0x438B
> >> -#define ADE7854_CVRMSOS   0x438C
> >> -#define ADE7854_NIRMSOS   0x438D
> >> -#define ADE7854_AVAGAIN   0x438E
> >> -#define ADE7854_BVAGAIN   0x438F
> >> -#define ADE7854_CVAGAIN   0x4390
> >> -#define ADE7854_AWGAIN    0x4391
> >> -#define ADE7854_AWATTOS   0x4392
> >> -#define ADE7854_BWGAIN    0x4393
> >> -#define ADE7854_BWATTOS   0x4394
> >> -#define ADE7854_CWGAIN    0x4395
> >> -#define ADE7854_CWATTOS   0x4396
> >> -#define ADE7854_AVARGAIN  0x4397
> >> -#define ADE7854_AVAROS    0x4398
> >> -#define ADE7854_BVARGAIN  0x4399
> >> -#define ADE7854_BVAROS    0x439A
> >> -#define ADE7854_CVARGAIN  0x439B
> >> -#define ADE7854_CVAROS    0x439C
> >> -#define ADE7854_AFWGAIN   0x439D
> >> -#define ADE7854_AFWATTOS  0x439E
> >> -#define ADE7854_BFWGAIN   0x439F
> >> -#define ADE7854_BFWATTOS  0x43A0
> >> -#define ADE7854_CFWGAIN   0x43A1
> >> -#define ADE7854_CFWATTOS  0x43A2
> >> -#define ADE7854_AFVARGAIN 0x43A3
> >> -#define ADE7854_AFVAROS   0x43A4
> >> -#define ADE7854_BFVARGAIN 0x43A5
> >> -#define ADE7854_BFVAROS   0x43A6
> >> -#define ADE7854_CFVARGAIN 0x43A7
> >> -#define ADE7854_CFVAROS   0x43A8
> >> -#define ADE7854_VATHR1    0x43A9
> >> -#define ADE7854_VATHR0    0x43AA
> >> -#define ADE7854_WTHR1     0x43AB
> >> -#define ADE7854_WTHR0     0x43AC
> >> -#define ADE7854_VARTHR1   0x43AD
> >> -#define ADE7854_VARTHR0   0x43AE
> >> -#define ADE7854_RSV       0x43AF
> >> -#define ADE7854_VANOLOAD  0x43B0
> >> -#define ADE7854_APNOLOAD  0x43B1
> >> -#define ADE7854_VARNOLOAD 0x43B2
> >> -#define ADE7854_VLEVEL    0x43B3
> >> -#define ADE7854_DICOEFF   0x43B5
> >> -#define ADE7854_HPFDIS    0x43B6
> >> -#define ADE7854_ISUMLVL   0x43B8
> >> -#define ADE7854_ISUM      0x43BF
> >> -#define ADE7854_AIRMS     0x43C0
> >> -#define ADE7854_AVRMS     0x43C1
> >> -#define ADE7854_BIRMS     0x43C2
> >> -#define ADE7854_BVRMS     0x43C3
> >> -#define ADE7854_CIRMS     0x43C4
> >> -#define ADE7854_CVRMS     0x43C5
> >> -#define ADE7854_NIRMS     0x43C6
> >> -#define ADE7854_RUN       0xE228
> >> -#define ADE7854_AWATTHR   0xE400
> >> -#define ADE7854_BWATTHR   0xE401
> >> -#define ADE7854_CWATTHR   0xE402
> >> -#define ADE7854_AFWATTHR  0xE403
> >> -#define ADE7854_BFWATTHR  0xE404
> >> -#define ADE7854_CFWATTHR  0xE405
> >> -#define ADE7854_AVARHR    0xE406
> >> -#define ADE7854_BVARHR    0xE407
> >> -#define ADE7854_CVARHR    0xE408
> >> -#define ADE7854_AFVARHR   0xE409
> >> -#define ADE7854_BFVARHR   0xE40A
> >> -#define ADE7854_CFVARHR   0xE40B
> >> -#define ADE7854_AVAHR     0xE40C
> >> -#define ADE7854_BVAHR     0xE40D
> >> -#define ADE7854_CVAHR     0xE40E
> >> -#define ADE7854_IPEAK     0xE500
> >> -#define ADE7854_VPEAK     0xE501
> >> -#define ADE7854_STATUS0   0xE502
> >> -#define ADE7854_STATUS1   0xE503
> >> -#define ADE7854_OILVL     0xE507
> >> -#define ADE7854_OVLVL     0xE508
> >> -#define ADE7854_SAGLVL    0xE509
> >> -#define ADE7854_MASK0     0xE50A
> >> -#define ADE7854_MASK1     0xE50B
> >> -#define ADE7854_IAWV      0xE50C
> >> -#define ADE7854_IBWV      0xE50D
> >> -#define ADE7854_ICWV      0xE50E
> >> -#define ADE7854_VAWV      0xE510
> >> -#define ADE7854_VBWV      0xE511
> >> -#define ADE7854_VCWV      0xE512
> >> -#define ADE7854_AWATT     0xE513
> >> -#define ADE7854_BWATT     0xE514
> >> -#define ADE7854_CWATT     0xE515
> >> -#define ADE7854_AVA       0xE519
> >> -#define ADE7854_BVA       0xE51A
> >> -#define ADE7854_CVA       0xE51B
> >> -#define ADE7854_CHECKSUM  0xE51F
> >> -#define ADE7854_VNOM      0xE520
> >> -#define ADE7854_PHSTATUS  0xE600
> >> -#define ADE7854_ANGLE0    0xE601
> >> -#define ADE7854_ANGLE1    0xE602
> >> -#define ADE7854_ANGLE2    0xE603
> >> -#define ADE7854_PERIOD    0xE607
> >> -#define ADE7854_PHNOLOAD  0xE608
> >> -#define ADE7854_LINECYC   0xE60C
> >> -#define ADE7854_ZXTOUT    0xE60D
> >> -#define ADE7854_COMPMODE  0xE60E
> >> -#define ADE7854_GAIN      0xE60F
> >> -#define ADE7854_CFMODE    0xE610
> >> -#define ADE7854_CF1DEN    0xE611
> >> -#define ADE7854_CF2DEN    0xE612
> >> -#define ADE7854_CF3DEN    0xE613
> >> -#define ADE7854_APHCAL    0xE614
> >> -#define ADE7854_BPHCAL    0xE615
> >> -#define ADE7854_CPHCAL    0xE616
> >> -#define ADE7854_PHSIGN    0xE617
> >> -#define ADE7854_CONFIG    0xE618
> >> -#define ADE7854_MMODE     0xE700
> >> -#define ADE7854_ACCMODE   0xE701
> >> -#define ADE7854_LCYCMODE  0xE702
> >> -#define ADE7854_PEAKCYC   0xE703
> >> -#define ADE7854_SAGCYC    0xE704
> >> -#define ADE7854_CFCYC     0xE705
> >> -#define ADE7854_HSDC_CFG  0xE706
> >> -#define ADE7854_CONFIG2   0xEC01
> >> -
> >> -#define ADE7854_READ_REG   0x1
> >> -#define ADE7854_WRITE_REG  0x0
> >> -
> >> -#define ADE7854_MAX_TX    7
> >> -#define ADE7854_MAX_RX    7
> >> -#define ADE7854_STARTUP_DELAY 1000
> >> -
> >> -#define ADE7854_SPI_SLOW	(u32)(300 * 1000)
> >> -#define ADE7854_SPI_BURST	(u32)(1000 * 1000)
> >> -#define ADE7854_SPI_FAST	(u32)(2000 * 1000)
> >> -
> >> -/**
> >> - * struct ade7854_state - device instance specific data
> >> - * @spi:		actual spi_device
> >> - * @read_reg		Wrapper function for I2C and SPI read
> >> - * @write_reg		Wrapper function for I2C and SPI write
> >> - * @indio_dev:		industrial I/O device structure
> >> - * @buf_lock:		mutex to protect tx and rx
> >> - * @tx:			transmit buffer
> >> - * @rx:			receive buffer
> >> - **/
> >> -struct ade7854_state {
> >> -	struct spi_device *spi;
> >> -	struct i2c_client *i2c;
> >> -	int (*read_reg)(struct device *dev, u16 reg_address, u32 *val,
> >> -			int bits);
> >> -	int (*write_reg)(struct device *dev, u16 reg_address, u32 val,
> >> -			 int bits);
> >> -	int irq;
> >> -	struct mutex buf_lock;
> >> -	u8 tx[ADE7854_MAX_TX] __aligned(IIO_DMA_MINALIGN);
> >> -	u8 rx[ADE7854_MAX_RX];
> >> -
> >> -};
> >> -
> >> -int ade7854_probe(struct iio_dev *indio_dev, struct device *dev);
> >> -int ade7854_remove(struct iio_dev *indio_dev);
> >> -
> >> -#endif
> >> diff --git a/drivers/staging/iio/meter/meter.h b/drivers/staging/iio/meter/meter.h
> >> deleted file mode 100644
> >> index 5ed59bf30a25..000000000000
> >> --- a/drivers/staging/iio/meter/meter.h
> >> +++ /dev/null
> >> @@ -1,398 +0,0 @@
> >> -/* SPDX-License-Identifier: GPL-2.0 */
> >> -#ifndef _METER_H
> >> -#define _METER_H
> >> -
> >> -#include <linux/iio/sysfs.h>
> >> -
> >> -/* metering ic types of attribute */
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_A_OFFSET(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_a_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_B_OFFSET(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_b_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_C_OFFSET(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_c_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_A_OFFSET(_mode, _show, _store, _addr)      \
> >> -	IIO_DEVICE_ATTR(volt_a_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_B_OFFSET(_mode, _show, _store, _addr)      \
> >> -	IIO_DEVICE_ATTR(volt_b_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_C_OFFSET(_mode, _show, _store, _addr)      \
> >> -	IIO_DEVICE_ATTR(volt_c_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(reactive_power_a_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(reactive_power_b_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(reactive_power_c_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(active_power_a_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(active_power_b_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(active_power_c_offset, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_A_GAIN(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_a_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_B_GAIN(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_b_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_C_GAIN(_mode, _show, _store, _addr)	\
> >> -	IIO_DEVICE_ATTR(current_c_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(apparent_power_a_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(apparent_power_b_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(apparent_power_c_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(active_power_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(active_power_a_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(active_power_b_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)   \
> >> -	IIO_DEVICE_ATTR(active_power_c_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(reactive_power_a_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(reactive_power_b_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)     \
> >> -	IIO_DEVICE_ATTR(reactive_power_c_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_A(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(current_a, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_B(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(current_b, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CURRENT_C(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(current_c, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_A(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(volt_a, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_B(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(volt_b, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOLT_C(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(volt_c, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(aenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_LENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(lenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_RAENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(raenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_LAENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(laenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VAENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(vaenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_LVAENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(lvaenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_RVAENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(rvaenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_LVARENERGY(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(lvarenergy, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CHKSUM(_show, _addr)                       \
> >> -	IIO_DEVICE_ATTR(chksum, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ANGLE0(_show, _addr)                       \
> >> -	IIO_DEVICE_ATTR(angle0, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ANGLE1(_show, _addr)                       \
> >> -	IIO_DEVICE_ATTR(angle1, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_ANGLE2(_show, _addr)                       \
> >> -	IIO_DEVICE_ATTR(angle2, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(awatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(bwatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(cwatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AFWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(afwatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BFWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(bfwatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CFWATTHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(cfwatthr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVARHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(avarhr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVARHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(bvarhr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVARHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(cvarhr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVAHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(avahr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVAHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(bvahr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVAHR(_show, _addr)			\
> >> -	IIO_DEVICE_ATTR(cvahr, 0444, _show, NULL, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_IOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(ios, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_PHCAL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(phcal, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_APHCAL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(aphcal, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BPHCAL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bphcal, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CPHCAL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cphcal, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_APOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(apos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AAPOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(aapos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BAPOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bapos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CAPOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(capos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVRMSGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(avrmsgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVRMSGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bvrmsgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVRMSGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cvrmsgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AIGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(aigain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BIGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bigain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CIGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cigain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_NIGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(nigain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(avgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bvgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cvgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_WGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(wgain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_WDIV(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(wdiv, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CFNUM(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cfnum, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CFDEN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cfden, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CF1DEN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cf1den, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CF2DEN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cf2den, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CF3DEN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cf3den, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_IRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(irms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vrms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AIRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(airms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BIRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(birms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CIRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cirms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_NIRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(nirms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(avrms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bvrms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVRMS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cvrms, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_IRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(irmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vrmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AIRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(airmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BIRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(birmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CIRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cirmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_AVRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(avrmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_BVRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(bvrmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CVRMSOS(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cvrmsos, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VAGAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vagain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_PGA_GAIN(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(pga_gain, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VADIV(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vadiv, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_LINECYC(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(linecyc, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_SAGCYC(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(sagcyc, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_CFCYC(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(cfcyc, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_PEAKCYC(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(peakcyc, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_SAGLVL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(saglvl, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_IPKLVL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(ipklvl, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VPKLVL(_mode, _show, _store, _addr)                \
> >> -	IIO_DEVICE_ATTR(vpklvl, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_IPEAK(_mode, _show, _store, _addr)			\
> >> -	IIO_DEVICE_ATTR(ipeak, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_RIPEAK(_mode, _show, _store, _addr)		\
> >> -	IIO_DEVICE_ATTR(ripeak, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VPEAK(_mode, _show, _store, _addr)			\
> >> -	IIO_DEVICE_ATTR(vpeak, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_RVPEAK(_mode, _show, _store, _addr)		\
> >> -	IIO_DEVICE_ATTR(rvpeak, _mode, _show, _store, _addr)
> >> -
> >> -#define IIO_DEV_ATTR_VPERIOD(_mode, _show, _store, _addr)		\
> >> -	IIO_DEVICE_ATTR(vperiod, _mode, _show, _store, _addr)
> >> -
> >> -/* active energy register, AENERGY, is more than half full */
> >> -#define IIO_EVENT_ATTR_AENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(aenergy_half_full, _evlist, _show, _store, _mask)
> >> -
> >> -/* a SAG on the line voltage */
> >> -#define IIO_EVENT_ATTR_LINE_VOLT_SAG(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(line_volt_sag, _evlist, _show, _store, _mask)
> >> -
> >> -/*
> >> - * Indicates the end of energy accumulation over an integer number
> >> - * of half line cycles
> >> - */
> >> -#define IIO_EVENT_ATTR_CYCEND(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(cycend, _evlist, _show, _store, _mask)
> >> -
> >> -/* on the rising and falling edge of the voltage waveform */
> >> -#define IIO_EVENT_ATTR_ZERO_CROSS(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(zero_cross, _evlist, _show, _store, _mask)
> >> -
> >> -/* the active energy register has overflowed */
> >> -#define IIO_EVENT_ATTR_AENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(aenergy_overflow, _evlist, _show, _store, _mask)
> >> -
> >> -/* the apparent energy register has overflowed */
> >> -#define IIO_EVENT_ATTR_VAENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(vaenergy_overflow, _evlist, _show, _store, _mask)
> >> -
> >> -/* the active energy register, VAENERGY, is more than half full */
> >> -#define IIO_EVENT_ATTR_VAENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(vaenergy_half_full, _evlist, _show, _store, _mask)
> >> -
> >> -/* the power has gone from negative to positive */
> >> -#define IIO_EVENT_ATTR_PPOS(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(ppos, _evlist, _show, _store, _mask)
> >> -
> >> -/* the power has gone from positive to negative */
> >> -#define IIO_EVENT_ATTR_PNEG(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(pneg, _evlist, _show, _store, _mask)
> >> -
> >> -/* waveform sample from Channel 1 has exceeded the IPKLVL value */
> >> -#define IIO_EVENT_ATTR_IPKLVL_EXC(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(ipklvl_exc, _evlist, _show, _store, _mask)
> >> -
> >> -/* waveform sample from Channel 2 has exceeded the VPKLVL value */
> >> -#define IIO_EVENT_ATTR_VPKLVL_EXC(_evlist, _show, _store, _mask) \
> >> -	IIO_EVENT_ATTR_SH(vpklvl_exc, _evlist, _show, _store, _mask)
> >> -
> >> -#endif /* _METER_H */  
> 
>
diff mbox series

Patch

diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
index afd05bf3345e..d3968fe2ebb8 100644
--- a/drivers/staging/iio/Kconfig
+++ b/drivers/staging/iio/Kconfig
@@ -10,7 +10,6 @@  source "drivers/staging/iio/adc/Kconfig"
 source "drivers/staging/iio/addac/Kconfig"
 source "drivers/staging/iio/frequency/Kconfig"
 source "drivers/staging/iio/impedance-analyzer/Kconfig"
-source "drivers/staging/iio/meter/Kconfig"
 source "drivers/staging/iio/resolver/Kconfig"
 
 endmenu
diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile
index 5ed56fe57e14..c50f1019f829 100644
--- a/drivers/staging/iio/Makefile
+++ b/drivers/staging/iio/Makefile
@@ -8,5 +8,4 @@  obj-y += adc/
 obj-y += addac/
 obj-y += frequency/
 obj-y += impedance-analyzer/
-obj-y += meter/
 obj-y += resolver/
diff --git a/drivers/staging/iio/meter/Kconfig b/drivers/staging/iio/meter/Kconfig
deleted file mode 100644
index aa6a3e7f6cdb..000000000000
--- a/drivers/staging/iio/meter/Kconfig
+++ /dev/null
@@ -1,37 +0,0 @@ 
-# SPDX-License-Identifier: GPL-2.0
-#
-# IIO meter drivers configuration
-#
-menu "Active energy metering IC"
-
-config ADE7854
-	tristate "Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver"
-	depends on SPI || I2C
-	help
-	  Say yes here to build support for Analog Devices ADE7854/58/68/78 Polyphase
-	  Multifunction Energy Metering IC Driver.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called ade7854.
-
-config ADE7854_I2C
-	tristate "support I2C bus connection"
-	depends on ADE7854 && I2C
-	default y
-	help
-	  Say Y here if you have ADE7854/58/68/78 hooked to an I2C bus.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called ade7854-i2c.
-
-config ADE7854_SPI
-	tristate "support SPI bus connection"
-	depends on ADE7854 && SPI
-	default y
-	help
-	  Say Y here if you have ADE7854/58/68/78 hooked to a SPI bus.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called ade7854-spi.
-
-endmenu
diff --git a/drivers/staging/iio/meter/Makefile b/drivers/staging/iio/meter/Makefile
deleted file mode 100644
index ed4547e38f3a..000000000000
--- a/drivers/staging/iio/meter/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@ 
-# SPDX-License-Identifier: GPL-2.0
-#
-# Makefile for metering ic drivers
-#
-
-obj-$(CONFIG_ADE7854) += ade7854.o
-obj-$(CONFIG_ADE7854_I2C) += ade7854-i2c.o
-obj-$(CONFIG_ADE7854_SPI) += ade7854-spi.o
diff --git a/drivers/staging/iio/meter/ade7854-i2c.c b/drivers/staging/iio/meter/ade7854-i2c.c
deleted file mode 100644
index 572d714eb0dd..000000000000
--- a/drivers/staging/iio/meter/ade7854-i2c.c
+++ /dev/null
@@ -1,153 +0,0 @@ 
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (I2C Bus)
- *
- * Copyright 2010 Analog Devices Inc.
- */
-
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/i2c.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-
-#include <linux/iio/iio.h>
-#include "ade7854.h"
-
-static int ade7854_i2c_write_reg(struct device *dev,
-				 u16 reg_address,
-				 u32 val,
-				 int bits)
-{
-	int ret;
-	int count;
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = (reg_address >> 8) & 0xFF;
-	st->tx[1] = reg_address & 0xFF;
-
-	switch (bits) {
-	case 8:
-		st->tx[2] = val & 0xFF;
-		count = 3;
-		break;
-	case 16:
-		st->tx[2] = (val >> 8) & 0xFF;
-		st->tx[3] = val & 0xFF;
-		count = 4;
-		break;
-	case 24:
-		st->tx[2] = (val >> 16) & 0xFF;
-		st->tx[3] = (val >> 8) & 0xFF;
-		st->tx[4] = val & 0xFF;
-		count = 5;
-		break;
-	case 32:
-		st->tx[2] = (val >> 24) & 0xFF;
-		st->tx[3] = (val >> 16) & 0xFF;
-		st->tx[4] = (val >> 8) & 0xFF;
-		st->tx[5] = val & 0xFF;
-		count = 6;
-		break;
-	default:
-		ret = -EINVAL;
-		goto unlock;
-	}
-
-	ret = i2c_master_send(st->i2c, st->tx, count);
-
-unlock:
-	mutex_unlock(&st->buf_lock);
-
-	if (ret < 0)
-		return ret;
-
-	return 0;
-}
-
-static int ade7854_i2c_read_reg(struct device *dev,
-				u16 reg_address,
-				u32 *val,
-				int bits)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	int ret;
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = (reg_address >> 8) & 0xFF;
-	st->tx[1] = reg_address & 0xFF;
-
-	ret = i2c_master_send(st->i2c, st->tx, 2);
-	if (ret < 0)
-		goto unlock;
-
-	ret = i2c_master_recv(st->i2c, st->rx, bits);
-	if (ret < 0)
-		goto unlock;
-
-	switch (bits) {
-	case 8:
-		*val = st->rx[0];
-		break;
-	case 16:
-		*val = (st->rx[0] << 8) | st->rx[1];
-		break;
-	case 24:
-		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
-		break;
-	case 32:
-		*val = (st->rx[0] << 24) | (st->rx[1] << 16) |
-			(st->rx[2] << 8) | st->rx[3];
-		break;
-	default:
-		ret = -EINVAL;
-		goto unlock;
-	}
-
-unlock:
-	mutex_unlock(&st->buf_lock);
-	return ret;
-}
-
-static int ade7854_i2c_probe(struct i2c_client *client)
-{
-	struct ade7854_state *st;
-	struct iio_dev *indio_dev;
-
-	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st));
-	if (!indio_dev)
-		return -ENOMEM;
-	st = iio_priv(indio_dev);
-	i2c_set_clientdata(client, indio_dev);
-	st->read_reg = ade7854_i2c_read_reg;
-	st->write_reg = ade7854_i2c_write_reg;
-	st->i2c = client;
-	st->irq = client->irq;
-
-	return ade7854_probe(indio_dev, &client->dev);
-}
-
-static const struct i2c_device_id ade7854_id[] = {
-	{ "ade7854", 0 },
-	{ "ade7858", 0 },
-	{ "ade7868", 0 },
-	{ "ade7878", 0 },
-	{ }
-};
-MODULE_DEVICE_TABLE(i2c, ade7854_id);
-
-static struct i2c_driver ade7854_i2c_driver = {
-	.driver = {
-		.name = "ade7854",
-	},
-	.probe_new = ade7854_i2c_probe,
-	.id_table = ade7854_id,
-};
-module_i2c_driver(ade7854_i2c_driver);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC I2C Driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/iio/meter/ade7854-spi.c b/drivers/staging/iio/meter/ade7854-spi.c
deleted file mode 100644
index f12a6c8b3e88..000000000000
--- a/drivers/staging/iio/meter/ade7854-spi.c
+++ /dev/null
@@ -1,160 +0,0 @@ 
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver (SPI Bus)
- *
- * Copyright 2010 Analog Devices Inc.
- */
-
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/spi/spi.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-
-#include <linux/iio/iio.h>
-#include "ade7854.h"
-
-static int ade7854_spi_write_reg(struct device *dev,
-				 u16 reg_address,
-				 u32 val,
-				 int bits)
-{
-	int ret;
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	struct spi_transfer xfer = {
-		.tx_buf = st->tx,
-		.bits_per_word = 8,
-		.len = 4,
-	};
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADE7854_WRITE_REG;
-	st->tx[1] = (reg_address >> 8) & 0xFF;
-	st->tx[2] = reg_address & 0xFF;
-	switch (bits) {
-	case 8:
-		st->tx[3] = val & 0xFF;
-		break;
-	case 16:
-		xfer.len = 5;
-		st->tx[3] = (val >> 8) & 0xFF;
-		st->tx[4] = val & 0xFF;
-		break;
-	case 24:
-		xfer.len = 6;
-		st->tx[3] = (val >> 16) & 0xFF;
-		st->tx[4] = (val >> 8) & 0xFF;
-		st->tx[5] = val & 0xFF;
-		break;
-	case 32:
-		xfer.len = 7;
-		st->tx[3] = (val >> 24) & 0xFF;
-		st->tx[4] = (val >> 16) & 0xFF;
-		st->tx[5] = (val >> 8) & 0xFF;
-		st->tx[6] = val & 0xFF;
-		break;
-	default:
-		ret = -EINVAL;
-		goto unlock;
-	}
-
-	ret = spi_sync_transfer(st->spi, &xfer, 1);
-unlock:
-	mutex_unlock(&st->buf_lock);
-
-	return ret;
-}
-
-static int ade7854_spi_read_reg(struct device *dev,
-				u16 reg_address,
-				u32 *val,
-				int bits)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	int ret;
-	struct spi_transfer xfers[] = {
-		{
-			.tx_buf = st->tx,
-			.bits_per_word = 8,
-			.len = 3,
-		}, {
-			.rx_buf = st->rx,
-			.bits_per_word = 8,
-			.len = bits,
-		}
-	};
-
-	mutex_lock(&st->buf_lock);
-
-	st->tx[0] = ADE7854_READ_REG;
-	st->tx[1] = (reg_address >> 8) & 0xFF;
-	st->tx[2] = reg_address & 0xFF;
-
-	ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
-	if (ret < 0) {
-		dev_err(&st->spi->dev, "problem when reading register 0x%02X",
-			reg_address);
-		goto unlock;
-	}
-
-	switch (bits) {
-	case 8:
-		*val = st->rx[0];
-		break;
-	case 16:
-		*val = be16_to_cpup((const __be16 *)st->rx);
-		break;
-	case 24:
-		*val = (st->rx[0] << 16) | (st->rx[1] << 8) | st->rx[2];
-		break;
-	case 32:
-		*val = be32_to_cpup((const __be32 *)st->rx);
-		break;
-	}
-
-unlock:
-	mutex_unlock(&st->buf_lock);
-	return ret;
-}
-
-static int ade7854_spi_probe(struct spi_device *spi)
-{
-	struct ade7854_state *st;
-	struct iio_dev *indio_dev;
-
-	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
-	if (!indio_dev)
-		return -ENOMEM;
-	st = iio_priv(indio_dev);
-	spi_set_drvdata(spi, indio_dev);
-	st->read_reg = ade7854_spi_read_reg;
-	st->write_reg = ade7854_spi_write_reg;
-	st->irq = spi->irq;
-	st->spi = spi;
-
-	return ade7854_probe(indio_dev, &spi->dev);
-}
-
-static const struct spi_device_id ade7854_id[] = {
-	{ "ade7854", 0 },
-	{ "ade7858", 0 },
-	{ "ade7868", 0 },
-	{ "ade7878", 0 },
-	{ }
-};
-MODULE_DEVICE_TABLE(spi, ade7854_id);
-
-static struct spi_driver ade7854_driver = {
-	.driver = {
-		.name = "ade7854",
-	},
-	.probe = ade7854_spi_probe,
-	.id_table = ade7854_id,
-};
-module_spi_driver(ade7854_driver);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 SPI Driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/iio/meter/ade7854.c b/drivers/staging/iio/meter/ade7854.c
deleted file mode 100644
index 68da6ecde6a3..000000000000
--- a/drivers/staging/iio/meter/ade7854.c
+++ /dev/null
@@ -1,556 +0,0 @@ 
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * ADE7854/58/68/78 Polyphase Multifunction Energy Metering IC Driver
- *
- * Copyright 2010 Analog Devices Inc.
- */
-
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/delay.h>
-#include <linux/mutex.h>
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/slab.h>
-#include <linux/sysfs.h>
-#include <linux/list.h>
-#include <linux/module.h>
-
-#include <linux/iio/iio.h>
-#include <linux/iio/sysfs.h>
-#include "meter.h"
-#include "ade7854.h"
-
-static ssize_t ade7854_read_8bit(struct device *dev,
-				 struct device_attribute *attr,
-				 char *buf)
-{
-	int ret;
-	u32 val = 0;
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-
-	ret = st->read_reg(dev, this_attr->address, &val, 8);
-	if (ret < 0)
-		return ret;
-
-	return sprintf(buf, "%u\n", val);
-}
-
-static ssize_t ade7854_read_16bit(struct device *dev,
-				  struct device_attribute *attr,
-				  char *buf)
-{
-	int ret;
-	u32 val = 0;
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-
-	ret = st->read_reg(dev, this_attr->address, &val, 16);
-	if (ret < 0)
-		return ret;
-
-	return sprintf(buf, "%u\n", val);
-}
-
-static ssize_t ade7854_read_24bit(struct device *dev,
-				  struct device_attribute *attr,
-				  char *buf)
-{
-	int ret;
-	u32 val;
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-
-	ret = st->read_reg(dev, this_attr->address, &val, 24);
-	if (ret < 0)
-		return ret;
-
-	return sprintf(buf, "%u\n", val);
-}
-
-static ssize_t ade7854_read_32bit(struct device *dev,
-				  struct device_attribute *attr,
-				  char *buf)
-{
-	int ret;
-	u32 val = 0;
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	ret = st->read_reg(dev, this_attr->address, &val, 32);
-	if (ret < 0)
-		return ret;
-
-	return sprintf(buf, "%u\n", val);
-}
-
-static ssize_t ade7854_write_8bit(struct device *dev,
-				  struct device_attribute *attr,
-				  const char *buf,
-				  size_t len)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	int ret;
-	u8 val;
-
-	ret = kstrtou8(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = st->write_reg(dev, this_attr->address, val, 8);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static ssize_t ade7854_write_16bit(struct device *dev,
-				   struct device_attribute *attr,
-				   const char *buf,
-				   size_t len)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	int ret;
-	u16 val;
-
-	ret = kstrtou16(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = st->write_reg(dev, this_attr->address, val, 16);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static ssize_t ade7854_write_24bit(struct device *dev,
-				   struct device_attribute *attr,
-				   const char *buf,
-				   size_t len)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	int ret;
-	u32 val;
-
-	ret = kstrtou32(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = st->write_reg(dev, this_attr->address, val, 24);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static ssize_t ade7854_write_32bit(struct device *dev,
-				   struct device_attribute *attr,
-				   const char *buf,
-				   size_t len)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	int ret;
-	u32 val;
-
-	ret = kstrtou32(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = st->write_reg(dev, this_attr->address, val, 32);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static int ade7854_reset(struct device *dev)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-	u32 val;
-
-	st->read_reg(dev, ADE7854_CONFIG, &val, 16);
-	val |= BIT(7); /* Software Chip Reset */
-
-	return st->write_reg(dev, ADE7854_CONFIG, val, 16);
-}
-
-static IIO_DEV_ATTR_AIGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AIGAIN);
-static IIO_DEV_ATTR_BIGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BIGAIN);
-static IIO_DEV_ATTR_CIGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CIGAIN);
-static IIO_DEV_ATTR_NIGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_NIGAIN);
-static IIO_DEV_ATTR_AVGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AVGAIN);
-static IIO_DEV_ATTR_BVGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BVGAIN);
-static IIO_DEV_ATTR_CVGAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CVGAIN);
-static IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AVAGAIN);
-static IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BVAGAIN);
-static IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CVAGAIN);
-static IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AWATTOS);
-static IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BWATTOS);
-static IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CWATTOS);
-static IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AVARGAIN);
-static IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BVARGAIN);
-static IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CVARGAIN);
-static IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_AVAROS);
-static IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_BVAROS);
-static IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(0644,
-		ade7854_read_24bit,
-		ade7854_write_24bit,
-		ADE7854_CVAROS);
-static IIO_DEV_ATTR_VPEAK(0644,
-		ade7854_read_32bit,
-		ade7854_write_32bit,
-		ADE7854_VPEAK);
-static IIO_DEV_ATTR_IPEAK(0644,
-		ade7854_read_32bit,
-		ade7854_write_32bit,
-		ADE7854_IPEAK);
-static IIO_DEV_ATTR_APHCAL(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_APHCAL);
-static IIO_DEV_ATTR_BPHCAL(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_BPHCAL);
-static IIO_DEV_ATTR_CPHCAL(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CPHCAL);
-static IIO_DEV_ATTR_CF1DEN(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CF1DEN);
-static IIO_DEV_ATTR_CF2DEN(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CF2DEN);
-static IIO_DEV_ATTR_CF3DEN(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CF3DEN);
-static IIO_DEV_ATTR_LINECYC(0644,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_LINECYC);
-static IIO_DEV_ATTR_SAGCYC(0644,
-		ade7854_read_8bit,
-		ade7854_write_8bit,
-		ADE7854_SAGCYC);
-static IIO_DEV_ATTR_CFCYC(0644,
-		ade7854_read_8bit,
-		ade7854_write_8bit,
-		ADE7854_CFCYC);
-static IIO_DEV_ATTR_PEAKCYC(0644,
-		ade7854_read_8bit,
-		ade7854_write_8bit,
-		ADE7854_PEAKCYC);
-static IIO_DEV_ATTR_CHKSUM(ade7854_read_24bit,
-		ADE7854_CHECKSUM);
-static IIO_DEV_ATTR_ANGLE0(ade7854_read_24bit,
-		ADE7854_ANGLE0);
-static IIO_DEV_ATTR_ANGLE1(ade7854_read_24bit,
-		ADE7854_ANGLE1);
-static IIO_DEV_ATTR_ANGLE2(ade7854_read_24bit,
-		ADE7854_ANGLE2);
-static IIO_DEV_ATTR_AIRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_AIRMS);
-static IIO_DEV_ATTR_BIRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_BIRMS);
-static IIO_DEV_ATTR_CIRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_CIRMS);
-static IIO_DEV_ATTR_NIRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_NIRMS);
-static IIO_DEV_ATTR_AVRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_AVRMS);
-static IIO_DEV_ATTR_BVRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_BVRMS);
-static IIO_DEV_ATTR_CVRMS(0444,
-		ade7854_read_24bit,
-		NULL,
-		ADE7854_CVRMS);
-static IIO_DEV_ATTR_AIRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_AIRMSOS);
-static IIO_DEV_ATTR_BIRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_BIRMSOS);
-static IIO_DEV_ATTR_CIRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CIRMSOS);
-static IIO_DEV_ATTR_AVRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_AVRMSOS);
-static IIO_DEV_ATTR_BVRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_BVRMSOS);
-static IIO_DEV_ATTR_CVRMSOS(0444,
-		ade7854_read_16bit,
-		ade7854_write_16bit,
-		ADE7854_CVRMSOS);
-static IIO_DEV_ATTR_VOLT_A(ade7854_read_24bit,
-		ADE7854_VAWV);
-static IIO_DEV_ATTR_VOLT_B(ade7854_read_24bit,
-		ADE7854_VBWV);
-static IIO_DEV_ATTR_VOLT_C(ade7854_read_24bit,
-		ADE7854_VCWV);
-static IIO_DEV_ATTR_CURRENT_A(ade7854_read_24bit,
-		ADE7854_IAWV);
-static IIO_DEV_ATTR_CURRENT_B(ade7854_read_24bit,
-		ADE7854_IBWV);
-static IIO_DEV_ATTR_CURRENT_C(ade7854_read_24bit,
-		ADE7854_ICWV);
-static IIO_DEV_ATTR_AWATTHR(ade7854_read_32bit,
-		ADE7854_AWATTHR);
-static IIO_DEV_ATTR_BWATTHR(ade7854_read_32bit,
-		ADE7854_BWATTHR);
-static IIO_DEV_ATTR_CWATTHR(ade7854_read_32bit,
-		ADE7854_CWATTHR);
-static IIO_DEV_ATTR_AFWATTHR(ade7854_read_32bit,
-		ADE7854_AFWATTHR);
-static IIO_DEV_ATTR_BFWATTHR(ade7854_read_32bit,
-		ADE7854_BFWATTHR);
-static IIO_DEV_ATTR_CFWATTHR(ade7854_read_32bit,
-		ADE7854_CFWATTHR);
-static IIO_DEV_ATTR_AVARHR(ade7854_read_32bit,
-		ADE7854_AVARHR);
-static IIO_DEV_ATTR_BVARHR(ade7854_read_32bit,
-		ADE7854_BVARHR);
-static IIO_DEV_ATTR_CVARHR(ade7854_read_32bit,
-		ADE7854_CVARHR);
-static IIO_DEV_ATTR_AVAHR(ade7854_read_32bit,
-		ADE7854_AVAHR);
-static IIO_DEV_ATTR_BVAHR(ade7854_read_32bit,
-		ADE7854_BVAHR);
-static IIO_DEV_ATTR_CVAHR(ade7854_read_32bit,
-		ADE7854_CVAHR);
-
-static int ade7854_set_irq(struct device *dev, bool enable)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct ade7854_state *st = iio_priv(indio_dev);
-
-	int ret;
-	u32 irqen;
-
-	ret = st->read_reg(dev, ADE7854_MASK0, &irqen, 32);
-	if (ret < 0)
-		return ret;
-
-	if (enable)
-		irqen |= BIT(17); /* 1: interrupt enabled when all periodical
-				   * (at 8 kHz rate) DSP computations finish.
-				   */
-	else
-		irqen &= ~BIT(17);
-
-	return st->write_reg(dev, ADE7854_MASK0, irqen, 32);
-}
-
-static int ade7854_initial_setup(struct iio_dev *indio_dev)
-{
-	int ret;
-	struct device *dev = &indio_dev->dev;
-
-	/* Disable IRQ */
-	ret = ade7854_set_irq(dev, false);
-	if (ret) {
-		dev_err(dev, "disable irq failed");
-		goto err_ret;
-	}
-
-	ade7854_reset(dev);
-	usleep_range(ADE7854_STARTUP_DELAY, ADE7854_STARTUP_DELAY + 100);
-
-err_ret:
-	return ret;
-}
-
-static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("8000");
-
-static IIO_CONST_ATTR(name, "ade7854");
-
-static struct attribute *ade7854_attributes[] = {
-	&iio_dev_attr_aigain.dev_attr.attr,
-	&iio_dev_attr_bigain.dev_attr.attr,
-	&iio_dev_attr_cigain.dev_attr.attr,
-	&iio_dev_attr_nigain.dev_attr.attr,
-	&iio_dev_attr_avgain.dev_attr.attr,
-	&iio_dev_attr_bvgain.dev_attr.attr,
-	&iio_dev_attr_cvgain.dev_attr.attr,
-	&iio_dev_attr_linecyc.dev_attr.attr,
-	&iio_dev_attr_sagcyc.dev_attr.attr,
-	&iio_dev_attr_cfcyc.dev_attr.attr,
-	&iio_dev_attr_peakcyc.dev_attr.attr,
-	&iio_dev_attr_chksum.dev_attr.attr,
-	&iio_dev_attr_apparent_power_a_gain.dev_attr.attr,
-	&iio_dev_attr_apparent_power_b_gain.dev_attr.attr,
-	&iio_dev_attr_apparent_power_c_gain.dev_attr.attr,
-	&iio_dev_attr_active_power_a_offset.dev_attr.attr,
-	&iio_dev_attr_active_power_b_offset.dev_attr.attr,
-	&iio_dev_attr_active_power_c_offset.dev_attr.attr,
-	&iio_dev_attr_reactive_power_a_gain.dev_attr.attr,
-	&iio_dev_attr_reactive_power_b_gain.dev_attr.attr,
-	&iio_dev_attr_reactive_power_c_gain.dev_attr.attr,
-	&iio_dev_attr_reactive_power_a_offset.dev_attr.attr,
-	&iio_dev_attr_reactive_power_b_offset.dev_attr.attr,
-	&iio_dev_attr_reactive_power_c_offset.dev_attr.attr,
-	&iio_dev_attr_awatthr.dev_attr.attr,
-	&iio_dev_attr_bwatthr.dev_attr.attr,
-	&iio_dev_attr_cwatthr.dev_attr.attr,
-	&iio_dev_attr_afwatthr.dev_attr.attr,
-	&iio_dev_attr_bfwatthr.dev_attr.attr,
-	&iio_dev_attr_cfwatthr.dev_attr.attr,
-	&iio_dev_attr_avarhr.dev_attr.attr,
-	&iio_dev_attr_bvarhr.dev_attr.attr,
-	&iio_dev_attr_cvarhr.dev_attr.attr,
-	&iio_dev_attr_angle0.dev_attr.attr,
-	&iio_dev_attr_angle1.dev_attr.attr,
-	&iio_dev_attr_angle2.dev_attr.attr,
-	&iio_dev_attr_avahr.dev_attr.attr,
-	&iio_dev_attr_bvahr.dev_attr.attr,
-	&iio_dev_attr_cvahr.dev_attr.attr,
-	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
-	&iio_const_attr_name.dev_attr.attr,
-	&iio_dev_attr_vpeak.dev_attr.attr,
-	&iio_dev_attr_ipeak.dev_attr.attr,
-	&iio_dev_attr_aphcal.dev_attr.attr,
-	&iio_dev_attr_bphcal.dev_attr.attr,
-	&iio_dev_attr_cphcal.dev_attr.attr,
-	&iio_dev_attr_cf1den.dev_attr.attr,
-	&iio_dev_attr_cf2den.dev_attr.attr,
-	&iio_dev_attr_cf3den.dev_attr.attr,
-	&iio_dev_attr_airms.dev_attr.attr,
-	&iio_dev_attr_birms.dev_attr.attr,
-	&iio_dev_attr_cirms.dev_attr.attr,
-	&iio_dev_attr_nirms.dev_attr.attr,
-	&iio_dev_attr_avrms.dev_attr.attr,
-	&iio_dev_attr_bvrms.dev_attr.attr,
-	&iio_dev_attr_cvrms.dev_attr.attr,
-	&iio_dev_attr_airmsos.dev_attr.attr,
-	&iio_dev_attr_birmsos.dev_attr.attr,
-	&iio_dev_attr_cirmsos.dev_attr.attr,
-	&iio_dev_attr_avrmsos.dev_attr.attr,
-	&iio_dev_attr_bvrmsos.dev_attr.attr,
-	&iio_dev_attr_cvrmsos.dev_attr.attr,
-	&iio_dev_attr_volt_a.dev_attr.attr,
-	&iio_dev_attr_volt_b.dev_attr.attr,
-	&iio_dev_attr_volt_c.dev_attr.attr,
-	&iio_dev_attr_current_a.dev_attr.attr,
-	&iio_dev_attr_current_b.dev_attr.attr,
-	&iio_dev_attr_current_c.dev_attr.attr,
-	NULL,
-};
-
-static const struct attribute_group ade7854_attribute_group = {
-	.attrs = ade7854_attributes,
-};
-
-static const struct iio_info ade7854_info = {
-	.attrs = &ade7854_attribute_group,
-};
-
-int ade7854_probe(struct iio_dev *indio_dev, struct device *dev)
-{
-	int ret;
-	struct ade7854_state *st = iio_priv(indio_dev);
-	/* setup the industrialio driver allocated elements */
-	mutex_init(&st->buf_lock);
-
-	indio_dev->dev.parent = dev;
-	indio_dev->info = &ade7854_info;
-	indio_dev->modes = INDIO_DIRECT_MODE;
-
-	ret = devm_iio_device_register(dev, indio_dev);
-	if (ret)
-		return ret;
-
-	/* Get the device into a sane initial state */
-	return ade7854_initial_setup(indio_dev);
-}
-EXPORT_SYMBOL(ade7854_probe);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADE7854/58/68/78 Polyphase Energy Meter");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/iio/meter/ade7854.h b/drivers/staging/iio/meter/ade7854.h
deleted file mode 100644
index 7a49f8f1016f..000000000000
--- a/drivers/staging/iio/meter/ade7854.h
+++ /dev/null
@@ -1,173 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ADE7854_H
-#define _ADE7854_H
-
-#define ADE7854_AIGAIN    0x4380
-#define ADE7854_AVGAIN    0x4381
-#define ADE7854_BIGAIN    0x4382
-#define ADE7854_BVGAIN    0x4383
-#define ADE7854_CIGAIN    0x4384
-#define ADE7854_CVGAIN    0x4385
-#define ADE7854_NIGAIN    0x4386
-#define ADE7854_AIRMSOS   0x4387
-#define ADE7854_AVRMSOS   0x4388
-#define ADE7854_BIRMSOS   0x4389
-#define ADE7854_BVRMSOS   0x438A
-#define ADE7854_CIRMSOS   0x438B
-#define ADE7854_CVRMSOS   0x438C
-#define ADE7854_NIRMSOS   0x438D
-#define ADE7854_AVAGAIN   0x438E
-#define ADE7854_BVAGAIN   0x438F
-#define ADE7854_CVAGAIN   0x4390
-#define ADE7854_AWGAIN    0x4391
-#define ADE7854_AWATTOS   0x4392
-#define ADE7854_BWGAIN    0x4393
-#define ADE7854_BWATTOS   0x4394
-#define ADE7854_CWGAIN    0x4395
-#define ADE7854_CWATTOS   0x4396
-#define ADE7854_AVARGAIN  0x4397
-#define ADE7854_AVAROS    0x4398
-#define ADE7854_BVARGAIN  0x4399
-#define ADE7854_BVAROS    0x439A
-#define ADE7854_CVARGAIN  0x439B
-#define ADE7854_CVAROS    0x439C
-#define ADE7854_AFWGAIN   0x439D
-#define ADE7854_AFWATTOS  0x439E
-#define ADE7854_BFWGAIN   0x439F
-#define ADE7854_BFWATTOS  0x43A0
-#define ADE7854_CFWGAIN   0x43A1
-#define ADE7854_CFWATTOS  0x43A2
-#define ADE7854_AFVARGAIN 0x43A3
-#define ADE7854_AFVAROS   0x43A4
-#define ADE7854_BFVARGAIN 0x43A5
-#define ADE7854_BFVAROS   0x43A6
-#define ADE7854_CFVARGAIN 0x43A7
-#define ADE7854_CFVAROS   0x43A8
-#define ADE7854_VATHR1    0x43A9
-#define ADE7854_VATHR0    0x43AA
-#define ADE7854_WTHR1     0x43AB
-#define ADE7854_WTHR0     0x43AC
-#define ADE7854_VARTHR1   0x43AD
-#define ADE7854_VARTHR0   0x43AE
-#define ADE7854_RSV       0x43AF
-#define ADE7854_VANOLOAD  0x43B0
-#define ADE7854_APNOLOAD  0x43B1
-#define ADE7854_VARNOLOAD 0x43B2
-#define ADE7854_VLEVEL    0x43B3
-#define ADE7854_DICOEFF   0x43B5
-#define ADE7854_HPFDIS    0x43B6
-#define ADE7854_ISUMLVL   0x43B8
-#define ADE7854_ISUM      0x43BF
-#define ADE7854_AIRMS     0x43C0
-#define ADE7854_AVRMS     0x43C1
-#define ADE7854_BIRMS     0x43C2
-#define ADE7854_BVRMS     0x43C3
-#define ADE7854_CIRMS     0x43C4
-#define ADE7854_CVRMS     0x43C5
-#define ADE7854_NIRMS     0x43C6
-#define ADE7854_RUN       0xE228
-#define ADE7854_AWATTHR   0xE400
-#define ADE7854_BWATTHR   0xE401
-#define ADE7854_CWATTHR   0xE402
-#define ADE7854_AFWATTHR  0xE403
-#define ADE7854_BFWATTHR  0xE404
-#define ADE7854_CFWATTHR  0xE405
-#define ADE7854_AVARHR    0xE406
-#define ADE7854_BVARHR    0xE407
-#define ADE7854_CVARHR    0xE408
-#define ADE7854_AFVARHR   0xE409
-#define ADE7854_BFVARHR   0xE40A
-#define ADE7854_CFVARHR   0xE40B
-#define ADE7854_AVAHR     0xE40C
-#define ADE7854_BVAHR     0xE40D
-#define ADE7854_CVAHR     0xE40E
-#define ADE7854_IPEAK     0xE500
-#define ADE7854_VPEAK     0xE501
-#define ADE7854_STATUS0   0xE502
-#define ADE7854_STATUS1   0xE503
-#define ADE7854_OILVL     0xE507
-#define ADE7854_OVLVL     0xE508
-#define ADE7854_SAGLVL    0xE509
-#define ADE7854_MASK0     0xE50A
-#define ADE7854_MASK1     0xE50B
-#define ADE7854_IAWV      0xE50C
-#define ADE7854_IBWV      0xE50D
-#define ADE7854_ICWV      0xE50E
-#define ADE7854_VAWV      0xE510
-#define ADE7854_VBWV      0xE511
-#define ADE7854_VCWV      0xE512
-#define ADE7854_AWATT     0xE513
-#define ADE7854_BWATT     0xE514
-#define ADE7854_CWATT     0xE515
-#define ADE7854_AVA       0xE519
-#define ADE7854_BVA       0xE51A
-#define ADE7854_CVA       0xE51B
-#define ADE7854_CHECKSUM  0xE51F
-#define ADE7854_VNOM      0xE520
-#define ADE7854_PHSTATUS  0xE600
-#define ADE7854_ANGLE0    0xE601
-#define ADE7854_ANGLE1    0xE602
-#define ADE7854_ANGLE2    0xE603
-#define ADE7854_PERIOD    0xE607
-#define ADE7854_PHNOLOAD  0xE608
-#define ADE7854_LINECYC   0xE60C
-#define ADE7854_ZXTOUT    0xE60D
-#define ADE7854_COMPMODE  0xE60E
-#define ADE7854_GAIN      0xE60F
-#define ADE7854_CFMODE    0xE610
-#define ADE7854_CF1DEN    0xE611
-#define ADE7854_CF2DEN    0xE612
-#define ADE7854_CF3DEN    0xE613
-#define ADE7854_APHCAL    0xE614
-#define ADE7854_BPHCAL    0xE615
-#define ADE7854_CPHCAL    0xE616
-#define ADE7854_PHSIGN    0xE617
-#define ADE7854_CONFIG    0xE618
-#define ADE7854_MMODE     0xE700
-#define ADE7854_ACCMODE   0xE701
-#define ADE7854_LCYCMODE  0xE702
-#define ADE7854_PEAKCYC   0xE703
-#define ADE7854_SAGCYC    0xE704
-#define ADE7854_CFCYC     0xE705
-#define ADE7854_HSDC_CFG  0xE706
-#define ADE7854_CONFIG2   0xEC01
-
-#define ADE7854_READ_REG   0x1
-#define ADE7854_WRITE_REG  0x0
-
-#define ADE7854_MAX_TX    7
-#define ADE7854_MAX_RX    7
-#define ADE7854_STARTUP_DELAY 1000
-
-#define ADE7854_SPI_SLOW	(u32)(300 * 1000)
-#define ADE7854_SPI_BURST	(u32)(1000 * 1000)
-#define ADE7854_SPI_FAST	(u32)(2000 * 1000)
-
-/**
- * struct ade7854_state - device instance specific data
- * @spi:		actual spi_device
- * @read_reg		Wrapper function for I2C and SPI read
- * @write_reg		Wrapper function for I2C and SPI write
- * @indio_dev:		industrial I/O device structure
- * @buf_lock:		mutex to protect tx and rx
- * @tx:			transmit buffer
- * @rx:			receive buffer
- **/
-struct ade7854_state {
-	struct spi_device *spi;
-	struct i2c_client *i2c;
-	int (*read_reg)(struct device *dev, u16 reg_address, u32 *val,
-			int bits);
-	int (*write_reg)(struct device *dev, u16 reg_address, u32 val,
-			 int bits);
-	int irq;
-	struct mutex buf_lock;
-	u8 tx[ADE7854_MAX_TX] __aligned(IIO_DMA_MINALIGN);
-	u8 rx[ADE7854_MAX_RX];
-
-};
-
-int ade7854_probe(struct iio_dev *indio_dev, struct device *dev);
-int ade7854_remove(struct iio_dev *indio_dev);
-
-#endif
diff --git a/drivers/staging/iio/meter/meter.h b/drivers/staging/iio/meter/meter.h
deleted file mode 100644
index 5ed59bf30a25..000000000000
--- a/drivers/staging/iio/meter/meter.h
+++ /dev/null
@@ -1,398 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _METER_H
-#define _METER_H
-
-#include <linux/iio/sysfs.h>
-
-/* metering ic types of attribute */
-
-#define IIO_DEV_ATTR_CURRENT_A_OFFSET(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_a_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_B_OFFSET(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_b_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_C_OFFSET(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_c_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VOLT_A_OFFSET(_mode, _show, _store, _addr)      \
-	IIO_DEVICE_ATTR(volt_a_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VOLT_B_OFFSET(_mode, _show, _store, _addr)      \
-	IIO_DEVICE_ATTR(volt_b_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VOLT_C_OFFSET(_mode, _show, _store, _addr)      \
-	IIO_DEVICE_ATTR(volt_c_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(reactive_power_a_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(reactive_power_b_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(reactive_power_c_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_A_OFFSET(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(active_power_a_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_B_OFFSET(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(active_power_b_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_C_OFFSET(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(active_power_c_offset, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_A_GAIN(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_a_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_B_GAIN(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_b_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_C_GAIN(_mode, _show, _store, _addr)	\
-	IIO_DEVICE_ATTR(current_c_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_APPARENT_POWER_A_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(apparent_power_a_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_APPARENT_POWER_B_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(apparent_power_b_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_APPARENT_POWER_C_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(apparent_power_c_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(active_power_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(active_power_a_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(active_power_b_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_ACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)   \
-	IIO_DEVICE_ATTR(active_power_c_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_A_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(reactive_power_a_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_B_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(reactive_power_b_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_REACTIVE_POWER_C_GAIN(_mode, _show, _store, _addr)     \
-	IIO_DEVICE_ATTR(reactive_power_c_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_A(_show, _addr)			\
-	IIO_DEVICE_ATTR(current_a, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_B(_show, _addr)			\
-	IIO_DEVICE_ATTR(current_b, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CURRENT_C(_show, _addr)			\
-	IIO_DEVICE_ATTR(current_c, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_VOLT_A(_show, _addr)			\
-	IIO_DEVICE_ATTR(volt_a, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_VOLT_B(_show, _addr)			\
-	IIO_DEVICE_ATTR(volt_b, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_VOLT_C(_show, _addr)			\
-	IIO_DEVICE_ATTR(volt_c, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_AENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(aenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_LENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(lenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_RAENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(raenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_LAENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(laenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_VAENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(vaenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_LVAENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(lvaenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_RVAENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(rvaenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_LVARENERGY(_show, _addr)			\
-	IIO_DEVICE_ATTR(lvarenergy, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CHKSUM(_show, _addr)                       \
-	IIO_DEVICE_ATTR(chksum, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_ANGLE0(_show, _addr)                       \
-	IIO_DEVICE_ATTR(angle0, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_ANGLE1(_show, _addr)                       \
-	IIO_DEVICE_ATTR(angle1, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_ANGLE2(_show, _addr)                       \
-	IIO_DEVICE_ATTR(angle2, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_AWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(awatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_BWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(bwatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(cwatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_AFWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(afwatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_BFWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(bfwatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CFWATTHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(cfwatthr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_AVARHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(avarhr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_BVARHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(bvarhr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CVARHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(cvarhr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_AVAHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(avahr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_BVAHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(bvahr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_CVAHR(_show, _addr)			\
-	IIO_DEVICE_ATTR(cvahr, 0444, _show, NULL, _addr)
-
-#define IIO_DEV_ATTR_IOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(ios, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_PHCAL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(phcal, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_APHCAL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(aphcal, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BPHCAL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bphcal, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CPHCAL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cphcal, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_APOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(apos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AAPOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(aapos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BAPOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bapos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CAPOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(capos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AVRMSGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(avrmsgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BVRMSGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bvrmsgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CVRMSGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cvrmsgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AIGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(aigain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BIGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bigain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CIGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cigain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_NIGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(nigain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AVGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(avgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BVGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bvgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CVGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cvgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_WGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(wgain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_WDIV(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(wdiv, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CFNUM(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cfnum, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CFDEN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cfden, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CF1DEN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cf1den, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CF2DEN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cf2den, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CF3DEN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cf3den, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_IRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(irms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vrms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AIRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(airms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BIRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(birms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CIRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cirms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_NIRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(nirms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AVRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(avrms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BVRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bvrms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CVRMS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cvrms, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_IRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(irmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vrmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AIRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(airmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BIRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(birmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CIRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cirmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_AVRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(avrmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_BVRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(bvrmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CVRMSOS(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cvrmsos, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VAGAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vagain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_PGA_GAIN(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(pga_gain, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VADIV(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vadiv, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_LINECYC(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(linecyc, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_SAGCYC(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(sagcyc, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_CFCYC(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(cfcyc, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_PEAKCYC(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(peakcyc, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_SAGLVL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(saglvl, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_IPKLVL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(ipklvl, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VPKLVL(_mode, _show, _store, _addr)                \
-	IIO_DEVICE_ATTR(vpklvl, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_IPEAK(_mode, _show, _store, _addr)			\
-	IIO_DEVICE_ATTR(ipeak, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_RIPEAK(_mode, _show, _store, _addr)		\
-	IIO_DEVICE_ATTR(ripeak, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VPEAK(_mode, _show, _store, _addr)			\
-	IIO_DEVICE_ATTR(vpeak, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_RVPEAK(_mode, _show, _store, _addr)		\
-	IIO_DEVICE_ATTR(rvpeak, _mode, _show, _store, _addr)
-
-#define IIO_DEV_ATTR_VPERIOD(_mode, _show, _store, _addr)		\
-	IIO_DEVICE_ATTR(vperiod, _mode, _show, _store, _addr)
-
-/* active energy register, AENERGY, is more than half full */
-#define IIO_EVENT_ATTR_AENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(aenergy_half_full, _evlist, _show, _store, _mask)
-
-/* a SAG on the line voltage */
-#define IIO_EVENT_ATTR_LINE_VOLT_SAG(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(line_volt_sag, _evlist, _show, _store, _mask)
-
-/*
- * Indicates the end of energy accumulation over an integer number
- * of half line cycles
- */
-#define IIO_EVENT_ATTR_CYCEND(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(cycend, _evlist, _show, _store, _mask)
-
-/* on the rising and falling edge of the voltage waveform */
-#define IIO_EVENT_ATTR_ZERO_CROSS(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(zero_cross, _evlist, _show, _store, _mask)
-
-/* the active energy register has overflowed */
-#define IIO_EVENT_ATTR_AENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(aenergy_overflow, _evlist, _show, _store, _mask)
-
-/* the apparent energy register has overflowed */
-#define IIO_EVENT_ATTR_VAENERGY_OVERFLOW(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(vaenergy_overflow, _evlist, _show, _store, _mask)
-
-/* the active energy register, VAENERGY, is more than half full */
-#define IIO_EVENT_ATTR_VAENERGY_HALF_FULL(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(vaenergy_half_full, _evlist, _show, _store, _mask)
-
-/* the power has gone from negative to positive */
-#define IIO_EVENT_ATTR_PPOS(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(ppos, _evlist, _show, _store, _mask)
-
-/* the power has gone from positive to negative */
-#define IIO_EVENT_ATTR_PNEG(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(pneg, _evlist, _show, _store, _mask)
-
-/* waveform sample from Channel 1 has exceeded the IPKLVL value */
-#define IIO_EVENT_ATTR_IPKLVL_EXC(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(ipklvl_exc, _evlist, _show, _store, _mask)
-
-/* waveform sample from Channel 2 has exceeded the VPKLVL value */
-#define IIO_EVENT_ATTR_VPKLVL_EXC(_evlist, _show, _store, _mask) \
-	IIO_EVENT_ATTR_SH(vpklvl_exc, _evlist, _show, _store, _mask)
-
-#endif /* _METER_H */