Re: [PATCH V2 5/5] Add support for Awinic sar sensor.
From: kernel test robot
Date: Wed Jun 05 2024 - 08:56:37 EST
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 32f88d65f01bf6f45476d7edbe675e44fb9e1d58]
url: https://github.com/intel-lab-lkp/linux/commits/wangshuaijie-awinic-com/dt-bindings-input-Add-YAML-to-Awinic-sar-sensor/20240605-172023
base: 32f88d65f01bf6f45476d7edbe675e44fb9e1d58
patch link: https://lore.kernel.org/r/20240605091143.163789-6-wangshuaijie%40awinic.com
patch subject: [PATCH V2 5/5] Add support for Awinic sar sensor.
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240605/202406051942.zY0QbCfv-lkp@xxxxxxxxx/config)
compiler: alpha-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240605/202406051942.zY0QbCfv-lkp@xxxxxxxxx/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406051942.zY0QbCfv-lkp@xxxxxxxxx/
All warnings (new ones prefixed by >>):
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:39: warning: Cannot understand * @aw_sar_i2c_read() - Read register interface
on line 39 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:80: warning: Cannot understand * @aw_sar_i2c_write - write register interface
on line 80 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:125: warning: Cannot understand * @aw_sar_i2c_write_bits() - Write the corresponding bit of the register
on line 125 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:147: warning: Cannot understand * @aw_sar_i2c_write_seq() - Continuously write data to the chip
on line 147 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:177: warning: Cannot understand * @aw_sar_i2c_read_seq() - Continuously Read data from chip
on line 177 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:527: warning: Cannot understand * @aw_sar_parsing_bin_file() - Parse bin file
on line 527 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:582: warning: Cannot understand * @aw_sar_pow2() - Calculate the second power
on line 582 - I thought it was a doc line
>> drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c:603: warning: Cannot understand * @aw_sar_load_reg() - Calculate the second power
on line 603 - I thought it was a doc line
--
>> drivers/input/misc/aw_sar/./aw963xx/aw963xx.c:66: warning: Cannot understand * @aw963xx_sram_fill_not_wrote_area()
on line 66 - I thought it was a doc line
--
>> drivers/input/misc/aw_sar/aw_sar.c:1645: warning: Cannot understand * @aw_sar_chip_init() - sar sensor initialization logic.
on line 1645 - I thought it was a doc line
>> drivers/input/misc/aw_sar/aw_sar.c:1748: warning: Cannot understand * @aw_sar_get_chip_info() - Distinguish different chips by chip name and
on line 1748 - I thought it was a doc line
vim +39 drivers/input/misc/aw_sar/./comm/aw_sar_comm_interface.c
21b7e7a6d412d6 shuaijie wang 2024-06-05 37
21b7e7a6d412d6 shuaijie wang 2024-06-05 38 /**
21b7e7a6d412d6 shuaijie wang 2024-06-05 @39 * @aw_sar_i2c_read() - Read register interface
21b7e7a6d412d6 shuaijie wang 2024-06-05 40 *
21b7e7a6d412d6 shuaijie wang 2024-06-05 41 * @i2c: i2c client.
21b7e7a6d412d6 shuaijie wang 2024-06-05 42 * @reg_addr16: 16 bit register address.
21b7e7a6d412d6 shuaijie wang 2024-06-05 43 * @reg_data32: 32 bit register data.
21b7e7a6d412d6 shuaijie wang 2024-06-05 44 * @return 0 if init succeeded.
21b7e7a6d412d6 shuaijie wang 2024-06-05 45 */
21b7e7a6d412d6 shuaijie wang 2024-06-05 46 int32_t aw_sar_i2c_read(struct i2c_client *i2c, uint16_t reg_addr16, uint32_t *reg_data32)
21b7e7a6d412d6 shuaijie wang 2024-06-05 47 {
21b7e7a6d412d6 shuaijie wang 2024-06-05 48 uint8_t r_buf[6] = { 0 };
21b7e7a6d412d6 shuaijie wang 2024-06-05 49 int8_t cnt = 5;
21b7e7a6d412d6 shuaijie wang 2024-06-05 50 int32_t ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 51
21b7e7a6d412d6 shuaijie wang 2024-06-05 52 if (!i2c)
21b7e7a6d412d6 shuaijie wang 2024-06-05 53 return -EINVAL;
21b7e7a6d412d6 shuaijie wang 2024-06-05 54
21b7e7a6d412d6 shuaijie wang 2024-06-05 55 r_buf[0] = (unsigned char)(reg_addr16 >> OFFSET_BIT_8);
21b7e7a6d412d6 shuaijie wang 2024-06-05 56 r_buf[1] = (unsigned char)(reg_addr16);
21b7e7a6d412d6 shuaijie wang 2024-06-05 57
21b7e7a6d412d6 shuaijie wang 2024-06-05 58 do {
21b7e7a6d412d6 shuaijie wang 2024-06-05 59 ret = awinic_i2c_read(i2c, r_buf, 2, &r_buf[2], 4);
21b7e7a6d412d6 shuaijie wang 2024-06-05 60 if (ret < 0)
21b7e7a6d412d6 shuaijie wang 2024-06-05 61 dev_err(&i2c->dev, "i2c read error reg: 0x%04x, ret= %d cnt= %d",
21b7e7a6d412d6 shuaijie wang 2024-06-05 62 reg_addr16, ret, cnt);
21b7e7a6d412d6 shuaijie wang 2024-06-05 63 else
21b7e7a6d412d6 shuaijie wang 2024-06-05 64 break;
21b7e7a6d412d6 shuaijie wang 2024-06-05 65 usleep_range(2000, 3000);
21b7e7a6d412d6 shuaijie wang 2024-06-05 66 } while (cnt--);
21b7e7a6d412d6 shuaijie wang 2024-06-05 67
21b7e7a6d412d6 shuaijie wang 2024-06-05 68 if (cnt < 0) {
21b7e7a6d412d6 shuaijie wang 2024-06-05 69 dev_err(&i2c->dev, "i2c read error!");
21b7e7a6d412d6 shuaijie wang 2024-06-05 70 return ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 71 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 72
21b7e7a6d412d6 shuaijie wang 2024-06-05 73 *reg_data32 = ((uint32_t)r_buf[5] << OFFSET_BIT_0) | ((uint32_t)r_buf[4] << OFFSET_BIT_8) |
21b7e7a6d412d6 shuaijie wang 2024-06-05 74 ((uint32_t)r_buf[3] << OFFSET_BIT_16) | ((uint32_t)r_buf[2] << OFFSET_BIT_24);
21b7e7a6d412d6 shuaijie wang 2024-06-05 75
21b7e7a6d412d6 shuaijie wang 2024-06-05 76 return 0;
21b7e7a6d412d6 shuaijie wang 2024-06-05 77 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 78
21b7e7a6d412d6 shuaijie wang 2024-06-05 79 /**
21b7e7a6d412d6 shuaijie wang 2024-06-05 @80 * @aw_sar_i2c_write - write register interface
21b7e7a6d412d6 shuaijie wang 2024-06-05 81 *
21b7e7a6d412d6 shuaijie wang 2024-06-05 82 * @i2c: i2c client.
21b7e7a6d412d6 shuaijie wang 2024-06-05 83 * @reg_addr16: 16 bit register address.
21b7e7a6d412d6 shuaijie wang 2024-06-05 84 * @reg_data32: 32 bit register data.
21b7e7a6d412d6 shuaijie wang 2024-06-05 85 * @return 0 if init succeeded.
21b7e7a6d412d6 shuaijie wang 2024-06-05 86 */
21b7e7a6d412d6 shuaijie wang 2024-06-05 87 int32_t aw_sar_i2c_write(struct i2c_client *i2c, uint16_t reg_addr16, uint32_t reg_data32)
21b7e7a6d412d6 shuaijie wang 2024-06-05 88 {
21b7e7a6d412d6 shuaijie wang 2024-06-05 89 uint8_t w_buf[6] = { 0 };
21b7e7a6d412d6 shuaijie wang 2024-06-05 90 int8_t cnt = 5;
21b7e7a6d412d6 shuaijie wang 2024-06-05 91 int32_t ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 92
21b7e7a6d412d6 shuaijie wang 2024-06-05 93 if (!i2c)
21b7e7a6d412d6 shuaijie wang 2024-06-05 94 return -EINVAL;
21b7e7a6d412d6 shuaijie wang 2024-06-05 95
21b7e7a6d412d6 shuaijie wang 2024-06-05 96 /*reg_addr*/
21b7e7a6d412d6 shuaijie wang 2024-06-05 97 w_buf[0] = (uint8_t)(reg_addr16 >> OFFSET_BIT_8);
21b7e7a6d412d6 shuaijie wang 2024-06-05 98 w_buf[1] = (uint8_t)(reg_addr16);
21b7e7a6d412d6 shuaijie wang 2024-06-05 99 /*data*/
21b7e7a6d412d6 shuaijie wang 2024-06-05 100 w_buf[2] = (uint8_t)(reg_data32 >> OFFSET_BIT_24);
21b7e7a6d412d6 shuaijie wang 2024-06-05 101 w_buf[3] = (uint8_t)(reg_data32 >> OFFSET_BIT_16);
21b7e7a6d412d6 shuaijie wang 2024-06-05 102 w_buf[4] = (uint8_t)(reg_data32 >> OFFSET_BIT_8);
21b7e7a6d412d6 shuaijie wang 2024-06-05 103 w_buf[5] = (uint8_t)(reg_data32);
21b7e7a6d412d6 shuaijie wang 2024-06-05 104
21b7e7a6d412d6 shuaijie wang 2024-06-05 105 do {
21b7e7a6d412d6 shuaijie wang 2024-06-05 106 ret = awinic_i2c_write(i2c, w_buf, ARRAY_SIZE(w_buf));
21b7e7a6d412d6 shuaijie wang 2024-06-05 107 if (ret < 0) {
21b7e7a6d412d6 shuaijie wang 2024-06-05 108 dev_err(&i2c->dev,
21b7e7a6d412d6 shuaijie wang 2024-06-05 109 "i2c write error reg: 0x%04x data: 0x%08x, ret= %d cnt= %d",
21b7e7a6d412d6 shuaijie wang 2024-06-05 110 reg_addr16, reg_data32, ret, cnt);
21b7e7a6d412d6 shuaijie wang 2024-06-05 111 } else {
21b7e7a6d412d6 shuaijie wang 2024-06-05 112 break;
21b7e7a6d412d6 shuaijie wang 2024-06-05 113 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 114 } while (cnt--);
21b7e7a6d412d6 shuaijie wang 2024-06-05 115
21b7e7a6d412d6 shuaijie wang 2024-06-05 116 if (cnt < 0) {
21b7e7a6d412d6 shuaijie wang 2024-06-05 117 dev_err(&i2c->dev, "i2c write error!");
21b7e7a6d412d6 shuaijie wang 2024-06-05 118 return ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 119 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 120
21b7e7a6d412d6 shuaijie wang 2024-06-05 121 return 0;
21b7e7a6d412d6 shuaijie wang 2024-06-05 122 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 123
21b7e7a6d412d6 shuaijie wang 2024-06-05 124 /**
21b7e7a6d412d6 shuaijie wang 2024-06-05 @125 * @aw_sar_i2c_write_bits() - Write the corresponding bit of the register
21b7e7a6d412d6 shuaijie wang 2024-06-05 126 *
21b7e7a6d412d6 shuaijie wang 2024-06-05 127 * @i2c:i2c client.
21b7e7a6d412d6 shuaijie wang 2024-06-05 128 * @reg_addr16: 16 bit register address.
21b7e7a6d412d6 shuaijie wang 2024-06-05 129 * @mask: Write the corresponding bit as 0
21b7e7a6d412d6 shuaijie wang 2024-06-05 130 * @val: Write corresponding data to the register
21b7e7a6d412d6 shuaijie wang 2024-06-05 131 * @return 0 if init succeeded.
21b7e7a6d412d6 shuaijie wang 2024-06-05 132 */
21b7e7a6d412d6 shuaijie wang 2024-06-05 133 int32_t
21b7e7a6d412d6 shuaijie wang 2024-06-05 134 aw_sar_i2c_write_bits(struct i2c_client *i2c, uint16_t reg_addr16, uint32_t mask, uint32_t val)
21b7e7a6d412d6 shuaijie wang 2024-06-05 135 {
21b7e7a6d412d6 shuaijie wang 2024-06-05 136 uint32_t reg_val;
21b7e7a6d412d6 shuaijie wang 2024-06-05 137
21b7e7a6d412d6 shuaijie wang 2024-06-05 138 aw_sar_i2c_read(i2c, reg_addr16, ®_val);
21b7e7a6d412d6 shuaijie wang 2024-06-05 139 reg_val &= mask;
21b7e7a6d412d6 shuaijie wang 2024-06-05 140 reg_val |= (val & (~mask));
21b7e7a6d412d6 shuaijie wang 2024-06-05 141 aw_sar_i2c_write(i2c, reg_addr16, reg_val);
21b7e7a6d412d6 shuaijie wang 2024-06-05 142
21b7e7a6d412d6 shuaijie wang 2024-06-05 143 return 0;
21b7e7a6d412d6 shuaijie wang 2024-06-05 144 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 145
21b7e7a6d412d6 shuaijie wang 2024-06-05 146 /**
21b7e7a6d412d6 shuaijie wang 2024-06-05 @147 * @aw_sar_i2c_write_seq() - Continuously write data to the chip
21b7e7a6d412d6 shuaijie wang 2024-06-05 148 *
21b7e7a6d412d6 shuaijie wang 2024-06-05 149 * @i2c:i2c client.
21b7e7a6d412d6 shuaijie wang 2024-06-05 150 * @tr_data: Data written
21b7e7a6d412d6 shuaijie wang 2024-06-05 151 * @len: Length of data written
21b7e7a6d412d6 shuaijie wang 2024-06-05 152 * @return 0 if init succeeded.
21b7e7a6d412d6 shuaijie wang 2024-06-05 153 */
21b7e7a6d412d6 shuaijie wang 2024-06-05 154 int32_t aw_sar_i2c_write_seq(struct i2c_client *i2c, uint8_t *tr_data, uint16_t len)
21b7e7a6d412d6 shuaijie wang 2024-06-05 155 {
21b7e7a6d412d6 shuaijie wang 2024-06-05 156 int8_t cnt = AW_RETRIES;
21b7e7a6d412d6 shuaijie wang 2024-06-05 157 int32_t ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 158
21b7e7a6d412d6 shuaijie wang 2024-06-05 159 do {
21b7e7a6d412d6 shuaijie wang 2024-06-05 160 ret = awinic_i2c_write(i2c, tr_data, len);
21b7e7a6d412d6 shuaijie wang 2024-06-05 161 if (ret < 0)
21b7e7a6d412d6 shuaijie wang 2024-06-05 162 dev_err(&i2c->dev, "awinic i2c write seq error %d", ret);
21b7e7a6d412d6 shuaijie wang 2024-06-05 163 else
21b7e7a6d412d6 shuaijie wang 2024-06-05 164 break;
21b7e7a6d412d6 shuaijie wang 2024-06-05 165 usleep_range(AW_I2C_RW_RETRY_TIME_MIN, AW_I2C_RW_RETRY_TIME_MAX);
21b7e7a6d412d6 shuaijie wang 2024-06-05 166 } while (cnt--);
21b7e7a6d412d6 shuaijie wang 2024-06-05 167
21b7e7a6d412d6 shuaijie wang 2024-06-05 168 if (cnt < 0) {
21b7e7a6d412d6 shuaijie wang 2024-06-05 169 dev_err(&i2c->dev, "awinic i2c write error!");
21b7e7a6d412d6 shuaijie wang 2024-06-05 170 return ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 171 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 172
21b7e7a6d412d6 shuaijie wang 2024-06-05 173 return 0;
21b7e7a6d412d6 shuaijie wang 2024-06-05 174 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 175
21b7e7a6d412d6 shuaijie wang 2024-06-05 176 /**
21b7e7a6d412d6 shuaijie wang 2024-06-05 @177 * @aw_sar_i2c_read_seq() - Continuously Read data from chip
21b7e7a6d412d6 shuaijie wang 2024-06-05 178 *
21b7e7a6d412d6 shuaijie wang 2024-06-05 179 * @i2c:i2c client.
21b7e7a6d412d6 shuaijie wang 2024-06-05 180 * @addr: Read address
21b7e7a6d412d6 shuaijie wang 2024-06-05 181 * @addr_len: Length of read address (byte)
21b7e7a6d412d6 shuaijie wang 2024-06-05 182 * @data: Data written
21b7e7a6d412d6 shuaijie wang 2024-06-05 183 * @data_len: Length of data written
21b7e7a6d412d6 shuaijie wang 2024-06-05 184 * @return 0 if init succeeded.
21b7e7a6d412d6 shuaijie wang 2024-06-05 185 */
21b7e7a6d412d6 shuaijie wang 2024-06-05 186 int32_t aw_sar_i2c_read_seq(struct i2c_client *i2c, uint8_t *addr,
21b7e7a6d412d6 shuaijie wang 2024-06-05 187 uint8_t addr_len, uint8_t *data, uint16_t data_len)
21b7e7a6d412d6 shuaijie wang 2024-06-05 188 {
21b7e7a6d412d6 shuaijie wang 2024-06-05 189 int8_t cnt = AW_RETRIES;
21b7e7a6d412d6 shuaijie wang 2024-06-05 190 int32_t ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 191
21b7e7a6d412d6 shuaijie wang 2024-06-05 192 do {
21b7e7a6d412d6 shuaijie wang 2024-06-05 193 ret = awinic_i2c_read(i2c, addr, addr_len, data, data_len);
21b7e7a6d412d6 shuaijie wang 2024-06-05 194 if (ret < 0)
21b7e7a6d412d6 shuaijie wang 2024-06-05 195 dev_err(&i2c->dev, "awinic sar i2c write error %d", ret);
21b7e7a6d412d6 shuaijie wang 2024-06-05 196 else
21b7e7a6d412d6 shuaijie wang 2024-06-05 197 break;
21b7e7a6d412d6 shuaijie wang 2024-06-05 198 usleep_range(AW_I2C_RW_RETRY_TIME_MIN, AW_I2C_RW_RETRY_TIME_MAX);
21b7e7a6d412d6 shuaijie wang 2024-06-05 199 } while (cnt--);
21b7e7a6d412d6 shuaijie wang 2024-06-05 200
21b7e7a6d412d6 shuaijie wang 2024-06-05 201 if (cnt < 0) {
21b7e7a6d412d6 shuaijie wang 2024-06-05 202 dev_err(&i2c->dev, "awinic sar i2c read error!");
21b7e7a6d412d6 shuaijie wang 2024-06-05 203 return ret;
21b7e7a6d412d6 shuaijie wang 2024-06-05 204 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 205
21b7e7a6d412d6 shuaijie wang 2024-06-05 206 return 0;
21b7e7a6d412d6 shuaijie wang 2024-06-05 207 }
21b7e7a6d412d6 shuaijie wang 2024-06-05 208
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki