Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c65c99b4 authored by Niklas Söderlund's avatar Niklas Söderlund Committed by Mauro Carvalho Chehab
Browse files

media: rcar-vin: move media bus configuration to struct rvin_dev



Bus configuration will once the driver is extended to support Gen3
contain information not specific to only the directly connected parallel
subdevice. Move it to struct rvin_dev to show it's not always coupled
to the parallel subdevice.

Signed-off-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 4f554bde
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -65,10 +65,10 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin,
	vin->digital->sink_pad = ret < 0 ? 0 : ret;

	/* Find compatible subdevices mbus format */
	vin->digital->code = 0;
	vin->mbus_code = 0;
	code.index = 0;
	code.pad = vin->digital->source_pad;
	while (!vin->digital->code &&
	while (!vin->mbus_code &&
	       !v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) {
		code.index++;
		switch (code.code) {
@@ -76,16 +76,16 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin,
		case MEDIA_BUS_FMT_UYVY8_2X8:
		case MEDIA_BUS_FMT_UYVY10_2X10:
		case MEDIA_BUS_FMT_RGB888_1X24:
			vin->digital->code = code.code;
			vin->mbus_code = code.code;
			vin_dbg(vin, "Found media bus format for %s: %d\n",
				subdev->name, vin->digital->code);
				subdev->name, vin->mbus_code);
			break;
		default:
			break;
		}
	}

	if (!vin->digital->code) {
	if (!vin->mbus_code) {
		vin_err(vin, "Unsupported media bus format for %s\n",
			subdev->name);
		return -EINVAL;
@@ -196,16 +196,16 @@ static int rvin_digital_parse_v4l2(struct device *dev,
	if (vep->base.port || vep->base.id)
		return -ENOTCONN;

	rvge->mbus_cfg.type = vep->bus_type;
	vin->mbus_cfg.type = vep->bus_type;

	switch (rvge->mbus_cfg.type) {
	switch (vin->mbus_cfg.type) {
	case V4L2_MBUS_PARALLEL:
		vin_dbg(vin, "Found PARALLEL media bus\n");
		rvge->mbus_cfg.flags = vep->bus.parallel.flags;
		vin->mbus_cfg.flags = vep->bus.parallel.flags;
		break;
	case V4L2_MBUS_BT656:
		vin_dbg(vin, "Found BT656 media bus\n");
		rvge->mbus_cfg.flags = 0;
		vin->mbus_cfg.flags = 0;
		break;
	default:
		vin_err(vin, "Unknown media bus type\n");
+5 −5
Original line number Diff line number Diff line
@@ -626,7 +626,7 @@ static int rvin_setup(struct rvin_dev *vin)
	/*
	 * Input interface
	 */
	switch (vin->digital->code) {
	switch (vin->mbus_code) {
	case MEDIA_BUS_FMT_YUYV8_1X16:
		/* BT.601/BT.1358 16bit YCbCr422 */
		vnmc |= VNMC_INF_YUV16;
@@ -634,7 +634,7 @@ static int rvin_setup(struct rvin_dev *vin)
		break;
	case MEDIA_BUS_FMT_UYVY8_2X8:
		/* BT.656 8bit YCbCr422 or BT.601 8bit YCbCr422 */
		vnmc |= vin->digital->mbus_cfg.type == V4L2_MBUS_BT656 ?
		vnmc |= vin->mbus_cfg.type == V4L2_MBUS_BT656 ?
			VNMC_INF_YUV8_BT656 : VNMC_INF_YUV8_BT601;
		input_is_yuv = true;
		break;
@@ -643,7 +643,7 @@ static int rvin_setup(struct rvin_dev *vin)
		break;
	case MEDIA_BUS_FMT_UYVY10_2X10:
		/* BT.656 10bit YCbCr422 or BT.601 10bit YCbCr422 */
		vnmc |= vin->digital->mbus_cfg.type == V4L2_MBUS_BT656 ?
		vnmc |= vin->mbus_cfg.type == V4L2_MBUS_BT656 ?
			VNMC_INF_YUV10_BT656 : VNMC_INF_YUV10_BT601;
		input_is_yuv = true;
		break;
@@ -655,11 +655,11 @@ static int rvin_setup(struct rvin_dev *vin)
	dmr2 = VNDMR2_FTEV | VNDMR2_VLV(1);

	/* Hsync Signal Polarity Select */
	if (!(vin->digital->mbus_cfg.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
	if (!(vin->mbus_cfg.flags & V4L2_MBUS_HSYNC_ACTIVE_LOW))
		dmr2 |= VNDMR2_HPS;

	/* Vsync Signal Polarity Select */
	if (!(vin->digital->mbus_cfg.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
	if (!(vin->mbus_cfg.flags & V4L2_MBUS_VSYNC_ACTIVE_LOW))
		dmr2 |= VNDMR2_VPS;

	/*
+1 −1
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
	     pix->pixelformat == V4L2_PIX_FMT_XBGR32))
		pix->pixelformat = RVIN_DEFAULT_FORMAT;

	v4l2_fill_mbus_format(&format.format, pix, vin->digital->code);
	v4l2_fill_mbus_format(&format.format, pix, vin->mbus_code);

	/* Allow the video device to override field and to scale */
	field = pix->field;
+4 −5
Original line number Diff line number Diff line
@@ -60,8 +60,6 @@ struct rvin_video_format {
 * struct rvin_graph_entity - Video endpoint from async framework
 * @asd:	sub-device descriptor for async framework
 * @subdev:	subdevice matched using async framework
 * @code:	Media bus format from source
 * @mbus_cfg:	Media bus format from DT
 * @source_pad:	source pad of remote subdevice
 * @sink_pad:	sink pad of remote subdevice
 */
@@ -69,9 +67,6 @@ struct rvin_graph_entity {
	struct v4l2_async_subdev asd;
	struct v4l2_subdev *subdev;

	u32 code;
	struct v4l2_mbus_config mbus_cfg;

	unsigned int source_pad;
	unsigned int sink_pad;
};
@@ -113,6 +108,8 @@ struct rvin_info {
 * @sequence:		V4L2 buffers sequence number
 * @state:		keeps track of operation state
 *
 * @mbus_cfg:		media bus configuration from DT
 * @mbus_code:		media bus format code
 * @format:		active V4L2 pixel format
 *
 * @crop:		active cropping
@@ -142,6 +139,8 @@ struct rvin_dev {
	unsigned int sequence;
	enum rvin_dma_state state;

	struct v4l2_mbus_config mbus_cfg;
	u32 mbus_code;
	struct v4l2_pix_format format;

	struct v4l2_rect crop;