ad7291.c (13442B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * AD7291 8-Channel, I2C, 12-Bit SAR ADC with Temperature Sensor 4 * 5 * Copyright 2010-2011 Analog Devices Inc. 6 */ 7 8#include <linux/device.h> 9#include <linux/err.h> 10#include <linux/i2c.h> 11#include <linux/interrupt.h> 12#include <linux/kernel.h> 13#include <linux/module.h> 14#include <linux/mutex.h> 15#include <linux/regulator/consumer.h> 16#include <linux/slab.h> 17#include <linux/sysfs.h> 18 19#include <linux/iio/iio.h> 20#include <linux/iio/sysfs.h> 21#include <linux/iio/events.h> 22 23/* 24 * Simplified handling 25 * 26 * If no events enabled - single polled channel read 27 * If event enabled direct reads disable unless channel 28 * is in the read mask. 29 * 30 * The noise-delayed bit as per datasheet suggestion is always enabled. 31 */ 32 33/* 34 * AD7291 registers definition 35 */ 36#define AD7291_COMMAND 0x00 37#define AD7291_VOLTAGE 0x01 38#define AD7291_T_SENSE 0x02 39#define AD7291_T_AVERAGE 0x03 40#define AD7291_DATA_HIGH(x) ((x) * 3 + 0x4) 41#define AD7291_DATA_LOW(x) ((x) * 3 + 0x5) 42#define AD7291_HYST(x) ((x) * 3 + 0x6) 43#define AD7291_VOLTAGE_ALERT_STATUS 0x1F 44#define AD7291_T_ALERT_STATUS 0x20 45 46#define AD7291_BITS 12 47#define AD7291_VOLTAGE_LIMIT_COUNT 8 48 49 50/* 51 * AD7291 command 52 */ 53#define AD7291_AUTOCYCLE BIT(0) 54#define AD7291_RESET BIT(1) 55#define AD7291_ALERT_CLEAR BIT(2) 56#define AD7291_ALERT_POLARITY BIT(3) 57#define AD7291_EXT_REF BIT(4) 58#define AD7291_NOISE_DELAY BIT(5) 59#define AD7291_T_SENSE_MASK BIT(7) 60#define AD7291_VOLTAGE_MASK GENMASK(15, 8) 61#define AD7291_VOLTAGE_OFFSET 8 62 63/* 64 * AD7291 value masks 65 */ 66#define AD7291_VALUE_MASK GENMASK(11, 0) 67 68/* 69 * AD7291 alert register bits 70 */ 71#define AD7291_T_LOW BIT(0) 72#define AD7291_T_HIGH BIT(1) 73#define AD7291_T_AVG_LOW BIT(2) 74#define AD7291_T_AVG_HIGH BIT(3) 75#define AD7291_V_LOW(x) BIT((x) * 2) 76#define AD7291_V_HIGH(x) BIT((x) * 2 + 1) 77 78 79struct ad7291_chip_info { 80 struct i2c_client *client; 81 struct regulator *reg; 82 u16 command; 83 u16 c_mask; /* Active voltage channels for events */ 84 struct mutex state_lock; 85}; 86 87static int ad7291_i2c_read(struct ad7291_chip_info *chip, u8 reg, u16 *data) 88{ 89 struct i2c_client *client = chip->client; 90 int ret = 0; 91 92 ret = i2c_smbus_read_word_swapped(client, reg); 93 if (ret < 0) { 94 dev_err(&client->dev, "I2C read error\n"); 95 return ret; 96 } 97 98 *data = ret; 99 100 return 0; 101} 102 103static int ad7291_i2c_write(struct ad7291_chip_info *chip, u8 reg, u16 data) 104{ 105 return i2c_smbus_write_word_swapped(chip->client, reg, data); 106} 107 108static irqreturn_t ad7291_event_handler(int irq, void *private) 109{ 110 struct iio_dev *indio_dev = private; 111 struct ad7291_chip_info *chip = iio_priv(private); 112 u16 t_status, v_status; 113 u16 command; 114 int i; 115 s64 timestamp = iio_get_time_ns(indio_dev); 116 117 if (ad7291_i2c_read(chip, AD7291_T_ALERT_STATUS, &t_status)) 118 return IRQ_HANDLED; 119 120 if (ad7291_i2c_read(chip, AD7291_VOLTAGE_ALERT_STATUS, &v_status)) 121 return IRQ_HANDLED; 122 123 if (!(t_status || v_status)) 124 return IRQ_HANDLED; 125 126 command = chip->command | AD7291_ALERT_CLEAR; 127 ad7291_i2c_write(chip, AD7291_COMMAND, command); 128 129 command = chip->command & ~AD7291_ALERT_CLEAR; 130 ad7291_i2c_write(chip, AD7291_COMMAND, command); 131 132 /* For now treat t_sense and t_sense_average the same */ 133 if ((t_status & AD7291_T_LOW) || (t_status & AD7291_T_AVG_LOW)) 134 iio_push_event(indio_dev, 135 IIO_UNMOD_EVENT_CODE(IIO_TEMP, 136 0, 137 IIO_EV_TYPE_THRESH, 138 IIO_EV_DIR_FALLING), 139 timestamp); 140 if ((t_status & AD7291_T_HIGH) || (t_status & AD7291_T_AVG_HIGH)) 141 iio_push_event(indio_dev, 142 IIO_UNMOD_EVENT_CODE(IIO_TEMP, 143 0, 144 IIO_EV_TYPE_THRESH, 145 IIO_EV_DIR_RISING), 146 timestamp); 147 148 for (i = 0; i < AD7291_VOLTAGE_LIMIT_COUNT; i++) { 149 if (v_status & AD7291_V_LOW(i)) 150 iio_push_event(indio_dev, 151 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 152 i, 153 IIO_EV_TYPE_THRESH, 154 IIO_EV_DIR_FALLING), 155 timestamp); 156 if (v_status & AD7291_V_HIGH(i)) 157 iio_push_event(indio_dev, 158 IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 159 i, 160 IIO_EV_TYPE_THRESH, 161 IIO_EV_DIR_RISING), 162 timestamp); 163 } 164 165 return IRQ_HANDLED; 166} 167 168static unsigned int ad7291_threshold_reg(const struct iio_chan_spec *chan, 169 enum iio_event_direction dir, 170 enum iio_event_info info) 171{ 172 unsigned int offset; 173 174 switch (chan->type) { 175 case IIO_VOLTAGE: 176 offset = chan->channel; 177 break; 178 case IIO_TEMP: 179 offset = AD7291_VOLTAGE_OFFSET; 180 break; 181 default: 182 return 0; 183 } 184 185 switch (info) { 186 case IIO_EV_INFO_VALUE: 187 if (dir == IIO_EV_DIR_FALLING) 188 return AD7291_DATA_HIGH(offset); 189 else 190 return AD7291_DATA_LOW(offset); 191 case IIO_EV_INFO_HYSTERESIS: 192 return AD7291_HYST(offset); 193 default: 194 break; 195 } 196 return 0; 197} 198 199static int ad7291_read_event_value(struct iio_dev *indio_dev, 200 const struct iio_chan_spec *chan, 201 enum iio_event_type type, 202 enum iio_event_direction dir, 203 enum iio_event_info info, 204 int *val, int *val2) 205{ 206 struct ad7291_chip_info *chip = iio_priv(indio_dev); 207 int ret; 208 u16 uval; 209 210 ret = ad7291_i2c_read(chip, ad7291_threshold_reg(chan, dir, info), 211 &uval); 212 if (ret < 0) 213 return ret; 214 215 if (info == IIO_EV_INFO_HYSTERESIS || chan->type == IIO_VOLTAGE) 216 *val = uval & AD7291_VALUE_MASK; 217 218 else 219 *val = sign_extend32(uval, 11); 220 221 return IIO_VAL_INT; 222} 223 224static int ad7291_write_event_value(struct iio_dev *indio_dev, 225 const struct iio_chan_spec *chan, 226 enum iio_event_type type, 227 enum iio_event_direction dir, 228 enum iio_event_info info, 229 int val, int val2) 230{ 231 struct ad7291_chip_info *chip = iio_priv(indio_dev); 232 233 if (info == IIO_EV_INFO_HYSTERESIS || chan->type == IIO_VOLTAGE) { 234 if (val > AD7291_VALUE_MASK || val < 0) 235 return -EINVAL; 236 } else { 237 if (val > 2047 || val < -2048) 238 return -EINVAL; 239 } 240 241 return ad7291_i2c_write(chip, ad7291_threshold_reg(chan, dir, info), 242 val); 243} 244 245static int ad7291_read_event_config(struct iio_dev *indio_dev, 246 const struct iio_chan_spec *chan, 247 enum iio_event_type type, 248 enum iio_event_direction dir) 249{ 250 struct ad7291_chip_info *chip = iio_priv(indio_dev); 251 /* 252 * To be enabled the channel must simply be on. If any are enabled 253 * we are in continuous sampling mode 254 */ 255 256 switch (chan->type) { 257 case IIO_VOLTAGE: 258 return !!(chip->c_mask & BIT(15 - chan->channel)); 259 case IIO_TEMP: 260 /* always on */ 261 return 1; 262 default: 263 return -EINVAL; 264 } 265 266} 267 268static int ad7291_write_event_config(struct iio_dev *indio_dev, 269 const struct iio_chan_spec *chan, 270 enum iio_event_type type, 271 enum iio_event_direction dir, 272 int state) 273{ 274 int ret = 0; 275 struct ad7291_chip_info *chip = iio_priv(indio_dev); 276 unsigned int mask; 277 u16 regval; 278 279 mutex_lock(&chip->state_lock); 280 regval = chip->command; 281 /* 282 * To be enabled the channel must simply be on. If any are enabled 283 * use continuous sampling mode. 284 * Possible to disable temp as well but that makes single read tricky. 285 */ 286 287 mask = BIT(15 - chan->channel); 288 289 switch (chan->type) { 290 case IIO_VOLTAGE: 291 if ((!state) && (chip->c_mask & mask)) 292 chip->c_mask &= ~mask; 293 else if (state && (!(chip->c_mask & mask))) 294 chip->c_mask |= mask; 295 else 296 break; 297 298 regval &= ~AD7291_AUTOCYCLE; 299 regval |= chip->c_mask; 300 if (chip->c_mask) /* Enable autocycle? */ 301 regval |= AD7291_AUTOCYCLE; 302 303 ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval); 304 if (ret < 0) 305 goto error_ret; 306 307 chip->command = regval; 308 break; 309 default: 310 ret = -EINVAL; 311 } 312 313error_ret: 314 mutex_unlock(&chip->state_lock); 315 return ret; 316} 317 318static int ad7291_read_raw(struct iio_dev *indio_dev, 319 struct iio_chan_spec const *chan, 320 int *val, 321 int *val2, 322 long mask) 323{ 324 int ret; 325 struct ad7291_chip_info *chip = iio_priv(indio_dev); 326 u16 regval; 327 328 switch (mask) { 329 case IIO_CHAN_INFO_RAW: 330 switch (chan->type) { 331 case IIO_VOLTAGE: 332 mutex_lock(&chip->state_lock); 333 /* If in autocycle mode drop through */ 334 if (chip->command & AD7291_AUTOCYCLE) { 335 mutex_unlock(&chip->state_lock); 336 return -EBUSY; 337 } 338 /* Enable this channel alone */ 339 regval = chip->command & (~AD7291_VOLTAGE_MASK); 340 regval |= BIT(15 - chan->channel); 341 ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval); 342 if (ret < 0) { 343 mutex_unlock(&chip->state_lock); 344 return ret; 345 } 346 /* Read voltage */ 347 ret = i2c_smbus_read_word_swapped(chip->client, 348 AD7291_VOLTAGE); 349 if (ret < 0) { 350 mutex_unlock(&chip->state_lock); 351 return ret; 352 } 353 *val = ret & AD7291_VALUE_MASK; 354 mutex_unlock(&chip->state_lock); 355 return IIO_VAL_INT; 356 case IIO_TEMP: 357 /* Assumes tsense bit of command register always set */ 358 ret = i2c_smbus_read_word_swapped(chip->client, 359 AD7291_T_SENSE); 360 if (ret < 0) 361 return ret; 362 *val = sign_extend32(ret, 11); 363 return IIO_VAL_INT; 364 default: 365 return -EINVAL; 366 } 367 case IIO_CHAN_INFO_AVERAGE_RAW: 368 ret = i2c_smbus_read_word_swapped(chip->client, 369 AD7291_T_AVERAGE); 370 if (ret < 0) 371 return ret; 372 *val = sign_extend32(ret, 11); 373 return IIO_VAL_INT; 374 case IIO_CHAN_INFO_SCALE: 375 switch (chan->type) { 376 case IIO_VOLTAGE: 377 if (chip->reg) { 378 int vref; 379 380 vref = regulator_get_voltage(chip->reg); 381 if (vref < 0) 382 return vref; 383 *val = vref / 1000; 384 } else { 385 *val = 2500; 386 } 387 *val2 = AD7291_BITS; 388 return IIO_VAL_FRACTIONAL_LOG2; 389 case IIO_TEMP: 390 /* 391 * One LSB of the ADC corresponds to 0.25 deg C. 392 * The temperature reading is in 12-bit twos 393 * complement format 394 */ 395 *val = 250; 396 return IIO_VAL_INT; 397 default: 398 return -EINVAL; 399 } 400 default: 401 return -EINVAL; 402 } 403} 404 405static const struct iio_event_spec ad7291_events[] = { 406 { 407 .type = IIO_EV_TYPE_THRESH, 408 .dir = IIO_EV_DIR_RISING, 409 .mask_separate = BIT(IIO_EV_INFO_VALUE) | 410 BIT(IIO_EV_INFO_ENABLE), 411 }, { 412 .type = IIO_EV_TYPE_THRESH, 413 .dir = IIO_EV_DIR_FALLING, 414 .mask_separate = BIT(IIO_EV_INFO_VALUE) | 415 BIT(IIO_EV_INFO_ENABLE), 416 }, { 417 .type = IIO_EV_TYPE_THRESH, 418 .dir = IIO_EV_DIR_EITHER, 419 .mask_separate = BIT(IIO_EV_INFO_HYSTERESIS), 420 }, 421}; 422 423#define AD7291_VOLTAGE_CHAN(_chan) \ 424{ \ 425 .type = IIO_VOLTAGE, \ 426 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 427 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ 428 .indexed = 1, \ 429 .channel = _chan, \ 430 .event_spec = ad7291_events, \ 431 .num_event_specs = ARRAY_SIZE(ad7291_events), \ 432} 433 434static const struct iio_chan_spec ad7291_channels[] = { 435 AD7291_VOLTAGE_CHAN(0), 436 AD7291_VOLTAGE_CHAN(1), 437 AD7291_VOLTAGE_CHAN(2), 438 AD7291_VOLTAGE_CHAN(3), 439 AD7291_VOLTAGE_CHAN(4), 440 AD7291_VOLTAGE_CHAN(5), 441 AD7291_VOLTAGE_CHAN(6), 442 AD7291_VOLTAGE_CHAN(7), 443 { 444 .type = IIO_TEMP, 445 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | 446 BIT(IIO_CHAN_INFO_AVERAGE_RAW) | 447 BIT(IIO_CHAN_INFO_SCALE), 448 .indexed = 1, 449 .channel = 0, 450 .event_spec = ad7291_events, 451 .num_event_specs = ARRAY_SIZE(ad7291_events), 452 } 453}; 454 455static const struct iio_info ad7291_info = { 456 .read_raw = &ad7291_read_raw, 457 .read_event_config = &ad7291_read_event_config, 458 .write_event_config = &ad7291_write_event_config, 459 .read_event_value = &ad7291_read_event_value, 460 .write_event_value = &ad7291_write_event_value, 461}; 462 463static void ad7291_reg_disable(void *reg) 464{ 465 regulator_disable(reg); 466} 467 468static int ad7291_probe(struct i2c_client *client, 469 const struct i2c_device_id *id) 470{ 471 struct ad7291_chip_info *chip; 472 struct iio_dev *indio_dev; 473 int ret; 474 475 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); 476 if (!indio_dev) 477 return -ENOMEM; 478 chip = iio_priv(indio_dev); 479 480 mutex_init(&chip->state_lock); 481 482 chip->client = client; 483 484 chip->command = AD7291_NOISE_DELAY | 485 AD7291_T_SENSE_MASK | /* Tsense always enabled */ 486 AD7291_ALERT_POLARITY; /* set irq polarity low level */ 487 488 chip->reg = devm_regulator_get_optional(&client->dev, "vref"); 489 if (IS_ERR(chip->reg)) { 490 if (PTR_ERR(chip->reg) != -ENODEV) 491 return PTR_ERR(chip->reg); 492 493 chip->reg = NULL; 494 } 495 496 if (chip->reg) { 497 ret = regulator_enable(chip->reg); 498 if (ret) 499 return ret; 500 501 ret = devm_add_action_or_reset(&client->dev, ad7291_reg_disable, 502 chip->reg); 503 if (ret) 504 return ret; 505 506 chip->command |= AD7291_EXT_REF; 507 } 508 509 indio_dev->name = id->name; 510 indio_dev->channels = ad7291_channels; 511 indio_dev->num_channels = ARRAY_SIZE(ad7291_channels); 512 513 indio_dev->info = &ad7291_info; 514 indio_dev->modes = INDIO_DIRECT_MODE; 515 516 ret = ad7291_i2c_write(chip, AD7291_COMMAND, AD7291_RESET); 517 if (ret) 518 return -EIO; 519 520 ret = ad7291_i2c_write(chip, AD7291_COMMAND, chip->command); 521 if (ret) 522 return -EIO; 523 524 if (client->irq > 0) { 525 ret = devm_request_threaded_irq(&client->dev, client->irq, 526 NULL, 527 &ad7291_event_handler, 528 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 529 id->name, 530 indio_dev); 531 if (ret) 532 return ret; 533 } 534 535 return devm_iio_device_register(&client->dev, indio_dev); 536} 537 538static const struct i2c_device_id ad7291_id[] = { 539 { "ad7291", 0 }, 540 {} 541}; 542 543MODULE_DEVICE_TABLE(i2c, ad7291_id); 544 545static const struct of_device_id ad7291_of_match[] = { 546 { .compatible = "adi,ad7291" }, 547 {} 548}; 549MODULE_DEVICE_TABLE(of, ad7291_of_match); 550 551static struct i2c_driver ad7291_driver = { 552 .driver = { 553 .name = KBUILD_MODNAME, 554 .of_match_table = ad7291_of_match, 555 }, 556 .probe = ad7291_probe, 557 .id_table = ad7291_id, 558}; 559module_i2c_driver(ad7291_driver); 560 561MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>"); 562MODULE_DESCRIPTION("Analog Devices AD7291 ADC driver"); 563MODULE_LICENSE("GPL v2");