tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   7142eaa58b49d9de492ccc16d48df7c488a5fbb6
commit: 62129a0849d27cc94ced832bcf9dcde283dcbe08 iio: chemical: sps30: allow 
changing self cleaning period
date:   3 months ago
reproduce:
        # apt-get install sparse
        git checkout 62129a0849d27cc94ced832bcf9dcde283dcbe08
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

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



sparse warnings: (new ones prefixed by >>)

>> drivers/iio/chemical/sps30.c:122:30: sparse: sparse: cast truncates bits 
>> from constant value (8004 becomes 4)

vim +122 drivers/iio/chemical/sps30.c

    91  
    92  static int sps30_do_cmd(struct sps30_state *state, u16 cmd, u8 *data, 
int size)
    93  {
    94          /*
    95           * Internally sensor stores measurements in a following manner:
    96           *
    97           * PM1: upper two bytes, crc8, lower two bytes, crc8
    98           * PM2P5: upper two bytes, crc8, lower two bytes, crc8
    99           * PM4: upper two bytes, crc8, lower two bytes, crc8
   100           * PM10: upper two bytes, crc8, lower two bytes, crc8
   101           *
   102           * What follows next are number concentration measurements and
   103           * typical particle size measurement which we omit.
   104           */
   105          u8 buf[SPS30_MAX_READ_SIZE] = { cmd >> 8, cmd };
   106          int i, ret = 0;
   107  
   108          switch (cmd) {
   109          case SPS30_START_MEAS:
   110                  buf[2] = 0x03;
   111                  buf[3] = 0x00;
   112                  buf[4] = crc8(sps30_crc8_table, &buf[2], 2, 
CRC8_INIT_VALUE);
   113                  ret = sps30_write_then_read(state, buf, 5, NULL, 0);
   114                  break;
   115          case SPS30_STOP_MEAS:
   116          case SPS30_RESET:
   117          case SPS30_START_FAN_CLEANING:
   118                  ret = sps30_write_then_read(state, buf, 2, NULL, 0);
   119                  break;
   120          case SPS30_READ_AUTO_CLEANING_PERIOD:
   121                  buf[0] = SPS30_AUTO_CLEANING_PERIOD >> 8;
 > 122                  buf[1] = (u8)SPS30_AUTO_CLEANING_PERIOD;
   123          case SPS30_READ_DATA_READY_FLAG:
   124          case SPS30_READ_DATA:
   125          case SPS30_READ_SERIAL:
   126                  /* every two data bytes are checksummed */
   127                  size += size / 2;
   128                  ret = sps30_write_then_read(state, buf, 2, buf, size);
   129                  break;
   130          case SPS30_AUTO_CLEANING_PERIOD:
   131                  buf[2] = data[0];
   132                  buf[3] = data[1];
   133                  buf[4] = crc8(sps30_crc8_table, &buf[2], 2, 
CRC8_INIT_VALUE);
   134                  buf[5] = data[2];
   135                  buf[6] = data[3];
   136                  buf[7] = crc8(sps30_crc8_table, &buf[5], 2, 
CRC8_INIT_VALUE);
   137                  ret = sps30_write_then_read(state, buf, 8, NULL, 0);
   138                  break;
   139          }
   140  
   141          if (ret)
   142                  return ret;
   143  
   144          /* validate received data and strip off crc bytes */
   145          for (i = 0; i < size; i += 3) {
   146                  u8 crc = crc8(sps30_crc8_table, &buf[i], 2, 
CRC8_INIT_VALUE);
   147  
   148                  if (crc != buf[i + 2]) {
   149                          dev_err(&state->client->dev,
   150                                  "data integrity check failed\n");
   151                          return -EIO;
   152                  }
   153  
   154                  *data++ = buf[i];
   155                  *data++ = buf[i + 1];
   156          }
   157  
   158          return 0;
   159  }
   160  

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

Reply via email to