mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-24 14:54:49 +08:00
media: stm32: dcmi: Fix subdev op call with uninitialized state
stm32-dcmi calls its source subdev with v4l2_subdev_call() using a v4l2_subdev_state constructed on stack. This means that init_cfg is never called for that state, and a source subdev that depends on the init_cfg call may break. A new macro has been added for this particular purpose, which properly initializes the state, so let's use v4l2_subdev_call_state_try() here. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Tested-by: Marek Vasut <marex@denx.de> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
982c048718
commit
f076057f01
@ -998,10 +998,6 @@ static int dcmi_try_fmt(struct stm32_dcmi *dcmi, struct v4l2_format *f,
|
||||
const struct dcmi_format *sd_fmt;
|
||||
struct dcmi_framesize sd_fsize;
|
||||
struct v4l2_pix_format *pix = &f->fmt.pix;
|
||||
struct v4l2_subdev_pad_config pad_cfg;
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
@ -1036,8 +1032,7 @@ static int dcmi_try_fmt(struct stm32_dcmi *dcmi, struct v4l2_format *f,
|
||||
}
|
||||
|
||||
v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
|
||||
ret = v4l2_subdev_call(dcmi->source, pad, set_fmt,
|
||||
&pad_state, &format);
|
||||
ret = v4l2_subdev_call_state_try(dcmi->source, pad, set_fmt, &format);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -1186,10 +1181,6 @@ static int dcmi_set_sensor_format(struct stm32_dcmi *dcmi,
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
struct v4l2_subdev_pad_config pad_cfg;
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
int ret;
|
||||
|
||||
sd_fmt = find_format_by_fourcc(dcmi, pix->pixelformat);
|
||||
@ -1202,8 +1193,7 @@ static int dcmi_set_sensor_format(struct stm32_dcmi *dcmi,
|
||||
}
|
||||
|
||||
v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
|
||||
ret = v4l2_subdev_call(dcmi->source, pad, set_fmt,
|
||||
&pad_state, &format);
|
||||
ret = v4l2_subdev_call_state_try(dcmi->source, pad, set_fmt, &format);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user