|
@@ -1077,6 +1077,7 @@ static int msi3101_start_streaming(struct vb2_queue *vq, unsigned int count)
|
|
static int msi3101_stop_streaming(struct vb2_queue *vq)
|
|
static int msi3101_stop_streaming(struct vb2_queue *vq)
|
|
{
|
|
{
|
|
struct msi3101_state *s = vb2_get_drv_priv(vq);
|
|
struct msi3101_state *s = vb2_get_drv_priv(vq);
|
|
|
|
+ int ret;
|
|
dev_dbg(&s->udev->dev, "%s:\n", __func__);
|
|
dev_dbg(&s->udev->dev, "%s:\n", __func__);
|
|
|
|
|
|
if (mutex_lock_interruptible(&s->v4l2_lock))
|
|
if (mutex_lock_interruptible(&s->v4l2_lock))
|
|
@@ -1089,17 +1090,22 @@ static int msi3101_stop_streaming(struct vb2_queue *vq)
|
|
|
|
|
|
/* according to tests, at least 700us delay is required */
|
|
/* according to tests, at least 700us delay is required */
|
|
msleep(20);
|
|
msleep(20);
|
|
- msi3101_ctrl_msg(s, CMD_STOP_STREAMING, 0);
|
|
|
|
|
|
+ ret = msi3101_ctrl_msg(s, CMD_STOP_STREAMING, 0);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto err_sleep_tuner;
|
|
|
|
|
|
/* sleep USB IF / ADC */
|
|
/* sleep USB IF / ADC */
|
|
- msi3101_ctrl_msg(s, CMD_WREG, 0x01000003);
|
|
|
|
|
|
+ ret = msi3101_ctrl_msg(s, CMD_WREG, 0x01000003);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto err_sleep_tuner;
|
|
|
|
|
|
|
|
+err_sleep_tuner:
|
|
/* sleep tuner */
|
|
/* sleep tuner */
|
|
- v4l2_subdev_call(s->v4l2_subdev, core, s_power, 0);
|
|
|
|
|
|
+ ret = v4l2_subdev_call(s->v4l2_subdev, core, s_power, 0);
|
|
|
|
|
|
mutex_unlock(&s->v4l2_lock);
|
|
mutex_unlock(&s->v4l2_lock);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static struct vb2_ops msi3101_vb2_ops = {
|
|
static struct vb2_ops msi3101_vb2_ops = {
|