Commit 9f717e90 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[media] ov772x: try_fmt must not default to the current format



If the requested format isn't supported, return a fixed default format
instead of the current format.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 69c80dc9
Loading
Loading
Loading
Loading
+7 −29
Original line number Diff line number Diff line
@@ -919,38 +919,16 @@ static int ov772x_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
static int ov772x_try_fmt(struct v4l2_subdev *sd,
			  struct v4l2_mbus_framefmt *mf)
{
	struct ov772x_priv *priv = container_of(sd, struct ov772x_priv, subdev);
	const struct ov772x_color_format *cfmt;
	const struct ov772x_win_size *win;
	int i;

	/*
	 * select suitable win
	 */
	win = ov772x_select_win(mf->width, mf->height);
	ov772x_select_params(mf, &cfmt, &win);

	mf->code = cfmt->code;
	mf->width = win->width;
	mf->height = win->height;
	mf->field = V4L2_FIELD_NONE;

	for (i = 0; i < ARRAY_SIZE(ov772x_cfmts); i++)
		if (mf->code == ov772x_cfmts[i].code)
			break;

	if (i == ARRAY_SIZE(ov772x_cfmts)) {
		/* Unsupported format requested. Propose either */
		if (priv->cfmt) {
			/* the current one or */
			mf->colorspace = priv->cfmt->colorspace;
			mf->code = priv->cfmt->code;
		} else {
			/* the default one */
			mf->colorspace = ov772x_cfmts[0].colorspace;
			mf->code = ov772x_cfmts[0].code;
		}
	} else {
		/* Also return the colorspace */
		mf->colorspace	= ov772x_cfmts[i].colorspace;
	}
	mf->colorspace = cfmt->colorspace;

	return 0;
}