* [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.