CC: [email protected] CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Cixi Geng <[email protected]> TO: [email protected] TO: [email protected] TO: [email protected] TO: [email protected] TO: [email protected] TO: [email protected] TO: [email protected] TO: [email protected] CC: [email protected] CC: [email protected]
Hi Cixi, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on jic23-iio/togreg] [also build test WARNING on v5.16-rc8 next-20220107] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Cixi-Geng/iio-adc-sc27xx-adjust-structure-and-add-PMIC-s-support/20220106-210151 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: mips-randconfig-c004-20220107 (https://download.01.org/0day-ci/archive/20220109/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 32167bfe64a4c5dd4eb3f7a58e24f4cba76f5ac2) 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 mips cross compiling tool for clang build # apt-get install binutils-mips-linux-gnu # https://github.com/0day-ci/linux/commit/cd6ab0edd81be2a2adf0a3c88d3386311de1b1a9 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Cixi-Geng/iio-adc-sc27xx-adjust-structure-and-add-PMIC-s-support/20220106-210151 git checkout cd6ab0edd81be2a2adf0a3c88d3386311de1b1a9 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips 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 >>) ^ drivers/input/keyboard/pmic8xxx-keypad.c:194:7: note: Calling 'pmic8xxx_kp_read_data' rc = pmic8xxx_kp_read_data(kp, new_state, KEYP_RECENT_DATA, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:160:2: note: Loop condition is true. Entering loop body for (row = 0; row < read_rows; row++) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:162:7: note: Assuming 'rc' is not equal to 0 if (rc) ^~ drivers/input/keyboard/pmic8xxx-keypad.c:162:3: note: Taking true branch if (rc) ^ drivers/input/keyboard/pmic8xxx-keypad.c:163:4: note: Returning without writing to '*state' return rc; ^ drivers/input/keyboard/pmic8xxx-keypad.c:194:7: note: Returning from 'pmic8xxx_kp_read_data' rc = pmic8xxx_kp_read_data(kp, new_state, KEYP_RECENT_DATA, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:196:6: note: Assuming 'rc' is >= 0 if (rc < 0) { ^~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:196:2: note: Taking false branch if (rc < 0) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:206:6: note: Assuming 'rc' is >= 0 if (rc < 0) { ^~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:206:2: note: Taking false branch if (rc < 0) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:213:6: note: Assuming 'rc' is >= 0 if (rc < 0) ^~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:213:2: note: Taking false branch if (rc < 0) ^ drivers/input/keyboard/pmic8xxx-keypad.c:216:2: note: Returning without writing to '*new_state' return rc; ^ drivers/input/keyboard/pmic8xxx-keypad.c:334:7: note: Returning from 'pmic8xxx_kp_read_matrix' rc = pmic8xxx_kp_read_matrix(kp, new_state, old_state); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:335:6: note: 'rc' is >= 0 if (rc < 0) { ^~ drivers/input/keyboard/pmic8xxx-keypad.c:335:2: note: Taking false branch if (rc < 0) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:340:2: note: Calling '__pmic8xxx_kp_scan_matrix' __pmic8xxx_kp_scan_matrix(kp, new_state, kp->stuckstate); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:224:7: note: The value 0 is assigned to 'row' for (row = 0; row < kp->num_rows; row++) { ^~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:224:16: note: Assuming 'row' is < field 'num_rows' for (row = 0; row < kp->num_rows; row++) { ^~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:224:2: note: Loop condition is true. Entering loop body for (row = 0; row < kp->num_rows; row++) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:225:37: note: The left operand of '^' is a garbage value int bits_changed = new_state[row] ^ old_state[row]; ~~~~~~~~~~~~~~ ^ drivers/input/keyboard/pmic8xxx-keypad.c:257:33: warning: The left operand of '&' is a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult] row_state = (~new_state[row]) & ^ drivers/input/keyboard/pmic8xxx-keypad.c:352:6: note: Assuming 'rc' is >= 0 if (rc < 0) { ^~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:352:2: note: Taking false branch if (rc < 0) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:359:7: note: Calling 'pmic8xxx_kp_scan_matrix' rc = pmic8xxx_kp_scan_matrix(kp, events); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:280:2: note: Control jumps to 'case 1:' at line 281 switch (events) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:283:7: note: 'rc' is >= 0 if (rc < 0) ^~ drivers/input/keyboard/pmic8xxx-keypad.c:283:3: note: Taking false branch if (rc < 0) ^ drivers/input/keyboard/pmic8xxx-keypad.c:287:7: note: Calling 'pmic8xxx_detect_ghost_keys' if (pmic8xxx_detect_ghost_keys(kp, new_state)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:256:16: note: Assuming 'row' is < field 'num_rows' for (row = 0; row < kp->num_rows; row++) { ^~~~~~~~~~~~~~~~~~ drivers/input/keyboard/pmic8xxx-keypad.c:256:2: note: Loop condition is true. Entering loop body for (row = 0; row < kp->num_rows; row++) { ^ drivers/input/keyboard/pmic8xxx-keypad.c:257:33: note: The left operand of '&' is a garbage value row_state = (~new_state[row]) & ~~~~~~~~~~~~~~~ ^ Suppressed 2 warnings (2 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. 3 warnings generated. >> drivers/iio/adc/sc27xx_adc.c:461:8: warning: Assigned value is garbage or >> undefined [clang-analyzer-core.uninitialized.Assign] *val = value; ^ ~~~~~ drivers/iio/adc/sc27xx_adc.c:368:11: note: 'value' declared without an initial value u32 tmp, value, status; ^~~~~ drivers/iio/adc/sc27xx_adc.c:371:6: note: Assuming 'ret' is 0 if (ret) { ^~~ drivers/iio/adc/sc27xx_adc.c:371:2: note: Taking false branch if (ret) { ^ drivers/iio/adc/sc27xx_adc.c:381:6: note: Assuming field 'pmic_type' is equal to SC2721_ADC if (data->var_data->pmic_type == SC2721_ADC) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/adc/sc27xx_adc.c:381:2: note: Taking true branch if (data->var_data->pmic_type == SC2721_ADC) { ^ drivers/iio/adc/sc27xx_adc.c:382:8: note: Assuming 'channel' is equal to 30 if ((channel == 30) || (channel == 31)) { ^~~~~~~~~~~~~ drivers/iio/adc/sc27xx_adc.c:382:23: note: Left side of '||' is true if ((channel == 30) || (channel == 31)) { ^ drivers/iio/adc/sc27xx_adc.c:386:8: note: Assuming 'ret' is 0 if (ret) { ^~~ drivers/iio/adc/sc27xx_adc.c:386:4: note: Taking false branch if (ret) { ^ drivers/iio/adc/sc27xx_adc.c:396:6: note: Assuming 'ret' is not equal to 0 if (ret) ^~~ drivers/iio/adc/sc27xx_adc.c:396:2: note: Taking true branch if (ret) ^ drivers/iio/adc/sc27xx_adc.c:397:3: note: Control jumps to line 448 goto unlock_adc; ^ drivers/iio/adc/sc27xx_adc.c:448:22: note: Field 'pmic_type' is equal to SC2721_ADC if (data->var_data->pmic_type == SC2721_ADC) { ^ drivers/iio/adc/sc27xx_adc.c:448:2: note: Taking true branch if (data->var_data->pmic_type == SC2721_ADC) { ^ drivers/iio/adc/sc27xx_adc.c:449:8: note: 'channel' is equal to 30 if ((channel == 30) || (channel == 31)) { ^~~~~~~ drivers/iio/adc/sc27xx_adc.c:449:23: note: Left side of '||' is true if ((channel == 30) || (channel == 31)) { ^ drivers/iio/adc/sc27xx_adc.c:453:8: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/iio/adc/sc27xx_adc.c:453:4: note: Taking false branch if (ret) ^ drivers/iio/adc/sc27xx_adc.c:460:7: note: 'ret' is 0 if (!ret) ^~~ drivers/iio/adc/sc27xx_adc.c:460:2: note: Taking true branch if (!ret) ^ drivers/iio/adc/sc27xx_adc.c:461:8: note: Assigned value is garbage or undefined *val = value; ^ ~~~~~ Suppressed 2 warnings (2 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. 3 warnings generated. drivers/hwspinlock/qcom_hwspinlock.c:158:24: warning: Passed-by-value struct argument contains uninitialized data (e.g., field: 'id_size') [clang-analyzer-core.CallAndMessage] bank->lock[i].priv = devm_regmap_field_alloc(&pdev->dev, ^ drivers/hwspinlock/qcom_hwspinlock.c:132:2: note: 'field' initialized here struct reg_field field; ^~~~~~~~~~~~~~~~~~~~~~ drivers/hwspinlock/qcom_hwspinlock.c:140:6: note: Left side of '&&' is true if (IS_ERR(regmap) && PTR_ERR(regmap) == -ENODEV) ^ drivers/hwspinlock/qcom_hwspinlock.c:140:2: note: Taking true branch if (IS_ERR(regmap) && PTR_ERR(regmap) == -ENODEV) ^ drivers/hwspinlock/qcom_hwspinlock.c:143:6: note: Calling 'IS_ERR' if (IS_ERR(regmap)) ^~~~~~~~~~~~~~ include/linux/err.h:36:9: note: Assuming the condition is false return IS_ERR_VALUE((unsigned long)ptr); ^ include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE' #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/err.h:36:2: note: Returning zero, which participates in a condition later return IS_ERR_VALUE((unsigned long)ptr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hwspinlock/qcom_hwspinlock.c:143:6: note: Returning from 'IS_ERR' if (IS_ERR(regmap)) ^~~~~~~~~~~~~~ drivers/hwspinlock/qcom_hwspinlock.c:143:2: note: Taking false branch if (IS_ERR(regmap)) vim +461 drivers/iio/adc/sc27xx_adc.c b39db3bcbc9a96 Cixi Geng 2022-01-06 363 5df362a6cf49ca Freeman Liu 2018-06-21 364 static int sc27xx_adc_read(struct sc27xx_adc_data *data, int channel, 5df362a6cf49ca Freeman Liu 2018-06-21 365 int scale, int *val) 5df362a6cf49ca Freeman Liu 2018-06-21 366 { 5df362a6cf49ca Freeman Liu 2018-06-21 367 int ret; 8de877d2bba5c3 Freeman Liu 2019-07-25 368 u32 tmp, value, status; 5df362a6cf49ca Freeman Liu 2018-06-21 369 5df362a6cf49ca Freeman Liu 2018-06-21 370 ret = hwspin_lock_timeout_raw(data->hwlock, SC27XX_ADC_HWLOCK_TIMEOUT); 5df362a6cf49ca Freeman Liu 2018-06-21 371 if (ret) { 5df362a6cf49ca Freeman Liu 2018-06-21 372 dev_err(data->dev, "timeout to get the hwspinlock\n"); 5df362a6cf49ca Freeman Liu 2018-06-21 373 return ret; 5df362a6cf49ca Freeman Liu 2018-06-21 374 } 5df362a6cf49ca Freeman Liu 2018-06-21 375 cd6ab0edd81be2 Cixi Geng 2022-01-06 376 /* cd6ab0edd81be2 Cixi Geng 2022-01-06 377 * According to the sc2721 chip data sheet, the reference voltage of cd6ab0edd81be2 Cixi Geng 2022-01-06 378 * specific channel 30 and channel 31 in ADC module needs to be set from cd6ab0edd81be2 Cixi Geng 2022-01-06 379 * the default 2.8v to 3.5v. cd6ab0edd81be2 Cixi Geng 2022-01-06 380 */ cd6ab0edd81be2 Cixi Geng 2022-01-06 381 if (data->var_data->pmic_type == SC2721_ADC) { cd6ab0edd81be2 Cixi Geng 2022-01-06 382 if ((channel == 30) || (channel == 31)) { cd6ab0edd81be2 Cixi Geng 2022-01-06 383 ret = regulator_set_voltage(data->volref, cd6ab0edd81be2 Cixi Geng 2022-01-06 384 SC27XX_ADC_REFVOL_VDD35, cd6ab0edd81be2 Cixi Geng 2022-01-06 385 SC27XX_ADC_REFVOL_VDD35); cd6ab0edd81be2 Cixi Geng 2022-01-06 386 if (ret) { cd6ab0edd81be2 Cixi Geng 2022-01-06 387 dev_err(data->dev, "failed to set the volref 3.5V\n"); cd6ab0edd81be2 Cixi Geng 2022-01-06 388 hwspin_unlock_raw(data->hwlock); cd6ab0edd81be2 Cixi Geng 2022-01-06 389 return ret; cd6ab0edd81be2 Cixi Geng 2022-01-06 390 } cd6ab0edd81be2 Cixi Geng 2022-01-06 391 } cd6ab0edd81be2 Cixi Geng 2022-01-06 392 } cd6ab0edd81be2 Cixi Geng 2022-01-06 393 5df362a6cf49ca Freeman Liu 2018-06-21 394 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL, 5df362a6cf49ca Freeman Liu 2018-06-21 395 SC27XX_ADC_EN, SC27XX_ADC_EN); 5df362a6cf49ca Freeman Liu 2018-06-21 396 if (ret) 5df362a6cf49ca Freeman Liu 2018-06-21 397 goto unlock_adc; 5df362a6cf49ca Freeman Liu 2018-06-21 398 8de877d2bba5c3 Freeman Liu 2019-07-25 399 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_INT_CLR, 8de877d2bba5c3 Freeman Liu 2019-07-25 400 SC27XX_ADC_IRQ_CLR, SC27XX_ADC_IRQ_CLR); 8de877d2bba5c3 Freeman Liu 2019-07-25 401 if (ret) 8de877d2bba5c3 Freeman Liu 2019-07-25 402 goto disable_adc; 8de877d2bba5c3 Freeman Liu 2019-07-25 403 5df362a6cf49ca Freeman Liu 2018-06-21 404 /* Configure the channel id and scale */ b39db3bcbc9a96 Cixi Geng 2022-01-06 405 tmp = (scale << data->var_data->scale_shift) & data->var_data->scale_mask; 5df362a6cf49ca Freeman Liu 2018-06-21 406 tmp |= channel & SC27XX_ADC_CHN_ID_MASK; 5df362a6cf49ca Freeman Liu 2018-06-21 407 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CH_CFG, b39db3bcbc9a96 Cixi Geng 2022-01-06 408 SC27XX_ADC_CHN_ID_MASK | b39db3bcbc9a96 Cixi Geng 2022-01-06 409 data->var_data->scale_mask, 5df362a6cf49ca Freeman Liu 2018-06-21 410 tmp); 5df362a6cf49ca Freeman Liu 2018-06-21 411 if (ret) 5df362a6cf49ca Freeman Liu 2018-06-21 412 goto disable_adc; 5df362a6cf49ca Freeman Liu 2018-06-21 413 5df362a6cf49ca Freeman Liu 2018-06-21 414 /* Select 12bit conversion mode, and only sample 1 time */ 5df362a6cf49ca Freeman Liu 2018-06-21 415 tmp = SC27XX_ADC_12BIT_MODE; 5df362a6cf49ca Freeman Liu 2018-06-21 416 tmp |= (0 << SC27XX_ADC_RUN_NUM_SHIFT) & SC27XX_ADC_RUN_NUM_MASK; 5df362a6cf49ca Freeman Liu 2018-06-21 417 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL, 5df362a6cf49ca Freeman Liu 2018-06-21 418 SC27XX_ADC_RUN_NUM_MASK | SC27XX_ADC_12BIT_MODE, 5df362a6cf49ca Freeman Liu 2018-06-21 419 tmp); 5df362a6cf49ca Freeman Liu 2018-06-21 420 if (ret) 5df362a6cf49ca Freeman Liu 2018-06-21 421 goto disable_adc; 5df362a6cf49ca Freeman Liu 2018-06-21 422 5df362a6cf49ca Freeman Liu 2018-06-21 423 ret = regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL, 5df362a6cf49ca Freeman Liu 2018-06-21 424 SC27XX_ADC_CHN_RUN, SC27XX_ADC_CHN_RUN); 5df362a6cf49ca Freeman Liu 2018-06-21 425 if (ret) 5df362a6cf49ca Freeman Liu 2018-06-21 426 goto disable_adc; 5df362a6cf49ca Freeman Liu 2018-06-21 427 8de877d2bba5c3 Freeman Liu 2019-07-25 428 ret = regmap_read_poll_timeout(data->regmap, 8de877d2bba5c3 Freeman Liu 2019-07-25 429 data->base + SC27XX_ADC_INT_RAW, 8de877d2bba5c3 Freeman Liu 2019-07-25 430 status, (status & SC27XX_ADC_IRQ_RAW), 8de877d2bba5c3 Freeman Liu 2019-07-25 431 SC27XX_ADC_POLL_RAW_STATUS, 8de877d2bba5c3 Freeman Liu 2019-07-25 432 SC27XX_ADC_RDY_TIMEOUT); 8de877d2bba5c3 Freeman Liu 2019-07-25 433 if (ret) { 8de877d2bba5c3 Freeman Liu 2019-07-25 434 dev_err(data->dev, "read adc timeout, status = 0x%x\n", status); 8de877d2bba5c3 Freeman Liu 2019-07-25 435 goto disable_adc; 750ac07eb2c856 Freeman Liu 2018-11-09 436 } 5df362a6cf49ca Freeman Liu 2018-06-21 437 8de877d2bba5c3 Freeman Liu 2019-07-25 438 ret = regmap_read(data->regmap, data->base + SC27XX_ADC_DATA, &value); 8de877d2bba5c3 Freeman Liu 2019-07-25 439 if (ret) 8de877d2bba5c3 Freeman Liu 2019-07-25 440 goto disable_adc; 8de877d2bba5c3 Freeman Liu 2019-07-25 441 8de877d2bba5c3 Freeman Liu 2019-07-25 442 value &= SC27XX_ADC_DATA_MASK; 8de877d2bba5c3 Freeman Liu 2019-07-25 443 5df362a6cf49ca Freeman Liu 2018-06-21 444 disable_adc: 5df362a6cf49ca Freeman Liu 2018-06-21 445 regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL, 5df362a6cf49ca Freeman Liu 2018-06-21 446 SC27XX_ADC_EN, 0); 5df362a6cf49ca Freeman Liu 2018-06-21 447 unlock_adc: cd6ab0edd81be2 Cixi Geng 2022-01-06 448 if (data->var_data->pmic_type == SC2721_ADC) { cd6ab0edd81be2 Cixi Geng 2022-01-06 449 if ((channel == 30) || (channel == 31)) { cd6ab0edd81be2 Cixi Geng 2022-01-06 450 ret = regulator_set_voltage(data->volref, cd6ab0edd81be2 Cixi Geng 2022-01-06 451 SC27XX_ADC_REFVOL_VDD28, cd6ab0edd81be2 Cixi Geng 2022-01-06 452 SC27XX_ADC_REFVOL_VDD28); cd6ab0edd81be2 Cixi Geng 2022-01-06 453 if (ret) cd6ab0edd81be2 Cixi Geng 2022-01-06 454 dev_err(data->dev, "failed to set the volref 2.8V\n"); cd6ab0edd81be2 Cixi Geng 2022-01-06 455 } cd6ab0edd81be2 Cixi Geng 2022-01-06 456 } cd6ab0edd81be2 Cixi Geng 2022-01-06 457 5df362a6cf49ca Freeman Liu 2018-06-21 458 hwspin_unlock_raw(data->hwlock); 5df362a6cf49ca Freeman Liu 2018-06-21 459 5df362a6cf49ca Freeman Liu 2018-06-21 460 if (!ret) 8de877d2bba5c3 Freeman Liu 2019-07-25 @461 *val = value; 5df362a6cf49ca Freeman Liu 2018-06-21 462 5df362a6cf49ca Freeman Liu 2018-06-21 463 return ret; 5df362a6cf49ca Freeman Liu 2018-06-21 464 } 5df362a6cf49ca Freeman Liu 2018-06-21 465 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
