0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/device.h>
0009 #include <linux/kernel.h>
0010 #include <linux/slab.h>
0011 #include <linux/sysfs.h>
0012 #include <linux/spi/spi.h>
0013 #include <linux/regulator/consumer.h>
0014 #include <linux/err.h>
0015 #include <linux/delay.h>
0016 #include <linux/mod_devicetable.h>
0017 #include <linux/module.h>
0018 #include <linux/interrupt.h>
0019 #include <linux/bitops.h>
0020
0021 #include <linux/iio/iio.h>
0022 #include <linux/iio/sysfs.h>
0023 #include <linux/iio/buffer.h>
0024 #include <linux/iio/trigger_consumer.h>
0025 #include <linux/iio/triggered_buffer.h>
0026
0027 #define AD7298_WRITE BIT(15)
0028 #define AD7298_REPEAT BIT(14)
0029 #define AD7298_CH(x) BIT(13 - (x))
0030 #define AD7298_TSENSE BIT(5)
0031 #define AD7298_EXTREF BIT(2)
0032 #define AD7298_TAVG BIT(1)
0033 #define AD7298_PDD BIT(0)
0034
0035 #define AD7298_MAX_CHAN 8
0036 #define AD7298_INTREF_mV 2500
0037
0038 #define AD7298_CH_TEMP 9
0039
0040 struct ad7298_state {
0041 struct spi_device *spi;
0042 struct regulator *reg;
0043 unsigned ext_ref;
0044 struct spi_transfer ring_xfer[10];
0045 struct spi_transfer scan_single_xfer[3];
0046 struct spi_message ring_msg;
0047 struct spi_message scan_single_msg;
0048
0049
0050
0051
0052 __be16 rx_buf[12] __aligned(IIO_DMA_MINALIGN);
0053 __be16 tx_buf[2];
0054 };
0055
0056 #define AD7298_V_CHAN(index) \
0057 { \
0058 .type = IIO_VOLTAGE, \
0059 .indexed = 1, \
0060 .channel = index, \
0061 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
0062 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
0063 .address = index, \
0064 .scan_index = index, \
0065 .scan_type = { \
0066 .sign = 'u', \
0067 .realbits = 12, \
0068 .storagebits = 16, \
0069 .endianness = IIO_BE, \
0070 }, \
0071 }
0072
0073 static const struct iio_chan_spec ad7298_channels[] = {
0074 {
0075 .type = IIO_TEMP,
0076 .indexed = 1,
0077 .channel = 0,
0078 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
0079 BIT(IIO_CHAN_INFO_SCALE) |
0080 BIT(IIO_CHAN_INFO_OFFSET),
0081 .address = AD7298_CH_TEMP,
0082 .scan_index = -1,
0083 .scan_type = {
0084 .sign = 's',
0085 .realbits = 32,
0086 .storagebits = 32,
0087 },
0088 },
0089 AD7298_V_CHAN(0),
0090 AD7298_V_CHAN(1),
0091 AD7298_V_CHAN(2),
0092 AD7298_V_CHAN(3),
0093 AD7298_V_CHAN(4),
0094 AD7298_V_CHAN(5),
0095 AD7298_V_CHAN(6),
0096 AD7298_V_CHAN(7),
0097 IIO_CHAN_SOFT_TIMESTAMP(8),
0098 };
0099
0100
0101
0102
0103 static int ad7298_update_scan_mode(struct iio_dev *indio_dev,
0104 const unsigned long *active_scan_mask)
0105 {
0106 struct ad7298_state *st = iio_priv(indio_dev);
0107 int i, m;
0108 unsigned short command;
0109 int scan_count;
0110
0111
0112 scan_count = bitmap_weight(active_scan_mask, indio_dev->masklength);
0113
0114 command = AD7298_WRITE | st->ext_ref;
0115
0116 for (i = 0, m = AD7298_CH(0); i < AD7298_MAX_CHAN; i++, m >>= 1)
0117 if (test_bit(i, active_scan_mask))
0118 command |= m;
0119
0120 st->tx_buf[0] = cpu_to_be16(command);
0121
0122
0123 st->ring_xfer[0].tx_buf = &st->tx_buf[0];
0124 st->ring_xfer[0].len = 2;
0125 st->ring_xfer[0].cs_change = 1;
0126 st->ring_xfer[1].tx_buf = &st->tx_buf[1];
0127 st->ring_xfer[1].len = 2;
0128 st->ring_xfer[1].cs_change = 1;
0129
0130 spi_message_init(&st->ring_msg);
0131 spi_message_add_tail(&st->ring_xfer[0], &st->ring_msg);
0132 spi_message_add_tail(&st->ring_xfer[1], &st->ring_msg);
0133
0134 for (i = 0; i < scan_count; i++) {
0135 st->ring_xfer[i + 2].rx_buf = &st->rx_buf[i];
0136 st->ring_xfer[i + 2].len = 2;
0137 st->ring_xfer[i + 2].cs_change = 1;
0138 spi_message_add_tail(&st->ring_xfer[i + 2], &st->ring_msg);
0139 }
0140
0141 st->ring_xfer[i + 1].cs_change = 0;
0142
0143 return 0;
0144 }
0145
0146 static irqreturn_t ad7298_trigger_handler(int irq, void *p)
0147 {
0148 struct iio_poll_func *pf = p;
0149 struct iio_dev *indio_dev = pf->indio_dev;
0150 struct ad7298_state *st = iio_priv(indio_dev);
0151 int b_sent;
0152
0153 b_sent = spi_sync(st->spi, &st->ring_msg);
0154 if (b_sent)
0155 goto done;
0156
0157 iio_push_to_buffers_with_timestamp(indio_dev, st->rx_buf,
0158 iio_get_time_ns(indio_dev));
0159
0160 done:
0161 iio_trigger_notify_done(indio_dev->trig);
0162
0163 return IRQ_HANDLED;
0164 }
0165
0166 static int ad7298_scan_direct(struct ad7298_state *st, unsigned ch)
0167 {
0168 int ret;
0169 st->tx_buf[0] = cpu_to_be16(AD7298_WRITE | st->ext_ref |
0170 (AD7298_CH(0) >> ch));
0171
0172 ret = spi_sync(st->spi, &st->scan_single_msg);
0173 if (ret)
0174 return ret;
0175
0176 return be16_to_cpu(st->rx_buf[0]);
0177 }
0178
0179 static int ad7298_scan_temp(struct ad7298_state *st, int *val)
0180 {
0181 int ret;
0182 __be16 buf;
0183
0184 buf = cpu_to_be16(AD7298_WRITE | AD7298_TSENSE |
0185 AD7298_TAVG | st->ext_ref);
0186
0187 ret = spi_write(st->spi, (u8 *)&buf, 2);
0188 if (ret)
0189 return ret;
0190
0191 buf = cpu_to_be16(0);
0192
0193 ret = spi_write(st->spi, (u8 *)&buf, 2);
0194 if (ret)
0195 return ret;
0196
0197 usleep_range(101, 1000);
0198
0199 ret = spi_read(st->spi, (u8 *)&buf, 2);
0200 if (ret)
0201 return ret;
0202
0203 *val = sign_extend32(be16_to_cpu(buf), 11);
0204
0205 return 0;
0206 }
0207
0208 static int ad7298_get_ref_voltage(struct ad7298_state *st)
0209 {
0210 int vref;
0211
0212 if (st->reg) {
0213 vref = regulator_get_voltage(st->reg);
0214 if (vref < 0)
0215 return vref;
0216
0217 return vref / 1000;
0218 } else {
0219 return AD7298_INTREF_mV;
0220 }
0221 }
0222
0223 static int ad7298_read_raw(struct iio_dev *indio_dev,
0224 struct iio_chan_spec const *chan,
0225 int *val,
0226 int *val2,
0227 long m)
0228 {
0229 int ret;
0230 struct ad7298_state *st = iio_priv(indio_dev);
0231
0232 switch (m) {
0233 case IIO_CHAN_INFO_RAW:
0234 ret = iio_device_claim_direct_mode(indio_dev);
0235 if (ret)
0236 return ret;
0237
0238 if (chan->address == AD7298_CH_TEMP)
0239 ret = ad7298_scan_temp(st, val);
0240 else
0241 ret = ad7298_scan_direct(st, chan->address);
0242
0243 iio_device_release_direct_mode(indio_dev);
0244
0245 if (ret < 0)
0246 return ret;
0247
0248 if (chan->address != AD7298_CH_TEMP)
0249 *val = ret & GENMASK(chan->scan_type.realbits - 1, 0);
0250
0251 return IIO_VAL_INT;
0252 case IIO_CHAN_INFO_SCALE:
0253 switch (chan->type) {
0254 case IIO_VOLTAGE:
0255 *val = ad7298_get_ref_voltage(st);
0256 *val2 = chan->scan_type.realbits;
0257 return IIO_VAL_FRACTIONAL_LOG2;
0258 case IIO_TEMP:
0259 *val = ad7298_get_ref_voltage(st);
0260 *val2 = 10;
0261 return IIO_VAL_FRACTIONAL;
0262 default:
0263 return -EINVAL;
0264 }
0265 case IIO_CHAN_INFO_OFFSET:
0266 *val = 1093 - 2732500 / ad7298_get_ref_voltage(st);
0267 return IIO_VAL_INT;
0268 }
0269 return -EINVAL;
0270 }
0271
0272 static const struct iio_info ad7298_info = {
0273 .read_raw = &ad7298_read_raw,
0274 .update_scan_mode = ad7298_update_scan_mode,
0275 };
0276
0277 static void ad7298_reg_disable(void *data)
0278 {
0279 struct regulator *reg = data;
0280
0281 regulator_disable(reg);
0282 }
0283
0284 static int ad7298_probe(struct spi_device *spi)
0285 {
0286 struct ad7298_state *st;
0287 struct iio_dev *indio_dev;
0288 int ret;
0289
0290 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
0291 if (indio_dev == NULL)
0292 return -ENOMEM;
0293
0294 st = iio_priv(indio_dev);
0295
0296 st->reg = devm_regulator_get_optional(&spi->dev, "vref");
0297 if (!IS_ERR(st->reg)) {
0298 st->ext_ref = AD7298_EXTREF;
0299 } else {
0300 ret = PTR_ERR(st->reg);
0301 if (ret != -ENODEV)
0302 return ret;
0303
0304 st->reg = NULL;
0305 }
0306
0307 if (st->reg) {
0308 ret = regulator_enable(st->reg);
0309 if (ret)
0310 return ret;
0311
0312 ret = devm_add_action_or_reset(&spi->dev, ad7298_reg_disable,
0313 st->reg);
0314 if (ret)
0315 return ret;
0316 }
0317
0318 st->spi = spi;
0319
0320 indio_dev->name = spi_get_device_id(spi)->name;
0321 indio_dev->modes = INDIO_DIRECT_MODE;
0322 indio_dev->channels = ad7298_channels;
0323 indio_dev->num_channels = ARRAY_SIZE(ad7298_channels);
0324 indio_dev->info = &ad7298_info;
0325
0326
0327
0328 st->scan_single_xfer[0].tx_buf = &st->tx_buf[0];
0329 st->scan_single_xfer[0].len = 2;
0330 st->scan_single_xfer[0].cs_change = 1;
0331 st->scan_single_xfer[1].tx_buf = &st->tx_buf[1];
0332 st->scan_single_xfer[1].len = 2;
0333 st->scan_single_xfer[1].cs_change = 1;
0334 st->scan_single_xfer[2].rx_buf = &st->rx_buf[0];
0335 st->scan_single_xfer[2].len = 2;
0336
0337 spi_message_init(&st->scan_single_msg);
0338 spi_message_add_tail(&st->scan_single_xfer[0], &st->scan_single_msg);
0339 spi_message_add_tail(&st->scan_single_xfer[1], &st->scan_single_msg);
0340 spi_message_add_tail(&st->scan_single_xfer[2], &st->scan_single_msg);
0341
0342 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, NULL,
0343 &ad7298_trigger_handler, NULL);
0344 if (ret)
0345 return ret;
0346
0347 return devm_iio_device_register(&spi->dev, indio_dev);
0348 }
0349
0350 static const struct acpi_device_id ad7298_acpi_ids[] = {
0351 { "INT3494", 0 },
0352 { }
0353 };
0354 MODULE_DEVICE_TABLE(acpi, ad7298_acpi_ids);
0355
0356 static const struct spi_device_id ad7298_id[] = {
0357 {"ad7298", 0},
0358 {}
0359 };
0360 MODULE_DEVICE_TABLE(spi, ad7298_id);
0361
0362 static struct spi_driver ad7298_driver = {
0363 .driver = {
0364 .name = "ad7298",
0365 .acpi_match_table = ad7298_acpi_ids,
0366 },
0367 .probe = ad7298_probe,
0368 .id_table = ad7298_id,
0369 };
0370 module_spi_driver(ad7298_driver);
0371
0372 MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
0373 MODULE_DESCRIPTION("Analog Devices AD7298 ADC");
0374 MODULE_LICENSE("GPL v2");