[bug report] backlight: mp3309c: Add support for MPS MP3309C

Flavio Suligoi f.suligoi at asem.it
Wed Nov 29 11:12:29 UTC 2023


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 at asem.it>
> Sent: Tuesday, November 28, 2023 9:24 AM
> To: Dan Carpenter <dan.carpenter at linaro.org>
> Cc: dri-devel at lists.freedesktop.org
> 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 at linaro.org>
> > Sent: Tuesday, November 28, 2023 8:20 AM
> > To: Flavio Suligoi <f.suligoi at asem.it>
> > Cc: dri-devel at lists.freedesktop.org
> > 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


More information about the dri-devel mailing list