[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202509262228.MYSY2WkV-lkp@intel.com>
Date: Fri, 26 Sep 2025 18:38:55 +0300
From: Dan Carpenter <dan.carpenter@...aro.org>
To: oe-kbuild@...ts.linux.dev, Ariana Lazar <ariana.lazar@...rochip.com>,
Jonathan Cameron <jic23@...nel.org>,
David Lechner <dlechner@...libre.com>,
Nuno Sá <nuno.sa@...log.com>,
Andy Shevchenko <andy@...nel.org>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk@...nel.org>,
Conor Dooley <conor+dt@...nel.org>
Cc: lkp@...el.com, oe-kbuild-all@...ts.linux.dev, linux-iio@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
Ariana Lazar <ariana.lazar@...rochip.com>
Subject: Re: [PATCH 2/2] iio: dac: adding support for Microchip MCP47FEB02
Hi Ariana,
kernel test robot noticed the following build warnings:
url: https://github.com/intel-lab-lkp/linux/commits/Ariana-Lazar/dt-bindings-iio-dac-adding-support-for-Microchip-MCP47FEB02/20250922-193559
base: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494
patch link: https://lore.kernel.org/r/20250922-mcp47feb02-v1-2-06cb4acaa347%40microchip.com
patch subject: [PATCH 2/2] iio: dac: adding support for Microchip MCP47FEB02
config: x86_64-randconfig-r073-20250926 (https://download.01.org/0day-ci/archive/20250926/202509262228.MYSY2WkV-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
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@...el.com>
| Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
| Closes: https://lore.kernel.org/r/202509262228.MYSY2WkV-lkp@intel.com/
smatch warnings:
drivers/iio/dac/mcp47feb02.c:1258 mcp47feb02_probe() error: uninitialized symbol 'vref_mv'.
drivers/iio/dac/mcp47feb02.c:1258 mcp47feb02_probe() error: uninitialized symbol 'vref1_mv'.
vim +/vref_mv +1258 drivers/iio/dac/mcp47feb02.c
2e305393740054 Ariana Lazar 2025-09-22 1108 static int mcp47feb02_probe(struct i2c_client *client)
2e305393740054 Ariana Lazar 2025-09-22 1109 {
2e305393740054 Ariana Lazar 2025-09-22 1110 int err, ret, vdd_mv, vref_mv, vref1_mv, i, tmp_vref, vref_ch, gain_ch;
2e305393740054 Ariana Lazar 2025-09-22 1111 const struct i2c_device_id *id = i2c_client_get_device_id(client);
2e305393740054 Ariana Lazar 2025-09-22 1112 const struct mcp47feb02_features *info;
2e305393740054 Ariana Lazar 2025-09-22 1113 enum vref_mode ref_mode, ref_mode1;
2e305393740054 Ariana Lazar 2025-09-22 1114 struct device *dev = &client->dev;
2e305393740054 Ariana Lazar 2025-09-22 1115 struct mcp47feb02_data *data;
2e305393740054 Ariana Lazar 2025-09-22 1116 struct iio_dev *indio_dev;
2e305393740054 Ariana Lazar 2025-09-22 1117
2e305393740054 Ariana Lazar 2025-09-22 1118 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
2e305393740054 Ariana Lazar 2025-09-22 1119 if (!indio_dev)
2e305393740054 Ariana Lazar 2025-09-22 1120 return -ENOMEM;
2e305393740054 Ariana Lazar 2025-09-22 1121
2e305393740054 Ariana Lazar 2025-09-22 1122 data = iio_priv(indio_dev);
2e305393740054 Ariana Lazar 2025-09-22 1123 i2c_set_clientdata(client, indio_dev);
2e305393740054 Ariana Lazar 2025-09-22 1124 data->client = client;
2e305393740054 Ariana Lazar 2025-09-22 1125 info = i2c_get_match_data(client);
2e305393740054 Ariana Lazar 2025-09-22 1126
2e305393740054 Ariana Lazar 2025-09-22 1127 if (info->have_eeprom) {
2e305393740054 Ariana Lazar 2025-09-22 1128 data->regmap = devm_regmap_init_i2c(client, &mcp47feb02_regmap_config);
2e305393740054 Ariana Lazar 2025-09-22 1129 data->have_eeprom = true;
2e305393740054 Ariana Lazar 2025-09-22 1130 } else {
2e305393740054 Ariana Lazar 2025-09-22 1131 data->regmap = devm_regmap_init_i2c(client, &mcp47fvb02_regmap_config);
2e305393740054 Ariana Lazar 2025-09-22 1132 data->have_eeprom = false;
2e305393740054 Ariana Lazar 2025-09-22 1133 }
2e305393740054 Ariana Lazar 2025-09-22 1134
2e305393740054 Ariana Lazar 2025-09-22 1135 if (IS_ERR(data->regmap))
2e305393740054 Ariana Lazar 2025-09-22 1136 dev_err_probe(dev, PTR_ERR(data->regmap), "Error initializing i2c regmap\n");
2e305393740054 Ariana Lazar 2025-09-22 1137
2e305393740054 Ariana Lazar 2025-09-22 1138 err = mcp47feb02_parse_fw(indio_dev, info);
2e305393740054 Ariana Lazar 2025-09-22 1139 if (err)
2e305393740054 Ariana Lazar 2025-09-22 1140 return dev_err_probe(dev, err, "Error parsing devicetree data\n");
2e305393740054 Ariana Lazar 2025-09-22 1141
2e305393740054 Ariana Lazar 2025-09-22 1142 if (!info->have_ext_vref2 && data->use_vref1)
2e305393740054 Ariana Lazar 2025-09-22 1143 return dev_err_probe(dev, -EINVAL,
2e305393740054 Ariana Lazar 2025-09-22 1144 "Second External reference is unavailable on %s\n",
2e305393740054 Ariana Lazar 2025-09-22 1145 info->name);
2e305393740054 Ariana Lazar 2025-09-22 1146
2e305393740054 Ariana Lazar 2025-09-22 1147 ret = regmap_read(data->regmap, CMD_FORMAT(MCP47FEB02_VREF_REG_ADDR, READ_CMD), &vref_ch);
2e305393740054 Ariana Lazar 2025-09-22 1148 if (ret)
2e305393740054 Ariana Lazar 2025-09-22 1149 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1150
2e305393740054 Ariana Lazar 2025-09-22 1151 ret = regmap_read(data->regmap, CMD_FORMAT(MCP47FEB02_GAIN_STATUS_REG_ADDR, READ_CMD),
2e305393740054 Ariana Lazar 2025-09-22 1152 &gain_ch);
2e305393740054 Ariana Lazar 2025-09-22 1153 if (ret)
2e305393740054 Ariana Lazar 2025-09-22 1154 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1155
2e305393740054 Ariana Lazar 2025-09-22 1156 gain_ch = gain_ch >> 8;
2e305393740054 Ariana Lazar 2025-09-22 1157
2e305393740054 Ariana Lazar 2025-09-22 1158 /*
2e305393740054 Ariana Lazar 2025-09-22 1159 * Values stored in the nonvolatile memory will be transferred to the volatile registers
2e305393740054 Ariana Lazar 2025-09-22 1160 * at startup. For safety reasons, the user receives a warning if startup values
2e305393740054 Ariana Lazar 2025-09-22 1161 * do not match the ones from current devicetree configuration.
2e305393740054 Ariana Lazar 2025-09-22 1162 * Nonvolatile memory can be written at any time
2e305393740054 Ariana Lazar 2025-09-22 1163 */
2e305393740054 Ariana Lazar 2025-09-22 1164 for_each_set_bit(i, &data->active_channels_mask, data->phys_channels) {
2e305393740054 Ariana Lazar 2025-09-22 1165 /* VDD can be set as Vref only with Gain x1 */
2e305393740054 Ariana Lazar 2025-09-22 1166 if ((vref_ch & 0x03) == MCP47FEB02_VREF_VDD &&
2e305393740054 Ariana Lazar 2025-09-22 1167 (gain_ch & 0x01) == MCP47FEB02_GAIN_X2) {
2e305393740054 Ariana Lazar 2025-09-22 1168 dev_info(dev, "vdd can be used only with gain x1\n");
2e305393740054 Ariana Lazar 2025-09-22 1169 ret = mcp47feb02_write_to_register(data->regmap,
2e305393740054 Ariana Lazar 2025-09-22 1170 MCP47FEB02_GAIN_STATUS_REG_ADDR,
2e305393740054 Ariana Lazar 2025-09-22 1171 i, MCP47FEB02_GAIN_X1);
2e305393740054 Ariana Lazar 2025-09-22 1172 if (ret)
2e305393740054 Ariana Lazar 2025-09-22 1173 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1174
2e305393740054 Ariana Lazar 2025-09-22 1175 data->chdata[i].use_2x_gain = MCP47FEB02_GAIN_X1;
2e305393740054 Ariana Lazar 2025-09-22 1176 }
2e305393740054 Ariana Lazar 2025-09-22 1177
2e305393740054 Ariana Lazar 2025-09-22 1178 if (data->phys_channels >= 4 && (i % 2)) {
2e305393740054 Ariana Lazar 2025-09-22 1179 if ((vref_ch & 0x03) == MCP47FEB02_EXTERNAL_VREF_BUFFERED &&
2e305393740054 Ariana Lazar 2025-09-22 1180 data->use_vref1 && !data->vref1_buffered)
2e305393740054 Ariana Lazar 2025-09-22 1181 dev_info(dev, "vref1 is unbuffered\n");
2e305393740054 Ariana Lazar 2025-09-22 1182 else if ((vref_ch & 0x03) == MCP47FEB02_EXTERNAL_VREF_UNBUFFERED &&
2e305393740054 Ariana Lazar 2025-09-22 1183 data->use_vref1 && data->vref1_buffered)
2e305393740054 Ariana Lazar 2025-09-22 1184 dev_info(dev, "vref1 is buffered\n");
2e305393740054 Ariana Lazar 2025-09-22 1185 } else {
2e305393740054 Ariana Lazar 2025-09-22 1186 if ((vref_ch & 0x03) == MCP47FEB02_EXTERNAL_VREF_BUFFERED &&
2e305393740054 Ariana Lazar 2025-09-22 1187 data->use_vref && !data->vref_buffered)
2e305393740054 Ariana Lazar 2025-09-22 1188 dev_info(dev, "vref is unbuffered\n");
2e305393740054 Ariana Lazar 2025-09-22 1189 else if ((vref_ch & 0x03) == MCP47FEB02_EXTERNAL_VREF_UNBUFFERED &&
2e305393740054 Ariana Lazar 2025-09-22 1190 data->use_vref && data->vref_buffered)
2e305393740054 Ariana Lazar 2025-09-22 1191 dev_info(dev, "vref is buffered\n");
2e305393740054 Ariana Lazar 2025-09-22 1192 }
2e305393740054 Ariana Lazar 2025-09-22 1193
2e305393740054 Ariana Lazar 2025-09-22 1194 vref_ch = vref_ch >> 2;
2e305393740054 Ariana Lazar 2025-09-22 1195 gain_ch = gain_ch >> 1;
2e305393740054 Ariana Lazar 2025-09-22 1196 }
2e305393740054 Ariana Lazar 2025-09-22 1197
2e305393740054 Ariana Lazar 2025-09-22 1198 if (data->use_vref)
2e305393740054 Ariana Lazar 2025-09-22 1199 ref_mode = data->vref_buffered ?
2e305393740054 Ariana Lazar 2025-09-22 1200 MCP47FEB02_EXTERNAL_VREF_BUFFERED : MCP47FEB02_EXTERNAL_VREF_UNBUFFERED;
2e305393740054 Ariana Lazar 2025-09-22 1201 else
2e305393740054 Ariana Lazar 2025-09-22 1202 ref_mode = MCP47FEB02_INTERNAL_BAND_GAP;
2e305393740054 Ariana Lazar 2025-09-22 1203
2e305393740054 Ariana Lazar 2025-09-22 1204 if (data->use_vref1)
2e305393740054 Ariana Lazar 2025-09-22 1205 ref_mode1 = data->vref1_buffered ?
2e305393740054 Ariana Lazar 2025-09-22 1206 MCP47FEB02_EXTERNAL_VREF_BUFFERED : MCP47FEB02_EXTERNAL_VREF_UNBUFFERED;
2e305393740054 Ariana Lazar 2025-09-22 1207
2e305393740054 Ariana Lazar 2025-09-22 1208 else
2e305393740054 Ariana Lazar 2025-09-22 1209 ref_mode1 = MCP47FEB02_INTERNAL_BAND_GAP;
2e305393740054 Ariana Lazar 2025-09-22 1210
2e305393740054 Ariana Lazar 2025-09-22 1211 for_each_set_bit(i, &data->active_channels_mask, data->phys_channels) {
2e305393740054 Ariana Lazar 2025-09-22 1212 if (data->phys_channels >= 4 && (i % 2))
2e305393740054 Ariana Lazar 2025-09-22 1213 tmp_vref = ref_mode1;
2e305393740054 Ariana Lazar 2025-09-22 1214 else
2e305393740054 Ariana Lazar 2025-09-22 1215 tmp_vref = ref_mode;
2e305393740054 Ariana Lazar 2025-09-22 1216
2e305393740054 Ariana Lazar 2025-09-22 1217 ret = mcp47feb02_write_to_register(data->regmap, MCP47FEB02_VREF_REG_ADDR,
2e305393740054 Ariana Lazar 2025-09-22 1218 i, tmp_vref);
2e305393740054 Ariana Lazar 2025-09-22 1219 if (ret)
2e305393740054 Ariana Lazar 2025-09-22 1220 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1221
2e305393740054 Ariana Lazar 2025-09-22 1222 data->chdata[i].ref_mode = tmp_vref;
2e305393740054 Ariana Lazar 2025-09-22 1223 }
2e305393740054 Ariana Lazar 2025-09-22 1224
2e305393740054 Ariana Lazar 2025-09-22 1225 indio_dev->name = id->name;
2e305393740054 Ariana Lazar 2025-09-22 1226 if (info->have_eeprom)
2e305393740054 Ariana Lazar 2025-09-22 1227 indio_dev->info = &mcp47feb02_info;
2e305393740054 Ariana Lazar 2025-09-22 1228 else
2e305393740054 Ariana Lazar 2025-09-22 1229 indio_dev->info = &mcp47fvb02_info;
2e305393740054 Ariana Lazar 2025-09-22 1230
2e305393740054 Ariana Lazar 2025-09-22 1231 ret = devm_mutex_init(dev, &data->lock);
2e305393740054 Ariana Lazar 2025-09-22 1232 if (ret < 0)
2e305393740054 Ariana Lazar 2025-09-22 1233 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1234
2e305393740054 Ariana Lazar 2025-09-22 1235 ret = devm_regulator_get_enable_read_voltage(dev, "vdd");
2e305393740054 Ariana Lazar 2025-09-22 1236 if (ret < 0)
2e305393740054 Ariana Lazar 2025-09-22 1237 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1238
2e305393740054 Ariana Lazar 2025-09-22 1239 vdd_mv = ret / 1000;
2e305393740054 Ariana Lazar 2025-09-22 1240
2e305393740054 Ariana Lazar 2025-09-22 1241 if (data->use_vref) {
2e305393740054 Ariana Lazar 2025-09-22 1242 ret = devm_regulator_get_enable_read_voltage(dev, "vref");
2e305393740054 Ariana Lazar 2025-09-22 1243 if (ret < 0)
2e305393740054 Ariana Lazar 2025-09-22 1244 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1245
2e305393740054 Ariana Lazar 2025-09-22 1246 vref_mv = ret / 1000;
2e305393740054 Ariana Lazar 2025-09-22 1247 }
uninitialized on else path.
2e305393740054 Ariana Lazar 2025-09-22 1248
2e305393740054 Ariana Lazar 2025-09-22 1249 if (data->use_vref1) {
2e305393740054 Ariana Lazar 2025-09-22 1250 ret = devm_regulator_get_enable_read_voltage(dev, "vref1");
2e305393740054 Ariana Lazar 2025-09-22 1251 if (ret < 0)
2e305393740054 Ariana Lazar 2025-09-22 1252 return ret;
2e305393740054 Ariana Lazar 2025-09-22 1253
2e305393740054 Ariana Lazar 2025-09-22 1254 vref1_mv = ret / 1000;
2e305393740054 Ariana Lazar 2025-09-22 1255 }
vref1_mv not initialized on else path.
2e305393740054 Ariana Lazar 2025-09-22 1256
2e305393740054 Ariana Lazar 2025-09-22 1257 for_each_set_bit(i, &data->active_channels_mask, data->phys_channels) {
2e305393740054 Ariana Lazar 2025-09-22 @1258 ret = mcp47feb02_init_scales_avail(info, data, vdd_mv, vref_mv, vref1_mv);
It doesn't matter that mcp47feb02_init_scales_avail() checks data->use_vref
and data->use_vref1. It's considered a bug anyway because the function is
not marked as __always_inline. UBSan will complain at runtime as well.
2e305393740054 Ariana Lazar 2025-09-22 1259 if (ret)
2e305393740054 Ariana Lazar 2025-09-22 1260 dev_err_probe(dev, ret, "failed to init scales for ch i %d\n", i);
2e305393740054 Ariana Lazar 2025-09-22 1261 }
2e305393740054 Ariana Lazar 2025-09-22 1262
2e305393740054 Ariana Lazar 2025-09-22 1263 err = iio_device_register(indio_dev);
2e305393740054 Ariana Lazar 2025-09-22 1264
2e305393740054 Ariana Lazar 2025-09-22 1265 return err;
2e305393740054 Ariana Lazar 2025-09-22 1266 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists