staging: bcm2835-camera: Restore return behavior of ctrl_set_bitrate()
The commit52c4dfcead
("Staging: vc04_services: Cleanup in ctrl_set_bitrate()") changed the return behavior of ctrl_set_bitrate(). We cannot do this because of a bug in the firmware, which breaks probing of bcm2835-camera: bcm2835-v4l2: mmal_init: failed to set all camera controls: -3 Cleanup: Destroy video encoder Cleanup: Destroy image encoder Cleanup: Destroy video render Cleanup: Destroy camera bcm2835-v4l2: bcm2835_mmal_probe: mmal init failed: -3 bcm2835-camera: probe of bcm2835-camera failed with error -3 So restore the old behavior, add an explaining comment and a debug message to verify that the bug has been fixed in firmware. Fixes:52c4dfcead
("Staging: vc04_services: Cleanup in ctrl_set_bitrate()") Signed-off-by: Stefan Wahren <wahrenst@gmx.net> Cc: stable <stable@vger.kernel.org> Acked-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
3c96993b18
Коммит
f816db1dc1
|
@ -604,15 +604,28 @@ static int ctrl_set_bitrate(struct bm2835_mmal_dev *dev,
|
||||||
struct v4l2_ctrl *ctrl,
|
struct v4l2_ctrl *ctrl,
|
||||||
const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl)
|
const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct vchiq_mmal_port *encoder_out;
|
struct vchiq_mmal_port *encoder_out;
|
||||||
|
|
||||||
dev->capture.encode_bitrate = ctrl->val;
|
dev->capture.encode_bitrate = ctrl->val;
|
||||||
|
|
||||||
encoder_out = &dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->output[0];
|
encoder_out = &dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->output[0];
|
||||||
|
|
||||||
return vchiq_mmal_port_parameter_set(dev->instance, encoder_out,
|
ret = vchiq_mmal_port_parameter_set(dev->instance, encoder_out,
|
||||||
mmal_ctrl->mmal_id, &ctrl->val,
|
mmal_ctrl->mmal_id, &ctrl->val,
|
||||||
sizeof(ctrl->val));
|
sizeof(ctrl->val));
|
||||||
|
|
||||||
|
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
|
||||||
|
"%s: After: mmal_ctrl:%p ctrl id:0x%x ctrl val:%d ret %d(%d)\n",
|
||||||
|
__func__, mmal_ctrl, ctrl->id, ctrl->val, ret,
|
||||||
|
(ret == 0 ? 0 : -EINVAL));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Older firmware versions (pre July 2019) have a bug in handling
|
||||||
|
* MMAL_PARAMETER_VIDEO_BIT_RATE that result in the call
|
||||||
|
* returning -MMAL_MSG_STATUS_EINVAL. So ignore errors from this call.
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ctrl_set_bitrate_mode(struct bm2835_mmal_dev *dev,
|
static int ctrl_set_bitrate_mode(struct bm2835_mmal_dev *dev,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче