aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/resolver/ad2s90.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2011-11-29 01:51:07 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2011-11-29 01:51:07 -0800
commit0d2cd91bf7b1a7cc1d638296111fcc2bcf5c0bb4 (patch)
treed2ca69347816c27f9dc352581f5d0fe76811cd49 /drivers/staging/iio/resolver/ad2s90.c
parentInput: elantech - add resolution query support for v4 hardware (diff)
parentLinux 3.2-rc3 (diff)
downloadlinux-dev-0d2cd91bf7b1a7cc1d638296111fcc2bcf5c0bb4.tar.xz
linux-dev-0d2cd91bf7b1a7cc1d638296111fcc2bcf5c0bb4.zip
Merge commit 'v3.2-rc3' into next
Diffstat (limited to 'drivers/staging/iio/resolver/ad2s90.c')
-rw-r--r--drivers/staging/iio/resolver/ad2s90.c60
1 files changed, 30 insertions, 30 deletions
diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
index 166e2414ac85..a9200d949dcd 100644
--- a/drivers/staging/iio/resolver/ad2s90.c
+++ b/drivers/staging/iio/resolver/ad2s90.c
@@ -14,59 +14,49 @@
#include <linux/spi/spi.h>
#include <linux/slab.h>
#include <linux/sysfs.h>
+#include <linux/module.h>
#include "../iio.h"
#include "../sysfs.h"
-#define DRV_NAME "ad2s90"
-
struct ad2s90_state {
struct mutex lock;
- struct iio_dev *idev;
struct spi_device *sdev;
u8 rx[2] ____cacheline_aligned;
};
-static ssize_t ad2s90_show_angular(struct device *dev,
- struct device_attribute *attr, char *buf)
+static int ad2s90_read_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int *val,
+ int *val2,
+ long m)
{
int ret;
- ssize_t len = 0;
- u16 val;
- struct ad2s90_state *st = iio_priv(dev_get_drvdata(dev));
+ struct ad2s90_state *st = iio_priv(indio_dev);
mutex_lock(&st->lock);
ret = spi_read(st->sdev, st->rx, 2);
if (ret)
goto error_ret;
- val = (((u16)(st->rx[0])) << 4) | ((st->rx[1] & 0xF0) >> 4);
- len = sprintf(buf, "%d\n", val);
+ *val = (((u16)(st->rx[0])) << 4) | ((st->rx[1] & 0xF0) >> 4);
+
error_ret:
mutex_unlock(&st->lock);
- return ret ? ret : len;
+ return IIO_VAL_INT;
}
-#define IIO_DEV_ATTR_SIMPLE_RESOLVER(_show) \
- IIO_DEVICE_ATTR(angular, S_IRUGO, _show, NULL, 0)
-
-static IIO_DEV_ATTR_SIMPLE_RESOLVER(ad2s90_show_angular);
-
-static struct attribute *ad2s90_attributes[] = {
- &iio_dev_attr_angular.dev_attr.attr,
- NULL,
-};
-
-static const struct attribute_group ad2s90_attribute_group = {
- .name = DRV_NAME,
- .attrs = ad2s90_attributes,
-};
-
static const struct iio_info ad2s90_info = {
- .attrs = &ad2s90_attribute_group,
+ .read_raw = &ad2s90_read_raw,
.driver_module = THIS_MODULE,
};
+static const struct iio_chan_spec ad2s90_chan = {
+ .type = IIO_ANGL,
+ .indexed = 1,
+ .channel = 0,
+};
+
static int __devinit ad2s90_probe(struct spi_device *spi)
{
struct iio_dev *indio_dev;
@@ -86,8 +76,11 @@ static int __devinit ad2s90_probe(struct spi_device *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;
- ret = iio_device_register(st->idev);
+ ret = iio_device_register(indio_dev);
if (ret)
goto error_free_dev;
@@ -99,7 +92,7 @@ static int __devinit ad2s90_probe(struct spi_device *spi)
return 0;
error_free_dev:
- iio_free_device(st->idev);
+ iio_free_device(indio_dev);
error_ret:
return ret;
}
@@ -107,17 +100,24 @@ error_ret:
static int __devexit ad2s90_remove(struct spi_device *spi)
{
iio_device_unregister(spi_get_drvdata(spi));
+ iio_free_device(spi_get_drvdata(spi));
return 0;
}
+static const struct spi_device_id ad2s90_id[] = {
+ { "ad2s90" },
+ {}
+};
+
static struct spi_driver ad2s90_driver = {
.driver = {
- .name = DRV_NAME,
+ .name = "ad2s90",
.owner = THIS_MODULE,
},
.probe = ad2s90_probe,
.remove = __devexit_p(ad2s90_remove),
+ .id_table = ad2s90_id,
};
static __init int ad2s90_spi_init(void)