[media] soc_camera: compliance fixes
- REQBUFS(0) will stop streaming, free buffers and release the file ownership. - Return ENOTTY for create_bufs for a vb1 driver - Return EBUSY if there is a different streaming owner and set the new owner on success. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
eb01b1bca9
commit
9f317de424
1 changed files with 12 additions and 6 deletions
|
@ -384,9 +384,8 @@ static int soc_camera_reqbufs(struct file *file, void *priv,
|
||||||
ret = vb2_reqbufs(&icd->vb2_vidq, p);
|
ret = vb2_reqbufs(&icd->vb2_vidq, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ret && !icd->streamer)
|
if (!ret)
|
||||||
icd->streamer = file;
|
icd->streamer = p->count ? file : NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,12 +442,19 @@ static int soc_camera_create_bufs(struct file *file, void *priv,
|
||||||
{
|
{
|
||||||
struct soc_camera_device *icd = file->private_data;
|
struct soc_camera_device *icd = file->private_data;
|
||||||
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
|
struct soc_camera_host *ici = to_soc_camera_host(icd->parent);
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* videobuf2 only */
|
/* videobuf2 only */
|
||||||
if (ici->ops->init_videobuf)
|
if (ici->ops->init_videobuf)
|
||||||
return -EINVAL;
|
return -ENOTTY;
|
||||||
else
|
|
||||||
return vb2_create_bufs(&icd->vb2_vidq, create);
|
if (icd->streamer && icd->streamer != file)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
ret = vb2_create_bufs(&icd->vb2_vidq, create);
|
||||||
|
if (!ret)
|
||||||
|
icd->streamer = file;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int soc_camera_prepare_buf(struct file *file, void *priv,
|
static int soc_camera_prepare_buf(struct file *file, void *priv,
|
||||||
|
|
Loading…
Add table
Reference in a new issue