On Fri, 2018-11-23 at 22:23 -0200, Matheus Tavares wrote: > Move ad2s90 resolver driver out of staging to the main tree. > Acked-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> > Signed-off-by: Matheus Tavares <matheus.bernardino@xxxxxx> > Signed-off-by: Victor Colombo <victorcolombo@xxxxxxxxx> > --- > Changes in v3: > - none > > Changes in v2: > - Disabled git move detection, to see the whole code, as Jonathan > suggested > > drivers/iio/resolver/Kconfig | 10 ++ > drivers/iio/resolver/Makefile | 1 + > drivers/iio/resolver/ad2s90.c | 131 ++++++++++++++++++++++++++ > drivers/staging/iio/resolver/Kconfig | 10 -- > drivers/staging/iio/resolver/Makefile | 1 - > drivers/staging/iio/resolver/ad2s90.c | 131 -------------------------- > 6 files changed, 142 insertions(+), 142 deletions(-) > create mode 100644 drivers/iio/resolver/ad2s90.c > delete mode 100644 drivers/staging/iio/resolver/ad2s90.c > > diff --git a/drivers/iio/resolver/Kconfig b/drivers/iio/resolver/Kconfig > index 2ced9f22aa70..786801be54f6 100644 > --- a/drivers/iio/resolver/Kconfig > +++ b/drivers/iio/resolver/Kconfig > @@ -3,6 +3,16 @@ > # > menu "Resolver to digital converters" > > +config AD2S90 > + tristate "Analog Devices ad2s90 driver" > + depends on SPI > + help > + Say yes here to build support for Analog Devices spi resolver > + to digital converters, ad2s90, provides direct access via sysfs. > + > + To compile this driver as a module, choose M here: the > + module will be called ad2s90. > + > config AD2S1200 > tristate "Analog Devices ad2s1200/ad2s1205 driver" > depends on SPI > diff --git a/drivers/iio/resolver/Makefile > b/drivers/iio/resolver/Makefile > index 4e1dccae07e7..398d82d50028 100644 > --- a/drivers/iio/resolver/Makefile > +++ b/drivers/iio/resolver/Makefile > @@ -2,4 +2,5 @@ > # Makefile for Resolver/Synchro drivers > # > > +obj-$(CONFIG_AD2S90) += ad2s90.o > obj-$(CONFIG_AD2S1200) += ad2s1200.o > diff --git a/drivers/iio/resolver/ad2s90.c > b/drivers/iio/resolver/ad2s90.c > new file mode 100644 > index 000000000000..a41f5cb10da5 > --- /dev/null > +++ b/drivers/iio/resolver/ad2s90.c > @@ -0,0 +1,131 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * ad2s90.c simple support for the ADI Resolver to Digital Converters: > AD2S90 > + * > + * Copyright (c) 2010-2010 Analog Devices Inc. > + */ > +#include <linux/types.h> > +#include <linux/mutex.h> > +#include <linux/device.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> > + > +/* > + * Although chip's max frequency is 2Mhz, it needs 600ns between CS and > the > + * first falling edge of SCLK, so frequency should be at most 1 / (2 * > 6e-7) > + */ > +#define AD2S90_MAX_SPI_FREQ_HZ 830000 > + > +struct ad2s90_state { > + struct mutex lock; /* lock to protect rx buffer */ > + struct spi_device *sdev; > + u8 rx[2] ____cacheline_aligned; > +}; > + > +static int ad2s90_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, > + int *val, > + int *val2, > + long m) > +{ > + int ret; > + struct ad2s90_state *st = iio_priv(indio_dev); > + > + if (chan->type != IIO_ANGL) > + return -EINVAL; > + > + switch (m) { > + case IIO_CHAN_INFO_SCALE: > + /* 2 * Pi / 2^12 */ > + *val = 6283; /* mV */ > + *val2 = 12; > + return IIO_VAL_FRACTIONAL_LOG2; > + case IIO_CHAN_INFO_RAW: > + mutex_lock(&st->lock); > + ret = spi_read(st->sdev, st->rx, 2); > + if (ret < 0) { > + mutex_unlock(&st->lock); > + return ret; > + } > + *val = (((u16)(st->rx[0])) << 4) | ((st->rx[1] & 0xF0) >> > 4); > + > + mutex_unlock(&st->lock); > + > + return IIO_VAL_INT; > + default: > + break; > + } > + > + return -EINVAL; > +} > + > +static const struct iio_info ad2s90_info = { > + .read_raw = ad2s90_read_raw, > +}; > + > +static const struct iio_chan_spec ad2s90_chan = { > + .type = IIO_ANGL, > + .indexed = 1, > + .channel = 0, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > BIT(IIO_CHAN_INFO_SCALE), > +}; > + > +static int ad2s90_probe(struct spi_device *spi) > +{ > + struct iio_dev *indio_dev; > + struct ad2s90_state *st; > + > + if (spi->max_speed_hz > AD2S90_MAX_SPI_FREQ_HZ) { > + dev_err(&spi->dev, "SPI CLK, %d Hz exceeds %d Hz\n", > + spi->max_speed_hz, AD2S90_MAX_SPI_FREQ_HZ); > + return -EINVAL; > + } > + > + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); > + if (!indio_dev) > + return -ENOMEM; > + st = iio_priv(indio_dev); > + spi_set_drvdata(spi, indio_dev); > + > + mutex_init(&st->lock); > + st->sdev = spi; > + indio_dev->dev.parent = &spi->dev; > + indio_dev->info = &ad2s90_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->channels = &ad2s90_chan; > + indio_dev->num_channels = 1; > + indio_dev->name = spi_get_device_id(spi)->name; > + > + return devm_iio_device_register(indio_dev->dev.parent, indio_dev); > +} > + > +static const struct of_device_id ad2s90_of_match[] = { > + { .compatible = "adi,ad2s90", }, > + {} > +}; > +MODULE_DEVICE_TABLE(of, ad2s90_of_match); > + > +static const struct spi_device_id ad2s90_id[] = { > + { "ad2s90" }, > + {} > +}; > +MODULE_DEVICE_TABLE(spi, ad2s90_id); > + > +static struct spi_driver ad2s90_driver = { > + .driver = { > + .name = "ad2s90", > + .of_match_table = ad2s90_of_match, > + }, > + .probe = ad2s90_probe, > + .id_table = ad2s90_id, > +}; > +module_spi_driver(ad2s90_driver); > + > +MODULE_AUTHOR("Graff Yang <graff.yang@xxxxxxxxx>"); > +MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI > driver"); > +MODULE_LICENSE("GPL v2"); > diff --git a/drivers/staging/iio/resolver/Kconfig > b/drivers/staging/iio/resolver/Kconfig > index 6a469ee6101f..4a727c17bb8f 100644 > --- a/drivers/staging/iio/resolver/Kconfig > +++ b/drivers/staging/iio/resolver/Kconfig > @@ -3,16 +3,6 @@ > # > menu "Resolver to digital converters" > > -config AD2S90 > - tristate "Analog Devices ad2s90 driver" > - depends on SPI > - help > - Say yes here to build support for Analog Devices spi resolver > - to digital converters, ad2s90, provides direct access via sysfs. > - > - To compile this driver as a module, choose M here: the > - module will be called ad2s90. > - > config AD2S1210 > tristate "Analog Devices ad2s1210 driver" > depends on SPI > diff --git a/drivers/staging/iio/resolver/Makefile > b/drivers/staging/iio/resolver/Makefile > index 8d901dc7500b..b2049f2ce36e 100644 > --- a/drivers/staging/iio/resolver/Makefile > +++ b/drivers/staging/iio/resolver/Makefile > @@ -2,5 +2,4 @@ > # Makefile for Resolver/Synchro drivers > # > > -obj-$(CONFIG_AD2S90) += ad2s90.o > obj-$(CONFIG_AD2S1210) += ad2s1210.o > diff --git a/drivers/staging/iio/resolver/ad2s90.c > b/drivers/staging/iio/resolver/ad2s90.c > deleted file mode 100644 > index a41f5cb10da5..000000000000 > --- a/drivers/staging/iio/resolver/ad2s90.c > +++ /dev/null > @@ -1,131 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/* > - * ad2s90.c simple support for the ADI Resolver to Digital Converters: > AD2S90 > - * > - * Copyright (c) 2010-2010 Analog Devices Inc. > - */ > -#include <linux/types.h> > -#include <linux/mutex.h> > -#include <linux/device.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> > - > -/* > - * Although chip's max frequency is 2Mhz, it needs 600ns between CS and > the > - * first falling edge of SCLK, so frequency should be at most 1 / (2 * > 6e-7) > - */ > -#define AD2S90_MAX_SPI_FREQ_HZ 830000 > - > -struct ad2s90_state { > - struct mutex lock; /* lock to protect rx buffer */ > - struct spi_device *sdev; > - u8 rx[2] ____cacheline_aligned; > -}; > - > -static int ad2s90_read_raw(struct iio_dev *indio_dev, > - struct iio_chan_spec const *chan, > - int *val, > - int *val2, > - long m) > -{ > - int ret; > - struct ad2s90_state *st = iio_priv(indio_dev); > - > - if (chan->type != IIO_ANGL) > - return -EINVAL; > - > - switch (m) { > - case IIO_CHAN_INFO_SCALE: > - /* 2 * Pi / 2^12 */ > - *val = 6283; /* mV */ > - *val2 = 12; > - return IIO_VAL_FRACTIONAL_LOG2; > - case IIO_CHAN_INFO_RAW: > - mutex_lock(&st->lock); > - ret = spi_read(st->sdev, st->rx, 2); > - if (ret < 0) { > - mutex_unlock(&st->lock); > - return ret; > - } > - *val = (((u16)(st->rx[0])) << 4) | ((st->rx[1] & 0xF0) >> > 4); > - > - mutex_unlock(&st->lock); > - > - return IIO_VAL_INT; > - default: > - break; > - } > - > - return -EINVAL; > -} > - > -static const struct iio_info ad2s90_info = { > - .read_raw = ad2s90_read_raw, > -}; > - > -static const struct iio_chan_spec ad2s90_chan = { > - .type = IIO_ANGL, > - .indexed = 1, > - .channel = 0, > - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > BIT(IIO_CHAN_INFO_SCALE), > -}; > - > -static int ad2s90_probe(struct spi_device *spi) > -{ > - struct iio_dev *indio_dev; > - struct ad2s90_state *st; > - > - if (spi->max_speed_hz > AD2S90_MAX_SPI_FREQ_HZ) { > - dev_err(&spi->dev, "SPI CLK, %d Hz exceeds %d Hz\n", > - spi->max_speed_hz, AD2S90_MAX_SPI_FREQ_HZ); > - return -EINVAL; > - } > - > - indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); > - if (!indio_dev) > - return -ENOMEM; > - st = iio_priv(indio_dev); > - spi_set_drvdata(spi, indio_dev); > - > - mutex_init(&st->lock); > - st->sdev = spi; > - indio_dev->dev.parent = &spi->dev; > - indio_dev->info = &ad2s90_info; > - indio_dev->modes = INDIO_DIRECT_MODE; > - indio_dev->channels = &ad2s90_chan; > - indio_dev->num_channels = 1; > - indio_dev->name = spi_get_device_id(spi)->name; > - > - return devm_iio_device_register(indio_dev->dev.parent, indio_dev); > -} > - > -static const struct of_device_id ad2s90_of_match[] = { > - { .compatible = "adi,ad2s90", }, > - {} > -}; > -MODULE_DEVICE_TABLE(of, ad2s90_of_match); > - > -static const struct spi_device_id ad2s90_id[] = { > - { "ad2s90" }, > - {} > -}; > -MODULE_DEVICE_TABLE(spi, ad2s90_id); > - > -static struct spi_driver ad2s90_driver = { > - .driver = { > - .name = "ad2s90", > - .of_match_table = ad2s90_of_match, > - }, > - .probe = ad2s90_probe, > - .id_table = ad2s90_id, > -}; > -module_spi_driver(ad2s90_driver); > - > -MODULE_AUTHOR("Graff Yang <graff.yang@xxxxxxxxx>"); > -MODULE_DESCRIPTION("Analog Devices AD2S90 Resolver to Digital SPI > driver"); > -MODULE_LICENSE("GPL v2");