Commit a08183b8 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

media: atomisp: Pass MEDIA_BUS_FMT_* code when calling enum_frame_size pad-op

A sensor driver's enum_frame_size pad-op may return -EINVAL when
v4l2_subdev_frame_size_enum.code is not set to a supported
MEDIA_BUS_FMT_* code.

Make atomisp_init_sensor() get the sensor's MEDIA_BUS_FMT_* code and
pass this when calling the enum_frame_size pad-op.

Link: https://lore.kernel.org/r/20230529103741.11904-17-hdegoede@redhat.com



Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 04eca831
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@
struct atomisp_input_subdev {
	unsigned int type;
	enum atomisp_camera_port port;
	u32 code; /* MEDIA_BUS_FMT_* */
	bool crop_support;
	struct v4l2_subdev *camera;
	/* Sensor rects for sensors which support crop */
+1 −0
Original line number Diff line number Diff line
@@ -707,6 +707,7 @@ static int atomisp_enum_framesizes(struct file *file, void *priv,
	struct v4l2_subdev_frame_size_enum fse = {
		.index = fsize->index,
		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
		.code = input->code,
	};
	int ret;

+6 −0
Original line number Diff line number Diff line
@@ -933,12 +933,18 @@ static int atomisp_register_entities(struct atomisp_device *isp)

static void atomisp_init_sensor(struct atomisp_input_subdev *input)
{
	struct v4l2_subdev_mbus_code_enum mbus_code_enum = { };
	struct v4l2_subdev_state sd_state = {
		.pads = &input->pad_cfg,
	};
	struct v4l2_subdev_selection sel = { };
	int err;

	mbus_code_enum.which = V4L2_SUBDEV_FORMAT_ACTIVE;
	err = v4l2_subdev_call(input->camera, pad, enum_mbus_code, NULL, &mbus_code_enum);
	if (!err)
		input->code = mbus_code_enum.code;

	sel.which = V4L2_SUBDEV_FORMAT_ACTIVE;
	sel.target = V4L2_SEL_TGT_NATIVE_SIZE;
	err = v4l2_subdev_call(input->camera, pad, get_selection, NULL, &sel);