V4L/DVB (10672): sh_mobile_ceu_camera: include NV* formats into the format list only once.
Currently, if an soc-camera device, connected to the sh_mobile_ceu_camera camera host driver, supports several formats from the UYVY, VYUY, YUYV, YVYU set, the driver would add four NV* formats for each of them. This patch fixes this misbehaviour. Reported-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
c354b400c0
commit
c8329accf7
@ -586,11 +586,29 @@ static int sh_mobile_ceu_get_formats(struct soc_camera_device *icd, int idx,
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
|
||||
/* Beginning of a pass */
|
||||
if (!idx)
|
||||
icd->host_priv = NULL;
|
||||
|
||||
switch (icd->formats[idx].fourcc) {
|
||||
case V4L2_PIX_FMT_UYVY:
|
||||
case V4L2_PIX_FMT_VYUY:
|
||||
case V4L2_PIX_FMT_YUYV:
|
||||
case V4L2_PIX_FMT_YVYU:
|
||||
if (icd->host_priv)
|
||||
goto add_single_format;
|
||||
|
||||
/*
|
||||
* Our case is simple so far: for any of the above four camera
|
||||
* formats we add all our four synthesized NV* formats, so,
|
||||
* just marking the device with a single flag suffices. If
|
||||
* the format generation rules are more complex, you would have
|
||||
* to actually hang your already added / counted formats onto
|
||||
* the host_priv pointer and check whether the format you're
|
||||
* going to add now is already there.
|
||||
*/
|
||||
icd->host_priv = (void *)sh_mobile_ceu_formats;
|
||||
|
||||
n = ARRAY_SIZE(sh_mobile_ceu_formats);
|
||||
formats += n;
|
||||
for (k = 0; xlate && k < n; k++) {
|
||||
@ -603,6 +621,7 @@ static int sh_mobile_ceu_get_formats(struct soc_camera_device *icd, int idx,
|
||||
icd->formats[idx].name);
|
||||
}
|
||||
default:
|
||||
add_single_format:
|
||||
/* Generic pass-through */
|
||||
formats++;
|
||||
if (xlate) {
|
||||
|
Loading…
Reference in New Issue
Block a user