Hello Alan Cox,
The patch a49d25364dfb: "staging/atomisp: Add support for the Intel
IPU v2" from Feb 17, 2017, leads to the following static checker
warning:
drivers/staging/media/atomisp/i2c/imx/imx.c:498 imx_set_exposure_gain()
warn: inconsistent returns 'mutex:&dev->input_lock'.
drivers/staging/media/atomisp/i2c/imx/imx.c
438 static int imx_set_exposure_gain(struct v4l2_subdev *sd, u16 coarse_itg,
439 u16 gain, u16 digitgain)
440 {
441 struct imx_device *dev = to_imx_sensor(sd);
442 struct i2c_client *client = v4l2_get_subdevdata(sd);
443 int lanes = imx_get_lanes(sd);
444 unsigned int digitgain_scaled;
445 int ret = 0;
446
447 /* Validate exposure: cannot exceed VTS-4 where VTS is 16bit */
448 coarse_itg = clamp_t(u16, coarse_itg, 0,
IMX_MAX_EXPOSURE_SUPPORTED);
449
450 /* Validate gain: must not exceed maximum 8bit value */
451 gain = clamp_t(u16, gain, 0, IMX_MAX_GLOBAL_GAIN_SUPPORTED);
452
453 mutex_lock(&dev->input_lock);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
454
455 if (dev->sensor_id == IMX227_ID) {
456 ret = imx_write_reg_array(client, imx_param_hold);
457 if (ret)
458 return ret;
^^^^^^^^^^
We're returning directly with the lock held. We should either unlock
before returning or do a goto out but I'm not sure which.
459 }
460
461 /* For imx175, setting gain must be delayed by one */
462 if ((dev->sensor_id == IMX175_ID) && dev->digital_gain)
463 digitgain_scaled = dev->digital_gain;
464 else
465 digitgain_scaled = digitgain;
466 /* imx132 with two lanes needs more gain to saturate at max */
467 if (dev->sensor_id == IMX132_ID && lanes > 1) {
468 digitgain_scaled *= IMX132_2LANES_GAINFACT;
469 digitgain_scaled >>= IMX132_2LANES_GAINFACT_SHIFT;
470 }
471 /* Validate digital gain: must not exceed 12 bit value*/
472 digitgain_scaled = clamp_t(unsigned int, digitgain_scaled,
473 0, IMX_MAX_DIGITAL_GAIN_SUPPORTED);
474
475 ret = __imx_update_exposure_timing(client, coarse_itg,
476 dev->pixels_per_line, dev->lines_per_frame);
477 if (ret)
478 goto out;
479 dev->coarse_itg = coarse_itg;
480
481 if (dev->sensor_id == IMX175_ID)
482 ret = __imx_update_gain(sd, dev->gain);
483 else
484 ret = __imx_update_gain(sd, gain);
485 if (ret)
486 goto out;
487 dev->gain = gain;
488
489 ret = __imx_update_digital_gain(client, digitgain_scaled);
490 if (ret)
491 goto out;
492 dev->digital_gain = digitgain;
493
494 out:
495 if (dev->sensor_id == IMX227_ID)
496 ret = imx_write_reg_array(client, imx_param_update);
497 mutex_unlock(&dev->input_lock);
498 return ret;
499 }
regards,
dan carpenter
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel