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