Hi Stefan,

I love your patch! Yet something to improve:

[auto build test ERROR on iio/togreg]
[also build test ERROR on v4.19-rc8 next-20181018]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Stefan-Popa/iio-adc-Add-ad7124-support/20181019-051737
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=arm 

All error/warnings (new ones prefixed by >>):

>> drivers/iio//adc/ad7124.c:215:3: error: 'const struct ad_sigma_delta_info' 
>> has no member named 'data_reg'
     .data_reg = AD7124_DATA,
      ^~~~~~~~
>> drivers/iio//adc/ad7124.c:25:23: warning: excess elements in struct 
>> initializer
    #define AD7124_DATA   0x02
                          ^
>> drivers/iio//adc/ad7124.c:215:14: note: in expansion of macro 'AD7124_DATA'
     .data_reg = AD7124_DATA,
                 ^~~~~~~~~~~
   drivers/iio//adc/ad7124.c:25:23: note: (near initialization for 
'ad7124_sigma_delta_info')
    #define AD7124_DATA   0x02
                          ^
>> drivers/iio//adc/ad7124.c:215:14: note: in expansion of macro 'AD7124_DATA'
     .data_reg = AD7124_DATA,
                 ^~~~~~~~~~~

vim +215 drivers/iio//adc/ad7124.c

    20  
    21  /* AD7124 registers */
    22  #define AD7124_COMMS                    0x00
    23  #define AD7124_STATUS                   0x00
    24  #define AD7124_ADC_CONTROL              0x01
  > 25  #define AD7124_DATA                     0x02
    26  #define AD7124_IO_CONTROL_1             0x03
    27  #define AD7124_IO_CONTROL_2             0x04
    28  #define AD7124_ID                       0x05
    29  #define AD7124_ERROR                    0x06
    30  #define AD7124_ERROR_EN         0x07
    31  #define AD7124_MCLK_COUNT               0x08
    32  #define AD7124_CHANNEL(x)               (0x09 + (x))
    33  #define AD7124_CONFIG(x)                (0x19 + (x))
    34  #define AD7124_FILTER(x)                (0x21 + (x))
    35  #define AD7124_OFFSET(x)                (0x29 + (x))
    36  #define AD7124_GAIN(x)                  (0x31 + (x))
    37  
    38  /* AD7124_STATUS */
    39  #define AD7124_STATUS_POR_FLAG_MSK      BIT(4)
    40  
    41  /* AD7124_ADC_CONTROL */
    42  #define AD7124_ADC_CTRL_PWR_MSK GENMASK(7, 6)
    43  #define AD7124_ADC_CTRL_PWR(x)          
FIELD_PREP(AD7124_ADC_CTRL_PWR_MSK, x)
    44  #define AD7124_ADC_CTRL_MODE_MSK        GENMASK(5, 2)
    45  #define AD7124_ADC_CTRL_MODE(x) FIELD_PREP(AD7124_ADC_CTRL_MODE_MSK, x)
    46  
    47  /* AD7124_CHANNEL_X */
    48  #define AD7124_CHANNEL_EN_MSK           BIT(15)
    49  #define AD7124_CHANNEL_EN(x)            
FIELD_PREP(AD7124_CHANNEL_EN_MSK, x)
    50  #define AD7124_CHANNEL_SETUP_MSK        GENMASK(14, 12)
    51  #define AD7124_CHANNEL_SETUP(x) FIELD_PREP(AD7124_CHANNEL_SETUP_MSK, x)
    52  #define AD7124_CHANNEL_AINP_MSK GENMASK(9, 5)
    53  #define AD7124_CHANNEL_AINP(x)          
FIELD_PREP(AD7124_CHANNEL_AINP_MSK, x)
    54  #define AD7124_CHANNEL_AINM_MSK GENMASK(4, 0)
    55  #define AD7124_CHANNEL_AINM(x)          
FIELD_PREP(AD7124_CHANNEL_AINM_MSK, x)
    56  
    57  /* AD7124_CONFIG_X */
    58  #define AD7124_CONFIG_BIPOLAR_MSK       BIT(11)
    59  #define AD7124_CONFIG_BIPOLAR(x)        
FIELD_PREP(AD7124_CONFIG_BIPOLAR_MSK, x)
    60  #define AD7124_CONFIG_REF_SEL_MSK       GENMASK(4, 3)
    61  #define AD7124_CONFIG_REF_SEL(x)        
FIELD_PREP(AD7124_CONFIG_REF_SEL_MSK, x)
    62  #define AD7124_CONFIG_PGA_MSK           GENMASK(2, 0)
    63  #define AD7124_CONFIG_PGA(x)            
FIELD_PREP(AD7124_CONFIG_PGA_MSK, x)
    64  
    65  /* AD7124_FILTER_X */
    66  #define AD7124_FILTER_FS_MSK            GENMASK(10, 0)
    67  #define AD7124_FILTER_FS(x)             
FIELD_PREP(AD7124_FILTER_FS_MSK, x)
    68  
    69  enum ad7124_ids {
    70          ID_AD7124_4,
    71          ID_AD7124_8,
    72  };
    73  
    74  enum ad7124_ref_sel {
    75          AD7124_REFIN1,
    76          AD7124_REFIN2,
    77          AD7124_INT_REF,
    78          AD7124_AVDD_REF,
    79  };
    80  
    81  enum ad7124_power_mode {
    82          AD7124_LOW_POWER,
    83          AD7124_MID_POWER,
    84          AD7124_FULL_POWER,
    85  };
    86  
    87  static const unsigned int ad7124_gain[8] = {
    88          1, 2, 4, 8, 16, 32, 64, 128
    89  };
    90  
    91  static const int ad7124_master_clk_freq_hz[3] = {
    92          [AD7124_LOW_POWER] = 76800,
    93          [AD7124_MID_POWER] = 153600,
    94          [AD7124_FULL_POWER] = 614400,
    95  };
    96  
    97  static const char * const ad7124_ref_names[] = {
    98          [AD7124_REFIN1] = "refin1",
    99          [AD7124_REFIN2] = "refin2",
   100          [AD7124_INT_REF] = "int",
   101          [AD7124_AVDD_REF] = "avdd",
   102  };
   103  
   104  struct ad7124_chip_info {
   105          unsigned int num_inputs;
   106  };
   107  
   108  struct ad7124_channel_config {
   109          enum ad7124_ref_sel refsel;
   110          bool bipolar;
   111          unsigned int ain;
   112          unsigned int vref_mv;
   113          unsigned int pga_bits;
   114          unsigned int odr;
   115  };
   116  
   117  struct ad7124_state {
   118          const struct ad7124_chip_info *chip_info;
   119          struct ad_sigma_delta sd;
   120          struct ad7124_channel_config channel_config[4];
   121          struct regulator *vref[4];
   122          struct clk *mclk;
   123          unsigned int adc_control;
   124          unsigned int num_channels;
   125  };
   126  
   127  static const struct iio_chan_spec ad7124_channel_template = {
   128          .type = IIO_VOLTAGE,
   129          .indexed = 1,
   130          .differential = 1,
   131          .channel = 0,
   132          .address = 0,
   133          .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
   134                  BIT(IIO_CHAN_INFO_SCALE) |
   135                  BIT(IIO_CHAN_INFO_OFFSET) |
   136                  BIT(IIO_CHAN_INFO_SAMP_FREQ),
   137          .scan_index = 0,
   138          .scan_type = {
   139                  .sign = 'u',
   140                  .realbits = 24,
   141                  .storagebits = 32,
   142                  .shift = 0,
   143          },
   144  };
   145  
   146  static struct ad7124_chip_info ad7124_chip_info_tbl[] = {
   147          [ID_AD7124_4] = {
   148                  .num_inputs = 8,
   149          },
   150          [ID_AD7124_8] = {
   151                  .num_inputs = 16,
   152          },
   153  };
   154  
   155  static int ad7124_find_closest_match(const int *array,
   156                                       unsigned int size, int val)
   157  {
   158          int i;
   159  
   160          for (i = 0; i < size; i++) {
   161                  if (val <= array[i])
   162                          return i;
   163          }
   164  
   165          return size - 1;
   166  }
   167  
   168  static int ad7124_spi_write_mask(struct ad7124_state *st,
   169                                   unsigned int addr,
   170                                   unsigned long mask,
   171                                   unsigned int val,
   172                                   unsigned int bytes)
   173  {
   174          unsigned int readval;
   175          int ret;
   176  
   177          ret = ad_sd_read_reg(&st->sd, addr, bytes, &readval);
   178          if (ret < 0)
   179                  return ret;
   180  
   181          readval &= ~mask;
   182          readval |= val;
   183  
   184          return ad_sd_write_reg(&st->sd, addr, bytes, readval);
   185  }
   186  
   187  static int ad7124_set_mode(struct ad_sigma_delta *sd,
   188                             enum ad_sigma_delta_mode mode)
   189  {
   190          struct ad7124_state *st = container_of(sd, struct ad7124_state, 
sd);
   191  
   192          st->adc_control &= ~AD7124_ADC_CTRL_MODE_MSK;
   193          st->adc_control |= AD7124_ADC_CTRL_MODE(mode);
   194  
   195          return ad_sd_write_reg(&st->sd, AD7124_ADC_CONTROL, 2, 
st->adc_control);
   196  }
   197  
   198  static int ad7124_set_channel(struct ad_sigma_delta *sd, unsigned int 
channel)
   199  {
   200          struct ad7124_state *st = container_of(sd, struct ad7124_state, 
sd);
   201          unsigned int val;
   202  
   203          val = st->channel_config[channel].ain | AD7124_CHANNEL_EN(1) |
   204                AD7124_CHANNEL_SETUP(channel);
   205  
   206          return ad_sd_write_reg(&st->sd, AD7124_CHANNEL(channel), 2, 
val);
   207  }
   208  
   209  static const struct ad_sigma_delta_info ad7124_sigma_delta_info = {
   210          .set_channel = ad7124_set_channel,
   211          .set_mode = ad7124_set_mode,
   212          .has_registers = true,
   213          .addr_shift = 0,
   214          .read_mask = BIT(6),
 > 215          .data_reg = AD7124_DATA,
   216  };
   217  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to