Re: [PATCH v2] ASoC: tas2781: Add tas2781 driver.

From: kernel test robot
Date: Tue Jan 31 2023 - 17:54:37 EST


Hi Shenghao,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on broonie-sound/for-next]
[also build test WARNING on linus/master v6.2-rc6 next-20230131]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Shenghao-Ding/ASoC-tas2781-Add-tas2781-driver/20230131-212221
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
patch link: https://lore.kernel.org/r/20230131131701.7097-1-13916275206%40139.com
patch subject: [PATCH v2] ASoC: tas2781: Add tas2781 driver.
config: m68k-randconfig-m031-20230129 (https://download.01.org/0day-ci/archive/20230201/202302010621.HbhoRa8c-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>

New smatch warnings:
sound/soc/codecs/tas2781-i2c.c:220 tasdevice_process_block() warn: inconsistent indenting
sound/soc/codecs/tas2781-i2c.c:471 tas2781_digital_putvol() warn: unsigned 'val' is never less than zero.
sound/soc/codecs/tas2781-i2c.c:544 tas2781_amp_putvol() warn: unsigned 'val' is never less than zero.
sound/soc/codecs/tas2781-i2c.c:841 tasdevice_rca_ready() error: we previously assumed 'tas_dev' could be null (see line 840)
sound/soc/codecs/tas2781-i2c.c:1095 tasdevice_dapm_event() error: uninitialized symbol 'pwr_state'.
sound/soc/codecs/tas2781-i2c.c:1818 tasdevice_pm_suspend() error: we previously assumed 'tas_dev' could be null (see line 1817)
sound/soc/codecs/tas2781-dsp.c:1670 tasdevice_load_block() warn: inconsistent indenting
sound/soc/codecs/tas2781-dsp.c:732 tas2781_clear_calfirmware() warn: inconsistent indenting
sound/soc/codecs/tas2781-dsp.c:2038 tasdevice_dsp_remove() warn: inconsistent indenting

Old smatch warnings:
sound/soc/codecs/tas2781-dsp.c:1688 tasdevice_load_block() warn: inconsistent indenting
sound/soc/codecs/tas2781-dsp.c:2042 tasdevice_dsp_remove() warn: inconsistent indenting
sound/soc/codecs/tas2781-dsp.c:2069 tasdevice_dsp_remove() warn: inconsistent indenting
sound/soc/codecs/tas2781-dsp.c:2073 tasdevice_dsp_remove() warn: inconsistent indenting

vim +220 sound/soc/codecs/tas2781-i2c.c

94
95 int tasdevice_process_block(void *context,
96 unsigned char *data, unsigned char dev_idx, int sublocksize)
97 {
98 struct tasdevice_priv *tas_dev =
99 (struct tasdevice_priv *)context;
100 unsigned char subblk_typ = data[1];
101 int subblk_offset = 2;
102 int chn = 0, chnend = 0;
103 int rc = 0;
104 int blktyp = dev_idx & 0xC0, idx = dev_idx & 0x3F;
105 bool is_err = false;
106
107 if (idx) {
108 chn = idx-1;
109 chnend = idx;
110 } else {
111 if (tas_dev->set_global_mode) {
112 chn = tas_dev->ndev;
113 chnend = tas_dev->ndev + 1;
114 } else {
115 chn = 0;
116 chnend = tas_dev->ndev;
117 }
118 }
119
120 for (; chn < chnend; chn++) {
121 if (tas_dev->set_global_mode == NULL &&
122 tas_dev->tasdevice[chn].is_loading == false)
123 continue;
124
125 is_err = false;
126 subblk_offset = 2;
127 switch (subblk_typ) {
128 case TASDEVICE_CMD_SING_W: {
129 int i = 0;
130 unsigned short len = SMS_HTONS(data[2], data[3]);
131
132 subblk_offset += 2;
133 if (subblk_offset + 4 * len > sublocksize) {
134 dev_err(tas_dev->dev,
135 "process_block: Out of memory\n");
136 is_err = true;
137 break;
138 }
139
140 for (i = 0; i < len; i++) {
141 rc = tasdevice_dev_write(tas_dev, chn,
142 TASDEVICE_REG(data[subblk_offset],
143 data[subblk_offset + 1],
144 data[subblk_offset + 2]),
145 data[subblk_offset + 3]);
146 if (rc < 0) {
147 is_err = true;
148 dev_err(tas_dev->dev,
149 "process_block: single write error\n");
150 }
151 subblk_offset += 4;
152 }
153 }
154 break;
155 case TASDEVICE_CMD_BURST: {
156 unsigned short len = SMS_HTONS(data[2], data[3]);
157
158 subblk_offset += 2;
159 if (subblk_offset + 4 + len > sublocksize) {
160 dev_err(tas_dev->dev,
161 "process_block: BURST Out of memory\n");
162 is_err = true;
163 break;
164 }
165 if (len % 4) {
166 dev_err(tas_dev->dev,
167 "%s: Burst len(%u) can be div by 4\n",
168 __func__, len);
169 break;
170 }
171
172 rc = tasdevice_dev_bulk_write(tas_dev, chn,
173 TASDEVICE_REG(data[subblk_offset],
174 data[subblk_offset + 1],
175 data[subblk_offset + 2]),
176 &(data[subblk_offset + 4]), len);
177 if (rc < 0) {
178 is_err = true;
179 dev_err(tas_dev->dev,
180 "%s: bulk_write error = %d\n",
181 __func__, rc);
182 }
183 subblk_offset += (len + 4);
184 }
185 break;
186 case TASDEVICE_CMD_DELAY: {
187 unsigned short delay_time = 0;
188
189 if (subblk_offset + 2 > sublocksize) {
190 dev_err(tas_dev->dev,
191 "%s: deley Out of memory\n",
192 __func__);
193 is_err = true;
194 break;
195 }
196 delay_time = SMS_HTONS(data[2], data[3]);
197 usleep_range(delay_time*1000, delay_time*1000);
198 subblk_offset += 2;
199 }
200 break;
201 case TASDEVICE_CMD_FIELD_W:
202 if (subblk_offset + 6 > sublocksize) {
203 dev_err(tas_dev->dev,
204 "process_block: bit write Out of memory\n");
205 is_err = true;
206 break;
207 }
208 rc = tasdevice_dev_update_bits(tas_dev, chn,
209 TASDEVICE_REG(data[subblk_offset + 2],
210 data[subblk_offset + 3],
211 data[subblk_offset + 4]),
212 data[subblk_offset + 1],
213 data[subblk_offset + 5]);
214 if (rc < 0) {
215 is_err = true;
216 dev_err(tas_dev->dev,
217 "process_block: update_bits error = %d\n", rc);
218 }
219 subblk_offset += 6;
> 220 break;
221 default:
222 break;
223 };
224 if (is_err == true && blktyp != 0) {
225 if (blktyp == 0x80) {
226 tas_dev->tasdevice[chn].cur_prog = -1;
227 tas_dev->tasdevice[chn].cur_conf = -1;
228 } else
229 tas_dev->tasdevice[chn].cur_conf = -1;
230 }
231 }
232 return subblk_offset;
233 }
234

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests