Hi Dan, Can I add the "Reported-by" tag, with your name, in my 2nd vers of the commit to fix this bug? Thanks and regards, Flavio > -----Original Message----- > From: Flavio Suligoi <f.suligoi@xxxxxxx> > Sent: Tuesday, November 28, 2023 9:24 AM > To: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > Subject: RE: [bug report] backlight: mp3309c: Add support for MPS > MP3309C > > Hi Dan, > > Thanks for the report, I'll fix the bug as soon as possible. > > Regards, > Flavio > > > -----Original Message----- > > From: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > > Sent: Tuesday, November 28, 2023 8:20 AM > > To: Flavio Suligoi <f.suligoi@xxxxxxx> > > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > > Subject: [bug report] backlight: mp3309c: Add support for MPS MP3309C > > > > Hello Flavio Suligoi, > > > > The patch 2e914516a58c: "backlight: mp3309c: Add support for MPS > > MP3309C" from Nov 16, 2023 (linux-next), leads to the following > > Smatch static checker warning: > > > > drivers/video/backlight/mp3309c.c:277 pm3309c_parse_dt_node() > > error: uninitialized symbol 'prop_levels'. > > > > drivers/video/backlight/mp3309c.c > > 202 static int pm3309c_parse_dt_node(struct mp3309c_chip *chip, > > 203 struct mp3309c_platform_data > > *pdata) > > 204 { > > 205 struct device_node *node = chip->dev->of_node; > > 206 struct property *prop_pwms, *prop_levels; > > 207 int length = 0; > > 208 int ret, i; > > 209 unsigned int num_levels, tmp_value; > > 210 > > 211 if (!node) { > > 212 dev_err(chip->dev, "failed to get DT node\n"); > > 213 return -ENODEV; > > 214 } > > 215 > > 216 /* > > 217 * Dimming mode: the MP3309C provides two dimming > > control mode: > > 218 * > > 219 * - PWM mode > > 220 * - Analog by I2C control mode (default) > > 221 * > > 222 * I2C control mode is assumed as default but, if the > > pwms property is > > 223 * found in the backlight node, the mode switches to > PWM > > mode. > > 224 */ > > 225 pdata->dimming_mode = DIMMING_ANALOG_I2C; > > 226 prop_pwms = of_find_property(node, "pwms", &length); > > 227 if (prop_pwms) { > > 228 chip->pwmd = devm_pwm_get(chip->dev, NULL); > > 229 if (IS_ERR(chip->pwmd)) > > 230 return dev_err_probe(chip->dev, > > PTR_ERR(chip->pwmd), > > 231 "error getting > pwm > > data\n"); > > 232 pdata->dimming_mode = DIMMING_PWM; > > 233 pwm_apply_args(chip->pwmd); > > 234 } > > 235 > > 236 /* > > 237 * In I2C control mode the dimming levels (0..31) are > > fixed by the > > 238 * hardware, while in PWM control mode they can be > > chosen by the user, > > 239 * to allow nonlinear mappings. > > 240 */ > > 241 if (pdata->dimming_mode == DIMMING_ANALOG_I2C) { > > 242 /* > > 243 * Analog (by I2C commands) control mode: > fixed > > 0..31 brightness > > 244 * levels > > 245 */ > > 246 num_levels = ANALOG_I2C_NUM_LEVELS; > > 247 > > 248 /* Enable GPIO used in I2C dimming mode only > */ > > 249 chip->enable_gpio = devm_gpiod_get(chip->dev, > > "enable", > > 250 > > GPIOD_OUT_HIGH); > > 251 if (IS_ERR(chip->enable_gpio)) > > 252 return dev_err_probe(chip->dev, > > 253 PTR_ERR(chip- > > >enable_gpio), > > 254 "error getting > > enable gpio\n"); > > > > prop_levels not initialized on this path. > > > > 255 } else { > > 256 /* > > 257 * PWM control mode: check for brightness > level > > in DT > > 258 */ > > 259 prop_levels = of_find_property(node, > > "brightness-levels", > > 260 &length); > > 261 if (prop_levels) { > > 262 /* Read brightness levels from DT */ > > 263 num_levels = length / sizeof(u32); > > 264 if (num_levels < 2) > > 265 return -EINVAL; > > 266 } else { > > 267 /* Use default brightness levels */ > > 268 num_levels = > > MP3309C_PWM_DEFAULT_NUM_LEVELS; > > 269 } > > 270 } > > 271 > > 272 /* Fill brightness levels array */ > > 273 pdata->levels = devm_kcalloc(chip->dev, num_levels, > > 274 sizeof(*pdata->levels), > > GFP_KERNEL); > > 275 if (!pdata->levels) > > 276 return -ENOMEM; > > --> 277 if (prop_levels) { > > ^^^^^^^^^^^ > > Uninitialized > > > > 278 ret = of_property_read_u32_array(node, > > "brightness-levels", > > 279 pdata- > >levels, > > 280 num_levels); > > 281 if (ret < 0) > > 282 return ret; > > 283 } else { > > 284 for (i = 0; i < num_levels; i++) > > 285 pdata->levels[i] = i; > > 286 } > > 287 > > 288 pdata->max_brightness = num_levels - 1; > > 289 > > 290 ret = of_property_read_u32(node, "default-brightness", > > 291 &pdata- > >default_brightness); > > 292 if (ret) > > 293 pdata->default_brightness = pdata- > > >max_brightness; > > 294 if (pdata->default_brightness > pdata->max_brightness) > { > > 295 dev_err(chip->dev, > > 296 "default brightness exceeds max > > brightness\n"); > > 297 pdata->default_brightness = pdata- > > >max_brightness; > > 298 } > > 299 > > 300 /* > > > > regards, > > dan carpenter