CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Miquel Raynal <[email protected]>
CC: 0day robot <[email protected]>

tree:   
https://github.com/0day-ci/linux/commits/Miquel-Raynal/Bring-external-triggers-support-to-MAX1027-like-ADCs/20210922-131741
head:   82403933ab13283e98041a4c285420988531362c
commit: 1e80dcadd79f6dec7346dc596fbafd508ea2844e iio: adc: max1027: Minimize 
the number of converted channels
date:   9 days ago
:::::: branch date: 9 days ago
:::::: commit date: 9 days ago
config: riscv-randconfig-c006-20210927 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
dc6e8dfdfe7efecfda318d43a06fae18b40eb498)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # 
https://github.com/0day-ci/linux/commit/1e80dcadd79f6dec7346dc596fbafd508ea2844e
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Miquel-Raynal/Bring-external-triggers-support-to-MAX1027-like-ADCs/20210922-131741
        git checkout 1e80dcadd79f6dec7346dc596fbafd508ea2844e
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   Suppressed 12 warnings (12 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   7 warnings generated.
   Suppressed 7 warnings (7 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   31 warnings generated.
   Suppressed 31 warnings (10 in non-user code, 21 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   23 warnings generated.
   Suppressed 23 warnings (10 in non-user code, 13 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   5 warnings generated.
   Suppressed 5 warnings (5 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   5 warnings generated.
   Suppressed 5 warnings (5 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (6 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (6 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   8 warnings generated.
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   8 warnings generated.
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   8 warnings generated.
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   10 warnings generated.
   drivers/iio/accel/bma180.c:197:36: warning: The result of the left shift is 
undefined because the right operand is negative 
[clang-analyzer-core.UndefinedBinaryOperatorResult]
           u8 reg_val = (ret & ~mask) | (val << (ffs(mask) - 1));
                                             ^
   drivers/iio/accel/bma180.c:914:8: note: Calling 'bma180_reset_intr'
           ret = bma180_reset_intr(data);
                 ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/accel/bma180.c:207:12: note: Calling 'bma180_set_bits'
           int ret = bma180_set_bits(data, data->part_info->int_reset_reg,
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/accel/bma180.c:197:36: note: The result of the left shift is 
undefined because the right operand is negative
           u8 reg_val = (ret & ~mask) | (val << (ffs(mask) - 1));
                                             ^  ~~~~~~~~~~~~~~~
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   Suppressed 12 warnings (12 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   10 warnings generated.
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   Suppressed 12 warnings (12 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   Suppressed 12 warnings (12 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   12 warnings generated.
   Suppressed 12 warnings (12 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   10 warnings generated.
   drivers/iio/adc/max1027.c:265:8: warning: Excessive padding in 'struct 
max1027_state' (99 padding bytes, where 35 is optimal). 
   Optimal fields order: 
   reg, 
   info, 
   spi, 
   trig, 
   buffer, 
   lock, 
   consider reordering the fields or adding explicit padding members 
[clang-analyzer-optin.performance.Padding]
   struct max1027_state {
   ~~~~~~~^~~~~~~~~~~~~~~
   drivers/iio/adc/max1027.c:265:8: note: Excessive padding in 'struct 
max1027_state' (99 padding bytes, where 35 is optimal). Optimal fields order: 
reg, info, spi, trig, buffer, lock, consider reordering the fields or adding 
explicit padding members
   struct max1027_state {
   ~~~~~~~^~~~~~~~~~~~~~~
>> drivers/iio/adc/max1027.c:412:14: warning: The result of the left shift is 
>> undefined because the left operand is negative 
>> [clang-analyzer-core.UndefinedBinaryOperatorResult]
                   st->reg |= MAX1027_CHAN(fls(*indio_dev->active_scan_mask) - 
2);
                              ^
   drivers/iio/adc/max1027.c:38:32: note: expanded from macro 'MAX1027_CHAN'
   #define MAX1027_CHAN(n)   ((n) << 3)
                              ~~~ ^
   drivers/iio/adc/max1027.c:399:6: note: Assuming 'state' is true
           if (state) {
               ^~~~~
   drivers/iio/adc/max1027.c:399:2: note: Taking true branch
           if (state) {
           ^
   drivers/iio/adc/max1027.c:404:7: note: Assuming 'ret' is >= 0
                   if (ret < 0)
                       ^~~~~~~
   drivers/iio/adc/max1027.c:404:3: note: Taking false branch
                   if (ret < 0)
                   ^
   drivers/iio/adc/max1027.c:412:14: note: The result of the left shift is 
undefined because the left operand is negative
                   st->reg |= MAX1027_CHAN(fls(*indio_dev->active_scan_mask) - 
2);
                              ^
   drivers/iio/adc/max1027.c:38:32: note: expanded from macro 'MAX1027_CHAN'
   #define MAX1027_CHAN(n)   ((n) << 3)
                              ~~~ ^
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   11 warnings generated.
   drivers/iio/adc/max11100.c:31:8: warning: Excessive padding in 'struct 
max11100_state' (117 padding bytes, where 53 is optimal). 
   Optimal fields order: 
   buffer, 
   vref_reg, 
   spi, 
   consider reordering the fields or adding explicit padding members 
[clang-analyzer-optin.performance.Padding]
   struct max11100_state {
   ~~~~~~~^~~~~~~~~~~~~~~~
   drivers/iio/adc/max11100.c:31:8: note: Excessive padding in 'struct 
max11100_state' (117 padding bytes, where 53 is optimal). Optimal fields order: 
buffer, vref_reg, spi, consider reordering the fields or adding explicit 
padding members
   struct max11100_state {
   ~~~~~~~^~~~~~~~~~~~~~~~
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   11 warnings generated.
   drivers/iio/adc/max1241.c:22:8: warning: Excessive padding in 'struct 
max1241' (98 padding bytes, where 34 is optimal). 
   Optimal fields order: 
   data, 
   spi, 
   vdd, 
   vref, 
   shutdown, 
   lock, 
   consider reordering the fields or adding explicit padding members 
[clang-analyzer-optin.performance.Padding]
   struct max1241 {
   ~~~~~~~^~~~~~~~~
   drivers/iio/adc/max1241.c:22:8: note: Excessive padding in 'struct max1241' 
(98 padding bytes, where 34 is optimal). Optimal fields order: data, spi, vdd, 
vref, shutdown, lock, consider reordering the fields or adding explicit padding 
members
   struct max1241 {
   ~~~~~~~^~~~~~~~~
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   11 warnings generated.
   drivers/iio/dac/ti-dac7311.c:47:8: warning: Excessive padding in 'struct 
ti_dac_chip' (101 padding bytes, where 37 is optimal). 
   Optimal fields order: 
   buf, 
   val, 
   vref, 
   spi, 
   lock, 
   powerdown, 
   powerdown_mode, 
   resolution, 
   consider reordering the fields or adding explicit padding members 
[clang-analyzer-optin.performance.Padding]
   struct ti_dac_chip {
   ~~~~~~~^~~~~~~~~~~~~
   drivers/iio/dac/ti-dac7311.c:47:8: note: Excessive padding in 'struct 
ti_dac_chip' (101 padding bytes, where 37 is optimal). Optimal fields order: 
buf, val, vref, spi, lock, powerdown, powerdown_mode, resolution, consider 
reordering the fields or adding explicit padding members
   struct ti_dac_chip {
   ~~~~~~~^~~~~~~~~~~~~
   Suppressed 10 warnings (10 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   drivers/iio/gyro/adis16130.c:41:8: warning: Excessive padding in 'struct 
adis16130_state' (108 padding bytes, where 44 is optimal). 
   Optimal fields order: 
   buf, 
   us, 
   buf_lock, 
   consider reordering the fields or adding explicit padding members 
[clang-analyzer-optin.performance.Padding]
   struct adis16130_state {
   ~~~~~~~^~~~~~~~~~~~~~~~~
   drivers/iio/gyro/adis16130.c:41:8: note: Excessive padding in 'struct 
adis16130_state' (108 padding bytes, where 44 is optimal). Optimal fields 
order: buf, us, buf_lock, consider reordering the fields or adding explicit 
padding members
   struct adis16130_state {
   ~~~~~~~^~~~~~~~~~~~~~~~~
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   Suppressed 9 warnings (9 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (6 in non-user code).

vim +412 drivers/iio/adc/max1027.c

fc167f62483325 Philippe Reynes 2014-06-14  264  
fc167f62483325 Philippe Reynes 2014-06-14 @265  struct max1027_state {
fc167f62483325 Philippe Reynes 2014-06-14  266          const struct 
max1027_chip_info  *info;
fc167f62483325 Philippe Reynes 2014-06-14  267          struct spi_device       
        *spi;
fc167f62483325 Philippe Reynes 2014-06-14  268          struct iio_trigger      
        *trig;
fc167f62483325 Philippe Reynes 2014-06-14  269          __be16                  
        *buffer;
fc167f62483325 Philippe Reynes 2014-06-14  270          struct mutex            
        lock;
fc167f62483325 Philippe Reynes 2014-06-14  271  
fc167f62483325 Philippe Reynes 2014-06-14  272          u8                      
        reg ____cacheline_aligned;
fc167f62483325 Philippe Reynes 2014-06-14  273  };
fc167f62483325 Philippe Reynes 2014-06-14  274  
fc167f62483325 Philippe Reynes 2014-06-14  275  static int 
max1027_read_single_value(struct iio_dev *indio_dev,
fc167f62483325 Philippe Reynes 2014-06-14  276                                  
     struct iio_chan_spec const *chan,
fc167f62483325 Philippe Reynes 2014-06-14  277                                  
     int *val)
fc167f62483325 Philippe Reynes 2014-06-14  278  {
fc167f62483325 Philippe Reynes 2014-06-14  279          int ret;
fc167f62483325 Philippe Reynes 2014-06-14  280          struct max1027_state 
*st = iio_priv(indio_dev);
fc167f62483325 Philippe Reynes 2014-06-14  281  
fc167f62483325 Philippe Reynes 2014-06-14  282          if 
(iio_buffer_enabled(indio_dev)) {
fc167f62483325 Philippe Reynes 2014-06-14  283                  
dev_warn(&indio_dev->dev, "trigger mode already enabled");
fc167f62483325 Philippe Reynes 2014-06-14  284                  return -EBUSY;
fc167f62483325 Philippe Reynes 2014-06-14  285          }
fc167f62483325 Philippe Reynes 2014-06-14  286  
fc167f62483325 Philippe Reynes 2014-06-14  287          /* Start acquisition on 
conversion register write */
fc167f62483325 Philippe Reynes 2014-06-14  288          st->reg = 
MAX1027_SETUP_REG | MAX1027_REF_MODE2 | MAX1027_CKS_MODE2;
fc167f62483325 Philippe Reynes 2014-06-14  289          ret = 
spi_write(st->spi, &st->reg, 1);
fc167f62483325 Philippe Reynes 2014-06-14  290          if (ret < 0) {
fc167f62483325 Philippe Reynes 2014-06-14  291                  
dev_err(&indio_dev->dev,
fc167f62483325 Philippe Reynes 2014-06-14  292                          "Failed 
to configure setup register\n");
fc167f62483325 Philippe Reynes 2014-06-14  293                  return ret;
fc167f62483325 Philippe Reynes 2014-06-14  294          }
fc167f62483325 Philippe Reynes 2014-06-14  295  
fc167f62483325 Philippe Reynes 2014-06-14  296          /* Configure conversion 
register with the requested chan */
fc167f62483325 Philippe Reynes 2014-06-14  297          st->reg = 
MAX1027_CONV_REG | MAX1027_CHAN(chan->channel) |
58b90a8d2c397a Sandhya Bankar  2016-09-24  298                    
MAX1027_NOSCAN;
58b90a8d2c397a Sandhya Bankar  2016-09-24  299          if (chan->type == 
IIO_TEMP)
58b90a8d2c397a Sandhya Bankar  2016-09-24  300                  st->reg |= 
MAX1027_TEMP;
fc167f62483325 Philippe Reynes 2014-06-14  301          ret = 
spi_write(st->spi, &st->reg, 1);
fc167f62483325 Philippe Reynes 2014-06-14  302          if (ret < 0) {
fc167f62483325 Philippe Reynes 2014-06-14  303                  
dev_err(&indio_dev->dev,
fc167f62483325 Philippe Reynes 2014-06-14  304                          "Failed 
to configure conversion register\n");
fc167f62483325 Philippe Reynes 2014-06-14  305                  return ret;
fc167f62483325 Philippe Reynes 2014-06-14  306          }
fc167f62483325 Philippe Reynes 2014-06-14  307  
fc167f62483325 Philippe Reynes 2014-06-14  308          /*
fc167f62483325 Philippe Reynes 2014-06-14  309           * For an unknown 
reason, when we use the mode "10" (write
fc167f62483325 Philippe Reynes 2014-06-14  310           * conversion 
register), the interrupt doesn't occur every time.
fc167f62483325 Philippe Reynes 2014-06-14  311           * So we just wait 1 ms.
fc167f62483325 Philippe Reynes 2014-06-14  312           */
fc167f62483325 Philippe Reynes 2014-06-14  313          mdelay(1);
fc167f62483325 Philippe Reynes 2014-06-14  314  
fc167f62483325 Philippe Reynes 2014-06-14  315          /* Read result */
fc167f62483325 Philippe Reynes 2014-06-14  316          ret = spi_read(st->spi, 
st->buffer, (chan->type == IIO_TEMP) ? 4 : 2);
fc167f62483325 Philippe Reynes 2014-06-14  317          if (ret < 0)
fc167f62483325 Philippe Reynes 2014-06-14  318                  return ret;
fc167f62483325 Philippe Reynes 2014-06-14  319  
fc167f62483325 Philippe Reynes 2014-06-14  320          *val = 
be16_to_cpu(st->buffer[0]);
fc167f62483325 Philippe Reynes 2014-06-14  321  
fc167f62483325 Philippe Reynes 2014-06-14  322          return IIO_VAL_INT;
fc167f62483325 Philippe Reynes 2014-06-14  323  }
fc167f62483325 Philippe Reynes 2014-06-14  324  
fc167f62483325 Philippe Reynes 2014-06-14  325  static int 
max1027_read_raw(struct iio_dev *indio_dev,
fc167f62483325 Philippe Reynes 2014-06-14  326                              
struct iio_chan_spec const *chan,
fc167f62483325 Philippe Reynes 2014-06-14  327                              int 
*val, int *val2, long mask)
fc167f62483325 Philippe Reynes 2014-06-14  328  {
fc167f62483325 Philippe Reynes 2014-06-14  329          int ret = 0;
fc167f62483325 Philippe Reynes 2014-06-14  330          struct max1027_state 
*st = iio_priv(indio_dev);
fc167f62483325 Philippe Reynes 2014-06-14  331  
fc167f62483325 Philippe Reynes 2014-06-14  332          mutex_lock(&st->lock);
fc167f62483325 Philippe Reynes 2014-06-14  333  
fc167f62483325 Philippe Reynes 2014-06-14  334          switch (mask) {
fc167f62483325 Philippe Reynes 2014-06-14  335          case IIO_CHAN_INFO_RAW:
fc167f62483325 Philippe Reynes 2014-06-14  336                  ret = 
max1027_read_single_value(indio_dev, chan, val);
fc167f62483325 Philippe Reynes 2014-06-14  337                  break;
fc167f62483325 Philippe Reynes 2014-06-14  338          case 
IIO_CHAN_INFO_SCALE:
fc167f62483325 Philippe Reynes 2014-06-14  339                  switch 
(chan->type) {
fc167f62483325 Philippe Reynes 2014-06-14  340                  case IIO_TEMP:
fc167f62483325 Philippe Reynes 2014-06-14  341                          *val = 
1;
fc167f62483325 Philippe Reynes 2014-06-14  342                          *val2 = 
8;
fc167f62483325 Philippe Reynes 2014-06-14  343                          ret = 
IIO_VAL_FRACTIONAL;
fc167f62483325 Philippe Reynes 2014-06-14  344                          break;
fc167f62483325 Philippe Reynes 2014-06-14  345                  case 
IIO_VOLTAGE:
fc167f62483325 Philippe Reynes 2014-06-14  346                          *val = 
2500;
7af5257d84275c Miquel Raynal   2019-10-11  347                          *val2 = 
chan->scan_type.realbits;
fc167f62483325 Philippe Reynes 2014-06-14  348                          ret = 
IIO_VAL_FRACTIONAL_LOG2;
fc167f62483325 Philippe Reynes 2014-06-14  349                          break;
fc167f62483325 Philippe Reynes 2014-06-14  350                  default:
fc167f62483325 Philippe Reynes 2014-06-14  351                          ret = 
-EINVAL;
fc167f62483325 Philippe Reynes 2014-06-14  352                          break;
fc167f62483325 Philippe Reynes 2014-06-14  353                  }
fc167f62483325 Philippe Reynes 2014-06-14  354                  break;
fc167f62483325 Philippe Reynes 2014-06-14  355          default:
fc167f62483325 Philippe Reynes 2014-06-14  356                  ret = -EINVAL;
fc167f62483325 Philippe Reynes 2014-06-14  357                  break;
fc167f62483325 Philippe Reynes 2014-06-14  358          }
fc167f62483325 Philippe Reynes 2014-06-14  359  
fc167f62483325 Philippe Reynes 2014-06-14  360          mutex_unlock(&st->lock);
fc167f62483325 Philippe Reynes 2014-06-14  361  
fc167f62483325 Philippe Reynes 2014-06-14  362          return ret;
fc167f62483325 Philippe Reynes 2014-06-14  363  }
fc167f62483325 Philippe Reynes 2014-06-14  364  
fc167f62483325 Philippe Reynes 2014-06-14  365  static int 
max1027_debugfs_reg_access(struct iio_dev *indio_dev,
825ca5fefb8af9 Miquel Raynal   2021-09-21  366                                  
      unsigned int reg, unsigned int writeval,
825ca5fefb8af9 Miquel Raynal   2021-09-21  367                                  
      unsigned int *readval)
fc167f62483325 Philippe Reynes 2014-06-14  368  {
fc167f62483325 Philippe Reynes 2014-06-14  369          struct max1027_state 
*st = iio_priv(indio_dev);
fc167f62483325 Philippe Reynes 2014-06-14  370          u8 *val = (u8 
*)st->buffer;
fc167f62483325 Philippe Reynes 2014-06-14  371  
038696f8bd2f2e Miquel Raynal   2019-10-11  372          if (readval) {
038696f8bd2f2e Miquel Raynal   2019-10-11  373                  int ret = 
spi_read(st->spi, val, 2);
038696f8bd2f2e Miquel Raynal   2019-10-11  374                  *readval = 
be16_to_cpu(st->buffer[0]);
038696f8bd2f2e Miquel Raynal   2019-10-11  375                  return ret;
038696f8bd2f2e Miquel Raynal   2019-10-11  376          }
fc167f62483325 Philippe Reynes 2014-06-14  377  
fc167f62483325 Philippe Reynes 2014-06-14  378          *val = (u8)writeval;
fc167f62483325 Philippe Reynes 2014-06-14  379          return 
spi_write(st->spi, val, 1);
fc167f62483325 Philippe Reynes 2014-06-14  380  }
fc167f62483325 Philippe Reynes 2014-06-14  381  
fc167f62483325 Philippe Reynes 2014-06-14  382  static int 
max1027_validate_trigger(struct iio_dev *indio_dev,
fc167f62483325 Philippe Reynes 2014-06-14  383                                  
    struct iio_trigger *trig)
fc167f62483325 Philippe Reynes 2014-06-14  384  {
fc167f62483325 Philippe Reynes 2014-06-14  385          struct max1027_state 
*st = iio_priv(indio_dev);
fc167f62483325 Philippe Reynes 2014-06-14  386  
fc167f62483325 Philippe Reynes 2014-06-14  387          if (st->trig != trig)
fc167f62483325 Philippe Reynes 2014-06-14  388                  return -EINVAL;
fc167f62483325 Philippe Reynes 2014-06-14  389  
fc167f62483325 Philippe Reynes 2014-06-14  390          return 0;
fc167f62483325 Philippe Reynes 2014-06-14  391  }
fc167f62483325 Philippe Reynes 2014-06-14  392  
fc167f62483325 Philippe Reynes 2014-06-14  393  static int 
max1027_set_trigger_state(struct iio_trigger *trig, bool state)
fc167f62483325 Philippe Reynes 2014-06-14  394  {
fc167f62483325 Philippe Reynes 2014-06-14  395          struct iio_dev 
*indio_dev = iio_trigger_get_drvdata(trig);
fc167f62483325 Philippe Reynes 2014-06-14  396          struct max1027_state 
*st = iio_priv(indio_dev);
fc167f62483325 Philippe Reynes 2014-06-14  397          int ret;
fc167f62483325 Philippe Reynes 2014-06-14  398  
fc167f62483325 Philippe Reynes 2014-06-14  399          if (state) {
fc167f62483325 Philippe Reynes 2014-06-14  400                  /* Start 
acquisition on cnvst */
fc167f62483325 Philippe Reynes 2014-06-14  401                  st->reg = 
MAX1027_SETUP_REG | MAX1027_CKS_MODE0 |
fc167f62483325 Philippe Reynes 2014-06-14  402                            
MAX1027_REF_MODE2;
fc167f62483325 Philippe Reynes 2014-06-14  403                  ret = 
spi_write(st->spi, &st->reg, 1);
fc167f62483325 Philippe Reynes 2014-06-14  404                  if (ret < 0)
fc167f62483325 Philippe Reynes 2014-06-14  405                          return 
ret;
fc167f62483325 Philippe Reynes 2014-06-14  406  
1e80dcadd79f6d Miquel Raynal   2021-09-21  407                  /*
1e80dcadd79f6d Miquel Raynal   2021-09-21  408                   * Scan from 
chan 0 to the highest requested channel.
1e80dcadd79f6d Miquel Raynal   2021-09-21  409                   * Include 
temperature on demand.
1e80dcadd79f6d Miquel Raynal   2021-09-21  410                   */
1e80dcadd79f6d Miquel Raynal   2021-09-21  411                  st->reg = 
MAX1027_CONV_REG | MAX1027_SCAN_0_N;
1e80dcadd79f6d Miquel Raynal   2021-09-21 @412                  st->reg |= 
MAX1027_CHAN(fls(*indio_dev->active_scan_mask) - 2);
1e80dcadd79f6d Miquel Raynal   2021-09-21  413                  if 
(*indio_dev->active_scan_mask & MAX1X27_SCAN_MASK_TEMP)
1e80dcadd79f6d Miquel Raynal   2021-09-21  414                          st->reg 
|= MAX1027_TEMP;
1e80dcadd79f6d Miquel Raynal   2021-09-21  415  
fc167f62483325 Philippe Reynes 2014-06-14  416                  ret = 
spi_write(st->spi, &st->reg, 1);
fc167f62483325 Philippe Reynes 2014-06-14  417                  if (ret < 0)
fc167f62483325 Philippe Reynes 2014-06-14  418                          return 
ret;
fc167f62483325 Philippe Reynes 2014-06-14  419          } else {
fc167f62483325 Philippe Reynes 2014-06-14  420                  /* Start 
acquisition on conversion register write */
fc167f62483325 Philippe Reynes 2014-06-14  421                  st->reg = 
MAX1027_SETUP_REG | MAX1027_CKS_MODE2 |
fc167f62483325 Philippe Reynes 2014-06-14  422                            
MAX1027_REF_MODE2;
fc167f62483325 Philippe Reynes 2014-06-14  423                  ret = 
spi_write(st->spi, &st->reg, 1);
fc167f62483325 Philippe Reynes 2014-06-14  424                  if (ret < 0)
fc167f62483325 Philippe Reynes 2014-06-14  425                          return 
ret;
fc167f62483325 Philippe Reynes 2014-06-14  426          }
fc167f62483325 Philippe Reynes 2014-06-14  427  
fc167f62483325 Philippe Reynes 2014-06-14  428          return 0;
fc167f62483325 Philippe Reynes 2014-06-14  429  }
fc167f62483325 Philippe Reynes 2014-06-14  430  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to