root/drivers/staging/iio/addac/adt7316.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. adt7316_show_enabled
  2. _adt7316_store_enabled
  3. adt7316_store_enabled
  4. adt7316_show_select_ex_temp
  5. adt7316_store_select_ex_temp
  6. adt7316_show_mode
  7. adt7316_store_mode
  8. adt7316_show_all_modes
  9. adt7316_show_ad_channel
  10. adt7316_store_ad_channel
  11. adt7316_show_all_ad_channels
  12. adt7316_show_disable_averaging
  13. adt7316_store_disable_averaging
  14. adt7316_show_enable_smbus_timeout
  15. adt7316_store_enable_smbus_timeout
  16. adt7316_show_powerdown
  17. adt7316_store_powerdown
  18. adt7316_show_fast_ad_clock
  19. adt7316_store_fast_ad_clock
  20. adt7316_show_da_high_resolution
  21. adt7316_store_da_high_resolution
  22. adt7316_show_AIN_internal_Vref
  23. adt7316_store_AIN_internal_Vref
  24. adt7316_show_enable_prop_DACA
  25. adt7316_store_enable_prop_DACA
  26. adt7316_show_enable_prop_DACB
  27. adt7316_store_enable_prop_DACB
  28. adt7316_show_DAC_2Vref_ch_mask
  29. adt7316_store_DAC_2Vref_ch_mask
  30. adt7316_show_DAC_update_mode
  31. adt7316_store_DAC_update_mode
  32. adt7316_show_all_DAC_update_modes
  33. adt7316_store_update_DAC
  34. adt7316_show_DA_AB_Vref_bypass
  35. adt7316_store_DA_AB_Vref_bypass
  36. adt7316_show_DA_CD_Vref_bypass
  37. adt7316_store_DA_CD_Vref_bypass
  38. adt7316_show_DAC_internal_Vref
  39. adt7316_store_DAC_internal_Vref
  40. adt7316_show_ad
  41. adt7316_show_VDD
  42. adt7316_show_in_temp
  43. adt7316_show_ex_temp_AIN1
  44. adt7316_show_AIN2
  45. adt7316_show_AIN3
  46. adt7316_show_AIN4
  47. adt7316_show_temp_offset
  48. adt7316_store_temp_offset
  49. adt7316_show_in_temp_offset
  50. adt7316_store_in_temp_offset
  51. adt7316_show_ex_temp_offset
  52. adt7316_store_ex_temp_offset
  53. adt7316_show_in_analog_temp_offset
  54. adt7316_store_in_analog_temp_offset
  55. adt7316_show_ex_analog_temp_offset
  56. adt7316_store_ex_analog_temp_offset
  57. adt7316_show_DAC
  58. adt7316_store_DAC
  59. adt7316_show_DAC_A
  60. adt7316_store_DAC_A
  61. adt7316_show_DAC_B
  62. adt7316_store_DAC_B
  63. adt7316_show_DAC_C
  64. adt7316_store_DAC_C
  65. adt7316_show_DAC_D
  66. adt7316_store_DAC_D
  67. adt7316_show_device_id
  68. adt7316_show_manufactorer_id
  69. adt7316_show_device_rev
  70. adt7316_show_bus_type
  71. adt7316_event_handler
  72. adt7316_setup_irq
  73. adt7316_show_int_mask
  74. adt7316_set_int_mask
  75. adt7316_show_ad_bound
  76. adt7316_set_ad_bound
  77. adt7316_show_int_enabled
  78. adt7316_set_int_enabled
  79. adt7316_disable
  80. adt7316_enable
  81. adt7316_probe

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  * ADT7316 digital temperature sensor driver supporting ADT7316/7/8 ADT7516/7/9
   4  *
   5  * Copyright 2010 Analog Devices Inc.
   6  */
   7 
   8 #include <linux/interrupt.h>
   9 #include <linux/gpio/consumer.h>
  10 #include <linux/irq.h>
  11 #include <linux/workqueue.h>
  12 #include <linux/device.h>
  13 #include <linux/kernel.h>
  14 #include <linux/slab.h>
  15 #include <linux/sysfs.h>
  16 #include <linux/list.h>
  17 #include <linux/i2c.h>
  18 #include <linux/rtc.h>
  19 #include <linux/module.h>
  20 
  21 #include <linux/iio/iio.h>
  22 #include <linux/iio/events.h>
  23 #include <linux/iio/sysfs.h>
  24 #include "adt7316.h"
  25 
  26 /*
  27  * ADT7316 registers definition
  28  */
  29 #define ADT7316_INT_STAT1               0x0
  30 #define ADT7316_INT_STAT2               0x1
  31 #define ADT7316_LSB_IN_TEMP_VDD         0x3
  32 #define ADT7316_LSB_IN_TEMP_MASK        0x3
  33 #define ADT7316_LSB_VDD_MASK            0xC
  34 #define ADT7316_LSB_VDD_OFFSET          2
  35 #define ADT7316_LSB_EX_TEMP_AIN         0x4
  36 #define ADT7316_LSB_EX_TEMP_MASK        0x3
  37 #define ADT7516_LSB_AIN_SHIFT           2
  38 #define ADT7316_AD_MSB_DATA_BASE        0x6
  39 #define ADT7316_AD_MSB_DATA_REGS        3
  40 #define ADT7516_AD_MSB_DATA_REGS        6
  41 #define ADT7316_MSB_VDD                 0x6
  42 #define ADT7316_MSB_IN_TEMP             0x7
  43 #define ADT7316_MSB_EX_TEMP             0x8
  44 #define ADT7516_MSB_AIN1                0x8
  45 #define ADT7516_MSB_AIN2                0x9
  46 #define ADT7516_MSB_AIN3                0xA
  47 #define ADT7516_MSB_AIN4                0xB
  48 #define ADT7316_DA_DATA_BASE            0x10
  49 #define ADT7316_DA_10_BIT_LSB_SHIFT     6
  50 #define ADT7316_DA_12_BIT_LSB_SHIFT     4
  51 #define ADT7316_DA_MSB_DATA_REGS        4
  52 #define ADT7316_LSB_DAC_A               0x10
  53 #define ADT7316_MSB_DAC_A               0x11
  54 #define ADT7316_LSB_DAC_B               0x12
  55 #define ADT7316_MSB_DAC_B               0x13
  56 #define ADT7316_LSB_DAC_C               0x14
  57 #define ADT7316_MSB_DAC_C               0x15
  58 #define ADT7316_LSB_DAC_D               0x16
  59 #define ADT7316_MSB_DAC_D               0x17
  60 #define ADT7316_CONFIG1                 0x18
  61 #define ADT7316_CONFIG2                 0x19
  62 #define ADT7316_CONFIG3                 0x1A
  63 #define ADT7316_DAC_CONFIG              0x1B
  64 #define ADT7316_LDAC_CONFIG             0x1C
  65 #define ADT7316_INT_MASK1               0x1D
  66 #define ADT7316_INT_MASK2               0x1E
  67 #define ADT7316_IN_TEMP_OFFSET          0x1F
  68 #define ADT7316_EX_TEMP_OFFSET          0x20
  69 #define ADT7316_IN_ANALOG_TEMP_OFFSET   0x21
  70 #define ADT7316_EX_ANALOG_TEMP_OFFSET   0x22
  71 #define ADT7316_VDD_HIGH                0x23
  72 #define ADT7316_VDD_LOW                 0x24
  73 #define ADT7316_IN_TEMP_HIGH            0x25
  74 #define ADT7316_IN_TEMP_LOW             0x26
  75 #define ADT7316_EX_TEMP_HIGH            0x27
  76 #define ADT7316_EX_TEMP_LOW             0x28
  77 #define ADT7516_AIN2_HIGH               0x2B
  78 #define ADT7516_AIN2_LOW                0x2C
  79 #define ADT7516_AIN3_HIGH               0x2D
  80 #define ADT7516_AIN3_LOW                0x2E
  81 #define ADT7516_AIN4_HIGH               0x2F
  82 #define ADT7516_AIN4_LOW                0x30
  83 #define ADT7316_DEVICE_ID               0x4D
  84 #define ADT7316_MANUFACTURE_ID          0x4E
  85 #define ADT7316_DEVICE_REV              0x4F
  86 #define ADT7316_SPI_LOCK_STAT           0x7F
  87 
  88 /*
  89  * ADT7316 config1
  90  */
  91 #define ADT7316_EN                      0x1
  92 #define ADT7516_SEL_EX_TEMP             0x4
  93 #define ADT7516_SEL_AIN1_2_EX_TEMP_MASK 0x6
  94 #define ADT7516_SEL_AIN3                0x8
  95 #define ADT7316_INT_EN                  0x20
  96 #define ADT7316_INT_POLARITY            0x40
  97 #define ADT7316_PD                      0x80
  98 
  99 /*
 100  * ADT7316 config2
 101  */
 102 #define ADT7316_AD_SINGLE_CH_MASK       0x3
 103 #define ADT7516_AD_SINGLE_CH_MASK       0x7
 104 #define ADT7316_AD_SINGLE_CH_VDD        0
 105 #define ADT7316_AD_SINGLE_CH_IN         1
 106 #define ADT7316_AD_SINGLE_CH_EX         2
 107 #define ADT7516_AD_SINGLE_CH_AIN1       2
 108 #define ADT7516_AD_SINGLE_CH_AIN2       3
 109 #define ADT7516_AD_SINGLE_CH_AIN3       4
 110 #define ADT7516_AD_SINGLE_CH_AIN4       5
 111 #define ADT7316_AD_SINGLE_CH_MODE       0x10
 112 #define ADT7316_DISABLE_AVERAGING       0x20
 113 #define ADT7316_EN_SMBUS_TIMEOUT        0x40
 114 #define ADT7316_RESET                   0x80
 115 
 116 /*
 117  * ADT7316 config3
 118  */
 119 #define ADT7316_ADCLK_22_5              0x1
 120 #define ADT7316_DA_HIGH_RESOLUTION      0x2
 121 #define ADT7316_DA_EN_VIA_DAC_LDAC      0x8
 122 #define ADT7516_AIN_IN_VREF             0x10
 123 #define ADT7316_EN_IN_TEMP_PROP_DACA    0x20
 124 #define ADT7316_EN_EX_TEMP_PROP_DACB    0x40
 125 
 126 /*
 127  * ADT7316 DAC config
 128  */
 129 #define ADT7316_DA_2VREF_CH_MASK        0xF
 130 #define ADT7316_DA_EN_MODE_MASK         0x30
 131 #define ADT7316_DA_EN_MODE_SHIFT        4
 132 #define ADT7316_DA_EN_MODE_SINGLE       0x00
 133 #define ADT7316_DA_EN_MODE_AB_CD        0x10
 134 #define ADT7316_DA_EN_MODE_ABCD         0x20
 135 #define ADT7316_DA_EN_MODE_LDAC         0x30
 136 #define ADT7316_VREF_BYPASS_DAC_AB      0x40
 137 #define ADT7316_VREF_BYPASS_DAC_CD      0x80
 138 
 139 /*
 140  * ADT7316 LDAC config
 141  */
 142 #define ADT7316_LDAC_EN_DA_MASK         0xF
 143 #define ADT7316_DAC_IN_VREF             0x10
 144 #define ADT7516_DAC_AB_IN_VREF          0x10
 145 #define ADT7516_DAC_CD_IN_VREF          0x20
 146 #define ADT7516_DAC_IN_VREF_OFFSET      4
 147 #define ADT7516_DAC_IN_VREF_MASK        0x30
 148 
 149 /*
 150  * ADT7316 INT_MASK2
 151  */
 152 #define ADT7316_INT_MASK2_VDD           0x10
 153 
 154 /*
 155  * ADT7316 value masks
 156  */
 157 #define ADT7316_VALUE_MASK              0xfff
 158 #define ADT7316_T_VALUE_SIGN            0x400
 159 #define ADT7316_T_VALUE_FLOAT_OFFSET    2
 160 #define ADT7316_T_VALUE_FLOAT_MASK      0x2
 161 
 162 /*
 163  * Chip ID
 164  */
 165 #define ID_ADT7316              0x1
 166 #define ID_ADT7317              0x2
 167 #define ID_ADT7318              0x3
 168 #define ID_ADT7516              0x11
 169 #define ID_ADT7517              0x12
 170 #define ID_ADT7519              0x14
 171 
 172 #define ID_FAMILY_MASK          0xF0
 173 #define ID_ADT73XX              0x0
 174 #define ID_ADT75XX              0x10
 175 
 176 /*
 177  * struct adt7316_chip_info - chip specific information
 178  */
 179 
 180 struct adt7316_chip_info {
 181         struct adt7316_bus      bus;
 182         struct gpio_desc        *ldac_pin;
 183         u16                     int_mask;       /* 0x2f */
 184         u8                      config1;
 185         u8                      config2;
 186         u8                      config3;
 187         u8                      dac_config;     /* DAC config */
 188         u8                      ldac_config;    /* LDAC config */
 189         u8                      dac_bits;       /* 8, 10, 12 */
 190         u8                      id;             /* chip id */
 191 };
 192 
 193 /*
 194  * Logic interrupt mask for user application to enable
 195  * interrupts.
 196  */
 197 #define ADT7316_IN_TEMP_HIGH_INT_MASK   0x1
 198 #define ADT7316_IN_TEMP_LOW_INT_MASK    0x2
 199 #define ADT7316_EX_TEMP_HIGH_INT_MASK   0x4
 200 #define ADT7316_EX_TEMP_LOW_INT_MASK    0x8
 201 #define ADT7316_EX_TEMP_FAULT_INT_MASK  0x10
 202 #define ADT7516_AIN1_INT_MASK           0x4
 203 #define ADT7516_AIN2_INT_MASK           0x20
 204 #define ADT7516_AIN3_INT_MASK           0x40
 205 #define ADT7516_AIN4_INT_MASK           0x80
 206 #define ADT7316_VDD_INT_MASK            0x100
 207 #define ADT7316_TEMP_INT_MASK           0x1F
 208 #define ADT7516_AIN_INT_MASK            0xE0
 209 #define ADT7316_TEMP_AIN_INT_MASK       \
 210         (ADT7316_TEMP_INT_MASK)
 211 
 212 /*
 213  * struct adt7316_chip_info - chip specific information
 214  */
 215 
 216 struct adt7316_limit_regs {
 217         u16     data_high;
 218         u16     data_low;
 219 };
 220 
 221 static ssize_t adt7316_show_enabled(struct device *dev,
 222                                     struct device_attribute *attr,
 223                                     char *buf)
 224 {
 225         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 226         struct adt7316_chip_info *chip = iio_priv(dev_info);
 227 
 228         return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_EN));
 229 }
 230 
 231 static ssize_t _adt7316_store_enabled(struct adt7316_chip_info *chip,
 232                                       int enable)
 233 {
 234         u8 config1;
 235         int ret;
 236 
 237         if (enable)
 238                 config1 = chip->config1 | ADT7316_EN;
 239         else
 240                 config1 = chip->config1 & ~ADT7316_EN;
 241 
 242         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
 243         if (ret)
 244                 return -EIO;
 245 
 246         chip->config1 = config1;
 247 
 248         return ret;
 249 }
 250 
 251 static ssize_t adt7316_store_enabled(struct device *dev,
 252                                      struct device_attribute *attr,
 253                                      const char *buf,
 254                                      size_t len)
 255 {
 256         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 257         struct adt7316_chip_info *chip = iio_priv(dev_info);
 258         int enable;
 259 
 260         if (buf[0] == '1')
 261                 enable = 1;
 262         else
 263                 enable = 0;
 264 
 265         if (_adt7316_store_enabled(chip, enable) < 0)
 266                 return -EIO;
 267 
 268         return len;
 269 }
 270 
 271 static IIO_DEVICE_ATTR(enabled, 0644,
 272                 adt7316_show_enabled,
 273                 adt7316_store_enabled,
 274                 0);
 275 
 276 static ssize_t adt7316_show_select_ex_temp(struct device *dev,
 277                                            struct device_attribute *attr,
 278                                            char *buf)
 279 {
 280         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 281         struct adt7316_chip_info *chip = iio_priv(dev_info);
 282 
 283         if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
 284                 return -EPERM;
 285 
 286         return sprintf(buf, "%d\n", !!(chip->config1 & ADT7516_SEL_EX_TEMP));
 287 }
 288 
 289 static ssize_t adt7316_store_select_ex_temp(struct device *dev,
 290                                             struct device_attribute *attr,
 291                                             const char *buf,
 292                                             size_t len)
 293 {
 294         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 295         struct adt7316_chip_info *chip = iio_priv(dev_info);
 296         u8 config1;
 297         int ret;
 298 
 299         if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
 300                 return -EPERM;
 301 
 302         config1 = chip->config1 & (~ADT7516_SEL_EX_TEMP);
 303         if (buf[0] == '1')
 304                 config1 |= ADT7516_SEL_EX_TEMP;
 305 
 306         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
 307         if (ret)
 308                 return -EIO;
 309 
 310         chip->config1 = config1;
 311 
 312         return len;
 313 }
 314 
 315 static IIO_DEVICE_ATTR(select_ex_temp, 0644,
 316                 adt7316_show_select_ex_temp,
 317                 adt7316_store_select_ex_temp,
 318                 0);
 319 
 320 static ssize_t adt7316_show_mode(struct device *dev,
 321                                  struct device_attribute *attr,
 322                                  char *buf)
 323 {
 324         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 325         struct adt7316_chip_info *chip = iio_priv(dev_info);
 326 
 327         if (chip->config2 & ADT7316_AD_SINGLE_CH_MODE)
 328                 return sprintf(buf, "single_channel\n");
 329 
 330         return sprintf(buf, "round_robin\n");
 331 }
 332 
 333 static ssize_t adt7316_store_mode(struct device *dev,
 334                                   struct device_attribute *attr,
 335                                   const char *buf,
 336                                   size_t len)
 337 {
 338         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 339         struct adt7316_chip_info *chip = iio_priv(dev_info);
 340         u8 config2;
 341         int ret;
 342 
 343         config2 = chip->config2 & (~ADT7316_AD_SINGLE_CH_MODE);
 344         if (!memcmp(buf, "single_channel", 14))
 345                 config2 |= ADT7316_AD_SINGLE_CH_MODE;
 346 
 347         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
 348         if (ret)
 349                 return -EIO;
 350 
 351         chip->config2 = config2;
 352 
 353         return len;
 354 }
 355 
 356 static IIO_DEVICE_ATTR(mode, 0644,
 357                 adt7316_show_mode,
 358                 adt7316_store_mode,
 359                 0);
 360 
 361 static ssize_t adt7316_show_all_modes(struct device *dev,
 362                                       struct device_attribute *attr,
 363                                       char *buf)
 364 {
 365         return sprintf(buf, "single_channel\nround_robin\n");
 366 }
 367 
 368 static IIO_DEVICE_ATTR(all_modes, 0444, adt7316_show_all_modes, NULL, 0);
 369 
 370 static ssize_t adt7316_show_ad_channel(struct device *dev,
 371                                        struct device_attribute *attr,
 372                                        char *buf)
 373 {
 374         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 375         struct adt7316_chip_info *chip = iio_priv(dev_info);
 376 
 377         if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
 378                 return -EPERM;
 379 
 380         switch (chip->config2 & ADT7516_AD_SINGLE_CH_MASK) {
 381         case ADT7316_AD_SINGLE_CH_VDD:
 382                 return sprintf(buf, "0 - VDD\n");
 383         case ADT7316_AD_SINGLE_CH_IN:
 384                 return sprintf(buf, "1 - Internal Temperature\n");
 385         case ADT7316_AD_SINGLE_CH_EX:
 386                 if (((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) &&
 387                     (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)
 388                         return sprintf(buf, "2 - AIN1\n");
 389 
 390                 return sprintf(buf, "2 - External Temperature\n");
 391         case ADT7516_AD_SINGLE_CH_AIN2:
 392                 if ((chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)
 393                         return sprintf(buf, "3 - AIN2\n");
 394 
 395                 return sprintf(buf, "N/A\n");
 396         case ADT7516_AD_SINGLE_CH_AIN3:
 397                 if (chip->config1 & ADT7516_SEL_AIN3)
 398                         return sprintf(buf, "4 - AIN3\n");
 399 
 400                 return sprintf(buf, "N/A\n");
 401         case ADT7516_AD_SINGLE_CH_AIN4:
 402                 return sprintf(buf, "5 - AIN4\n");
 403         default:
 404                 return sprintf(buf, "N/A\n");
 405         }
 406 }
 407 
 408 static ssize_t adt7316_store_ad_channel(struct device *dev,
 409                                         struct device_attribute *attr,
 410                                         const char *buf,
 411                                         size_t len)
 412 {
 413         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 414         struct adt7316_chip_info *chip = iio_priv(dev_info);
 415         u8 config2;
 416         u8 data;
 417         int ret;
 418 
 419         if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
 420                 return -EPERM;
 421 
 422         ret = kstrtou8(buf, 10, &data);
 423         if (ret)
 424                 return -EINVAL;
 425 
 426         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) {
 427                 if (data > 5)
 428                         return -EINVAL;
 429 
 430                 config2 = chip->config2 & (~ADT7516_AD_SINGLE_CH_MASK);
 431         } else {
 432                 if (data > 2)
 433                         return -EINVAL;
 434 
 435                 config2 = chip->config2 & (~ADT7316_AD_SINGLE_CH_MASK);
 436         }
 437 
 438         config2 |= data;
 439 
 440         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
 441         if (ret)
 442                 return -EIO;
 443 
 444         chip->config2 = config2;
 445 
 446         return len;
 447 }
 448 
 449 static IIO_DEVICE_ATTR(ad_channel, 0644,
 450                 adt7316_show_ad_channel,
 451                 adt7316_store_ad_channel,
 452                 0);
 453 
 454 static ssize_t adt7316_show_all_ad_channels(struct device *dev,
 455                                             struct device_attribute *attr,
 456                                             char *buf)
 457 {
 458         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 459         struct adt7316_chip_info *chip = iio_priv(dev_info);
 460 
 461         if (!(chip->config2 & ADT7316_AD_SINGLE_CH_MODE))
 462                 return -EPERM;
 463 
 464         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
 465                 return sprintf(buf, "0 - VDD\n1 - Internal Temperature\n"
 466                                 "2 - External Temperature or AIN1\n"
 467                                 "3 - AIN2\n4 - AIN3\n5 - AIN4\n");
 468         return sprintf(buf, "0 - VDD\n1 - Internal Temperature\n"
 469                         "2 - External Temperature\n");
 470 }
 471 
 472 static IIO_DEVICE_ATTR(all_ad_channels, 0444,
 473                 adt7316_show_all_ad_channels, NULL, 0);
 474 
 475 static ssize_t adt7316_show_disable_averaging(struct device *dev,
 476                                               struct device_attribute *attr,
 477                                               char *buf)
 478 {
 479         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 480         struct adt7316_chip_info *chip = iio_priv(dev_info);
 481 
 482         return sprintf(buf, "%d\n",
 483                 !!(chip->config2 & ADT7316_DISABLE_AVERAGING));
 484 }
 485 
 486 static ssize_t adt7316_store_disable_averaging(struct device *dev,
 487                                                struct device_attribute *attr,
 488                                                const char *buf,
 489                                                size_t len)
 490 {
 491         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 492         struct adt7316_chip_info *chip = iio_priv(dev_info);
 493         u8 config2;
 494         int ret;
 495 
 496         config2 = chip->config2 & (~ADT7316_DISABLE_AVERAGING);
 497         if (buf[0] == '1')
 498                 config2 |= ADT7316_DISABLE_AVERAGING;
 499 
 500         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
 501         if (ret)
 502                 return -EIO;
 503 
 504         chip->config2 = config2;
 505 
 506         return len;
 507 }
 508 
 509 static IIO_DEVICE_ATTR(disable_averaging, 0644,
 510                 adt7316_show_disable_averaging,
 511                 adt7316_store_disable_averaging,
 512                 0);
 513 
 514 static ssize_t adt7316_show_enable_smbus_timeout(struct device *dev,
 515                                                  struct device_attribute *attr,
 516                                                  char *buf)
 517 {
 518         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 519         struct adt7316_chip_info *chip = iio_priv(dev_info);
 520 
 521         return sprintf(buf, "%d\n",
 522                 !!(chip->config2 & ADT7316_EN_SMBUS_TIMEOUT));
 523 }
 524 
 525 static ssize_t adt7316_store_enable_smbus_timeout(struct device *dev,
 526                                                   struct device_attribute *attr,
 527                                                   const char *buf,
 528                                                   size_t len)
 529 {
 530         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 531         struct adt7316_chip_info *chip = iio_priv(dev_info);
 532         u8 config2;
 533         int ret;
 534 
 535         config2 = chip->config2 & (~ADT7316_EN_SMBUS_TIMEOUT);
 536         if (buf[0] == '1')
 537                 config2 |= ADT7316_EN_SMBUS_TIMEOUT;
 538 
 539         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG2, config2);
 540         if (ret)
 541                 return -EIO;
 542 
 543         chip->config2 = config2;
 544 
 545         return len;
 546 }
 547 
 548 static IIO_DEVICE_ATTR(enable_smbus_timeout, 0644,
 549                 adt7316_show_enable_smbus_timeout,
 550                 adt7316_store_enable_smbus_timeout,
 551                 0);
 552 
 553 static ssize_t adt7316_show_powerdown(struct device *dev,
 554                                       struct device_attribute *attr,
 555                                       char *buf)
 556 {
 557         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 558         struct adt7316_chip_info *chip = iio_priv(dev_info);
 559 
 560         return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_PD));
 561 }
 562 
 563 static ssize_t adt7316_store_powerdown(struct device *dev,
 564                                        struct device_attribute *attr,
 565                                        const char *buf,
 566                                        size_t len)
 567 {
 568         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 569         struct adt7316_chip_info *chip = iio_priv(dev_info);
 570         u8 config1;
 571         int ret;
 572 
 573         config1 = chip->config1 & (~ADT7316_PD);
 574         if (buf[0] == '1')
 575                 config1 |= ADT7316_PD;
 576 
 577         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
 578         if (ret)
 579                 return -EIO;
 580 
 581         chip->config1 = config1;
 582 
 583         return len;
 584 }
 585 
 586 static IIO_DEVICE_ATTR(powerdown, 0644,
 587                 adt7316_show_powerdown,
 588                 adt7316_store_powerdown,
 589                 0);
 590 
 591 static ssize_t adt7316_show_fast_ad_clock(struct device *dev,
 592                                           struct device_attribute *attr,
 593                                           char *buf)
 594 {
 595         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 596         struct adt7316_chip_info *chip = iio_priv(dev_info);
 597 
 598         return sprintf(buf, "%d\n", !!(chip->config3 & ADT7316_ADCLK_22_5));
 599 }
 600 
 601 static ssize_t adt7316_store_fast_ad_clock(struct device *dev,
 602                                            struct device_attribute *attr,
 603                                            const char *buf,
 604                                            size_t len)
 605 {
 606         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 607         struct adt7316_chip_info *chip = iio_priv(dev_info);
 608         u8 config3;
 609         int ret;
 610 
 611         config3 = chip->config3 & (~ADT7316_ADCLK_22_5);
 612         if (buf[0] == '1')
 613                 config3 |= ADT7316_ADCLK_22_5;
 614 
 615         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
 616         if (ret)
 617                 return -EIO;
 618 
 619         chip->config3 = config3;
 620 
 621         return len;
 622 }
 623 
 624 static IIO_DEVICE_ATTR(fast_ad_clock, 0644,
 625                 adt7316_show_fast_ad_clock,
 626                 adt7316_store_fast_ad_clock,
 627                 0);
 628 
 629 static ssize_t adt7316_show_da_high_resolution(struct device *dev,
 630                                                struct device_attribute *attr,
 631                                                char *buf)
 632 {
 633         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 634         struct adt7316_chip_info *chip = iio_priv(dev_info);
 635 
 636         if (chip->config3 & ADT7316_DA_HIGH_RESOLUTION) {
 637                 if (chip->id != ID_ADT7318 && chip->id != ID_ADT7519)
 638                         return sprintf(buf, "1 (10 bits)\n");
 639         }
 640 
 641         return sprintf(buf, "0 (8 bits)\n");
 642 }
 643 
 644 static ssize_t adt7316_store_da_high_resolution(struct device *dev,
 645                                                 struct device_attribute *attr,
 646                                                 const char *buf,
 647                                                 size_t len)
 648 {
 649         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 650         struct adt7316_chip_info *chip = iio_priv(dev_info);
 651         u8 config3;
 652         int ret;
 653 
 654         if (chip->id == ID_ADT7318 || chip->id == ID_ADT7519)
 655                 return -EPERM;
 656 
 657         config3 = chip->config3 & (~ADT7316_DA_HIGH_RESOLUTION);
 658         if (buf[0] == '1')
 659                 config3 |= ADT7316_DA_HIGH_RESOLUTION;
 660 
 661         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
 662         if (ret)
 663                 return -EIO;
 664 
 665         chip->config3 = config3;
 666 
 667         return len;
 668 }
 669 
 670 static IIO_DEVICE_ATTR(da_high_resolution, 0644,
 671                 adt7316_show_da_high_resolution,
 672                 adt7316_store_da_high_resolution,
 673                 0);
 674 
 675 static ssize_t adt7316_show_AIN_internal_Vref(struct device *dev,
 676                                               struct device_attribute *attr,
 677                                               char *buf)
 678 {
 679         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 680         struct adt7316_chip_info *chip = iio_priv(dev_info);
 681 
 682         if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
 683                 return -EPERM;
 684 
 685         return sprintf(buf, "%d\n",
 686                 !!(chip->config3 & ADT7516_AIN_IN_VREF));
 687 }
 688 
 689 static ssize_t adt7316_store_AIN_internal_Vref(struct device *dev,
 690                                                struct device_attribute *attr,
 691                                                const char *buf,
 692                                                size_t len)
 693 {
 694         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 695         struct adt7316_chip_info *chip = iio_priv(dev_info);
 696         u8 config3;
 697         int ret;
 698 
 699         if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
 700                 return -EPERM;
 701 
 702         if (buf[0] != '1')
 703                 config3 = chip->config3 & (~ADT7516_AIN_IN_VREF);
 704         else
 705                 config3 = chip->config3 | ADT7516_AIN_IN_VREF;
 706 
 707         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
 708         if (ret)
 709                 return -EIO;
 710 
 711         chip->config3 = config3;
 712 
 713         return len;
 714 }
 715 
 716 static IIO_DEVICE_ATTR(AIN_internal_Vref, 0644,
 717                 adt7316_show_AIN_internal_Vref,
 718                 adt7316_store_AIN_internal_Vref,
 719                 0);
 720 
 721 static ssize_t adt7316_show_enable_prop_DACA(struct device *dev,
 722                                              struct device_attribute *attr,
 723                                              char *buf)
 724 {
 725         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 726         struct adt7316_chip_info *chip = iio_priv(dev_info);
 727 
 728         return sprintf(buf, "%d\n",
 729                 !!(chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA));
 730 }
 731 
 732 static ssize_t adt7316_store_enable_prop_DACA(struct device *dev,
 733                                               struct device_attribute *attr,
 734                                               const char *buf,
 735                                               size_t len)
 736 {
 737         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 738         struct adt7316_chip_info *chip = iio_priv(dev_info);
 739         u8 config3;
 740         int ret;
 741 
 742         config3 = chip->config3 & (~ADT7316_EN_IN_TEMP_PROP_DACA);
 743         if (buf[0] == '1')
 744                 config3 |= ADT7316_EN_IN_TEMP_PROP_DACA;
 745 
 746         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
 747         if (ret)
 748                 return -EIO;
 749 
 750         chip->config3 = config3;
 751 
 752         return len;
 753 }
 754 
 755 static IIO_DEVICE_ATTR(enable_proportion_DACA, 0644,
 756                        adt7316_show_enable_prop_DACA,
 757                        adt7316_store_enable_prop_DACA,
 758                        0);
 759 
 760 static ssize_t adt7316_show_enable_prop_DACB(struct device *dev,
 761                                              struct device_attribute *attr,
 762                                              char *buf)
 763 {
 764         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 765         struct adt7316_chip_info *chip = iio_priv(dev_info);
 766 
 767         return sprintf(buf, "%d\n",
 768                 !!(chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB));
 769 }
 770 
 771 static ssize_t adt7316_store_enable_prop_DACB(struct device *dev,
 772                                               struct device_attribute *attr,
 773                                               const char *buf,
 774                                               size_t len)
 775 {
 776         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 777         struct adt7316_chip_info *chip = iio_priv(dev_info);
 778         u8 config3;
 779         int ret;
 780 
 781         config3 = chip->config3 & (~ADT7316_EN_EX_TEMP_PROP_DACB);
 782         if (buf[0] == '1')
 783                 config3 |= ADT7316_EN_EX_TEMP_PROP_DACB;
 784 
 785         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, config3);
 786         if (ret)
 787                 return -EIO;
 788 
 789         chip->config3 = config3;
 790 
 791         return len;
 792 }
 793 
 794 static IIO_DEVICE_ATTR(enable_proportion_DACB, 0644,
 795                        adt7316_show_enable_prop_DACB,
 796                        adt7316_store_enable_prop_DACB,
 797                        0);
 798 
 799 static ssize_t adt7316_show_DAC_2Vref_ch_mask(struct device *dev,
 800                                               struct device_attribute *attr,
 801                                               char *buf)
 802 {
 803         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 804         struct adt7316_chip_info *chip = iio_priv(dev_info);
 805 
 806         return sprintf(buf, "0x%x\n",
 807                 chip->dac_config & ADT7316_DA_2VREF_CH_MASK);
 808 }
 809 
 810 static ssize_t adt7316_store_DAC_2Vref_ch_mask(struct device *dev,
 811                                                struct device_attribute *attr,
 812                                                const char *buf,
 813                                                size_t len)
 814 {
 815         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 816         struct adt7316_chip_info *chip = iio_priv(dev_info);
 817         u8 dac_config;
 818         u8 data;
 819         int ret;
 820 
 821         ret = kstrtou8(buf, 16, &data);
 822         if (ret || data > ADT7316_DA_2VREF_CH_MASK)
 823                 return -EINVAL;
 824 
 825         dac_config = chip->dac_config & (~ADT7316_DA_2VREF_CH_MASK);
 826         dac_config |= data;
 827 
 828         ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
 829         if (ret)
 830                 return -EIO;
 831 
 832         chip->dac_config = dac_config;
 833 
 834         return len;
 835 }
 836 
 837 static IIO_DEVICE_ATTR(DAC_2Vref_channels_mask, 0644,
 838                        adt7316_show_DAC_2Vref_ch_mask,
 839                        adt7316_store_DAC_2Vref_ch_mask,
 840                        0);
 841 
 842 static ssize_t adt7316_show_DAC_update_mode(struct device *dev,
 843                                             struct device_attribute *attr,
 844                                             char *buf)
 845 {
 846         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 847         struct adt7316_chip_info *chip = iio_priv(dev_info);
 848 
 849         if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC))
 850                 return sprintf(buf, "manual\n");
 851 
 852         switch (chip->dac_config & ADT7316_DA_EN_MODE_MASK) {
 853         case ADT7316_DA_EN_MODE_SINGLE:
 854                 return sprintf(buf,
 855                         "0 - auto at any MSB DAC writing\n");
 856         case ADT7316_DA_EN_MODE_AB_CD:
 857                 return sprintf(buf,
 858                         "1 - auto at MSB DAC AB and CD writing\n");
 859         case ADT7316_DA_EN_MODE_ABCD:
 860                 return sprintf(buf,
 861                         "2 - auto at MSB DAC ABCD writing\n");
 862         default: /* ADT7316_DA_EN_MODE_LDAC */
 863                 return sprintf(buf, "3 - manual\n");
 864         }
 865 }
 866 
 867 static ssize_t adt7316_store_DAC_update_mode(struct device *dev,
 868                                              struct device_attribute *attr,
 869                                              const char *buf,
 870                                              size_t len)
 871 {
 872         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 873         struct adt7316_chip_info *chip = iio_priv(dev_info);
 874         u8 dac_config;
 875         u8 data;
 876         int ret;
 877 
 878         if (!(chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC))
 879                 return -EPERM;
 880 
 881         ret = kstrtou8(buf, 10, &data);
 882         if (ret || data > (ADT7316_DA_EN_MODE_MASK >> ADT7316_DA_EN_MODE_SHIFT))
 883                 return -EINVAL;
 884 
 885         dac_config = chip->dac_config & (~ADT7316_DA_EN_MODE_MASK);
 886         dac_config |= data << ADT7316_DA_EN_MODE_SHIFT;
 887 
 888         ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
 889         if (ret)
 890                 return -EIO;
 891 
 892         chip->dac_config = dac_config;
 893 
 894         return len;
 895 }
 896 
 897 static IIO_DEVICE_ATTR(DAC_update_mode, 0644,
 898                        adt7316_show_DAC_update_mode,
 899                        adt7316_store_DAC_update_mode,
 900                        0);
 901 
 902 static ssize_t adt7316_show_all_DAC_update_modes(struct device *dev,
 903                                                  struct device_attribute *attr,
 904                                                  char *buf)
 905 {
 906         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 907         struct adt7316_chip_info *chip = iio_priv(dev_info);
 908 
 909         if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC)
 910                 return sprintf(buf, "0 - auto at any MSB DAC writing\n"
 911                                 "1 - auto at MSB DAC AB and CD writing\n"
 912                                 "2 - auto at MSB DAC ABCD writing\n"
 913                                 "3 - manual\n");
 914         return sprintf(buf, "manual\n");
 915 }
 916 
 917 static IIO_DEVICE_ATTR(all_DAC_update_modes, 0444,
 918                        adt7316_show_all_DAC_update_modes, NULL, 0);
 919 
 920 static ssize_t adt7316_store_update_DAC(struct device *dev,
 921                                         struct device_attribute *attr,
 922                                         const char *buf,
 923                                         size_t len)
 924 {
 925         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 926         struct adt7316_chip_info *chip = iio_priv(dev_info);
 927         u8 ldac_config;
 928         u8 data;
 929         int ret;
 930 
 931         if (chip->config3 & ADT7316_DA_EN_VIA_DAC_LDAC) {
 932                 if ((chip->dac_config & ADT7316_DA_EN_MODE_MASK) !=
 933                         ADT7316_DA_EN_MODE_LDAC)
 934                         return -EPERM;
 935 
 936                 ret = kstrtou8(buf, 16, &data);
 937                 if (ret || data > ADT7316_LDAC_EN_DA_MASK)
 938                         return -EINVAL;
 939 
 940                 ldac_config = chip->ldac_config & (~ADT7316_LDAC_EN_DA_MASK);
 941                 ldac_config |= data;
 942 
 943                 ret = chip->bus.write(chip->bus.client, ADT7316_LDAC_CONFIG,
 944                         ldac_config);
 945                 if (ret)
 946                         return -EIO;
 947         } else {
 948                 gpiod_set_value(chip->ldac_pin, 0);
 949                 gpiod_set_value(chip->ldac_pin, 1);
 950         }
 951 
 952         return len;
 953 }
 954 
 955 static IIO_DEVICE_ATTR(update_DAC, 0644,
 956                        NULL,
 957                        adt7316_store_update_DAC,
 958                        0);
 959 
 960 static ssize_t adt7316_show_DA_AB_Vref_bypass(struct device *dev,
 961                                               struct device_attribute *attr,
 962                                               char *buf)
 963 {
 964         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 965         struct adt7316_chip_info *chip = iio_priv(dev_info);
 966 
 967         return sprintf(buf, "%d\n",
 968                 !!(chip->dac_config & ADT7316_VREF_BYPASS_DAC_AB));
 969 }
 970 
 971 static ssize_t adt7316_store_DA_AB_Vref_bypass(struct device *dev,
 972                                                struct device_attribute *attr,
 973                                                const char *buf,
 974                                                size_t len)
 975 {
 976         struct iio_dev *dev_info = dev_to_iio_dev(dev);
 977         struct adt7316_chip_info *chip = iio_priv(dev_info);
 978         u8 dac_config;
 979         int ret;
 980 
 981         dac_config = chip->dac_config & (~ADT7316_VREF_BYPASS_DAC_AB);
 982         if (buf[0] == '1')
 983                 dac_config |= ADT7316_VREF_BYPASS_DAC_AB;
 984 
 985         ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
 986         if (ret)
 987                 return -EIO;
 988 
 989         chip->dac_config = dac_config;
 990 
 991         return len;
 992 }
 993 
 994 static IIO_DEVICE_ATTR(DA_AB_Vref_bypass, 0644,
 995                        adt7316_show_DA_AB_Vref_bypass,
 996                        adt7316_store_DA_AB_Vref_bypass,
 997                        0);
 998 
 999 static ssize_t adt7316_show_DA_CD_Vref_bypass(struct device *dev,
1000                                               struct device_attribute *attr,
1001                                               char *buf)
1002 {
1003         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1004         struct adt7316_chip_info *chip = iio_priv(dev_info);
1005 
1006         return sprintf(buf, "%d\n",
1007                 !!(chip->dac_config & ADT7316_VREF_BYPASS_DAC_CD));
1008 }
1009 
1010 static ssize_t adt7316_store_DA_CD_Vref_bypass(struct device *dev,
1011                                                struct device_attribute *attr,
1012                                                const char *buf,
1013                                                size_t len)
1014 {
1015         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1016         struct adt7316_chip_info *chip = iio_priv(dev_info);
1017         u8 dac_config;
1018         int ret;
1019 
1020         dac_config = chip->dac_config & (~ADT7316_VREF_BYPASS_DAC_CD);
1021         if (buf[0] == '1')
1022                 dac_config |= ADT7316_VREF_BYPASS_DAC_CD;
1023 
1024         ret = chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config);
1025         if (ret)
1026                 return -EIO;
1027 
1028         chip->dac_config = dac_config;
1029 
1030         return len;
1031 }
1032 
1033 static IIO_DEVICE_ATTR(DA_CD_Vref_bypass, 0644,
1034                        adt7316_show_DA_CD_Vref_bypass,
1035                        adt7316_store_DA_CD_Vref_bypass,
1036                        0);
1037 
1038 static ssize_t adt7316_show_DAC_internal_Vref(struct device *dev,
1039                                               struct device_attribute *attr,
1040                                               char *buf)
1041 {
1042         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1043         struct adt7316_chip_info *chip = iio_priv(dev_info);
1044 
1045         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
1046                 return sprintf(buf, "0x%x\n",
1047                         (chip->ldac_config & ADT7516_DAC_IN_VREF_MASK) >>
1048                         ADT7516_DAC_IN_VREF_OFFSET);
1049         return sprintf(buf, "%d\n",
1050                        !!(chip->ldac_config & ADT7316_DAC_IN_VREF));
1051 }
1052 
1053 static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
1054                                                struct device_attribute *attr,
1055                                                const char *buf,
1056                                                size_t len)
1057 {
1058         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1059         struct adt7316_chip_info *chip = iio_priv(dev_info);
1060         u8 ldac_config;
1061         u8 data;
1062         int ret;
1063 
1064         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX) {
1065                 ret = kstrtou8(buf, 16, &data);
1066                 if (ret || data > 3)
1067                         return -EINVAL;
1068 
1069                 ldac_config = chip->ldac_config & (~ADT7516_DAC_IN_VREF_MASK);
1070                 if (data & 0x1)
1071                         ldac_config |= ADT7516_DAC_AB_IN_VREF;
1072                 if (data & 0x2)
1073                         ldac_config |= ADT7516_DAC_CD_IN_VREF;
1074         } else {
1075                 ret = kstrtou8(buf, 16, &data);
1076                 if (ret)
1077                         return -EINVAL;
1078 
1079                 ldac_config = chip->ldac_config & (~ADT7316_DAC_IN_VREF);
1080                 if (data)
1081                         ldac_config = chip->ldac_config | ADT7316_DAC_IN_VREF;
1082         }
1083 
1084         ret = chip->bus.write(chip->bus.client, ADT7316_LDAC_CONFIG,
1085                         ldac_config);
1086         if (ret)
1087                 return -EIO;
1088 
1089         chip->ldac_config = ldac_config;
1090 
1091         return len;
1092 }
1093 
1094 static IIO_DEVICE_ATTR(DAC_internal_Vref, 0644,
1095                        adt7316_show_DAC_internal_Vref,
1096                        adt7316_store_DAC_internal_Vref,
1097                        0);
1098 
1099 static ssize_t adt7316_show_ad(struct adt7316_chip_info *chip,
1100                                int channel, char *buf)
1101 {
1102         u16 data;
1103         u8 msb, lsb;
1104         char sign = ' ';
1105         int ret;
1106 
1107         if ((chip->config2 & ADT7316_AD_SINGLE_CH_MODE) &&
1108             channel != (chip->config2 & ADT7516_AD_SINGLE_CH_MASK))
1109                 return -EPERM;
1110 
1111         switch (channel) {
1112         case ADT7316_AD_SINGLE_CH_IN:
1113                 ret = chip->bus.read(chip->bus.client,
1114                         ADT7316_LSB_IN_TEMP_VDD, &lsb);
1115                 if (ret)
1116                         return -EIO;
1117 
1118                 ret = chip->bus.read(chip->bus.client,
1119                         ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1120                 if (ret)
1121                         return -EIO;
1122 
1123                 data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1124                 data |= lsb & ADT7316_LSB_IN_TEMP_MASK;
1125                 break;
1126         case ADT7316_AD_SINGLE_CH_VDD:
1127                 ret = chip->bus.read(chip->bus.client,
1128                         ADT7316_LSB_IN_TEMP_VDD, &lsb);
1129                 if (ret)
1130                         return -EIO;
1131 
1132                 ret = chip->bus.read(chip->bus.client,
1133 
1134                         ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1135                 if (ret)
1136                         return -EIO;
1137 
1138                 data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1139                 data |= (lsb & ADT7316_LSB_VDD_MASK) >> ADT7316_LSB_VDD_OFFSET;
1140                 return sprintf(buf, "%d\n", data);
1141         default: /* ex_temp and ain */
1142                 ret = chip->bus.read(chip->bus.client,
1143                         ADT7316_LSB_EX_TEMP_AIN, &lsb);
1144                 if (ret)
1145                         return -EIO;
1146 
1147                 ret = chip->bus.read(chip->bus.client,
1148                         ADT7316_AD_MSB_DATA_BASE + channel, &msb);
1149                 if (ret)
1150                         return -EIO;
1151 
1152                 data = msb << ADT7316_T_VALUE_FLOAT_OFFSET;
1153                 data |= lsb & (ADT7316_LSB_EX_TEMP_MASK <<
1154                         (ADT7516_LSB_AIN_SHIFT * (channel -
1155                         (ADT7316_MSB_EX_TEMP - ADT7316_AD_MSB_DATA_BASE))));
1156 
1157                 if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
1158                         return sprintf(buf, "%d\n", data);
1159 
1160                 break;
1161         }
1162 
1163         if (data & ADT7316_T_VALUE_SIGN) {
1164                 /* convert supplement to positive value */
1165                 data = (ADT7316_T_VALUE_SIGN << 1) - data;
1166                 sign = '-';
1167         }
1168 
1169         return sprintf(buf, "%c%d.%.2d\n", sign,
1170                 (data >> ADT7316_T_VALUE_FLOAT_OFFSET),
1171                 (data & ADT7316_T_VALUE_FLOAT_MASK) * 25);
1172 }
1173 
1174 static ssize_t adt7316_show_VDD(struct device *dev,
1175                                 struct device_attribute *attr,
1176                                 char *buf)
1177 {
1178         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1179         struct adt7316_chip_info *chip = iio_priv(dev_info);
1180 
1181         return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_VDD, buf);
1182 }
1183 static IIO_DEVICE_ATTR(VDD, 0444, adt7316_show_VDD, NULL, 0);
1184 
1185 static ssize_t adt7316_show_in_temp(struct device *dev,
1186                                     struct device_attribute *attr,
1187                                     char *buf)
1188 {
1189         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1190         struct adt7316_chip_info *chip = iio_priv(dev_info);
1191 
1192         return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_IN, buf);
1193 }
1194 
1195 static IIO_DEVICE_ATTR(in_temp, 0444, adt7316_show_in_temp, NULL, 0);
1196 
1197 static ssize_t adt7316_show_ex_temp_AIN1(struct device *dev,
1198                                          struct device_attribute *attr,
1199                                          char *buf)
1200 {
1201         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1202         struct adt7316_chip_info *chip = iio_priv(dev_info);
1203 
1204         return adt7316_show_ad(chip, ADT7316_AD_SINGLE_CH_EX, buf);
1205 }
1206 
1207 static IIO_DEVICE_ATTR(ex_temp_AIN1, 0444, adt7316_show_ex_temp_AIN1,
1208                        NULL, 0);
1209 static IIO_DEVICE_ATTR(ex_temp, 0444, adt7316_show_ex_temp_AIN1, NULL, 0);
1210 
1211 static ssize_t adt7316_show_AIN2(struct device *dev,
1212                                  struct device_attribute *attr,
1213                                  char *buf)
1214 {
1215         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1216         struct adt7316_chip_info *chip = iio_priv(dev_info);
1217 
1218         return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN2, buf);
1219 }
1220 static IIO_DEVICE_ATTR(AIN2, 0444, adt7316_show_AIN2, NULL, 0);
1221 
1222 static ssize_t adt7316_show_AIN3(struct device *dev,
1223                                  struct device_attribute *attr,
1224                                  char *buf)
1225 {
1226         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1227         struct adt7316_chip_info *chip = iio_priv(dev_info);
1228 
1229         return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN3, buf);
1230 }
1231 static IIO_DEVICE_ATTR(AIN3, 0444, adt7316_show_AIN3, NULL, 0);
1232 
1233 static ssize_t adt7316_show_AIN4(struct device *dev,
1234                                  struct device_attribute *attr,
1235                                  char *buf)
1236 {
1237         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1238         struct adt7316_chip_info *chip = iio_priv(dev_info);
1239 
1240         return adt7316_show_ad(chip, ADT7516_AD_SINGLE_CH_AIN4, buf);
1241 }
1242 static IIO_DEVICE_ATTR(AIN4, 0444, adt7316_show_AIN4, NULL, 0);
1243 
1244 static ssize_t adt7316_show_temp_offset(struct adt7316_chip_info *chip,
1245                                         int offset_addr, char *buf)
1246 {
1247         int data;
1248         u8 val;
1249         int ret;
1250 
1251         ret = chip->bus.read(chip->bus.client, offset_addr, &val);
1252         if (ret)
1253                 return -EIO;
1254 
1255         data = (int)val;
1256         if (val & 0x80)
1257                 data -= 256;
1258 
1259         return sprintf(buf, "%d\n", data);
1260 }
1261 
1262 static ssize_t adt7316_store_temp_offset(struct adt7316_chip_info *chip,
1263                                          int offset_addr,
1264                                          const char *buf,
1265                                          size_t len)
1266 {
1267         int data;
1268         u8 val;
1269         int ret;
1270 
1271         ret = kstrtoint(buf, 10, &data);
1272         if (ret || data > 127 || data < -128)
1273                 return -EINVAL;
1274 
1275         if (data < 0)
1276                 data += 256;
1277 
1278         val = (u8)data;
1279 
1280         ret = chip->bus.write(chip->bus.client, offset_addr, val);
1281         if (ret)
1282                 return -EIO;
1283 
1284         return len;
1285 }
1286 
1287 static ssize_t adt7316_show_in_temp_offset(struct device *dev,
1288                                            struct device_attribute *attr,
1289                                            char *buf)
1290 {
1291         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1292         struct adt7316_chip_info *chip = iio_priv(dev_info);
1293 
1294         return adt7316_show_temp_offset(chip, ADT7316_IN_TEMP_OFFSET, buf);
1295 }
1296 
1297 static ssize_t adt7316_store_in_temp_offset(struct device *dev,
1298                                             struct device_attribute *attr,
1299                                             const char *buf,
1300                                             size_t len)
1301 {
1302         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1303         struct adt7316_chip_info *chip = iio_priv(dev_info);
1304 
1305         return adt7316_store_temp_offset(chip, ADT7316_IN_TEMP_OFFSET, buf,
1306                         len);
1307 }
1308 
1309 static IIO_DEVICE_ATTR(in_temp_offset, 0644,
1310                        adt7316_show_in_temp_offset,
1311                        adt7316_store_in_temp_offset, 0);
1312 
1313 static ssize_t adt7316_show_ex_temp_offset(struct device *dev,
1314                                            struct device_attribute *attr,
1315                                            char *buf)
1316 {
1317         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1318         struct adt7316_chip_info *chip = iio_priv(dev_info);
1319 
1320         return adt7316_show_temp_offset(chip, ADT7316_EX_TEMP_OFFSET, buf);
1321 }
1322 
1323 static ssize_t adt7316_store_ex_temp_offset(struct device *dev,
1324                                             struct device_attribute *attr,
1325                                             const char *buf,
1326                                             size_t len)
1327 {
1328         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1329         struct adt7316_chip_info *chip = iio_priv(dev_info);
1330 
1331         return adt7316_store_temp_offset(chip, ADT7316_EX_TEMP_OFFSET, buf,
1332                         len);
1333 }
1334 
1335 static IIO_DEVICE_ATTR(ex_temp_offset, 0644,
1336                        adt7316_show_ex_temp_offset,
1337                        adt7316_store_ex_temp_offset, 0);
1338 
1339 static ssize_t adt7316_show_in_analog_temp_offset(struct device *dev,
1340                                                   struct device_attribute *attr,
1341                                                   char *buf)
1342 {
1343         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1344         struct adt7316_chip_info *chip = iio_priv(dev_info);
1345 
1346         return adt7316_show_temp_offset(chip,
1347                         ADT7316_IN_ANALOG_TEMP_OFFSET, buf);
1348 }
1349 
1350 static ssize_t adt7316_store_in_analog_temp_offset(struct device *dev,
1351                                                 struct device_attribute *attr,
1352                                                 const char *buf,
1353                                                 size_t len)
1354 {
1355         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1356         struct adt7316_chip_info *chip = iio_priv(dev_info);
1357 
1358         return adt7316_store_temp_offset(chip,
1359                         ADT7316_IN_ANALOG_TEMP_OFFSET, buf, len);
1360 }
1361 
1362 static IIO_DEVICE_ATTR(in_analog_temp_offset, 0644,
1363                        adt7316_show_in_analog_temp_offset,
1364                        adt7316_store_in_analog_temp_offset, 0);
1365 
1366 static ssize_t adt7316_show_ex_analog_temp_offset(struct device *dev,
1367                                                   struct device_attribute *attr,
1368                                                   char *buf)
1369 {
1370         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1371         struct adt7316_chip_info *chip = iio_priv(dev_info);
1372 
1373         return adt7316_show_temp_offset(chip,
1374                         ADT7316_EX_ANALOG_TEMP_OFFSET, buf);
1375 }
1376 
1377 static ssize_t adt7316_store_ex_analog_temp_offset(struct device *dev,
1378                                                 struct device_attribute *attr,
1379                                                 const char *buf,
1380                                                 size_t len)
1381 {
1382         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1383         struct adt7316_chip_info *chip = iio_priv(dev_info);
1384 
1385         return adt7316_store_temp_offset(chip,
1386                         ADT7316_EX_ANALOG_TEMP_OFFSET, buf, len);
1387 }
1388 
1389 static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
1390                        adt7316_show_ex_analog_temp_offset,
1391                        adt7316_store_ex_analog_temp_offset, 0);
1392 
1393 static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
1394                                 int channel, char *buf)
1395 {
1396         u16 data = 0;
1397         u8 msb, lsb, offset;
1398         int ret;
1399 
1400         if (channel >= ADT7316_DA_MSB_DATA_REGS ||
1401             (channel == 0 &&
1402             (chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA)) ||
1403             (channel == 1 &&
1404             (chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB)))
1405                 return -EPERM;
1406 
1407         offset = chip->dac_bits - 8;
1408 
1409         if (chip->dac_bits > 8) {
1410                 ret = chip->bus.read(chip->bus.client,
1411                         ADT7316_DA_DATA_BASE + channel * 2, &lsb);
1412                 if (ret)
1413                         return -EIO;
1414         }
1415 
1416         ret = chip->bus.read(chip->bus.client,
1417                 ADT7316_DA_DATA_BASE + 1 + channel * 2, &msb);
1418         if (ret)
1419                 return -EIO;
1420 
1421         if (chip->dac_bits == 12)
1422                 data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
1423         else if (chip->dac_bits == 10)
1424                 data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
1425         data |= msb << offset;
1426 
1427         return sprintf(buf, "%d\n", data);
1428 }
1429 
1430 static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
1431                                  int channel, const char *buf, size_t len)
1432 {
1433         u8 msb, lsb, lsb_reg, offset;
1434         u16 data;
1435         int ret;
1436 
1437         if (channel >= ADT7316_DA_MSB_DATA_REGS ||
1438             (channel == 0 &&
1439             (chip->config3 & ADT7316_EN_IN_TEMP_PROP_DACA)) ||
1440             (channel == 1 &&
1441             (chip->config3 & ADT7316_EN_EX_TEMP_PROP_DACB)))
1442                 return -EPERM;
1443 
1444         offset = chip->dac_bits - 8;
1445 
1446         ret = kstrtou16(buf, 10, &data);
1447         if (ret || data >= (1 << chip->dac_bits))
1448                 return -EINVAL;
1449 
1450         if (chip->dac_bits > 8) {
1451                 lsb = data & ((1 << offset) - 1);
1452                 if (chip->dac_bits == 12)
1453                         lsb_reg = lsb << ADT7316_DA_12_BIT_LSB_SHIFT;
1454                 else
1455                         lsb_reg = lsb << ADT7316_DA_10_BIT_LSB_SHIFT;
1456                 ret = chip->bus.write(chip->bus.client,
1457                         ADT7316_DA_DATA_BASE + channel * 2, lsb_reg);
1458                 if (ret)
1459                         return -EIO;
1460         }
1461 
1462         msb = data >> offset;
1463         ret = chip->bus.write(chip->bus.client,
1464                 ADT7316_DA_DATA_BASE + 1 + channel * 2, msb);
1465         if (ret)
1466                 return -EIO;
1467 
1468         return len;
1469 }
1470 
1471 static ssize_t adt7316_show_DAC_A(struct device *dev,
1472                                   struct device_attribute *attr,
1473                                   char *buf)
1474 {
1475         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1476         struct adt7316_chip_info *chip = iio_priv(dev_info);
1477 
1478         return adt7316_show_DAC(chip, 0, buf);
1479 }
1480 
1481 static ssize_t adt7316_store_DAC_A(struct device *dev,
1482                                    struct device_attribute *attr,
1483                                    const char *buf,
1484                                    size_t len)
1485 {
1486         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1487         struct adt7316_chip_info *chip = iio_priv(dev_info);
1488 
1489         return adt7316_store_DAC(chip, 0, buf, len);
1490 }
1491 
1492 static IIO_DEVICE_ATTR(DAC_A, 0644, adt7316_show_DAC_A,
1493                        adt7316_store_DAC_A, 0);
1494 
1495 static ssize_t adt7316_show_DAC_B(struct device *dev,
1496                                   struct device_attribute *attr,
1497                                   char *buf)
1498 {
1499         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1500         struct adt7316_chip_info *chip = iio_priv(dev_info);
1501 
1502         return adt7316_show_DAC(chip, 1, buf);
1503 }
1504 
1505 static ssize_t adt7316_store_DAC_B(struct device *dev,
1506                                    struct device_attribute *attr,
1507                                    const char *buf,
1508                                    size_t len)
1509 {
1510         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1511         struct adt7316_chip_info *chip = iio_priv(dev_info);
1512 
1513         return adt7316_store_DAC(chip, 1, buf, len);
1514 }
1515 
1516 static IIO_DEVICE_ATTR(DAC_B, 0644, adt7316_show_DAC_B,
1517                        adt7316_store_DAC_B, 0);
1518 
1519 static ssize_t adt7316_show_DAC_C(struct device *dev,
1520                                   struct device_attribute *attr,
1521                                   char *buf)
1522 {
1523         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1524         struct adt7316_chip_info *chip = iio_priv(dev_info);
1525 
1526         return adt7316_show_DAC(chip, 2, buf);
1527 }
1528 
1529 static ssize_t adt7316_store_DAC_C(struct device *dev,
1530                                    struct device_attribute *attr,
1531                                    const char *buf,
1532                                    size_t len)
1533 {
1534         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1535         struct adt7316_chip_info *chip = iio_priv(dev_info);
1536 
1537         return adt7316_store_DAC(chip, 2, buf, len);
1538 }
1539 
1540 static IIO_DEVICE_ATTR(DAC_C, 0644, adt7316_show_DAC_C,
1541                        adt7316_store_DAC_C, 0);
1542 
1543 static ssize_t adt7316_show_DAC_D(struct device *dev,
1544                                   struct device_attribute *attr,
1545                                   char *buf)
1546 {
1547         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1548         struct adt7316_chip_info *chip = iio_priv(dev_info);
1549 
1550         return adt7316_show_DAC(chip, 3, buf);
1551 }
1552 
1553 static ssize_t adt7316_store_DAC_D(struct device *dev,
1554                                    struct device_attribute *attr,
1555                                    const char *buf,
1556                                    size_t len)
1557 {
1558         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1559         struct adt7316_chip_info *chip = iio_priv(dev_info);
1560 
1561         return adt7316_store_DAC(chip, 3, buf, len);
1562 }
1563 
1564 static IIO_DEVICE_ATTR(DAC_D, 0644, adt7316_show_DAC_D,
1565                        adt7316_store_DAC_D, 0);
1566 
1567 static ssize_t adt7316_show_device_id(struct device *dev,
1568                                       struct device_attribute *attr,
1569                                       char *buf)
1570 {
1571         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1572         struct adt7316_chip_info *chip = iio_priv(dev_info);
1573         u8 id;
1574         int ret;
1575 
1576         ret = chip->bus.read(chip->bus.client, ADT7316_DEVICE_ID, &id);
1577         if (ret)
1578                 return -EIO;
1579 
1580         return sprintf(buf, "%d\n", id);
1581 }
1582 
1583 static IIO_DEVICE_ATTR(device_id, 0444, adt7316_show_device_id, NULL, 0);
1584 
1585 static ssize_t adt7316_show_manufactorer_id(struct device *dev,
1586                                             struct device_attribute *attr,
1587                                             char *buf)
1588 {
1589         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1590         struct adt7316_chip_info *chip = iio_priv(dev_info);
1591         u8 id;
1592         int ret;
1593 
1594         ret = chip->bus.read(chip->bus.client, ADT7316_MANUFACTURE_ID, &id);
1595         if (ret)
1596                 return -EIO;
1597 
1598         return sprintf(buf, "%d\n", id);
1599 }
1600 
1601 static IIO_DEVICE_ATTR(manufactorer_id, 0444,
1602                        adt7316_show_manufactorer_id, NULL, 0);
1603 
1604 static ssize_t adt7316_show_device_rev(struct device *dev,
1605                                        struct device_attribute *attr,
1606                                        char *buf)
1607 {
1608         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1609         struct adt7316_chip_info *chip = iio_priv(dev_info);
1610         u8 rev;
1611         int ret;
1612 
1613         ret = chip->bus.read(chip->bus.client, ADT7316_DEVICE_REV, &rev);
1614         if (ret)
1615                 return -EIO;
1616 
1617         return sprintf(buf, "%d\n", rev);
1618 }
1619 
1620 static IIO_DEVICE_ATTR(device_rev, 0444, adt7316_show_device_rev, NULL, 0);
1621 
1622 static ssize_t adt7316_show_bus_type(struct device *dev,
1623                                      struct device_attribute *attr,
1624                                      char *buf)
1625 {
1626         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1627         struct adt7316_chip_info *chip = iio_priv(dev_info);
1628         u8 stat;
1629         int ret;
1630 
1631         ret = chip->bus.read(chip->bus.client, ADT7316_SPI_LOCK_STAT, &stat);
1632         if (ret)
1633                 return -EIO;
1634 
1635         if (stat)
1636                 return sprintf(buf, "spi\n");
1637 
1638         return sprintf(buf, "i2c\n");
1639 }
1640 
1641 static IIO_DEVICE_ATTR(bus_type, 0444, adt7316_show_bus_type, NULL, 0);
1642 
1643 static struct attribute *adt7316_attributes[] = {
1644         &iio_dev_attr_all_modes.dev_attr.attr,
1645         &iio_dev_attr_mode.dev_attr.attr,
1646         &iio_dev_attr_enabled.dev_attr.attr,
1647         &iio_dev_attr_ad_channel.dev_attr.attr,
1648         &iio_dev_attr_all_ad_channels.dev_attr.attr,
1649         &iio_dev_attr_disable_averaging.dev_attr.attr,
1650         &iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1651         &iio_dev_attr_powerdown.dev_attr.attr,
1652         &iio_dev_attr_fast_ad_clock.dev_attr.attr,
1653         &iio_dev_attr_da_high_resolution.dev_attr.attr,
1654         &iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1655         &iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1656         &iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1657         &iio_dev_attr_DAC_update_mode.dev_attr.attr,
1658         &iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1659         &iio_dev_attr_update_DAC.dev_attr.attr,
1660         &iio_dev_attr_DA_AB_Vref_bypass.dev_attr.attr,
1661         &iio_dev_attr_DA_CD_Vref_bypass.dev_attr.attr,
1662         &iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1663         &iio_dev_attr_VDD.dev_attr.attr,
1664         &iio_dev_attr_in_temp.dev_attr.attr,
1665         &iio_dev_attr_ex_temp.dev_attr.attr,
1666         &iio_dev_attr_in_temp_offset.dev_attr.attr,
1667         &iio_dev_attr_ex_temp_offset.dev_attr.attr,
1668         &iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1669         &iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1670         &iio_dev_attr_DAC_A.dev_attr.attr,
1671         &iio_dev_attr_DAC_B.dev_attr.attr,
1672         &iio_dev_attr_DAC_C.dev_attr.attr,
1673         &iio_dev_attr_DAC_D.dev_attr.attr,
1674         &iio_dev_attr_device_id.dev_attr.attr,
1675         &iio_dev_attr_manufactorer_id.dev_attr.attr,
1676         &iio_dev_attr_device_rev.dev_attr.attr,
1677         &iio_dev_attr_bus_type.dev_attr.attr,
1678         NULL,
1679 };
1680 
1681 static const struct attribute_group adt7316_attribute_group = {
1682         .attrs = adt7316_attributes,
1683 };
1684 
1685 static struct attribute *adt7516_attributes[] = {
1686         &iio_dev_attr_all_modes.dev_attr.attr,
1687         &iio_dev_attr_mode.dev_attr.attr,
1688         &iio_dev_attr_select_ex_temp.dev_attr.attr,
1689         &iio_dev_attr_enabled.dev_attr.attr,
1690         &iio_dev_attr_ad_channel.dev_attr.attr,
1691         &iio_dev_attr_all_ad_channels.dev_attr.attr,
1692         &iio_dev_attr_disable_averaging.dev_attr.attr,
1693         &iio_dev_attr_enable_smbus_timeout.dev_attr.attr,
1694         &iio_dev_attr_powerdown.dev_attr.attr,
1695         &iio_dev_attr_fast_ad_clock.dev_attr.attr,
1696         &iio_dev_attr_AIN_internal_Vref.dev_attr.attr,
1697         &iio_dev_attr_da_high_resolution.dev_attr.attr,
1698         &iio_dev_attr_enable_proportion_DACA.dev_attr.attr,
1699         &iio_dev_attr_enable_proportion_DACB.dev_attr.attr,
1700         &iio_dev_attr_DAC_2Vref_channels_mask.dev_attr.attr,
1701         &iio_dev_attr_DAC_update_mode.dev_attr.attr,
1702         &iio_dev_attr_all_DAC_update_modes.dev_attr.attr,
1703         &iio_dev_attr_update_DAC.dev_attr.attr,
1704         &iio_dev_attr_DAC_internal_Vref.dev_attr.attr,
1705         &iio_dev_attr_VDD.dev_attr.attr,
1706         &iio_dev_attr_in_temp.dev_attr.attr,
1707         &iio_dev_attr_ex_temp_AIN1.dev_attr.attr,
1708         &iio_dev_attr_AIN2.dev_attr.attr,
1709         &iio_dev_attr_AIN3.dev_attr.attr,
1710         &iio_dev_attr_AIN4.dev_attr.attr,
1711         &iio_dev_attr_in_temp_offset.dev_attr.attr,
1712         &iio_dev_attr_ex_temp_offset.dev_attr.attr,
1713         &iio_dev_attr_in_analog_temp_offset.dev_attr.attr,
1714         &iio_dev_attr_ex_analog_temp_offset.dev_attr.attr,
1715         &iio_dev_attr_DAC_A.dev_attr.attr,
1716         &iio_dev_attr_DAC_B.dev_attr.attr,
1717         &iio_dev_attr_DAC_C.dev_attr.attr,
1718         &iio_dev_attr_DAC_D.dev_attr.attr,
1719         &iio_dev_attr_device_id.dev_attr.attr,
1720         &iio_dev_attr_manufactorer_id.dev_attr.attr,
1721         &iio_dev_attr_device_rev.dev_attr.attr,
1722         &iio_dev_attr_bus_type.dev_attr.attr,
1723         NULL,
1724 };
1725 
1726 static const struct attribute_group adt7516_attribute_group = {
1727         .attrs = adt7516_attributes,
1728 };
1729 
1730 static irqreturn_t adt7316_event_handler(int irq, void *private)
1731 {
1732         struct iio_dev *indio_dev = private;
1733         struct adt7316_chip_info *chip = iio_priv(indio_dev);
1734         u8 stat1, stat2;
1735         int ret;
1736         s64 time;
1737 
1738         ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT1, &stat1);
1739         if (!ret) {
1740                 if ((chip->id & ID_FAMILY_MASK) != ID_ADT75XX)
1741                         stat1 &= 0x1F;
1742 
1743                 time = iio_get_time_ns(indio_dev);
1744                 if (stat1 & BIT(0))
1745                         iio_push_event(indio_dev,
1746                                        IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1747                                                             IIO_EV_TYPE_THRESH,
1748                                                             IIO_EV_DIR_RISING),
1749                                        time);
1750                 if (stat1 & BIT(1))
1751                         iio_push_event(indio_dev,
1752                                        IIO_UNMOD_EVENT_CODE(IIO_TEMP, 0,
1753                                                             IIO_EV_TYPE_THRESH,
1754                                                             IIO_EV_DIR_FALLING),
1755                                        time);
1756                 if (stat1 & BIT(2))
1757                         iio_push_event(indio_dev,
1758                                        IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1759                                                             IIO_EV_TYPE_THRESH,
1760                                                             IIO_EV_DIR_RISING),
1761                                        time);
1762                 if (stat1 & BIT(3))
1763                         iio_push_event(indio_dev,
1764                                        IIO_UNMOD_EVENT_CODE(IIO_TEMP, 1,
1765                                                             IIO_EV_TYPE_THRESH,
1766                                                             IIO_EV_DIR_FALLING),
1767                                        time);
1768                 if (stat1 & BIT(5))
1769                         iio_push_event(indio_dev,
1770                                        IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
1771                                                             IIO_EV_TYPE_THRESH,
1772                                                             IIO_EV_DIR_EITHER),
1773                                        time);
1774                 if (stat1 & BIT(6))
1775                         iio_push_event(indio_dev,
1776                                        IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
1777                                                             IIO_EV_TYPE_THRESH,
1778                                                             IIO_EV_DIR_EITHER),
1779                                        time);
1780                 if (stat1 & BIT(7))
1781                         iio_push_event(indio_dev,
1782                                        IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
1783                                                             IIO_EV_TYPE_THRESH,
1784                                                             IIO_EV_DIR_EITHER),
1785                                        time);
1786                 }
1787         ret = chip->bus.read(chip->bus.client, ADT7316_INT_STAT2, &stat2);
1788         if (!ret) {
1789                 if (stat2 & ADT7316_INT_MASK2_VDD)
1790                         iio_push_event(indio_dev,
1791                                        IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE,
1792                                                             0,
1793                                                             IIO_EV_TYPE_THRESH,
1794                                                             IIO_EV_DIR_RISING),
1795                                        iio_get_time_ns(indio_dev));
1796         }
1797 
1798         return IRQ_HANDLED;
1799 }
1800 
1801 static int adt7316_setup_irq(struct iio_dev *indio_dev)
1802 {
1803         struct adt7316_chip_info *chip = iio_priv(indio_dev);
1804         int irq_type, ret;
1805 
1806         irq_type = irqd_get_trigger_type(irq_get_irq_data(chip->bus.irq));
1807 
1808         switch (irq_type) {
1809         case IRQF_TRIGGER_HIGH:
1810         case IRQF_TRIGGER_RISING:
1811                 break;
1812         case IRQF_TRIGGER_LOW:
1813         case IRQF_TRIGGER_FALLING:
1814                 break;
1815         default:
1816                 dev_info(&indio_dev->dev, "mode %d unsupported, using IRQF_TRIGGER_LOW\n",
1817                          irq_type);
1818                 irq_type = IRQF_TRIGGER_LOW;
1819                 break;
1820         }
1821 
1822         ret = devm_request_threaded_irq(&indio_dev->dev, chip->bus.irq,
1823                                         NULL, adt7316_event_handler,
1824                                         irq_type | IRQF_ONESHOT,
1825                                         indio_dev->name, indio_dev);
1826         if (ret) {
1827                 dev_err(&indio_dev->dev, "failed to request irq %d\n",
1828                         chip->bus.irq);
1829                 return ret;
1830         }
1831 
1832         if (irq_type & IRQF_TRIGGER_HIGH)
1833                 chip->config1 |= ADT7316_INT_POLARITY;
1834 
1835         return 0;
1836 }
1837 
1838 /*
1839  * Show mask of enabled interrupts in Hex.
1840  */
1841 static ssize_t adt7316_show_int_mask(struct device *dev,
1842                                      struct device_attribute *attr,
1843                                      char *buf)
1844 {
1845         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1846         struct adt7316_chip_info *chip = iio_priv(dev_info);
1847 
1848         return sprintf(buf, "0x%x\n", chip->int_mask);
1849 }
1850 
1851 /*
1852  * Set 1 to the mask in Hex to enabled interrupts.
1853  */
1854 static ssize_t adt7316_set_int_mask(struct device *dev,
1855                                     struct device_attribute *attr,
1856                                     const char *buf,
1857                                     size_t len)
1858 {
1859         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1860         struct adt7316_chip_info *chip = iio_priv(dev_info);
1861         u16 data;
1862         int ret;
1863         u8 mask;
1864 
1865         ret = kstrtou16(buf, 16, &data);
1866         if (ret || data >= ADT7316_VDD_INT_MASK + 1)
1867                 return -EINVAL;
1868 
1869         if (data & ADT7316_VDD_INT_MASK)
1870                 mask = 0;                       /* enable vdd int */
1871         else
1872                 mask = ADT7316_INT_MASK2_VDD;   /* disable vdd int */
1873 
1874         ret = chip->bus.write(chip->bus.client, ADT7316_INT_MASK2, mask);
1875         if (!ret) {
1876                 chip->int_mask &= ~ADT7316_VDD_INT_MASK;
1877                 chip->int_mask |= data & ADT7316_VDD_INT_MASK;
1878         }
1879 
1880         if (data & ADT7316_TEMP_AIN_INT_MASK) {
1881                 if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX)
1882                         /* mask in reg is opposite, set 1 to disable */
1883                         mask = (~data) & ADT7316_TEMP_INT_MASK;
1884                 else
1885                         /* mask in reg is opposite, set 1 to disable */
1886                         mask = (~data) & ADT7316_TEMP_AIN_INT_MASK;
1887         }
1888         ret = chip->bus.write(chip->bus.client, ADT7316_INT_MASK1, mask);
1889 
1890         chip->int_mask = mask;
1891 
1892         return len;
1893 }
1894 
1895 static inline ssize_t adt7316_show_ad_bound(struct device *dev,
1896                                             struct device_attribute *attr,
1897                                             char *buf)
1898 {
1899         struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
1900         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1901         struct adt7316_chip_info *chip = iio_priv(dev_info);
1902         u8 val;
1903         int data;
1904         int ret;
1905 
1906         if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX &&
1907             this_attr->address > ADT7316_EX_TEMP_LOW)
1908                 return -EPERM;
1909 
1910         ret = chip->bus.read(chip->bus.client, this_attr->address, &val);
1911         if (ret)
1912                 return -EIO;
1913 
1914         data = (int)val;
1915 
1916         if (!((chip->id & ID_FAMILY_MASK) == ID_ADT75XX &&
1917               (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0)) {
1918                 if (data & 0x80)
1919                         data -= 256;
1920         }
1921 
1922         return sprintf(buf, "%d\n", data);
1923 }
1924 
1925 static inline ssize_t adt7316_set_ad_bound(struct device *dev,
1926                                            struct device_attribute *attr,
1927                                            const char *buf,
1928                                            size_t len)
1929 {
1930         struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
1931         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1932         struct adt7316_chip_info *chip = iio_priv(dev_info);
1933         int data;
1934         u8 val;
1935         int ret;
1936 
1937         if ((chip->id & ID_FAMILY_MASK) == ID_ADT73XX &&
1938             this_attr->address > ADT7316_EX_TEMP_LOW)
1939                 return -EPERM;
1940 
1941         ret = kstrtoint(buf, 10, &data);
1942         if (ret)
1943                 return -EINVAL;
1944 
1945         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX &&
1946             (chip->config1 & ADT7516_SEL_AIN1_2_EX_TEMP_MASK) == 0) {
1947                 if (data > 255 || data < 0)
1948                         return -EINVAL;
1949         } else {
1950                 if (data > 127 || data < -128)
1951                         return -EINVAL;
1952 
1953                 if (data < 0)
1954                         data += 256;
1955         }
1956 
1957         val = (u8)data;
1958 
1959         ret = chip->bus.write(chip->bus.client, this_attr->address, val);
1960         if (ret)
1961                 return -EIO;
1962 
1963         return len;
1964 }
1965 
1966 static ssize_t adt7316_show_int_enabled(struct device *dev,
1967                                         struct device_attribute *attr,
1968                                         char *buf)
1969 {
1970         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1971         struct adt7316_chip_info *chip = iio_priv(dev_info);
1972 
1973         return sprintf(buf, "%d\n", !!(chip->config1 & ADT7316_INT_EN));
1974 }
1975 
1976 static ssize_t adt7316_set_int_enabled(struct device *dev,
1977                                        struct device_attribute *attr,
1978                                        const char *buf,
1979                                        size_t len)
1980 {
1981         struct iio_dev *dev_info = dev_to_iio_dev(dev);
1982         struct adt7316_chip_info *chip = iio_priv(dev_info);
1983         u8 config1;
1984         int ret;
1985 
1986         config1 = chip->config1 & (~ADT7316_INT_EN);
1987         if (buf[0] == '1')
1988                 config1 |= ADT7316_INT_EN;
1989 
1990         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, config1);
1991         if (ret)
1992                 return -EIO;
1993 
1994         chip->config1 = config1;
1995 
1996         return len;
1997 }
1998 
1999 static IIO_DEVICE_ATTR(int_mask,
2000                        0644,
2001                        adt7316_show_int_mask, adt7316_set_int_mask,
2002                        0);
2003 static IIO_DEVICE_ATTR(in_temp_high_value,
2004                        0644,
2005                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2006                        ADT7316_IN_TEMP_HIGH);
2007 static IIO_DEVICE_ATTR(in_temp_low_value,
2008                        0644,
2009                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2010                        ADT7316_IN_TEMP_LOW);
2011 static IIO_DEVICE_ATTR(ex_temp_high_value,
2012                        0644,
2013                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2014                        ADT7316_EX_TEMP_HIGH);
2015 static IIO_DEVICE_ATTR(ex_temp_low_value,
2016                        0644,
2017                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2018                        ADT7316_EX_TEMP_LOW);
2019 
2020 /* NASTY duplication to be fixed */
2021 static IIO_DEVICE_ATTR(ex_temp_ain1_high_value,
2022                        0644,
2023                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2024                        ADT7316_EX_TEMP_HIGH);
2025 static IIO_DEVICE_ATTR(ex_temp_ain1_low_value,
2026                        0644,
2027                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2028                        ADT7316_EX_TEMP_LOW);
2029 static IIO_DEVICE_ATTR(ain2_high_value,
2030                        0644,
2031                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2032                        ADT7516_AIN2_HIGH);
2033 static IIO_DEVICE_ATTR(ain2_low_value,
2034                        0644,
2035                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2036                        ADT7516_AIN2_LOW);
2037 static IIO_DEVICE_ATTR(ain3_high_value,
2038                        0644,
2039                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2040                        ADT7516_AIN3_HIGH);
2041 static IIO_DEVICE_ATTR(ain3_low_value,
2042                        0644,
2043                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2044                        ADT7516_AIN3_LOW);
2045 static IIO_DEVICE_ATTR(ain4_high_value,
2046                        0644,
2047                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2048                        ADT7516_AIN4_HIGH);
2049 static IIO_DEVICE_ATTR(ain4_low_value,
2050                        0644,
2051                        adt7316_show_ad_bound, adt7316_set_ad_bound,
2052                        ADT7516_AIN4_LOW);
2053 static IIO_DEVICE_ATTR(int_enabled,
2054                        0644,
2055                        adt7316_show_int_enabled,
2056                        adt7316_set_int_enabled, 0);
2057 
2058 static struct attribute *adt7316_event_attributes[] = {
2059         &iio_dev_attr_int_mask.dev_attr.attr,
2060         &iio_dev_attr_in_temp_high_value.dev_attr.attr,
2061         &iio_dev_attr_in_temp_low_value.dev_attr.attr,
2062         &iio_dev_attr_ex_temp_high_value.dev_attr.attr,
2063         &iio_dev_attr_ex_temp_low_value.dev_attr.attr,
2064         &iio_dev_attr_int_enabled.dev_attr.attr,
2065         NULL,
2066 };
2067 
2068 static const struct attribute_group adt7316_event_attribute_group = {
2069         .attrs = adt7316_event_attributes,
2070         .name = "events",
2071 };
2072 
2073 static struct attribute *adt7516_event_attributes[] = {
2074         &iio_dev_attr_int_mask.dev_attr.attr,
2075         &iio_dev_attr_in_temp_high_value.dev_attr.attr,
2076         &iio_dev_attr_in_temp_low_value.dev_attr.attr,
2077         &iio_dev_attr_ex_temp_ain1_high_value.dev_attr.attr,
2078         &iio_dev_attr_ex_temp_ain1_low_value.dev_attr.attr,
2079         &iio_dev_attr_ain2_high_value.dev_attr.attr,
2080         &iio_dev_attr_ain2_low_value.dev_attr.attr,
2081         &iio_dev_attr_ain3_high_value.dev_attr.attr,
2082         &iio_dev_attr_ain3_low_value.dev_attr.attr,
2083         &iio_dev_attr_ain4_high_value.dev_attr.attr,
2084         &iio_dev_attr_ain4_low_value.dev_attr.attr,
2085         &iio_dev_attr_int_enabled.dev_attr.attr,
2086         NULL,
2087 };
2088 
2089 static const struct attribute_group adt7516_event_attribute_group = {
2090         .attrs = adt7516_event_attributes,
2091         .name = "events",
2092 };
2093 
2094 #ifdef CONFIG_PM_SLEEP
2095 static int adt7316_disable(struct device *dev)
2096 {
2097         struct iio_dev *dev_info = dev_get_drvdata(dev);
2098         struct adt7316_chip_info *chip = iio_priv(dev_info);
2099 
2100         return _adt7316_store_enabled(chip, 0);
2101 }
2102 
2103 static int adt7316_enable(struct device *dev)
2104 {
2105         struct iio_dev *dev_info = dev_get_drvdata(dev);
2106         struct adt7316_chip_info *chip = iio_priv(dev_info);
2107 
2108         return _adt7316_store_enabled(chip, 1);
2109 }
2110 EXPORT_SYMBOL_GPL(adt7316_pm_ops);
2111 SIMPLE_DEV_PM_OPS(adt7316_pm_ops, adt7316_disable, adt7316_enable);
2112 #endif
2113 
2114 static const struct iio_info adt7316_info = {
2115         .attrs = &adt7316_attribute_group,
2116         .event_attrs = &adt7316_event_attribute_group,
2117 };
2118 
2119 static const struct iio_info adt7516_info = {
2120         .attrs = &adt7516_attribute_group,
2121         .event_attrs = &adt7516_event_attribute_group,
2122 };
2123 
2124 /*
2125  * device probe and remove
2126  */
2127 int adt7316_probe(struct device *dev, struct adt7316_bus *bus,
2128                   const char *name)
2129 {
2130         struct adt7316_chip_info *chip;
2131         struct iio_dev *indio_dev;
2132         int ret;
2133 
2134         indio_dev = devm_iio_device_alloc(dev, sizeof(*chip));
2135         if (!indio_dev)
2136                 return -ENOMEM;
2137         chip = iio_priv(indio_dev);
2138         /* this is only used for device removal purposes */
2139         dev_set_drvdata(dev, indio_dev);
2140 
2141         chip->bus = *bus;
2142 
2143         if (name[4] == '3')
2144                 chip->id = ID_ADT7316 + (name[6] - '6');
2145         else if (name[4] == '5')
2146                 chip->id = ID_ADT7516 + (name[6] - '6');
2147         else
2148                 return -ENODEV;
2149 
2150         if (chip->id == ID_ADT7316 || chip->id == ID_ADT7516)
2151                 chip->dac_bits = 12;
2152         else if (chip->id == ID_ADT7317 || chip->id == ID_ADT7517)
2153                 chip->dac_bits = 10;
2154         else
2155                 chip->dac_bits = 8;
2156 
2157         chip->ldac_pin = devm_gpiod_get_optional(dev, "adi,ldac",
2158                                                  GPIOD_OUT_LOW);
2159         if (IS_ERR(chip->ldac_pin)) {
2160                 ret = PTR_ERR(chip->ldac_pin);
2161                 dev_err(dev, "Failed to request ldac GPIO: %d\n", ret);
2162                 return ret;
2163         }
2164 
2165         if (!chip->ldac_pin) {
2166                 chip->config3 |= ADT7316_DA_EN_VIA_DAC_LDAC;
2167                 if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2168                         chip->config1 |= ADT7516_SEL_AIN3;
2169         }
2170         chip->int_mask = ADT7316_TEMP_INT_MASK | ADT7316_VDD_INT_MASK;
2171         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2172                 chip->int_mask |= ADT7516_AIN_INT_MASK;
2173 
2174         indio_dev->dev.parent = dev;
2175         if ((chip->id & ID_FAMILY_MASK) == ID_ADT75XX)
2176                 indio_dev->info = &adt7516_info;
2177         else
2178                 indio_dev->info = &adt7316_info;
2179         indio_dev->name = name;
2180         indio_dev->modes = INDIO_DIRECT_MODE;
2181 
2182         if (chip->bus.irq > 0) {
2183                 ret = adt7316_setup_irq(indio_dev);
2184                 if (ret)
2185                         return ret;
2186         }
2187 
2188         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG1, chip->config1);
2189         if (ret)
2190                 return -EIO;
2191 
2192         ret = chip->bus.write(chip->bus.client, ADT7316_CONFIG3, chip->config3);
2193         if (ret)
2194                 return -EIO;
2195 
2196         ret = devm_iio_device_register(dev, indio_dev);
2197         if (ret)
2198                 return ret;
2199 
2200         dev_info(dev, "%s temperature sensor, ADC and DAC registered.\n",
2201                  indio_dev->name);
2202 
2203         return 0;
2204 }
2205 EXPORT_SYMBOL(adt7316_probe);
2206 
2207 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
2208 MODULE_DESCRIPTION("Analog Devices ADT7316/7/8 and ADT7516/7/9 digital temperature sensor, ADC and DAC driver");
2209 MODULE_LICENSE("GPL v2");

/* [<][>][^][v][top][bottom][index][help] */