All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver
@ 2016-03-07 14:22 Lars-Peter Clausen
  2016-03-07 14:22 ` [PATCH 2/2] staging:iio:adis16220: " Lars-Peter Clausen
  2016-03-09 21:07 ` [PATCH 1/2] staging:iio:adis16204: " Jonathan Cameron
  0 siblings, 2 replies; 6+ messages in thread
From: Lars-Peter Clausen @ 2016-03-07 14:22 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Hartmut Knaack, Peter Meerwald, linux-iio, Lars-Peter Clausen

The ADIS16204 part has been obsoleted, which makes it hard to get the
hardware to even test the driver. Considering this there is no expectation
that the driver will be cleaned up and be able to move out of staging, so
remove the driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/accel/Kconfig          |  12 --
 drivers/staging/iio/accel/Makefile         |   3 -
 drivers/staging/iio/accel/adis16204.h      |  68 --------
 drivers/staging/iio/accel/adis16204_core.c | 253 -----------------------------
 4 files changed, 336 deletions(-)
 delete mode 100644 drivers/staging/iio/accel/adis16204.h
 delete mode 100644 drivers/staging/iio/accel/adis16204_core.c

diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig
index fa67da9..5bc9803 100644
--- a/drivers/staging/iio/accel/Kconfig
+++ b/drivers/staging/iio/accel/Kconfig
@@ -27,18 +27,6 @@ config ADIS16203
 	  To compile this driver as a module, say M here: the module will be
 	  called adis16203.
 
-config ADIS16204
-	tristate "Analog Devices ADIS16204 Programmable High-g Digital Impact Sensor and Recorder"
-	depends on SPI
-	select IIO_ADIS_LIB
-	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
-	help
-	  Say Y here to build support for Analog Devices adis16204 Programmable
-	  High-g Digital Impact Sensor and Recorder.
-
-	  To compile this driver as a module, say M here: the module will be
-	  called adis16204.
-
 config ADIS16209
 	tristate "Analog Devices ADIS16209 Dual-Axis Digital Inclinometer and Accelerometer"
 	depends on SPI
diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile
index 1ed137f..8ad9732 100644
--- a/drivers/staging/iio/accel/Makefile
+++ b/drivers/staging/iio/accel/Makefile
@@ -8,9 +8,6 @@ obj-$(CONFIG_ADIS16201) += adis16201.o
 adis16203-y             := adis16203_core.o
 obj-$(CONFIG_ADIS16203) += adis16203.o
 
-adis16204-y             := adis16204_core.o
-obj-$(CONFIG_ADIS16204) += adis16204.o
-
 adis16209-y             := adis16209_core.o
 obj-$(CONFIG_ADIS16209) += adis16209.o
 
diff --git a/drivers/staging/iio/accel/adis16204.h b/drivers/staging/iio/accel/adis16204.h
deleted file mode 100644
index 0b23f0b..0000000
--- a/drivers/staging/iio/accel/adis16204.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef SPI_ADIS16204_H_
-#define SPI_ADIS16204_H_
-
-#define ADIS16204_STARTUP_DELAY	220 /* ms */
-
-#define ADIS16204_FLASH_CNT      0x00 /* Flash memory write count */
-#define ADIS16204_SUPPLY_OUT     0x02 /* Output, power supply */
-#define ADIS16204_XACCL_OUT      0x04 /* Output, x-axis accelerometer */
-#define ADIS16204_YACCL_OUT      0x06 /* Output, y-axis accelerometer */
-#define ADIS16204_AUX_ADC        0x08 /* Output, auxiliary ADC input */
-#define ADIS16204_TEMP_OUT       0x0A /* Output, temperature */
-#define ADIS16204_X_PEAK_OUT     0x0C /* Twos complement */
-#define ADIS16204_Y_PEAK_OUT     0x0E /* Twos complement */
-#define ADIS16204_XACCL_NULL     0x10 /* Calibration, x-axis acceleration offset null */
-#define ADIS16204_YACCL_NULL     0x12 /* Calibration, y-axis acceleration offset null */
-#define ADIS16204_XACCL_SCALE    0x14 /* X-axis scale factor calibration register */
-#define ADIS16204_YACCL_SCALE    0x16 /* Y-axis scale factor calibration register */
-#define ADIS16204_XY_RSS_OUT     0x18 /* XY combined acceleration (RSS) */
-#define ADIS16204_XY_PEAK_OUT    0x1A /* Peak, XY combined output (RSS) */
-#define ADIS16204_CAP_BUF_1      0x1C /* Capture buffer output register 1 */
-#define ADIS16204_CAP_BUF_2      0x1E /* Capture buffer output register 2 */
-#define ADIS16204_ALM_MAG1       0x20 /* Alarm 1 amplitude threshold */
-#define ADIS16204_ALM_MAG2       0x22 /* Alarm 2 amplitude threshold */
-#define ADIS16204_ALM_CTRL       0x28 /* Alarm control */
-#define ADIS16204_CAPT_PNTR      0x2A /* Capture register address pointer */
-#define ADIS16204_AUX_DAC        0x30 /* Auxiliary DAC data */
-#define ADIS16204_GPIO_CTRL      0x32 /* General-purpose digital input/output control */
-#define ADIS16204_MSC_CTRL       0x34 /* Miscellaneous control */
-#define ADIS16204_SMPL_PRD       0x36 /* Internal sample period (rate) control */
-#define ADIS16204_AVG_CNT        0x38 /* Operation, filter configuration */
-#define ADIS16204_SLP_CNT        0x3A /* Operation, sleep mode control */
-#define ADIS16204_DIAG_STAT      0x3C /* Diagnostics, system status register */
-#define ADIS16204_GLOB_CMD       0x3E /* Operation, system command register */
-
-/* MSC_CTRL */
-#define ADIS16204_MSC_CTRL_PWRUP_SELF_TEST	BIT(10) /* Self-test at power-on: 1 = disabled, 0 = enabled */
-#define ADIS16204_MSC_CTRL_SELF_TEST_EN	        BIT(8)  /* Self-test enable */
-#define ADIS16204_MSC_CTRL_DATA_RDY_EN	        BIT(2)  /* Data-ready enable: 1 = enabled, 0 = disabled */
-#define ADIS16204_MSC_CTRL_ACTIVE_HIGH	        BIT(1)  /* Data-ready polarity: 1 = active high, 0 = active low */
-#define ADIS16204_MSC_CTRL_DATA_RDY_DIO2	BIT(0)  /* Data-ready line selection: 1 = DIO2, 0 = DIO1 */
-
-/* DIAG_STAT */
-#define ADIS16204_DIAG_STAT_ALARM2        BIT(9) /* Alarm 2 status: 1 = alarm active, 0 = alarm inactive */
-#define ADIS16204_DIAG_STAT_ALARM1        BIT(8) /* Alarm 1 status: 1 = alarm active, 0 = alarm inactive */
-#define ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT 5 /* Self-test diagnostic error flag: 1 = error condition,
-						0 = normal operation */
-#define ADIS16204_DIAG_STAT_SPI_FAIL_BIT      3 /* SPI communications failure */
-#define ADIS16204_DIAG_STAT_FLASH_UPT_BIT     2 /* Flash update failure */
-#define ADIS16204_DIAG_STAT_POWER_HIGH_BIT    1 /* Power supply above 3.625 V */
-#define ADIS16204_DIAG_STAT_POWER_LOW_BIT     0 /* Power supply below 2.975 V */
-
-/* GLOB_CMD */
-#define ADIS16204_GLOB_CMD_SW_RESET	BIT(7)
-#define ADIS16204_GLOB_CMD_CLEAR_STAT	BIT(4)
-#define ADIS16204_GLOB_CMD_FACTORY_CAL	BIT(1)
-
-#define ADIS16204_ERROR_ACTIVE          BIT(14)
-
-enum adis16204_scan {
-	ADIS16204_SCAN_ACC_X,
-	ADIS16204_SCAN_ACC_Y,
-	ADIS16204_SCAN_ACC_XY,
-	ADIS16204_SCAN_SUPPLY,
-	ADIS16204_SCAN_AUX_ADC,
-	ADIS16204_SCAN_TEMP,
-};
-
-#endif /* SPI_ADIS16204_H_ */
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
deleted file mode 100644
index 20a9df6..0000000
--- a/drivers/staging/iio/accel/adis16204_core.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * ADIS16204 Programmable High-g Digital Impact Sensor and Recorder
- *
- * Copyright 2010 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#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/spi/spi.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 <linux/iio/buffer.h>
-#include <linux/iio/imu/adis.h>
-
-#include "adis16204.h"
-
-/* Unique to this driver currently */
-
-static const u8 adis16204_addresses[][2] = {
-	[ADIS16204_SCAN_ACC_X] = { ADIS16204_XACCL_NULL, ADIS16204_X_PEAK_OUT },
-	[ADIS16204_SCAN_ACC_Y] = { ADIS16204_YACCL_NULL, ADIS16204_Y_PEAK_OUT },
-	[ADIS16204_SCAN_ACC_XY] = { 0, ADIS16204_XY_PEAK_OUT },
-};
-
-static int adis16204_read_raw(struct iio_dev *indio_dev,
-			      struct iio_chan_spec const *chan,
-			      int *val, int *val2,
-			      long mask)
-{
-	struct adis *st = iio_priv(indio_dev);
-	int ret;
-	int bits;
-	u8 addr;
-	s16 val16;
-	int addrind;
-
-	switch (mask) {
-	case IIO_CHAN_INFO_RAW:
-		return adis_single_conversion(indio_dev, chan,
-				ADIS16204_ERROR_ACTIVE, val);
-	case IIO_CHAN_INFO_SCALE:
-		switch (chan->type) {
-		case IIO_VOLTAGE:
-			if (chan->channel == 0) {
-				*val = 1;
-				*val2 = 220000; /* 1.22 mV */
-			} else {
-				*val = 0;
-				*val2 = 610000; /* 0.61 mV */
-			}
-			return IIO_VAL_INT_PLUS_MICRO;
-		case IIO_TEMP:
-			*val = -470; /* 0.47 C */
-			*val2 = 0;
-			return IIO_VAL_INT_PLUS_MICRO;
-		case IIO_ACCEL:
-			*val = 0;
-			switch (chan->channel2) {
-			case IIO_MOD_X:
-			case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
-				*val2 = IIO_G_TO_M_S_2(17125); /* 17.125 mg */
-				break;
-			case IIO_MOD_Y:
-			case IIO_MOD_Z:
-				*val2 = IIO_G_TO_M_S_2(8407); /* 8.407 mg */
-				break;
-			}
-			return IIO_VAL_INT_PLUS_MICRO;
-		default:
-			return -EINVAL;
-		}
-		break;
-	case IIO_CHAN_INFO_OFFSET:
-		*val = 25000 / -470 - 1278; /* 25 C = 1278 */
-		return IIO_VAL_INT;
-	case IIO_CHAN_INFO_CALIBBIAS:
-	case IIO_CHAN_INFO_PEAK:
-		if (mask == IIO_CHAN_INFO_CALIBBIAS) {
-			bits = 12;
-			addrind = 0;
-		} else { /* PEAK_SEPARATE */
-			bits = 14;
-			addrind = 1;
-		}
-		mutex_lock(&indio_dev->mlock);
-		addr = adis16204_addresses[chan->scan_index][addrind];
-		ret = adis_read_reg_16(st, addr, &val16);
-		if (ret) {
-			mutex_unlock(&indio_dev->mlock);
-			return ret;
-		}
-		val16 &= (1 << bits) - 1;
-		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
-		*val = val16;
-		mutex_unlock(&indio_dev->mlock);
-		return IIO_VAL_INT;
-	}
-	return -EINVAL;
-}
-
-static int adis16204_write_raw(struct iio_dev *indio_dev,
-			       struct iio_chan_spec const *chan,
-			       int val,
-			       int val2,
-			       long mask)
-{
-	struct adis *st = iio_priv(indio_dev);
-	int bits;
-	s16 val16;
-	u8 addr;
-
-	switch (mask) {
-	case IIO_CHAN_INFO_CALIBBIAS:
-		switch (chan->type) {
-		case IIO_ACCEL:
-			bits = 12;
-			break;
-		default:
-			return -EINVAL;
-		}
-		val16 = val & ((1 << bits) - 1);
-		addr = adis16204_addresses[chan->scan_index][1];
-		return adis_write_reg_16(st, addr, val16);
-	}
-	return -EINVAL;
-}
-
-static const struct iio_chan_spec adis16204_channels[] = {
-	ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 0, 12),
-	ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 0, 12),
-	ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 0, 12),
-	ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X,
-			BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK),
-			0, 14),
-	ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y,
-			BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK),
-			0, 14),
-	ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT,
-			ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 0, 14),
-	IIO_CHAN_SOFT_TIMESTAMP(5),
-};
-
-static const struct iio_info adis16204_info = {
-	.read_raw = &adis16204_read_raw,
-	.write_raw = &adis16204_write_raw,
-	.update_scan_mode = adis_update_scan_mode,
-	.driver_module = THIS_MODULE,
-};
-
-static const char * const adis16204_status_error_msgs[] = {
-	[ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT] = "Self test failure",
-	[ADIS16204_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure",
-	[ADIS16204_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed",
-	[ADIS16204_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V",
-	[ADIS16204_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 2.975V",
-};
-
-static const struct adis_data adis16204_data = {
-	.read_delay = 20,
-	.msc_ctrl_reg = ADIS16204_MSC_CTRL,
-	.glob_cmd_reg = ADIS16204_GLOB_CMD,
-	.diag_stat_reg = ADIS16204_DIAG_STAT,
-
-	.self_test_mask = ADIS16204_MSC_CTRL_SELF_TEST_EN,
-	.startup_delay = ADIS16204_STARTUP_DELAY,
-
-	.status_error_msgs = adis16204_status_error_msgs,
-	.status_error_mask = BIT(ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT) |
-		BIT(ADIS16204_DIAG_STAT_SPI_FAIL_BIT) |
-		BIT(ADIS16204_DIAG_STAT_FLASH_UPT_BIT) |
-		BIT(ADIS16204_DIAG_STAT_POWER_HIGH_BIT) |
-		BIT(ADIS16204_DIAG_STAT_POWER_LOW_BIT),
-};
-
-static int adis16204_probe(struct spi_device *spi)
-{
-	int ret;
-	struct adis *st;
-	struct iio_dev *indio_dev;
-
-	/* setup the industrialio driver allocated elements */
-	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
-	if (!indio_dev)
-		return -ENOMEM;
-	st = iio_priv(indio_dev);
-	/* this is only used for removal purposes */
-	spi_set_drvdata(spi, indio_dev);
-
-	indio_dev->name = spi->dev.driver->name;
-	indio_dev->dev.parent = &spi->dev;
-	indio_dev->info = &adis16204_info;
-	indio_dev->channels = adis16204_channels;
-	indio_dev->num_channels = ARRAY_SIZE(adis16204_channels);
-	indio_dev->modes = INDIO_DIRECT_MODE;
-
-	ret = adis_init(st, indio_dev, spi, &adis16204_data);
-	if (ret)
-		return ret;
-
-	ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL);
-	if (ret)
-		return ret;
-
-	/* Get the device into a sane initial state */
-	ret = adis_initial_startup(st);
-	if (ret)
-		goto error_cleanup_buffer_trigger;
-	ret = iio_device_register(indio_dev);
-	if (ret)
-		goto error_cleanup_buffer_trigger;
-
-	return 0;
-
-error_cleanup_buffer_trigger:
-	adis_cleanup_buffer_and_trigger(st, indio_dev);
-	return ret;
-}
-
-static int adis16204_remove(struct spi_device *spi)
-{
-	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-	struct adis *st = iio_priv(indio_dev);
-
-	iio_device_unregister(indio_dev);
-	adis_cleanup_buffer_and_trigger(st, indio_dev);
-
-	return 0;
-}
-
-static struct spi_driver adis16204_driver = {
-	.driver = {
-		.name = "adis16204",
-	},
-	.probe = adis16204_probe,
-	.remove = adis16204_remove,
-};
-module_spi_driver(adis16204_driver);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("spi:adis16204");
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] staging:iio:adis16220: Remove adis16204 driver
  2016-03-07 14:22 [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver Lars-Peter Clausen
@ 2016-03-07 14:22 ` Lars-Peter Clausen
  2016-03-07 14:24   ` Peter Meerwald-Stadler
  2016-03-09 21:07 ` [PATCH 1/2] staging:iio:adis16204: " Jonathan Cameron
  1 sibling, 1 reply; 6+ messages in thread
From: Lars-Peter Clausen @ 2016-03-07 14:22 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Hartmut Knaack, Peter Meerwald, linux-iio, Lars-Peter Clausen

The ADIS16220 part has been obsoleted, which makes it hard to get the
hardware to even test the driver. Considering this there is no expectation
that the driver will be cleaned up and be able to move out of staging, so
remove the driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/accel/Kconfig          |  11 -
 drivers/staging/iio/accel/Makefile         |   3 -
 drivers/staging/iio/accel/adis16220.h      | 140 --------
 drivers/staging/iio/accel/adis16220_core.c | 494 -----------------------------
 4 files changed, 648 deletions(-)
 delete mode 100644 drivers/staging/iio/accel/adis16220.h
 delete mode 100644 drivers/staging/iio/accel/adis16220_core.c

diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig
index 5bc9803..f066aa3 100644
--- a/drivers/staging/iio/accel/Kconfig
+++ b/drivers/staging/iio/accel/Kconfig
@@ -39,17 +39,6 @@ config ADIS16209
 	  To compile this driver as a module, say M here: the module will be
 	  called adis16209.
 
-config ADIS16220
-	tristate "Analog Devices ADIS16220 Programmable Digital Vibration Sensor"
-	depends on SPI
-	select IIO_ADIS_LIB
-	help
-	  Say Y here to build support for Analog Devices adis16220 programmable
-	  digital vibration sensor.
-
-	  To compile this driver as a module, say M here: the module will be
-	  called adis16220.
-
 config ADIS16240
 	tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder"
 	depends on SPI
diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile
index 8ad9732..415329c 100644
--- a/drivers/staging/iio/accel/Makefile
+++ b/drivers/staging/iio/accel/Makefile
@@ -11,9 +11,6 @@ obj-$(CONFIG_ADIS16203) += adis16203.o
 adis16209-y             := adis16209_core.o
 obj-$(CONFIG_ADIS16209) += adis16209.o
 
-adis16220-y             := adis16220_core.o
-obj-$(CONFIG_ADIS16220) += adis16220.o
-
 adis16240-y             := adis16240_core.o
 obj-$(CONFIG_ADIS16240) += adis16240.o
 
diff --git a/drivers/staging/iio/accel/adis16220.h b/drivers/staging/iio/accel/adis16220.h
deleted file mode 100644
index eab8633..0000000
--- a/drivers/staging/iio/accel/adis16220.h
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef SPI_ADIS16220_H_
-#define SPI_ADIS16220_H_
-
-#include <linux/iio/imu/adis.h>
-
-#define ADIS16220_STARTUP_DELAY	220 /* ms */
-
-/* Flash memory write count */
-#define ADIS16220_FLASH_CNT     0x00
-/* Control, acceleration offset adjustment control */
-#define ADIS16220_ACCL_NULL     0x02
-/* Control, AIN1 offset adjustment control */
-#define ADIS16220_AIN1_NULL     0x04
-/* Control, AIN2 offset adjustment control */
-#define ADIS16220_AIN2_NULL     0x06
-/* Output, power supply during capture */
-#define ADIS16220_CAPT_SUPPLY   0x0A
-/* Output, temperature during capture */
-#define ADIS16220_CAPT_TEMP     0x0C
-/* Output, peak acceleration during capture */
-#define ADIS16220_CAPT_PEAKA    0x0E
-/* Output, peak AIN1 level during capture */
-#define ADIS16220_CAPT_PEAK1    0x10
-/* Output, peak AIN2 level during capture */
-#define ADIS16220_CAPT_PEAK2    0x12
-/* Output, capture buffer for acceleration */
-#define ADIS16220_CAPT_BUFA     0x14
-/* Output, capture buffer for AIN1 */
-#define ADIS16220_CAPT_BUF1     0x16
-/* Output, capture buffer for AIN2 */
-#define ADIS16220_CAPT_BUF2     0x18
-/* Control, capture buffer address pointer */
-#define ADIS16220_CAPT_PNTR     0x1A
-/* Control, capture control register */
-#define ADIS16220_CAPT_CTRL     0x1C
-/* Control, capture period (automatic mode) */
-#define ADIS16220_CAPT_PRD      0x1E
-/* Control, Alarm A, acceleration peak threshold */
-#define ADIS16220_ALM_MAGA      0x20
-/* Control, Alarm 1, AIN1 peak threshold */
-#define ADIS16220_ALM_MAG1      0x22
-/* Control, Alarm 2, AIN2 peak threshold */
-#define ADIS16220_ALM_MAG2      0x24
-/* Control, Alarm S, peak threshold */
-#define ADIS16220_ALM_MAGS      0x26
-/* Control, alarm configuration register */
-#define ADIS16220_ALM_CTRL      0x28
-/* Control, general I/O configuration */
-#define ADIS16220_GPIO_CTRL     0x32
-/* Control, self-test control, AIN configuration */
-#define ADIS16220_MSC_CTRL      0x34
-/* Control, digital I/O configuration */
-#define ADIS16220_DIO_CTRL      0x36
-/* Control, filter configuration */
-#define ADIS16220_AVG_CNT       0x38
-/* Status, system status */
-#define ADIS16220_DIAG_STAT     0x3C
-/* Control, system commands */
-#define ADIS16220_GLOB_CMD      0x3E
-/* Status, self-test response */
-#define ADIS16220_ST_DELTA      0x40
-/* Lot Identification Code 1 */
-#define ADIS16220_LOT_ID1       0x52
-/* Lot Identification Code 2 */
-#define ADIS16220_LOT_ID2       0x54
-/* Product identifier; convert to decimal = 16220 */
-#define ADIS16220_PROD_ID       0x56
-/* Serial number */
-#define ADIS16220_SERIAL_NUM    0x58
-
-#define ADIS16220_CAPTURE_SIZE  2048
-
-/* MSC_CTRL */
-#define ADIS16220_MSC_CTRL_SELF_TEST_EN	        BIT(8)
-#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1	BIT(1)
-#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2	BIT(0)
-
-/* DIO_CTRL */
-#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND     (BIT(5) | BIT(4))
-#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND     (BIT(3) | BIT(2))
-#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH     BIT(1)
-#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH     BIT(0)
-
-/* DIAG_STAT */
-/* AIN2 sample > ALM_MAG2 */
-#define ADIS16220_DIAG_STAT_ALM_MAG2    BIT(14)
-/* AIN1 sample > ALM_MAG1 */
-#define ADIS16220_DIAG_STAT_ALM_MAG1    BIT(13)
-/* Acceleration sample > ALM_MAGA */
-#define ADIS16220_DIAG_STAT_ALM_MAGA    BIT(12)
-/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */
-#define ADIS16220_DIAG_STAT_ALM_MAGS    BIT(11)
-/* |Peak value in AIN2 data capture| > ALM_MAG2 */
-#define ADIS16220_DIAG_STAT_PEAK_AIN2   BIT(10)
-/* |Peak value in AIN1 data capture| > ALM_MAG1 */
-#define ADIS16220_DIAG_STAT_PEAK_AIN1   BIT(9)
-/* |Peak value in acceleration data capture| > ALM_MAGA */
-#define ADIS16220_DIAG_STAT_PEAK_ACCEL  BIT(8)
-/* Data ready, capture complete */
-#define ADIS16220_DIAG_STAT_DATA_RDY    BIT(7)
-#define ADIS16220_DIAG_STAT_FLASH_CHK	BIT(6)
-#define ADIS16220_DIAG_STAT_SELF_TEST	BIT(5)
-/* Capture period violation/interruption */
-#define ADIS16220_DIAG_STAT_VIOLATION_BIT	4
-/* SPI communications failure */
-#define ADIS16220_DIAG_STAT_SPI_FAIL_BIT	3
-/* Flash update failure */
-#define ADIS16220_DIAG_STAT_FLASH_UPT_BIT	2
-/* Power supply above 3.625 V */
-#define ADIS16220_DIAG_STAT_POWER_HIGH_BIT	1
-/* Power supply below 3.15 V */
-#define ADIS16220_DIAG_STAT_POWER_LOW_BIT	0
-
-/* GLOB_CMD */
-#define ADIS16220_GLOB_CMD_SW_RESET	BIT(7)
-#define ADIS16220_GLOB_CMD_SELF_TEST	BIT(2)
-#define ADIS16220_GLOB_CMD_PWR_DOWN	BIT(1)
-
-#define ADIS16220_MAX_TX 2048
-#define ADIS16220_MAX_RX 2048
-
-#define ADIS16220_SPI_BURST	(u32)(1000 * 1000)
-#define ADIS16220_SPI_FAST	(u32)(2000 * 1000)
-
-/**
- * struct adis16220_state - device instance specific data
- * @adis:		adis device
- * @tx:			transmit buffer
- * @rx:			receive buffer
- * @buf_lock:		mutex to protect tx and rx
- **/
-struct adis16220_state {
-	struct adis adis;
-
-	struct mutex		buf_lock;
-	u8			tx[ADIS16220_MAX_TX] ____cacheline_aligned;
-	u8			rx[ADIS16220_MAX_RX];
-};
-
-#endif /* SPI_ADIS16220_H_ */
diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
deleted file mode 100644
index d016521..0000000
--- a/drivers/staging/iio/accel/adis16220_core.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * ADIS16220 Programmable Digital Vibration Sensor driver
- *
- * Copyright 2010 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <linux/delay.h>
-#include <linux/mutex.h>
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/spi/spi.h>
-#include <linux/slab.h>
-#include <linux/sysfs.h>
-#include <linux/module.h>
-
-#include <linux/iio/iio.h>
-#include <linux/iio/sysfs.h>
-
-#include "adis16220.h"
-
-static ssize_t adis16220_read_16bit(struct device *dev,
-				    struct device_attribute *attr,
-				    char *buf)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct adis16220_state *st = iio_priv(indio_dev);
-	ssize_t ret;
-	u16 val;
-
-	/* Take the iio_dev status lock */
-	mutex_lock(&indio_dev->mlock);
-	ret = adis_read_reg_16(&st->adis, this_attr->address, &val);
-	mutex_unlock(&indio_dev->mlock);
-	if (ret)
-		return ret;
-	return sprintf(buf, "%u\n", val);
-}
-
-static ssize_t adis16220_write_16bit(struct device *dev,
-				     struct device_attribute *attr,
-				     const char *buf,
-				     size_t len)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	struct adis16220_state *st = iio_priv(indio_dev);
-	int ret;
-	u16 val;
-
-	ret = kstrtou16(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = adis_write_reg_16(&st->adis, this_attr->address, val);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static int adis16220_capture(struct iio_dev *indio_dev)
-{
-	struct adis16220_state *st = iio_priv(indio_dev);
-	int ret;
-
-	 /* initiates a manual data capture */
-	ret = adis_write_reg_16(&st->adis, ADIS16220_GLOB_CMD, 0xBF08);
-	if (ret)
-		dev_err(&indio_dev->dev, "problem beginning capture");
-
-	usleep_range(10000, 11000); /* delay for capture to finish */
-
-	return ret;
-}
-
-static ssize_t adis16220_write_capture(struct device *dev,
-				       struct device_attribute *attr,
-				       const char *buf, size_t len)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-	bool val;
-	int ret;
-
-	ret = strtobool(buf, &val);
-	if (ret)
-		return ret;
-	if (!val)
-		return -EINVAL;
-	ret = adis16220_capture(indio_dev);
-	if (ret)
-		return ret;
-
-	return len;
-}
-
-static ssize_t adis16220_capture_buffer_read(struct iio_dev *indio_dev,
-					     char *buf,
-					     loff_t off,
-					     size_t count,
-					     int addr)
-{
-	struct adis16220_state *st = iio_priv(indio_dev);
-	struct spi_transfer xfers[] = {
-		{
-			.tx_buf = st->tx,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 1,
-			.delay_usecs = 25,
-		}, {
-			.tx_buf = st->tx,
-			.rx_buf = st->rx,
-			.bits_per_word = 8,
-			.cs_change = 1,
-			.delay_usecs = 25,
-		},
-	};
-	int ret;
-	int i;
-
-	if (unlikely(!count))
-		return count;
-
-	if ((off >= ADIS16220_CAPTURE_SIZE) || (count & 1) || (off & 1))
-		return -EINVAL;
-
-	if (off + count > ADIS16220_CAPTURE_SIZE)
-		count = ADIS16220_CAPTURE_SIZE - off;
-
-	/* write the begin position of capture buffer */
-	ret = adis_write_reg_16(&st->adis,
-				ADIS16220_CAPT_PNTR,
-				off > 1);
-	if (ret)
-		return -EIO;
-
-	/* read count/2 values from capture buffer */
-	mutex_lock(&st->buf_lock);
-
-	for (i = 0; i < count; i += 2) {
-		st->tx[i] = ADIS_READ_REG(addr);
-		st->tx[i + 1] = 0;
-	}
-	xfers[1].len = count;
-
-	ret = spi_sync_transfer(st->adis.spi, xfers, ARRAY_SIZE(xfers));
-	if (ret) {
-		mutex_unlock(&st->buf_lock);
-		return -EIO;
-	}
-
-	memcpy(buf, st->rx, count);
-
-	mutex_unlock(&st->buf_lock);
-	return count;
-}
-
-static ssize_t adis16220_accel_bin_read(struct file *filp, struct kobject *kobj,
-					struct bin_attribute *attr,
-					char *buf,
-					loff_t off,
-					size_t count)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
-
-	return adis16220_capture_buffer_read(indio_dev, buf,
-					off, count,
-					ADIS16220_CAPT_BUFA);
-}
-
-static struct bin_attribute accel_bin = {
-	.attr = {
-		.name = "accel_bin",
-		.mode = S_IRUGO,
-	},
-	.read = adis16220_accel_bin_read,
-	.size = ADIS16220_CAPTURE_SIZE,
-};
-
-static ssize_t adis16220_adc1_bin_read(struct file *filp, struct kobject *kobj,
-				       struct bin_attribute *attr,
-				       char *buf, loff_t off,
-				       size_t count)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
-
-	return adis16220_capture_buffer_read(indio_dev, buf,
-					off, count,
-					ADIS16220_CAPT_BUF1);
-}
-
-static struct bin_attribute adc1_bin = {
-	.attr = {
-		.name = "in0_bin",
-		.mode = S_IRUGO,
-	},
-	.read =  adis16220_adc1_bin_read,
-	.size = ADIS16220_CAPTURE_SIZE,
-};
-
-static ssize_t adis16220_adc2_bin_read(struct file *filp, struct kobject *kobj,
-				       struct bin_attribute *attr,
-				       char *buf, loff_t off,
-				       size_t count)
-{
-	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
-
-	return adis16220_capture_buffer_read(indio_dev, buf,
-					off, count,
-					ADIS16220_CAPT_BUF2);
-}
-
-static struct bin_attribute adc2_bin = {
-	.attr = {
-		.name = "in1_bin",
-		.mode = S_IRUGO,
-	},
-	.read =  adis16220_adc2_bin_read,
-	.size = ADIS16220_CAPTURE_SIZE,
-};
-
-#define IIO_DEV_ATTR_CAPTURE(_store)				\
-	IIO_DEVICE_ATTR(capture, S_IWUSR, NULL, _store, 0)
-
-static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture);
-
-#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr)		\
-	IIO_DEVICE_ATTR(capture_count, _mode, _show, _store, _addr)
-
-static IIO_DEV_ATTR_CAPTURE_COUNT(S_IWUSR | S_IRUGO,
-		adis16220_read_16bit,
-		adis16220_write_16bit,
-		ADIS16220_CAPT_PNTR);
-
-enum adis16220_channel {
-	in_supply, in_1, in_2, accel, temp
-};
-
-struct adis16220_address_spec {
-	u8 addr;
-	u8 bits;
-	bool sign;
-};
-
-/* Address / bits / signed */
-static const struct adis16220_address_spec adis16220_addresses[][3] = {
-	[in_supply] =	{ { ADIS16220_CAPT_SUPPLY,	12, 0 }, },
-	[in_1] =	{ { ADIS16220_CAPT_BUF1,	16, 1 },
-			  { ADIS16220_AIN1_NULL,	16, 1 },
-			  { ADIS16220_CAPT_PEAK1,	16, 1 }, },
-	[in_2] =	{ { ADIS16220_CAPT_BUF2,	16, 1 },
-			  { ADIS16220_AIN2_NULL,	16, 1 },
-			  { ADIS16220_CAPT_PEAK2,	16, 1 }, },
-	[accel] =	{ { ADIS16220_CAPT_BUFA,	16, 1 },
-			  { ADIS16220_ACCL_NULL,	16, 1 },
-			  { ADIS16220_CAPT_PEAKA,	16, 1 }, },
-	[temp] =	{ { ADIS16220_CAPT_TEMP,	12, 0 }, }
-};
-
-static int adis16220_read_raw(struct iio_dev *indio_dev,
-			      struct iio_chan_spec const *chan,
-			      int *val, int *val2,
-			      long mask)
-{
-	struct adis16220_state *st = iio_priv(indio_dev);
-	const struct adis16220_address_spec *addr;
-	int ret = -EINVAL;
-	int addrind = 0;
-	u16 uval;
-	s16 sval;
-	u8 bits;
-
-	switch (mask) {
-	case IIO_CHAN_INFO_RAW:
-		addrind = 0;
-		break;
-	case IIO_CHAN_INFO_OFFSET:
-		if (chan->type == IIO_TEMP) {
-			*val = 25000 / -470 - 1278; /* 25 C = 1278 */
-			return IIO_VAL_INT;
-		}
-		addrind = 1;
-		break;
-	case IIO_CHAN_INFO_PEAK:
-		addrind = 2;
-		break;
-	case IIO_CHAN_INFO_SCALE:
-		switch (chan->type) {
-		case IIO_TEMP:
-			*val = -470; /* -0.47 C */
-			*val2 = 0;
-			return IIO_VAL_INT_PLUS_MICRO;
-		case IIO_ACCEL:
-			*val2 = IIO_G_TO_M_S_2(19073); /* 19.073 g */
-			return IIO_VAL_INT_PLUS_MICRO;
-		case IIO_VOLTAGE:
-			if (chan->channel == 0) {
-				*val = 1;
-				*val2 = 220700; /* 1.2207 mV */
-			} else {
-				/* Should really be dependent on VDD */
-				*val2 = 305180; /* 305.18 uV */
-			}
-			return IIO_VAL_INT_PLUS_MICRO;
-		default:
-			return -EINVAL;
-		}
-	default:
-		return -EINVAL;
-	}
-	addr = &adis16220_addresses[chan->address][addrind];
-	if (addr->sign) {
-		ret = adis_read_reg_16(&st->adis, addr->addr, &sval);
-		if (ret)
-			return ret;
-		bits = addr->bits;
-		sval &= (1 << bits) - 1;
-		sval = (s16)(sval << (16 - bits)) >> (16 - bits);
-		*val = sval;
-		return IIO_VAL_INT;
-	}
-	ret = adis_read_reg_16(&st->adis, addr->addr, &uval);
-	if (ret)
-		return ret;
-	bits = addr->bits;
-	uval &= (1 << bits) - 1;
-	*val = uval;
-	return IIO_VAL_INT;
-}
-
-static const struct iio_chan_spec adis16220_channels[] = {
-	{
-		.type = IIO_VOLTAGE,
-		.indexed = 1,
-		.channel = 0,
-		.extend_name = "supply",
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
-			BIT(IIO_CHAN_INFO_SCALE),
-		.address = in_supply,
-	}, {
-		.type = IIO_ACCEL,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
-			BIT(IIO_CHAN_INFO_OFFSET) |
-			BIT(IIO_CHAN_INFO_SCALE) |
-			BIT(IIO_CHAN_INFO_PEAK),
-		.address = accel,
-	}, {
-		.type = IIO_TEMP,
-		.indexed = 1,
-		.channel = 0,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
-			BIT(IIO_CHAN_INFO_OFFSET) |
-			BIT(IIO_CHAN_INFO_SCALE),
-		.address = temp,
-	}, {
-		.type = IIO_VOLTAGE,
-		.indexed = 1,
-		.channel = 1,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
-			BIT(IIO_CHAN_INFO_OFFSET) |
-			BIT(IIO_CHAN_INFO_SCALE),
-		.address = in_1,
-	}, {
-		.type = IIO_VOLTAGE,
-		.indexed = 1,
-		.channel = 2,
-		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
-		.address = in_2,
-	}
-};
-
-static struct attribute *adis16220_attributes[] = {
-	&iio_dev_attr_capture.dev_attr.attr,
-	&iio_dev_attr_capture_count.dev_attr.attr,
-	NULL
-};
-
-static const struct attribute_group adis16220_attribute_group = {
-	.attrs = adis16220_attributes,
-};
-
-static const struct iio_info adis16220_info = {
-	.attrs = &adis16220_attribute_group,
-	.driver_module = THIS_MODULE,
-	.read_raw = &adis16220_read_raw,
-};
-
-static const char * const adis16220_status_error_msgs[] = {
-	[ADIS16220_DIAG_STAT_VIOLATION_BIT] = "Capture period violation/interruption",
-	[ADIS16220_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure",
-	[ADIS16220_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed",
-	[ADIS16220_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V",
-	[ADIS16220_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 3.15V",
-};
-
-static const struct adis_data adis16220_data = {
-	.read_delay = 35,
-	.write_delay = 35,
-	.msc_ctrl_reg = ADIS16220_MSC_CTRL,
-	.glob_cmd_reg = ADIS16220_GLOB_CMD,
-	.diag_stat_reg = ADIS16220_DIAG_STAT,
-
-	.self_test_mask = ADIS16220_MSC_CTRL_SELF_TEST_EN,
-	.startup_delay = ADIS16220_STARTUP_DELAY,
-
-	.status_error_msgs = adis16220_status_error_msgs,
-	.status_error_mask = BIT(ADIS16220_DIAG_STAT_VIOLATION_BIT) |
-		BIT(ADIS16220_DIAG_STAT_SPI_FAIL_BIT) |
-		BIT(ADIS16220_DIAG_STAT_FLASH_UPT_BIT) |
-		BIT(ADIS16220_DIAG_STAT_POWER_HIGH_BIT) |
-		BIT(ADIS16220_DIAG_STAT_POWER_LOW_BIT),
-};
-
-static int adis16220_probe(struct spi_device *spi)
-{
-	int ret;
-	struct adis16220_state *st;
-	struct iio_dev *indio_dev;
-
-	/* setup the industrialio driver allocated elements */
-	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
-	if (!indio_dev)
-		return -ENOMEM;
-
-	st = iio_priv(indio_dev);
-	/* this is only used for removal purposes */
-	spi_set_drvdata(spi, indio_dev);
-
-	indio_dev->name = spi->dev.driver->name;
-	indio_dev->dev.parent = &spi->dev;
-	indio_dev->info = &adis16220_info;
-	indio_dev->modes = INDIO_DIRECT_MODE;
-	indio_dev->channels = adis16220_channels;
-	indio_dev->num_channels = ARRAY_SIZE(adis16220_channels);
-
-	ret = devm_iio_device_register(&spi->dev, indio_dev);
-	if (ret)
-		return ret;
-
-	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin);
-	if (ret)
-		return ret;
-
-	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc1_bin);
-	if (ret)
-		goto error_rm_accel_bin;
-
-	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc2_bin);
-	if (ret)
-		goto error_rm_adc1_bin;
-
-	ret = adis_init(&st->adis, indio_dev, spi, &adis16220_data);
-	if (ret)
-		goto error_rm_adc2_bin;
-	/* Get the device into a sane initial state */
-	ret = adis_initial_startup(&st->adis);
-	if (ret)
-		goto error_rm_adc2_bin;
-	return 0;
-
-error_rm_adc2_bin:
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
-error_rm_adc1_bin:
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
-error_rm_accel_bin:
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
-	return ret;
-}
-
-static int adis16220_remove(struct spi_device *spi)
-{
-	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
-	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
-
-	return 0;
-}
-
-static struct spi_driver adis16220_driver = {
-	.driver = {
-		.name = "adis16220",
-	},
-	.probe = adis16220_probe,
-	.remove = adis16220_remove,
-};
-module_spi_driver(adis16220_driver);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("spi:adis16220");
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] staging:iio:adis16220: Remove adis16204 driver
  2016-03-07 14:22 ` [PATCH 2/2] staging:iio:adis16220: " Lars-Peter Clausen
@ 2016-03-07 14:24   ` Peter Meerwald-Stadler
  2016-03-09 21:09     ` Jonathan Cameron
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Meerwald-Stadler @ 2016-03-07 14:24 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Jonathan Cameron, Hartmut Knaack, linux-iio


the mail subject should say 'Remove adis16220 ...'

> The ADIS16220 part has been obsoleted, which makes it hard to get the
> hardware to even test the driver. Considering this there is no expectation
> that the driver will be cleaned up and be able to move out of staging, so
> remove the driver.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> ---
>  drivers/staging/iio/accel/Kconfig          |  11 -
>  drivers/staging/iio/accel/Makefile         |   3 -
>  drivers/staging/iio/accel/adis16220.h      | 140 --------
>  drivers/staging/iio/accel/adis16220_core.c | 494 -----------------------------
>  4 files changed, 648 deletions(-)
>  delete mode 100644 drivers/staging/iio/accel/adis16220.h
>  delete mode 100644 drivers/staging/iio/accel/adis16220_core.c
> 
> diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig
> index 5bc9803..f066aa3 100644
> --- a/drivers/staging/iio/accel/Kconfig
> +++ b/drivers/staging/iio/accel/Kconfig
> @@ -39,17 +39,6 @@ config ADIS16209
>  	  To compile this driver as a module, say M here: the module will be
>  	  called adis16209.
>  
> -config ADIS16220
> -	tristate "Analog Devices ADIS16220 Programmable Digital Vibration Sensor"
> -	depends on SPI
> -	select IIO_ADIS_LIB
> -	help
> -	  Say Y here to build support for Analog Devices adis16220 programmable
> -	  digital vibration sensor.
> -
> -	  To compile this driver as a module, say M here: the module will be
> -	  called adis16220.
> -
>  config ADIS16240
>  	tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder"
>  	depends on SPI
> diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile
> index 8ad9732..415329c 100644
> --- a/drivers/staging/iio/accel/Makefile
> +++ b/drivers/staging/iio/accel/Makefile
> @@ -11,9 +11,6 @@ obj-$(CONFIG_ADIS16203) += adis16203.o
>  adis16209-y             := adis16209_core.o
>  obj-$(CONFIG_ADIS16209) += adis16209.o
>  
> -adis16220-y             := adis16220_core.o
> -obj-$(CONFIG_ADIS16220) += adis16220.o
> -
>  adis16240-y             := adis16240_core.o
>  obj-$(CONFIG_ADIS16240) += adis16240.o
>  
> diff --git a/drivers/staging/iio/accel/adis16220.h b/drivers/staging/iio/accel/adis16220.h
> deleted file mode 100644
> index eab8633..0000000
> --- a/drivers/staging/iio/accel/adis16220.h
> +++ /dev/null
> @@ -1,140 +0,0 @@
> -#ifndef SPI_ADIS16220_H_
> -#define SPI_ADIS16220_H_
> -
> -#include <linux/iio/imu/adis.h>
> -
> -#define ADIS16220_STARTUP_DELAY	220 /* ms */
> -
> -/* Flash memory write count */
> -#define ADIS16220_FLASH_CNT     0x00
> -/* Control, acceleration offset adjustment control */
> -#define ADIS16220_ACCL_NULL     0x02
> -/* Control, AIN1 offset adjustment control */
> -#define ADIS16220_AIN1_NULL     0x04
> -/* Control, AIN2 offset adjustment control */
> -#define ADIS16220_AIN2_NULL     0x06
> -/* Output, power supply during capture */
> -#define ADIS16220_CAPT_SUPPLY   0x0A
> -/* Output, temperature during capture */
> -#define ADIS16220_CAPT_TEMP     0x0C
> -/* Output, peak acceleration during capture */
> -#define ADIS16220_CAPT_PEAKA    0x0E
> -/* Output, peak AIN1 level during capture */
> -#define ADIS16220_CAPT_PEAK1    0x10
> -/* Output, peak AIN2 level during capture */
> -#define ADIS16220_CAPT_PEAK2    0x12
> -/* Output, capture buffer for acceleration */
> -#define ADIS16220_CAPT_BUFA     0x14
> -/* Output, capture buffer for AIN1 */
> -#define ADIS16220_CAPT_BUF1     0x16
> -/* Output, capture buffer for AIN2 */
> -#define ADIS16220_CAPT_BUF2     0x18
> -/* Control, capture buffer address pointer */
> -#define ADIS16220_CAPT_PNTR     0x1A
> -/* Control, capture control register */
> -#define ADIS16220_CAPT_CTRL     0x1C
> -/* Control, capture period (automatic mode) */
> -#define ADIS16220_CAPT_PRD      0x1E
> -/* Control, Alarm A, acceleration peak threshold */
> -#define ADIS16220_ALM_MAGA      0x20
> -/* Control, Alarm 1, AIN1 peak threshold */
> -#define ADIS16220_ALM_MAG1      0x22
> -/* Control, Alarm 2, AIN2 peak threshold */
> -#define ADIS16220_ALM_MAG2      0x24
> -/* Control, Alarm S, peak threshold */
> -#define ADIS16220_ALM_MAGS      0x26
> -/* Control, alarm configuration register */
> -#define ADIS16220_ALM_CTRL      0x28
> -/* Control, general I/O configuration */
> -#define ADIS16220_GPIO_CTRL     0x32
> -/* Control, self-test control, AIN configuration */
> -#define ADIS16220_MSC_CTRL      0x34
> -/* Control, digital I/O configuration */
> -#define ADIS16220_DIO_CTRL      0x36
> -/* Control, filter configuration */
> -#define ADIS16220_AVG_CNT       0x38
> -/* Status, system status */
> -#define ADIS16220_DIAG_STAT     0x3C
> -/* Control, system commands */
> -#define ADIS16220_GLOB_CMD      0x3E
> -/* Status, self-test response */
> -#define ADIS16220_ST_DELTA      0x40
> -/* Lot Identification Code 1 */
> -#define ADIS16220_LOT_ID1       0x52
> -/* Lot Identification Code 2 */
> -#define ADIS16220_LOT_ID2       0x54
> -/* Product identifier; convert to decimal = 16220 */
> -#define ADIS16220_PROD_ID       0x56
> -/* Serial number */
> -#define ADIS16220_SERIAL_NUM    0x58
> -
> -#define ADIS16220_CAPTURE_SIZE  2048
> -
> -/* MSC_CTRL */
> -#define ADIS16220_MSC_CTRL_SELF_TEST_EN	        BIT(8)
> -#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1	BIT(1)
> -#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2	BIT(0)
> -
> -/* DIO_CTRL */
> -#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND     (BIT(5) | BIT(4))
> -#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND     (BIT(3) | BIT(2))
> -#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH     BIT(1)
> -#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH     BIT(0)
> -
> -/* DIAG_STAT */
> -/* AIN2 sample > ALM_MAG2 */
> -#define ADIS16220_DIAG_STAT_ALM_MAG2    BIT(14)
> -/* AIN1 sample > ALM_MAG1 */
> -#define ADIS16220_DIAG_STAT_ALM_MAG1    BIT(13)
> -/* Acceleration sample > ALM_MAGA */
> -#define ADIS16220_DIAG_STAT_ALM_MAGA    BIT(12)
> -/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */
> -#define ADIS16220_DIAG_STAT_ALM_MAGS    BIT(11)
> -/* |Peak value in AIN2 data capture| > ALM_MAG2 */
> -#define ADIS16220_DIAG_STAT_PEAK_AIN2   BIT(10)
> -/* |Peak value in AIN1 data capture| > ALM_MAG1 */
> -#define ADIS16220_DIAG_STAT_PEAK_AIN1   BIT(9)
> -/* |Peak value in acceleration data capture| > ALM_MAGA */
> -#define ADIS16220_DIAG_STAT_PEAK_ACCEL  BIT(8)
> -/* Data ready, capture complete */
> -#define ADIS16220_DIAG_STAT_DATA_RDY    BIT(7)
> -#define ADIS16220_DIAG_STAT_FLASH_CHK	BIT(6)
> -#define ADIS16220_DIAG_STAT_SELF_TEST	BIT(5)
> -/* Capture period violation/interruption */
> -#define ADIS16220_DIAG_STAT_VIOLATION_BIT	4
> -/* SPI communications failure */
> -#define ADIS16220_DIAG_STAT_SPI_FAIL_BIT	3
> -/* Flash update failure */
> -#define ADIS16220_DIAG_STAT_FLASH_UPT_BIT	2
> -/* Power supply above 3.625 V */
> -#define ADIS16220_DIAG_STAT_POWER_HIGH_BIT	1
> -/* Power supply below 3.15 V */
> -#define ADIS16220_DIAG_STAT_POWER_LOW_BIT	0
> -
> -/* GLOB_CMD */
> -#define ADIS16220_GLOB_CMD_SW_RESET	BIT(7)
> -#define ADIS16220_GLOB_CMD_SELF_TEST	BIT(2)
> -#define ADIS16220_GLOB_CMD_PWR_DOWN	BIT(1)
> -
> -#define ADIS16220_MAX_TX 2048
> -#define ADIS16220_MAX_RX 2048
> -
> -#define ADIS16220_SPI_BURST	(u32)(1000 * 1000)
> -#define ADIS16220_SPI_FAST	(u32)(2000 * 1000)
> -
> -/**
> - * struct adis16220_state - device instance specific data
> - * @adis:		adis device
> - * @tx:			transmit buffer
> - * @rx:			receive buffer
> - * @buf_lock:		mutex to protect tx and rx
> - **/
> -struct adis16220_state {
> -	struct adis adis;
> -
> -	struct mutex		buf_lock;
> -	u8			tx[ADIS16220_MAX_TX] ____cacheline_aligned;
> -	u8			rx[ADIS16220_MAX_RX];
> -};
> -
> -#endif /* SPI_ADIS16220_H_ */
> diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
> deleted file mode 100644
> index d016521..0000000
> --- a/drivers/staging/iio/accel/adis16220_core.c
> +++ /dev/null
> @@ -1,494 +0,0 @@
> -/*
> - * ADIS16220 Programmable Digital Vibration Sensor driver
> - *
> - * Copyright 2010 Analog Devices Inc.
> - *
> - * Licensed under the GPL-2 or later.
> - */
> -
> -#include <linux/delay.h>
> -#include <linux/mutex.h>
> -#include <linux/device.h>
> -#include <linux/kernel.h>
> -#include <linux/spi/spi.h>
> -#include <linux/slab.h>
> -#include <linux/sysfs.h>
> -#include <linux/module.h>
> -
> -#include <linux/iio/iio.h>
> -#include <linux/iio/sysfs.h>
> -
> -#include "adis16220.h"
> -
> -static ssize_t adis16220_read_16bit(struct device *dev,
> -				    struct device_attribute *attr,
> -				    char *buf)
> -{
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct adis16220_state *st = iio_priv(indio_dev);
> -	ssize_t ret;
> -	u16 val;
> -
> -	/* Take the iio_dev status lock */
> -	mutex_lock(&indio_dev->mlock);
> -	ret = adis_read_reg_16(&st->adis, this_attr->address, &val);
> -	mutex_unlock(&indio_dev->mlock);
> -	if (ret)
> -		return ret;
> -	return sprintf(buf, "%u\n", val);
> -}
> -
> -static ssize_t adis16220_write_16bit(struct device *dev,
> -				     struct device_attribute *attr,
> -				     const char *buf,
> -				     size_t len)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
> -	struct adis16220_state *st = iio_priv(indio_dev);
> -	int ret;
> -	u16 val;
> -
> -	ret = kstrtou16(buf, 10, &val);
> -	if (ret)
> -		goto error_ret;
> -	ret = adis_write_reg_16(&st->adis, this_attr->address, val);
> -
> -error_ret:
> -	return ret ? ret : len;
> -}
> -
> -static int adis16220_capture(struct iio_dev *indio_dev)
> -{
> -	struct adis16220_state *st = iio_priv(indio_dev);
> -	int ret;
> -
> -	 /* initiates a manual data capture */
> -	ret = adis_write_reg_16(&st->adis, ADIS16220_GLOB_CMD, 0xBF08);
> -	if (ret)
> -		dev_err(&indio_dev->dev, "problem beginning capture");
> -
> -	usleep_range(10000, 11000); /* delay for capture to finish */
> -
> -	return ret;
> -}
> -
> -static ssize_t adis16220_write_capture(struct device *dev,
> -				       struct device_attribute *attr,
> -				       const char *buf, size_t len)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	bool val;
> -	int ret;
> -
> -	ret = strtobool(buf, &val);
> -	if (ret)
> -		return ret;
> -	if (!val)
> -		return -EINVAL;
> -	ret = adis16220_capture(indio_dev);
> -	if (ret)
> -		return ret;
> -
> -	return len;
> -}
> -
> -static ssize_t adis16220_capture_buffer_read(struct iio_dev *indio_dev,
> -					     char *buf,
> -					     loff_t off,
> -					     size_t count,
> -					     int addr)
> -{
> -	struct adis16220_state *st = iio_priv(indio_dev);
> -	struct spi_transfer xfers[] = {
> -		{
> -			.tx_buf = st->tx,
> -			.bits_per_word = 8,
> -			.len = 2,
> -			.cs_change = 1,
> -			.delay_usecs = 25,
> -		}, {
> -			.tx_buf = st->tx,
> -			.rx_buf = st->rx,
> -			.bits_per_word = 8,
> -			.cs_change = 1,
> -			.delay_usecs = 25,
> -		},
> -	};
> -	int ret;
> -	int i;
> -
> -	if (unlikely(!count))
> -		return count;
> -
> -	if ((off >= ADIS16220_CAPTURE_SIZE) || (count & 1) || (off & 1))
> -		return -EINVAL;
> -
> -	if (off + count > ADIS16220_CAPTURE_SIZE)
> -		count = ADIS16220_CAPTURE_SIZE - off;
> -
> -	/* write the begin position of capture buffer */
> -	ret = adis_write_reg_16(&st->adis,
> -				ADIS16220_CAPT_PNTR,
> -				off > 1);
> -	if (ret)
> -		return -EIO;
> -
> -	/* read count/2 values from capture buffer */
> -	mutex_lock(&st->buf_lock);
> -
> -	for (i = 0; i < count; i += 2) {
> -		st->tx[i] = ADIS_READ_REG(addr);
> -		st->tx[i + 1] = 0;
> -	}
> -	xfers[1].len = count;
> -
> -	ret = spi_sync_transfer(st->adis.spi, xfers, ARRAY_SIZE(xfers));
> -	if (ret) {
> -		mutex_unlock(&st->buf_lock);
> -		return -EIO;
> -	}
> -
> -	memcpy(buf, st->rx, count);
> -
> -	mutex_unlock(&st->buf_lock);
> -	return count;
> -}
> -
> -static ssize_t adis16220_accel_bin_read(struct file *filp, struct kobject *kobj,
> -					struct bin_attribute *attr,
> -					char *buf,
> -					loff_t off,
> -					size_t count)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
> -
> -	return adis16220_capture_buffer_read(indio_dev, buf,
> -					off, count,
> -					ADIS16220_CAPT_BUFA);
> -}
> -
> -static struct bin_attribute accel_bin = {
> -	.attr = {
> -		.name = "accel_bin",
> -		.mode = S_IRUGO,
> -	},
> -	.read = adis16220_accel_bin_read,
> -	.size = ADIS16220_CAPTURE_SIZE,
> -};
> -
> -static ssize_t adis16220_adc1_bin_read(struct file *filp, struct kobject *kobj,
> -				       struct bin_attribute *attr,
> -				       char *buf, loff_t off,
> -				       size_t count)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
> -
> -	return adis16220_capture_buffer_read(indio_dev, buf,
> -					off, count,
> -					ADIS16220_CAPT_BUF1);
> -}
> -
> -static struct bin_attribute adc1_bin = {
> -	.attr = {
> -		.name = "in0_bin",
> -		.mode = S_IRUGO,
> -	},
> -	.read =  adis16220_adc1_bin_read,
> -	.size = ADIS16220_CAPTURE_SIZE,
> -};
> -
> -static ssize_t adis16220_adc2_bin_read(struct file *filp, struct kobject *kobj,
> -				       struct bin_attribute *attr,
> -				       char *buf, loff_t off,
> -				       size_t count)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
> -
> -	return adis16220_capture_buffer_read(indio_dev, buf,
> -					off, count,
> -					ADIS16220_CAPT_BUF2);
> -}
> -
> -static struct bin_attribute adc2_bin = {
> -	.attr = {
> -		.name = "in1_bin",
> -		.mode = S_IRUGO,
> -	},
> -	.read =  adis16220_adc2_bin_read,
> -	.size = ADIS16220_CAPTURE_SIZE,
> -};
> -
> -#define IIO_DEV_ATTR_CAPTURE(_store)				\
> -	IIO_DEVICE_ATTR(capture, S_IWUSR, NULL, _store, 0)
> -
> -static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture);
> -
> -#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr)		\
> -	IIO_DEVICE_ATTR(capture_count, _mode, _show, _store, _addr)
> -
> -static IIO_DEV_ATTR_CAPTURE_COUNT(S_IWUSR | S_IRUGO,
> -		adis16220_read_16bit,
> -		adis16220_write_16bit,
> -		ADIS16220_CAPT_PNTR);
> -
> -enum adis16220_channel {
> -	in_supply, in_1, in_2, accel, temp
> -};
> -
> -struct adis16220_address_spec {
> -	u8 addr;
> -	u8 bits;
> -	bool sign;
> -};
> -
> -/* Address / bits / signed */
> -static const struct adis16220_address_spec adis16220_addresses[][3] = {
> -	[in_supply] =	{ { ADIS16220_CAPT_SUPPLY,	12, 0 }, },
> -	[in_1] =	{ { ADIS16220_CAPT_BUF1,	16, 1 },
> -			  { ADIS16220_AIN1_NULL,	16, 1 },
> -			  { ADIS16220_CAPT_PEAK1,	16, 1 }, },
> -	[in_2] =	{ { ADIS16220_CAPT_BUF2,	16, 1 },
> -			  { ADIS16220_AIN2_NULL,	16, 1 },
> -			  { ADIS16220_CAPT_PEAK2,	16, 1 }, },
> -	[accel] =	{ { ADIS16220_CAPT_BUFA,	16, 1 },
> -			  { ADIS16220_ACCL_NULL,	16, 1 },
> -			  { ADIS16220_CAPT_PEAKA,	16, 1 }, },
> -	[temp] =	{ { ADIS16220_CAPT_TEMP,	12, 0 }, }
> -};
> -
> -static int adis16220_read_raw(struct iio_dev *indio_dev,
> -			      struct iio_chan_spec const *chan,
> -			      int *val, int *val2,
> -			      long mask)
> -{
> -	struct adis16220_state *st = iio_priv(indio_dev);
> -	const struct adis16220_address_spec *addr;
> -	int ret = -EINVAL;
> -	int addrind = 0;
> -	u16 uval;
> -	s16 sval;
> -	u8 bits;
> -
> -	switch (mask) {
> -	case IIO_CHAN_INFO_RAW:
> -		addrind = 0;
> -		break;
> -	case IIO_CHAN_INFO_OFFSET:
> -		if (chan->type == IIO_TEMP) {
> -			*val = 25000 / -470 - 1278; /* 25 C = 1278 */
> -			return IIO_VAL_INT;
> -		}
> -		addrind = 1;
> -		break;
> -	case IIO_CHAN_INFO_PEAK:
> -		addrind = 2;
> -		break;
> -	case IIO_CHAN_INFO_SCALE:
> -		switch (chan->type) {
> -		case IIO_TEMP:
> -			*val = -470; /* -0.47 C */
> -			*val2 = 0;
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		case IIO_ACCEL:
> -			*val2 = IIO_G_TO_M_S_2(19073); /* 19.073 g */
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		case IIO_VOLTAGE:
> -			if (chan->channel == 0) {
> -				*val = 1;
> -				*val2 = 220700; /* 1.2207 mV */
> -			} else {
> -				/* Should really be dependent on VDD */
> -				*val2 = 305180; /* 305.18 uV */
> -			}
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		default:
> -			return -EINVAL;
> -		}
> -	default:
> -		return -EINVAL;
> -	}
> -	addr = &adis16220_addresses[chan->address][addrind];
> -	if (addr->sign) {
> -		ret = adis_read_reg_16(&st->adis, addr->addr, &sval);
> -		if (ret)
> -			return ret;
> -		bits = addr->bits;
> -		sval &= (1 << bits) - 1;
> -		sval = (s16)(sval << (16 - bits)) >> (16 - bits);
> -		*val = sval;
> -		return IIO_VAL_INT;
> -	}
> -	ret = adis_read_reg_16(&st->adis, addr->addr, &uval);
> -	if (ret)
> -		return ret;
> -	bits = addr->bits;
> -	uval &= (1 << bits) - 1;
> -	*val = uval;
> -	return IIO_VAL_INT;
> -}
> -
> -static const struct iio_chan_spec adis16220_channels[] = {
> -	{
> -		.type = IIO_VOLTAGE,
> -		.indexed = 1,
> -		.channel = 0,
> -		.extend_name = "supply",
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
> -			BIT(IIO_CHAN_INFO_SCALE),
> -		.address = in_supply,
> -	}, {
> -		.type = IIO_ACCEL,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
> -			BIT(IIO_CHAN_INFO_OFFSET) |
> -			BIT(IIO_CHAN_INFO_SCALE) |
> -			BIT(IIO_CHAN_INFO_PEAK),
> -		.address = accel,
> -	}, {
> -		.type = IIO_TEMP,
> -		.indexed = 1,
> -		.channel = 0,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
> -			BIT(IIO_CHAN_INFO_OFFSET) |
> -			BIT(IIO_CHAN_INFO_SCALE),
> -		.address = temp,
> -	}, {
> -		.type = IIO_VOLTAGE,
> -		.indexed = 1,
> -		.channel = 1,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
> -			BIT(IIO_CHAN_INFO_OFFSET) |
> -			BIT(IIO_CHAN_INFO_SCALE),
> -		.address = in_1,
> -	}, {
> -		.type = IIO_VOLTAGE,
> -		.indexed = 1,
> -		.channel = 2,
> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
> -		.address = in_2,
> -	}
> -};
> -
> -static struct attribute *adis16220_attributes[] = {
> -	&iio_dev_attr_capture.dev_attr.attr,
> -	&iio_dev_attr_capture_count.dev_attr.attr,
> -	NULL
> -};
> -
> -static const struct attribute_group adis16220_attribute_group = {
> -	.attrs = adis16220_attributes,
> -};
> -
> -static const struct iio_info adis16220_info = {
> -	.attrs = &adis16220_attribute_group,
> -	.driver_module = THIS_MODULE,
> -	.read_raw = &adis16220_read_raw,
> -};
> -
> -static const char * const adis16220_status_error_msgs[] = {
> -	[ADIS16220_DIAG_STAT_VIOLATION_BIT] = "Capture period violation/interruption",
> -	[ADIS16220_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure",
> -	[ADIS16220_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed",
> -	[ADIS16220_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V",
> -	[ADIS16220_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 3.15V",
> -};
> -
> -static const struct adis_data adis16220_data = {
> -	.read_delay = 35,
> -	.write_delay = 35,
> -	.msc_ctrl_reg = ADIS16220_MSC_CTRL,
> -	.glob_cmd_reg = ADIS16220_GLOB_CMD,
> -	.diag_stat_reg = ADIS16220_DIAG_STAT,
> -
> -	.self_test_mask = ADIS16220_MSC_CTRL_SELF_TEST_EN,
> -	.startup_delay = ADIS16220_STARTUP_DELAY,
> -
> -	.status_error_msgs = adis16220_status_error_msgs,
> -	.status_error_mask = BIT(ADIS16220_DIAG_STAT_VIOLATION_BIT) |
> -		BIT(ADIS16220_DIAG_STAT_SPI_FAIL_BIT) |
> -		BIT(ADIS16220_DIAG_STAT_FLASH_UPT_BIT) |
> -		BIT(ADIS16220_DIAG_STAT_POWER_HIGH_BIT) |
> -		BIT(ADIS16220_DIAG_STAT_POWER_LOW_BIT),
> -};
> -
> -static int adis16220_probe(struct spi_device *spi)
> -{
> -	int ret;
> -	struct adis16220_state *st;
> -	struct iio_dev *indio_dev;
> -
> -	/* setup the industrialio driver allocated elements */
> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
> -	if (!indio_dev)
> -		return -ENOMEM;
> -
> -	st = iio_priv(indio_dev);
> -	/* this is only used for removal purposes */
> -	spi_set_drvdata(spi, indio_dev);
> -
> -	indio_dev->name = spi->dev.driver->name;
> -	indio_dev->dev.parent = &spi->dev;
> -	indio_dev->info = &adis16220_info;
> -	indio_dev->modes = INDIO_DIRECT_MODE;
> -	indio_dev->channels = adis16220_channels;
> -	indio_dev->num_channels = ARRAY_SIZE(adis16220_channels);
> -
> -	ret = devm_iio_device_register(&spi->dev, indio_dev);
> -	if (ret)
> -		return ret;
> -
> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin);
> -	if (ret)
> -		return ret;
> -
> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc1_bin);
> -	if (ret)
> -		goto error_rm_accel_bin;
> -
> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc2_bin);
> -	if (ret)
> -		goto error_rm_adc1_bin;
> -
> -	ret = adis_init(&st->adis, indio_dev, spi, &adis16220_data);
> -	if (ret)
> -		goto error_rm_adc2_bin;
> -	/* Get the device into a sane initial state */
> -	ret = adis_initial_startup(&st->adis);
> -	if (ret)
> -		goto error_rm_adc2_bin;
> -	return 0;
> -
> -error_rm_adc2_bin:
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
> -error_rm_adc1_bin:
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
> -error_rm_accel_bin:
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
> -	return ret;
> -}
> -
> -static int adis16220_remove(struct spi_device *spi)
> -{
> -	struct iio_dev *indio_dev = spi_get_drvdata(spi);
> -
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
> -
> -	return 0;
> -}
> -
> -static struct spi_driver adis16220_driver = {
> -	.driver = {
> -		.name = "adis16220",
> -	},
> -	.probe = adis16220_probe,
> -	.remove = adis16220_remove,
> -};
> -module_spi_driver(adis16220_driver);
> -
> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> -MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
> -MODULE_LICENSE("GPL v2");
> -MODULE_ALIAS("spi:adis16220");
> 

-- 

Peter Meerwald-Stadler
+43-664-2444418 (mobile)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver
  2016-03-07 14:22 [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver Lars-Peter Clausen
  2016-03-07 14:22 ` [PATCH 2/2] staging:iio:adis16220: " Lars-Peter Clausen
@ 2016-03-09 21:07 ` Jonathan Cameron
  2016-03-10  9:44   ` Lars-Peter Clausen
  1 sibling, 1 reply; 6+ messages in thread
From: Jonathan Cameron @ 2016-03-09 21:07 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: Hartmut Knaack, Peter Meerwald, linux-iio

On 07/03/16 14:22, Lars-Peter Clausen wrote:
> The ADIS16204 part has been obsoleted, which makes it hard to get the
> hardware to even test the driver. Considering this there is no expectation
> that the driver will be cleaned up and be able to move out of staging, so
> remove the driver.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Applied. Pity in a way as these were interesting parts.
(read that as downright odd/esoteric ;)

Thanks,

Jonathan
> ---
>  drivers/staging/iio/accel/Kconfig          |  12 --
>  drivers/staging/iio/accel/Makefile         |   3 -
>  drivers/staging/iio/accel/adis16204.h      |  68 --------
>  drivers/staging/iio/accel/adis16204_core.c | 253 -----------------------------
>  4 files changed, 336 deletions(-)
>  delete mode 100644 drivers/staging/iio/accel/adis16204.h
>  delete mode 100644 drivers/staging/iio/accel/adis16204_core.c
> 
> diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig
> index fa67da9..5bc9803 100644
> --- a/drivers/staging/iio/accel/Kconfig
> +++ b/drivers/staging/iio/accel/Kconfig
> @@ -27,18 +27,6 @@ config ADIS16203
>  	  To compile this driver as a module, say M here: the module will be
>  	  called adis16203.
>  
> -config ADIS16204
> -	tristate "Analog Devices ADIS16204 Programmable High-g Digital Impact Sensor and Recorder"
> -	depends on SPI
> -	select IIO_ADIS_LIB
> -	select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
> -	help
> -	  Say Y here to build support for Analog Devices adis16204 Programmable
> -	  High-g Digital Impact Sensor and Recorder.
> -
> -	  To compile this driver as a module, say M here: the module will be
> -	  called adis16204.
> -
>  config ADIS16209
>  	tristate "Analog Devices ADIS16209 Dual-Axis Digital Inclinometer and Accelerometer"
>  	depends on SPI
> diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile
> index 1ed137f..8ad9732 100644
> --- a/drivers/staging/iio/accel/Makefile
> +++ b/drivers/staging/iio/accel/Makefile
> @@ -8,9 +8,6 @@ obj-$(CONFIG_ADIS16201) += adis16201.o
>  adis16203-y             := adis16203_core.o
>  obj-$(CONFIG_ADIS16203) += adis16203.o
>  
> -adis16204-y             := adis16204_core.o
> -obj-$(CONFIG_ADIS16204) += adis16204.o
> -
>  adis16209-y             := adis16209_core.o
>  obj-$(CONFIG_ADIS16209) += adis16209.o
>  
> diff --git a/drivers/staging/iio/accel/adis16204.h b/drivers/staging/iio/accel/adis16204.h
> deleted file mode 100644
> index 0b23f0b..0000000
> --- a/drivers/staging/iio/accel/adis16204.h
> +++ /dev/null
> @@ -1,68 +0,0 @@
> -#ifndef SPI_ADIS16204_H_
> -#define SPI_ADIS16204_H_
> -
> -#define ADIS16204_STARTUP_DELAY	220 /* ms */
> -
> -#define ADIS16204_FLASH_CNT      0x00 /* Flash memory write count */
> -#define ADIS16204_SUPPLY_OUT     0x02 /* Output, power supply */
> -#define ADIS16204_XACCL_OUT      0x04 /* Output, x-axis accelerometer */
> -#define ADIS16204_YACCL_OUT      0x06 /* Output, y-axis accelerometer */
> -#define ADIS16204_AUX_ADC        0x08 /* Output, auxiliary ADC input */
> -#define ADIS16204_TEMP_OUT       0x0A /* Output, temperature */
> -#define ADIS16204_X_PEAK_OUT     0x0C /* Twos complement */
> -#define ADIS16204_Y_PEAK_OUT     0x0E /* Twos complement */
> -#define ADIS16204_XACCL_NULL     0x10 /* Calibration, x-axis acceleration offset null */
> -#define ADIS16204_YACCL_NULL     0x12 /* Calibration, y-axis acceleration offset null */
> -#define ADIS16204_XACCL_SCALE    0x14 /* X-axis scale factor calibration register */
> -#define ADIS16204_YACCL_SCALE    0x16 /* Y-axis scale factor calibration register */
> -#define ADIS16204_XY_RSS_OUT     0x18 /* XY combined acceleration (RSS) */
> -#define ADIS16204_XY_PEAK_OUT    0x1A /* Peak, XY combined output (RSS) */
> -#define ADIS16204_CAP_BUF_1      0x1C /* Capture buffer output register 1 */
> -#define ADIS16204_CAP_BUF_2      0x1E /* Capture buffer output register 2 */
> -#define ADIS16204_ALM_MAG1       0x20 /* Alarm 1 amplitude threshold */
> -#define ADIS16204_ALM_MAG2       0x22 /* Alarm 2 amplitude threshold */
> -#define ADIS16204_ALM_CTRL       0x28 /* Alarm control */
> -#define ADIS16204_CAPT_PNTR      0x2A /* Capture register address pointer */
> -#define ADIS16204_AUX_DAC        0x30 /* Auxiliary DAC data */
> -#define ADIS16204_GPIO_CTRL      0x32 /* General-purpose digital input/output control */
> -#define ADIS16204_MSC_CTRL       0x34 /* Miscellaneous control */
> -#define ADIS16204_SMPL_PRD       0x36 /* Internal sample period (rate) control */
> -#define ADIS16204_AVG_CNT        0x38 /* Operation, filter configuration */
> -#define ADIS16204_SLP_CNT        0x3A /* Operation, sleep mode control */
> -#define ADIS16204_DIAG_STAT      0x3C /* Diagnostics, system status register */
> -#define ADIS16204_GLOB_CMD       0x3E /* Operation, system command register */
> -
> -/* MSC_CTRL */
> -#define ADIS16204_MSC_CTRL_PWRUP_SELF_TEST	BIT(10) /* Self-test at power-on: 1 = disabled, 0 = enabled */
> -#define ADIS16204_MSC_CTRL_SELF_TEST_EN	        BIT(8)  /* Self-test enable */
> -#define ADIS16204_MSC_CTRL_DATA_RDY_EN	        BIT(2)  /* Data-ready enable: 1 = enabled, 0 = disabled */
> -#define ADIS16204_MSC_CTRL_ACTIVE_HIGH	        BIT(1)  /* Data-ready polarity: 1 = active high, 0 = active low */
> -#define ADIS16204_MSC_CTRL_DATA_RDY_DIO2	BIT(0)  /* Data-ready line selection: 1 = DIO2, 0 = DIO1 */
> -
> -/* DIAG_STAT */
> -#define ADIS16204_DIAG_STAT_ALARM2        BIT(9) /* Alarm 2 status: 1 = alarm active, 0 = alarm inactive */
> -#define ADIS16204_DIAG_STAT_ALARM1        BIT(8) /* Alarm 1 status: 1 = alarm active, 0 = alarm inactive */
> -#define ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT 5 /* Self-test diagnostic error flag: 1 = error condition,
> -						0 = normal operation */
> -#define ADIS16204_DIAG_STAT_SPI_FAIL_BIT      3 /* SPI communications failure */
> -#define ADIS16204_DIAG_STAT_FLASH_UPT_BIT     2 /* Flash update failure */
> -#define ADIS16204_DIAG_STAT_POWER_HIGH_BIT    1 /* Power supply above 3.625 V */
> -#define ADIS16204_DIAG_STAT_POWER_LOW_BIT     0 /* Power supply below 2.975 V */
> -
> -/* GLOB_CMD */
> -#define ADIS16204_GLOB_CMD_SW_RESET	BIT(7)
> -#define ADIS16204_GLOB_CMD_CLEAR_STAT	BIT(4)
> -#define ADIS16204_GLOB_CMD_FACTORY_CAL	BIT(1)
> -
> -#define ADIS16204_ERROR_ACTIVE          BIT(14)
> -
> -enum adis16204_scan {
> -	ADIS16204_SCAN_ACC_X,
> -	ADIS16204_SCAN_ACC_Y,
> -	ADIS16204_SCAN_ACC_XY,
> -	ADIS16204_SCAN_SUPPLY,
> -	ADIS16204_SCAN_AUX_ADC,
> -	ADIS16204_SCAN_TEMP,
> -};
> -
> -#endif /* SPI_ADIS16204_H_ */
> diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c
> deleted file mode 100644
> index 20a9df6..0000000
> --- a/drivers/staging/iio/accel/adis16204_core.c
> +++ /dev/null
> @@ -1,253 +0,0 @@
> -/*
> - * ADIS16204 Programmable High-g Digital Impact Sensor and Recorder
> - *
> - * Copyright 2010 Analog Devices Inc.
> - *
> - * Licensed under the GPL-2 or later.
> - */
> -
> -#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/spi/spi.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 <linux/iio/buffer.h>
> -#include <linux/iio/imu/adis.h>
> -
> -#include "adis16204.h"
> -
> -/* Unique to this driver currently */
> -
> -static const u8 adis16204_addresses[][2] = {
> -	[ADIS16204_SCAN_ACC_X] = { ADIS16204_XACCL_NULL, ADIS16204_X_PEAK_OUT },
> -	[ADIS16204_SCAN_ACC_Y] = { ADIS16204_YACCL_NULL, ADIS16204_Y_PEAK_OUT },
> -	[ADIS16204_SCAN_ACC_XY] = { 0, ADIS16204_XY_PEAK_OUT },
> -};
> -
> -static int adis16204_read_raw(struct iio_dev *indio_dev,
> -			      struct iio_chan_spec const *chan,
> -			      int *val, int *val2,
> -			      long mask)
> -{
> -	struct adis *st = iio_priv(indio_dev);
> -	int ret;
> -	int bits;
> -	u8 addr;
> -	s16 val16;
> -	int addrind;
> -
> -	switch (mask) {
> -	case IIO_CHAN_INFO_RAW:
> -		return adis_single_conversion(indio_dev, chan,
> -				ADIS16204_ERROR_ACTIVE, val);
> -	case IIO_CHAN_INFO_SCALE:
> -		switch (chan->type) {
> -		case IIO_VOLTAGE:
> -			if (chan->channel == 0) {
> -				*val = 1;
> -				*val2 = 220000; /* 1.22 mV */
> -			} else {
> -				*val = 0;
> -				*val2 = 610000; /* 0.61 mV */
> -			}
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		case IIO_TEMP:
> -			*val = -470; /* 0.47 C */
> -			*val2 = 0;
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		case IIO_ACCEL:
> -			*val = 0;
> -			switch (chan->channel2) {
> -			case IIO_MOD_X:
> -			case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
> -				*val2 = IIO_G_TO_M_S_2(17125); /* 17.125 mg */
> -				break;
> -			case IIO_MOD_Y:
> -			case IIO_MOD_Z:
> -				*val2 = IIO_G_TO_M_S_2(8407); /* 8.407 mg */
> -				break;
> -			}
> -			return IIO_VAL_INT_PLUS_MICRO;
> -		default:
> -			return -EINVAL;
> -		}
> -		break;
> -	case IIO_CHAN_INFO_OFFSET:
> -		*val = 25000 / -470 - 1278; /* 25 C = 1278 */
> -		return IIO_VAL_INT;
> -	case IIO_CHAN_INFO_CALIBBIAS:
> -	case IIO_CHAN_INFO_PEAK:
> -		if (mask == IIO_CHAN_INFO_CALIBBIAS) {
> -			bits = 12;
> -			addrind = 0;
> -		} else { /* PEAK_SEPARATE */
> -			bits = 14;
> -			addrind = 1;
> -		}
> -		mutex_lock(&indio_dev->mlock);
> -		addr = adis16204_addresses[chan->scan_index][addrind];
> -		ret = adis_read_reg_16(st, addr, &val16);
> -		if (ret) {
> -			mutex_unlock(&indio_dev->mlock);
> -			return ret;
> -		}
> -		val16 &= (1 << bits) - 1;
> -		val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
> -		*val = val16;
> -		mutex_unlock(&indio_dev->mlock);
> -		return IIO_VAL_INT;
> -	}
> -	return -EINVAL;
> -}
> -
> -static int adis16204_write_raw(struct iio_dev *indio_dev,
> -			       struct iio_chan_spec const *chan,
> -			       int val,
> -			       int val2,
> -			       long mask)
> -{
> -	struct adis *st = iio_priv(indio_dev);
> -	int bits;
> -	s16 val16;
> -	u8 addr;
> -
> -	switch (mask) {
> -	case IIO_CHAN_INFO_CALIBBIAS:
> -		switch (chan->type) {
> -		case IIO_ACCEL:
> -			bits = 12;
> -			break;
> -		default:
> -			return -EINVAL;
> -		}
> -		val16 = val & ((1 << bits) - 1);
> -		addr = adis16204_addresses[chan->scan_index][1];
> -		return adis_write_reg_16(st, addr, val16);
> -	}
> -	return -EINVAL;
> -}
> -
> -static const struct iio_chan_spec adis16204_channels[] = {
> -	ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 0, 12),
> -	ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 0, 12),
> -	ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 0, 12),
> -	ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X,
> -			BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK),
> -			0, 14),
> -	ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y,
> -			BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK),
> -			0, 14),
> -	ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT,
> -			ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 0, 14),
> -	IIO_CHAN_SOFT_TIMESTAMP(5),
> -};
> -
> -static const struct iio_info adis16204_info = {
> -	.read_raw = &adis16204_read_raw,
> -	.write_raw = &adis16204_write_raw,
> -	.update_scan_mode = adis_update_scan_mode,
> -	.driver_module = THIS_MODULE,
> -};
> -
> -static const char * const adis16204_status_error_msgs[] = {
> -	[ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT] = "Self test failure",
> -	[ADIS16204_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure",
> -	[ADIS16204_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed",
> -	[ADIS16204_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V",
> -	[ADIS16204_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 2.975V",
> -};
> -
> -static const struct adis_data adis16204_data = {
> -	.read_delay = 20,
> -	.msc_ctrl_reg = ADIS16204_MSC_CTRL,
> -	.glob_cmd_reg = ADIS16204_GLOB_CMD,
> -	.diag_stat_reg = ADIS16204_DIAG_STAT,
> -
> -	.self_test_mask = ADIS16204_MSC_CTRL_SELF_TEST_EN,
> -	.startup_delay = ADIS16204_STARTUP_DELAY,
> -
> -	.status_error_msgs = adis16204_status_error_msgs,
> -	.status_error_mask = BIT(ADIS16204_DIAG_STAT_SELFTEST_FAIL_BIT) |
> -		BIT(ADIS16204_DIAG_STAT_SPI_FAIL_BIT) |
> -		BIT(ADIS16204_DIAG_STAT_FLASH_UPT_BIT) |
> -		BIT(ADIS16204_DIAG_STAT_POWER_HIGH_BIT) |
> -		BIT(ADIS16204_DIAG_STAT_POWER_LOW_BIT),
> -};
> -
> -static int adis16204_probe(struct spi_device *spi)
> -{
> -	int ret;
> -	struct adis *st;
> -	struct iio_dev *indio_dev;
> -
> -	/* setup the industrialio driver allocated elements */
> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
> -	if (!indio_dev)
> -		return -ENOMEM;
> -	st = iio_priv(indio_dev);
> -	/* this is only used for removal purposes */
> -	spi_set_drvdata(spi, indio_dev);
> -
> -	indio_dev->name = spi->dev.driver->name;
> -	indio_dev->dev.parent = &spi->dev;
> -	indio_dev->info = &adis16204_info;
> -	indio_dev->channels = adis16204_channels;
> -	indio_dev->num_channels = ARRAY_SIZE(adis16204_channels);
> -	indio_dev->modes = INDIO_DIRECT_MODE;
> -
> -	ret = adis_init(st, indio_dev, spi, &adis16204_data);
> -	if (ret)
> -		return ret;
> -
> -	ret = adis_setup_buffer_and_trigger(st, indio_dev, NULL);
> -	if (ret)
> -		return ret;
> -
> -	/* Get the device into a sane initial state */
> -	ret = adis_initial_startup(st);
> -	if (ret)
> -		goto error_cleanup_buffer_trigger;
> -	ret = iio_device_register(indio_dev);
> -	if (ret)
> -		goto error_cleanup_buffer_trigger;
> -
> -	return 0;
> -
> -error_cleanup_buffer_trigger:
> -	adis_cleanup_buffer_and_trigger(st, indio_dev);
> -	return ret;
> -}
> -
> -static int adis16204_remove(struct spi_device *spi)
> -{
> -	struct iio_dev *indio_dev = spi_get_drvdata(spi);
> -	struct adis *st = iio_priv(indio_dev);
> -
> -	iio_device_unregister(indio_dev);
> -	adis_cleanup_buffer_and_trigger(st, indio_dev);
> -
> -	return 0;
> -}
> -
> -static struct spi_driver adis16204_driver = {
> -	.driver = {
> -		.name = "adis16204",
> -	},
> -	.probe = adis16204_probe,
> -	.remove = adis16204_remove,
> -};
> -module_spi_driver(adis16204_driver);
> -
> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
> -MODULE_DESCRIPTION("ADIS16204 High-g Digital Impact Sensor and Recorder");
> -MODULE_LICENSE("GPL v2");
> -MODULE_ALIAS("spi:adis16204");
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] staging:iio:adis16220: Remove adis16204 driver
  2016-03-07 14:24   ` Peter Meerwald-Stadler
@ 2016-03-09 21:09     ` Jonathan Cameron
  0 siblings, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2016-03-09 21:09 UTC (permalink / raw)
  To: Peter Meerwald-Stadler, Lars-Peter Clausen; +Cc: Hartmut Knaack, linux-iio

On 07/03/16 14:24, Peter Meerwald-Stadler wrote:
> 
> the mail subject should say 'Remove adis16220 ...'
Fixedup and applied.

Thanks,

Jonathan
> 
>> The ADIS16220 part has been obsoleted, which makes it hard to get the
>> hardware to even test the driver. Considering this there is no expectation
>> that the driver will be cleaned up and be able to move out of staging, so
>> remove the driver.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
>> ---
>>  drivers/staging/iio/accel/Kconfig          |  11 -
>>  drivers/staging/iio/accel/Makefile         |   3 -
>>  drivers/staging/iio/accel/adis16220.h      | 140 --------
>>  drivers/staging/iio/accel/adis16220_core.c | 494 -----------------------------
>>  4 files changed, 648 deletions(-)
>>  delete mode 100644 drivers/staging/iio/accel/adis16220.h
>>  delete mode 100644 drivers/staging/iio/accel/adis16220_core.c
>>
>> diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig
>> index 5bc9803..f066aa3 100644
>> --- a/drivers/staging/iio/accel/Kconfig
>> +++ b/drivers/staging/iio/accel/Kconfig
>> @@ -39,17 +39,6 @@ config ADIS16209
>>  	  To compile this driver as a module, say M here: the module will be
>>  	  called adis16209.
>>  
>> -config ADIS16220
>> -	tristate "Analog Devices ADIS16220 Programmable Digital Vibration Sensor"
>> -	depends on SPI
>> -	select IIO_ADIS_LIB
>> -	help
>> -	  Say Y here to build support for Analog Devices adis16220 programmable
>> -	  digital vibration sensor.
>> -
>> -	  To compile this driver as a module, say M here: the module will be
>> -	  called adis16220.
>> -
>>  config ADIS16240
>>  	tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder"
>>  	depends on SPI
>> diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile
>> index 8ad9732..415329c 100644
>> --- a/drivers/staging/iio/accel/Makefile
>> +++ b/drivers/staging/iio/accel/Makefile
>> @@ -11,9 +11,6 @@ obj-$(CONFIG_ADIS16203) += adis16203.o
>>  adis16209-y             := adis16209_core.o
>>  obj-$(CONFIG_ADIS16209) += adis16209.o
>>  
>> -adis16220-y             := adis16220_core.o
>> -obj-$(CONFIG_ADIS16220) += adis16220.o
>> -
>>  adis16240-y             := adis16240_core.o
>>  obj-$(CONFIG_ADIS16240) += adis16240.o
>>  
>> diff --git a/drivers/staging/iio/accel/adis16220.h b/drivers/staging/iio/accel/adis16220.h
>> deleted file mode 100644
>> index eab8633..0000000
>> --- a/drivers/staging/iio/accel/adis16220.h
>> +++ /dev/null
>> @@ -1,140 +0,0 @@
>> -#ifndef SPI_ADIS16220_H_
>> -#define SPI_ADIS16220_H_
>> -
>> -#include <linux/iio/imu/adis.h>
>> -
>> -#define ADIS16220_STARTUP_DELAY	220 /* ms */
>> -
>> -/* Flash memory write count */
>> -#define ADIS16220_FLASH_CNT     0x00
>> -/* Control, acceleration offset adjustment control */
>> -#define ADIS16220_ACCL_NULL     0x02
>> -/* Control, AIN1 offset adjustment control */
>> -#define ADIS16220_AIN1_NULL     0x04
>> -/* Control, AIN2 offset adjustment control */
>> -#define ADIS16220_AIN2_NULL     0x06
>> -/* Output, power supply during capture */
>> -#define ADIS16220_CAPT_SUPPLY   0x0A
>> -/* Output, temperature during capture */
>> -#define ADIS16220_CAPT_TEMP     0x0C
>> -/* Output, peak acceleration during capture */
>> -#define ADIS16220_CAPT_PEAKA    0x0E
>> -/* Output, peak AIN1 level during capture */
>> -#define ADIS16220_CAPT_PEAK1    0x10
>> -/* Output, peak AIN2 level during capture */
>> -#define ADIS16220_CAPT_PEAK2    0x12
>> -/* Output, capture buffer for acceleration */
>> -#define ADIS16220_CAPT_BUFA     0x14
>> -/* Output, capture buffer for AIN1 */
>> -#define ADIS16220_CAPT_BUF1     0x16
>> -/* Output, capture buffer for AIN2 */
>> -#define ADIS16220_CAPT_BUF2     0x18
>> -/* Control, capture buffer address pointer */
>> -#define ADIS16220_CAPT_PNTR     0x1A
>> -/* Control, capture control register */
>> -#define ADIS16220_CAPT_CTRL     0x1C
>> -/* Control, capture period (automatic mode) */
>> -#define ADIS16220_CAPT_PRD      0x1E
>> -/* Control, Alarm A, acceleration peak threshold */
>> -#define ADIS16220_ALM_MAGA      0x20
>> -/* Control, Alarm 1, AIN1 peak threshold */
>> -#define ADIS16220_ALM_MAG1      0x22
>> -/* Control, Alarm 2, AIN2 peak threshold */
>> -#define ADIS16220_ALM_MAG2      0x24
>> -/* Control, Alarm S, peak threshold */
>> -#define ADIS16220_ALM_MAGS      0x26
>> -/* Control, alarm configuration register */
>> -#define ADIS16220_ALM_CTRL      0x28
>> -/* Control, general I/O configuration */
>> -#define ADIS16220_GPIO_CTRL     0x32
>> -/* Control, self-test control, AIN configuration */
>> -#define ADIS16220_MSC_CTRL      0x34
>> -/* Control, digital I/O configuration */
>> -#define ADIS16220_DIO_CTRL      0x36
>> -/* Control, filter configuration */
>> -#define ADIS16220_AVG_CNT       0x38
>> -/* Status, system status */
>> -#define ADIS16220_DIAG_STAT     0x3C
>> -/* Control, system commands */
>> -#define ADIS16220_GLOB_CMD      0x3E
>> -/* Status, self-test response */
>> -#define ADIS16220_ST_DELTA      0x40
>> -/* Lot Identification Code 1 */
>> -#define ADIS16220_LOT_ID1       0x52
>> -/* Lot Identification Code 2 */
>> -#define ADIS16220_LOT_ID2       0x54
>> -/* Product identifier; convert to decimal = 16220 */
>> -#define ADIS16220_PROD_ID       0x56
>> -/* Serial number */
>> -#define ADIS16220_SERIAL_NUM    0x58
>> -
>> -#define ADIS16220_CAPTURE_SIZE  2048
>> -
>> -/* MSC_CTRL */
>> -#define ADIS16220_MSC_CTRL_SELF_TEST_EN	        BIT(8)
>> -#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1	BIT(1)
>> -#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2	BIT(0)
>> -
>> -/* DIO_CTRL */
>> -#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND     (BIT(5) | BIT(4))
>> -#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND     (BIT(3) | BIT(2))
>> -#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH     BIT(1)
>> -#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH     BIT(0)
>> -
>> -/* DIAG_STAT */
>> -/* AIN2 sample > ALM_MAG2 */
>> -#define ADIS16220_DIAG_STAT_ALM_MAG2    BIT(14)
>> -/* AIN1 sample > ALM_MAG1 */
>> -#define ADIS16220_DIAG_STAT_ALM_MAG1    BIT(13)
>> -/* Acceleration sample > ALM_MAGA */
>> -#define ADIS16220_DIAG_STAT_ALM_MAGA    BIT(12)
>> -/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */
>> -#define ADIS16220_DIAG_STAT_ALM_MAGS    BIT(11)
>> -/* |Peak value in AIN2 data capture| > ALM_MAG2 */
>> -#define ADIS16220_DIAG_STAT_PEAK_AIN2   BIT(10)
>> -/* |Peak value in AIN1 data capture| > ALM_MAG1 */
>> -#define ADIS16220_DIAG_STAT_PEAK_AIN1   BIT(9)
>> -/* |Peak value in acceleration data capture| > ALM_MAGA */
>> -#define ADIS16220_DIAG_STAT_PEAK_ACCEL  BIT(8)
>> -/* Data ready, capture complete */
>> -#define ADIS16220_DIAG_STAT_DATA_RDY    BIT(7)
>> -#define ADIS16220_DIAG_STAT_FLASH_CHK	BIT(6)
>> -#define ADIS16220_DIAG_STAT_SELF_TEST	BIT(5)
>> -/* Capture period violation/interruption */
>> -#define ADIS16220_DIAG_STAT_VIOLATION_BIT	4
>> -/* SPI communications failure */
>> -#define ADIS16220_DIAG_STAT_SPI_FAIL_BIT	3
>> -/* Flash update failure */
>> -#define ADIS16220_DIAG_STAT_FLASH_UPT_BIT	2
>> -/* Power supply above 3.625 V */
>> -#define ADIS16220_DIAG_STAT_POWER_HIGH_BIT	1
>> -/* Power supply below 3.15 V */
>> -#define ADIS16220_DIAG_STAT_POWER_LOW_BIT	0
>> -
>> -/* GLOB_CMD */
>> -#define ADIS16220_GLOB_CMD_SW_RESET	BIT(7)
>> -#define ADIS16220_GLOB_CMD_SELF_TEST	BIT(2)
>> -#define ADIS16220_GLOB_CMD_PWR_DOWN	BIT(1)
>> -
>> -#define ADIS16220_MAX_TX 2048
>> -#define ADIS16220_MAX_RX 2048
>> -
>> -#define ADIS16220_SPI_BURST	(u32)(1000 * 1000)
>> -#define ADIS16220_SPI_FAST	(u32)(2000 * 1000)
>> -
>> -/**
>> - * struct adis16220_state - device instance specific data
>> - * @adis:		adis device
>> - * @tx:			transmit buffer
>> - * @rx:			receive buffer
>> - * @buf_lock:		mutex to protect tx and rx
>> - **/
>> -struct adis16220_state {
>> -	struct adis adis;
>> -
>> -	struct mutex		buf_lock;
>> -	u8			tx[ADIS16220_MAX_TX] ____cacheline_aligned;
>> -	u8			rx[ADIS16220_MAX_RX];
>> -};
>> -
>> -#endif /* SPI_ADIS16220_H_ */
>> diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c
>> deleted file mode 100644
>> index d016521..0000000
>> --- a/drivers/staging/iio/accel/adis16220_core.c
>> +++ /dev/null
>> @@ -1,494 +0,0 @@
>> -/*
>> - * ADIS16220 Programmable Digital Vibration Sensor driver
>> - *
>> - * Copyright 2010 Analog Devices Inc.
>> - *
>> - * Licensed under the GPL-2 or later.
>> - */
>> -
>> -#include <linux/delay.h>
>> -#include <linux/mutex.h>
>> -#include <linux/device.h>
>> -#include <linux/kernel.h>
>> -#include <linux/spi/spi.h>
>> -#include <linux/slab.h>
>> -#include <linux/sysfs.h>
>> -#include <linux/module.h>
>> -
>> -#include <linux/iio/iio.h>
>> -#include <linux/iio/sysfs.h>
>> -
>> -#include "adis16220.h"
>> -
>> -static ssize_t adis16220_read_16bit(struct device *dev,
>> -				    struct device_attribute *attr,
>> -				    char *buf)
>> -{
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct adis16220_state *st = iio_priv(indio_dev);
>> -	ssize_t ret;
>> -	u16 val;
>> -
>> -	/* Take the iio_dev status lock */
>> -	mutex_lock(&indio_dev->mlock);
>> -	ret = adis_read_reg_16(&st->adis, this_attr->address, &val);
>> -	mutex_unlock(&indio_dev->mlock);
>> -	if (ret)
>> -		return ret;
>> -	return sprintf(buf, "%u\n", val);
>> -}
>> -
>> -static ssize_t adis16220_write_16bit(struct device *dev,
>> -				     struct device_attribute *attr,
>> -				     const char *buf,
>> -				     size_t len)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
>> -	struct adis16220_state *st = iio_priv(indio_dev);
>> -	int ret;
>> -	u16 val;
>> -
>> -	ret = kstrtou16(buf, 10, &val);
>> -	if (ret)
>> -		goto error_ret;
>> -	ret = adis_write_reg_16(&st->adis, this_attr->address, val);
>> -
>> -error_ret:
>> -	return ret ? ret : len;
>> -}
>> -
>> -static int adis16220_capture(struct iio_dev *indio_dev)
>> -{
>> -	struct adis16220_state *st = iio_priv(indio_dev);
>> -	int ret;
>> -
>> -	 /* initiates a manual data capture */
>> -	ret = adis_write_reg_16(&st->adis, ADIS16220_GLOB_CMD, 0xBF08);
>> -	if (ret)
>> -		dev_err(&indio_dev->dev, "problem beginning capture");
>> -
>> -	usleep_range(10000, 11000); /* delay for capture to finish */
>> -
>> -	return ret;
>> -}
>> -
>> -static ssize_t adis16220_write_capture(struct device *dev,
>> -				       struct device_attribute *attr,
>> -				       const char *buf, size_t len)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
>> -	bool val;
>> -	int ret;
>> -
>> -	ret = strtobool(buf, &val);
>> -	if (ret)
>> -		return ret;
>> -	if (!val)
>> -		return -EINVAL;
>> -	ret = adis16220_capture(indio_dev);
>> -	if (ret)
>> -		return ret;
>> -
>> -	return len;
>> -}
>> -
>> -static ssize_t adis16220_capture_buffer_read(struct iio_dev *indio_dev,
>> -					     char *buf,
>> -					     loff_t off,
>> -					     size_t count,
>> -					     int addr)
>> -{
>> -	struct adis16220_state *st = iio_priv(indio_dev);
>> -	struct spi_transfer xfers[] = {
>> -		{
>> -			.tx_buf = st->tx,
>> -			.bits_per_word = 8,
>> -			.len = 2,
>> -			.cs_change = 1,
>> -			.delay_usecs = 25,
>> -		}, {
>> -			.tx_buf = st->tx,
>> -			.rx_buf = st->rx,
>> -			.bits_per_word = 8,
>> -			.cs_change = 1,
>> -			.delay_usecs = 25,
>> -		},
>> -	};
>> -	int ret;
>> -	int i;
>> -
>> -	if (unlikely(!count))
>> -		return count;
>> -
>> -	if ((off >= ADIS16220_CAPTURE_SIZE) || (count & 1) || (off & 1))
>> -		return -EINVAL;
>> -
>> -	if (off + count > ADIS16220_CAPTURE_SIZE)
>> -		count = ADIS16220_CAPTURE_SIZE - off;
>> -
>> -	/* write the begin position of capture buffer */
>> -	ret = adis_write_reg_16(&st->adis,
>> -				ADIS16220_CAPT_PNTR,
>> -				off > 1);
>> -	if (ret)
>> -		return -EIO;
>> -
>> -	/* read count/2 values from capture buffer */
>> -	mutex_lock(&st->buf_lock);
>> -
>> -	for (i = 0; i < count; i += 2) {
>> -		st->tx[i] = ADIS_READ_REG(addr);
>> -		st->tx[i + 1] = 0;
>> -	}
>> -	xfers[1].len = count;
>> -
>> -	ret = spi_sync_transfer(st->adis.spi, xfers, ARRAY_SIZE(xfers));
>> -	if (ret) {
>> -		mutex_unlock(&st->buf_lock);
>> -		return -EIO;
>> -	}
>> -
>> -	memcpy(buf, st->rx, count);
>> -
>> -	mutex_unlock(&st->buf_lock);
>> -	return count;
>> -}
>> -
>> -static ssize_t adis16220_accel_bin_read(struct file *filp, struct kobject *kobj,
>> -					struct bin_attribute *attr,
>> -					char *buf,
>> -					loff_t off,
>> -					size_t count)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
>> -
>> -	return adis16220_capture_buffer_read(indio_dev, buf,
>> -					off, count,
>> -					ADIS16220_CAPT_BUFA);
>> -}
>> -
>> -static struct bin_attribute accel_bin = {
>> -	.attr = {
>> -		.name = "accel_bin",
>> -		.mode = S_IRUGO,
>> -	},
>> -	.read = adis16220_accel_bin_read,
>> -	.size = ADIS16220_CAPTURE_SIZE,
>> -};
>> -
>> -static ssize_t adis16220_adc1_bin_read(struct file *filp, struct kobject *kobj,
>> -				       struct bin_attribute *attr,
>> -				       char *buf, loff_t off,
>> -				       size_t count)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
>> -
>> -	return adis16220_capture_buffer_read(indio_dev, buf,
>> -					off, count,
>> -					ADIS16220_CAPT_BUF1);
>> -}
>> -
>> -static struct bin_attribute adc1_bin = {
>> -	.attr = {
>> -		.name = "in0_bin",
>> -		.mode = S_IRUGO,
>> -	},
>> -	.read =  adis16220_adc1_bin_read,
>> -	.size = ADIS16220_CAPTURE_SIZE,
>> -};
>> -
>> -static ssize_t adis16220_adc2_bin_read(struct file *filp, struct kobject *kobj,
>> -				       struct bin_attribute *attr,
>> -				       char *buf, loff_t off,
>> -				       size_t count)
>> -{
>> -	struct iio_dev *indio_dev = dev_to_iio_dev(kobj_to_dev(kobj));
>> -
>> -	return adis16220_capture_buffer_read(indio_dev, buf,
>> -					off, count,
>> -					ADIS16220_CAPT_BUF2);
>> -}
>> -
>> -static struct bin_attribute adc2_bin = {
>> -	.attr = {
>> -		.name = "in1_bin",
>> -		.mode = S_IRUGO,
>> -	},
>> -	.read =  adis16220_adc2_bin_read,
>> -	.size = ADIS16220_CAPTURE_SIZE,
>> -};
>> -
>> -#define IIO_DEV_ATTR_CAPTURE(_store)				\
>> -	IIO_DEVICE_ATTR(capture, S_IWUSR, NULL, _store, 0)
>> -
>> -static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture);
>> -
>> -#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr)		\
>> -	IIO_DEVICE_ATTR(capture_count, _mode, _show, _store, _addr)
>> -
>> -static IIO_DEV_ATTR_CAPTURE_COUNT(S_IWUSR | S_IRUGO,
>> -		adis16220_read_16bit,
>> -		adis16220_write_16bit,
>> -		ADIS16220_CAPT_PNTR);
>> -
>> -enum adis16220_channel {
>> -	in_supply, in_1, in_2, accel, temp
>> -};
>> -
>> -struct adis16220_address_spec {
>> -	u8 addr;
>> -	u8 bits;
>> -	bool sign;
>> -};
>> -
>> -/* Address / bits / signed */
>> -static const struct adis16220_address_spec adis16220_addresses[][3] = {
>> -	[in_supply] =	{ { ADIS16220_CAPT_SUPPLY,	12, 0 }, },
>> -	[in_1] =	{ { ADIS16220_CAPT_BUF1,	16, 1 },
>> -			  { ADIS16220_AIN1_NULL,	16, 1 },
>> -			  { ADIS16220_CAPT_PEAK1,	16, 1 }, },
>> -	[in_2] =	{ { ADIS16220_CAPT_BUF2,	16, 1 },
>> -			  { ADIS16220_AIN2_NULL,	16, 1 },
>> -			  { ADIS16220_CAPT_PEAK2,	16, 1 }, },
>> -	[accel] =	{ { ADIS16220_CAPT_BUFA,	16, 1 },
>> -			  { ADIS16220_ACCL_NULL,	16, 1 },
>> -			  { ADIS16220_CAPT_PEAKA,	16, 1 }, },
>> -	[temp] =	{ { ADIS16220_CAPT_TEMP,	12, 0 }, }
>> -};
>> -
>> -static int adis16220_read_raw(struct iio_dev *indio_dev,
>> -			      struct iio_chan_spec const *chan,
>> -			      int *val, int *val2,
>> -			      long mask)
>> -{
>> -	struct adis16220_state *st = iio_priv(indio_dev);
>> -	const struct adis16220_address_spec *addr;
>> -	int ret = -EINVAL;
>> -	int addrind = 0;
>> -	u16 uval;
>> -	s16 sval;
>> -	u8 bits;
>> -
>> -	switch (mask) {
>> -	case IIO_CHAN_INFO_RAW:
>> -		addrind = 0;
>> -		break;
>> -	case IIO_CHAN_INFO_OFFSET:
>> -		if (chan->type == IIO_TEMP) {
>> -			*val = 25000 / -470 - 1278; /* 25 C = 1278 */
>> -			return IIO_VAL_INT;
>> -		}
>> -		addrind = 1;
>> -		break;
>> -	case IIO_CHAN_INFO_PEAK:
>> -		addrind = 2;
>> -		break;
>> -	case IIO_CHAN_INFO_SCALE:
>> -		switch (chan->type) {
>> -		case IIO_TEMP:
>> -			*val = -470; /* -0.47 C */
>> -			*val2 = 0;
>> -			return IIO_VAL_INT_PLUS_MICRO;
>> -		case IIO_ACCEL:
>> -			*val2 = IIO_G_TO_M_S_2(19073); /* 19.073 g */
>> -			return IIO_VAL_INT_PLUS_MICRO;
>> -		case IIO_VOLTAGE:
>> -			if (chan->channel == 0) {
>> -				*val = 1;
>> -				*val2 = 220700; /* 1.2207 mV */
>> -			} else {
>> -				/* Should really be dependent on VDD */
>> -				*val2 = 305180; /* 305.18 uV */
>> -			}
>> -			return IIO_VAL_INT_PLUS_MICRO;
>> -		default:
>> -			return -EINVAL;
>> -		}
>> -	default:
>> -		return -EINVAL;
>> -	}
>> -	addr = &adis16220_addresses[chan->address][addrind];
>> -	if (addr->sign) {
>> -		ret = adis_read_reg_16(&st->adis, addr->addr, &sval);
>> -		if (ret)
>> -			return ret;
>> -		bits = addr->bits;
>> -		sval &= (1 << bits) - 1;
>> -		sval = (s16)(sval << (16 - bits)) >> (16 - bits);
>> -		*val = sval;
>> -		return IIO_VAL_INT;
>> -	}
>> -	ret = adis_read_reg_16(&st->adis, addr->addr, &uval);
>> -	if (ret)
>> -		return ret;
>> -	bits = addr->bits;
>> -	uval &= (1 << bits) - 1;
>> -	*val = uval;
>> -	return IIO_VAL_INT;
>> -}
>> -
>> -static const struct iio_chan_spec adis16220_channels[] = {
>> -	{
>> -		.type = IIO_VOLTAGE,
>> -		.indexed = 1,
>> -		.channel = 0,
>> -		.extend_name = "supply",
>> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>> -			BIT(IIO_CHAN_INFO_SCALE),
>> -		.address = in_supply,
>> -	}, {
>> -		.type = IIO_ACCEL,
>> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>> -			BIT(IIO_CHAN_INFO_OFFSET) |
>> -			BIT(IIO_CHAN_INFO_SCALE) |
>> -			BIT(IIO_CHAN_INFO_PEAK),
>> -		.address = accel,
>> -	}, {
>> -		.type = IIO_TEMP,
>> -		.indexed = 1,
>> -		.channel = 0,
>> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>> -			BIT(IIO_CHAN_INFO_OFFSET) |
>> -			BIT(IIO_CHAN_INFO_SCALE),
>> -		.address = temp,
>> -	}, {
>> -		.type = IIO_VOLTAGE,
>> -		.indexed = 1,
>> -		.channel = 1,
>> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
>> -			BIT(IIO_CHAN_INFO_OFFSET) |
>> -			BIT(IIO_CHAN_INFO_SCALE),
>> -		.address = in_1,
>> -	}, {
>> -		.type = IIO_VOLTAGE,
>> -		.indexed = 1,
>> -		.channel = 2,
>> -		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
>> -		.address = in_2,
>> -	}
>> -};
>> -
>> -static struct attribute *adis16220_attributes[] = {
>> -	&iio_dev_attr_capture.dev_attr.attr,
>> -	&iio_dev_attr_capture_count.dev_attr.attr,
>> -	NULL
>> -};
>> -
>> -static const struct attribute_group adis16220_attribute_group = {
>> -	.attrs = adis16220_attributes,
>> -};
>> -
>> -static const struct iio_info adis16220_info = {
>> -	.attrs = &adis16220_attribute_group,
>> -	.driver_module = THIS_MODULE,
>> -	.read_raw = &adis16220_read_raw,
>> -};
>> -
>> -static const char * const adis16220_status_error_msgs[] = {
>> -	[ADIS16220_DIAG_STAT_VIOLATION_BIT] = "Capture period violation/interruption",
>> -	[ADIS16220_DIAG_STAT_SPI_FAIL_BIT] = "SPI failure",
>> -	[ADIS16220_DIAG_STAT_FLASH_UPT_BIT] = "Flash update failed",
>> -	[ADIS16220_DIAG_STAT_POWER_HIGH_BIT] = "Power supply above 3.625V",
>> -	[ADIS16220_DIAG_STAT_POWER_LOW_BIT] = "Power supply below 3.15V",
>> -};
>> -
>> -static const struct adis_data adis16220_data = {
>> -	.read_delay = 35,
>> -	.write_delay = 35,
>> -	.msc_ctrl_reg = ADIS16220_MSC_CTRL,
>> -	.glob_cmd_reg = ADIS16220_GLOB_CMD,
>> -	.diag_stat_reg = ADIS16220_DIAG_STAT,
>> -
>> -	.self_test_mask = ADIS16220_MSC_CTRL_SELF_TEST_EN,
>> -	.startup_delay = ADIS16220_STARTUP_DELAY,
>> -
>> -	.status_error_msgs = adis16220_status_error_msgs,
>> -	.status_error_mask = BIT(ADIS16220_DIAG_STAT_VIOLATION_BIT) |
>> -		BIT(ADIS16220_DIAG_STAT_SPI_FAIL_BIT) |
>> -		BIT(ADIS16220_DIAG_STAT_FLASH_UPT_BIT) |
>> -		BIT(ADIS16220_DIAG_STAT_POWER_HIGH_BIT) |
>> -		BIT(ADIS16220_DIAG_STAT_POWER_LOW_BIT),
>> -};
>> -
>> -static int adis16220_probe(struct spi_device *spi)
>> -{
>> -	int ret;
>> -	struct adis16220_state *st;
>> -	struct iio_dev *indio_dev;
>> -
>> -	/* setup the industrialio driver allocated elements */
>> -	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
>> -	if (!indio_dev)
>> -		return -ENOMEM;
>> -
>> -	st = iio_priv(indio_dev);
>> -	/* this is only used for removal purposes */
>> -	spi_set_drvdata(spi, indio_dev);
>> -
>> -	indio_dev->name = spi->dev.driver->name;
>> -	indio_dev->dev.parent = &spi->dev;
>> -	indio_dev->info = &adis16220_info;
>> -	indio_dev->modes = INDIO_DIRECT_MODE;
>> -	indio_dev->channels = adis16220_channels;
>> -	indio_dev->num_channels = ARRAY_SIZE(adis16220_channels);
>> -
>> -	ret = devm_iio_device_register(&spi->dev, indio_dev);
>> -	if (ret)
>> -		return ret;
>> -
>> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin);
>> -	if (ret)
>> -		return ret;
>> -
>> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc1_bin);
>> -	if (ret)
>> -		goto error_rm_accel_bin;
>> -
>> -	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc2_bin);
>> -	if (ret)
>> -		goto error_rm_adc1_bin;
>> -
>> -	ret = adis_init(&st->adis, indio_dev, spi, &adis16220_data);
>> -	if (ret)
>> -		goto error_rm_adc2_bin;
>> -	/* Get the device into a sane initial state */
>> -	ret = adis_initial_startup(&st->adis);
>> -	if (ret)
>> -		goto error_rm_adc2_bin;
>> -	return 0;
>> -
>> -error_rm_adc2_bin:
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
>> -error_rm_adc1_bin:
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
>> -error_rm_accel_bin:
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
>> -	return ret;
>> -}
>> -
>> -static int adis16220_remove(struct spi_device *spi)
>> -{
>> -	struct iio_dev *indio_dev = spi_get_drvdata(spi);
>> -
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc2_bin);
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
>> -	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
>> -
>> -	return 0;
>> -}
>> -
>> -static struct spi_driver adis16220_driver = {
>> -	.driver = {
>> -		.name = "adis16220",
>> -	},
>> -	.probe = adis16220_probe,
>> -	.remove = adis16220_remove,
>> -};
>> -module_spi_driver(adis16220_driver);
>> -
>> -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
>> -MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor");
>> -MODULE_LICENSE("GPL v2");
>> -MODULE_ALIAS("spi:adis16220");
>>
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver
  2016-03-09 21:07 ` [PATCH 1/2] staging:iio:adis16204: " Jonathan Cameron
@ 2016-03-10  9:44   ` Lars-Peter Clausen
  0 siblings, 0 replies; 6+ messages in thread
From: Lars-Peter Clausen @ 2016-03-10  9:44 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: Hartmut Knaack, Peter Meerwald, linux-iio

On 03/09/2016 10:07 PM, Jonathan Cameron wrote:
> On 07/03/16 14:22, Lars-Peter Clausen wrote:
>> The ADIS16204 part has been obsoleted, which makes it hard to get the
>> hardware to even test the driver. Considering this there is no expectation
>> that the driver will be cleaned up and be able to move out of staging, so
>> remove the driver.
>>
>> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Applied. Pity in a way as these were interesting parts.
> (read that as downright odd/esoteric ;)

The interesting one was the 220, but there are others like it and I get
asked on a regular basis if it is supported yet, so they might come back at
some point.

- Lars

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-03-10  9:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-07 14:22 [PATCH 1/2] staging:iio:adis16204: Remove adis16204 driver Lars-Peter Clausen
2016-03-07 14:22 ` [PATCH 2/2] staging:iio:adis16220: " Lars-Peter Clausen
2016-03-07 14:24   ` Peter Meerwald-Stadler
2016-03-09 21:09     ` Jonathan Cameron
2016-03-09 21:07 ` [PATCH 1/2] staging:iio:adis16204: " Jonathan Cameron
2016-03-10  9:44   ` Lars-Peter Clausen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.