#include <linux/module.h>
#include <linux/spi/spi.h>
#include <linux/iio/sysfs.h>
#include <linux/iio/iio.h>
#define MAX5487_WRITE_WIPER_A (0x01 << 8)
#define MAX5487_WRITE_WIPER_B (0x02 << 8)
#define MAX5487_COPY_AB_TO_NV (0x23 << 8)
#define MAX5487_COPY_NV_TO_AB (0x33 << 8)
#define MAX5487_MAX_POS 255
#define MAX5487_CHANNEL(ch, addr) { \
.type = IIO_RESISTANCE, \
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
static const struct iio_chan_spec max5487_channels[] = {
MAX5487_CHANNEL(0, MAX5487_WRITE_WIPER_A),
MAX5487_CHANNEL(1, MAX5487_WRITE_WIPER_B),
static int max5487_write_cmd(struct spi_device *spi, u16 cmd)
return spi_write(spi, (const void *) &cmd, sizeof(u16));
static int max5487_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int *val, int *val2, long mask)
struct max5487_data *data = iio_priv(indio_dev);
if (mask != IIO_CHAN_INFO_SCALE)
*val = 1000 * data->kohms;