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

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
...@@ -65,10 +65,10 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin, ...@@ -65,10 +65,10 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin,
vin->digital->sink_pad = ret < 0 ? 0 : ret; vin->digital->sink_pad = ret < 0 ? 0 : ret;
/* Find compatible subdevices mbus format */ /* Find compatible subdevices mbus format */
vin->digital->code = 0; vin->mbus_code = 0;
code.index = 0; code.index = 0;
code.pad = vin->digital->source_pad; code.pad = vin->digital->source_pad;
while (!vin->digital->code && while (!vin->mbus_code &&
!v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) { !v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) {
code.index++; code.index++;
switch (code.code) { switch (code.code) {
...@@ -76,16 +76,16 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin, ...@@ -76,16 +76,16 @@ static int rvin_digital_subdevice_attach(struct rvin_dev *vin,
case MEDIA_BUS_FMT_UYVY8_2X8: case MEDIA_BUS_FMT_UYVY8_2X8:
case MEDIA_BUS_FMT_UYVY10_2X10: case MEDIA_BUS_FMT_UYVY10_2X10:
case MEDIA_BUS_FMT_RGB888_1X24: 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", vin_dbg(vin, "Found media bus format for %s: %d\n",
subdev->name, vin->digital->code); subdev->name, vin->mbus_code);
break; break;
default: default:
break; break;
} }
} }
if (!vin->digital->code) { if (!vin->mbus_code) {
vin_err(vin, "Unsupported media bus format for %s\n", vin_err(vin, "Unsupported media bus format for %s\n",
subdev->name); subdev->name);
return -EINVAL; return -EINVAL;
...@@ -196,16 +196,16 @@ static int rvin_digital_parse_v4l2(struct device *dev, ...@@ -196,16 +196,16 @@ static int rvin_digital_parse_v4l2(struct device *dev,
if (vep->base.port || vep->base.id) if (vep->base.port || vep->base.id)
return -ENOTCONN; 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: case V4L2_MBUS_PARALLEL:
vin_dbg(vin, "Found PARALLEL media bus\n"); 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; break;
case V4L2_MBUS_BT656: case V4L2_MBUS_BT656:
vin_dbg(vin, "Found BT656 media bus\n"); vin_dbg(vin, "Found BT656 media bus\n");
rvge->mbus_cfg.flags = 0; vin->mbus_cfg.flags = 0;
break; break;
default: default:
vin_err(vin, "Unknown media bus type\n"); vin_err(vin, "Unknown media bus type\n");
......
...@@ -626,7 +626,7 @@ static int rvin_setup(struct rvin_dev *vin) ...@@ -626,7 +626,7 @@ static int rvin_setup(struct rvin_dev *vin)
/* /*
* Input interface * Input interface
*/ */
switch (vin->digital->code) { switch (vin->mbus_code) {
case MEDIA_BUS_FMT_YUYV8_1X16: case MEDIA_BUS_FMT_YUYV8_1X16:
/* BT.601/BT.1358 16bit YCbCr422 */ /* BT.601/BT.1358 16bit YCbCr422 */
vnmc |= VNMC_INF_YUV16; vnmc |= VNMC_INF_YUV16;
...@@ -634,7 +634,7 @@ static int rvin_setup(struct rvin_dev *vin) ...@@ -634,7 +634,7 @@ static int rvin_setup(struct rvin_dev *vin)
break; break;
case MEDIA_BUS_FMT_UYVY8_2X8: case MEDIA_BUS_FMT_UYVY8_2X8:
/* BT.656 8bit YCbCr422 or BT.601 8bit YCbCr422 */ /* 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; VNMC_INF_YUV8_BT656 : VNMC_INF_YUV8_BT601;
input_is_yuv = true; input_is_yuv = true;
break; break;
...@@ -643,7 +643,7 @@ static int rvin_setup(struct rvin_dev *vin) ...@@ -643,7 +643,7 @@ static int rvin_setup(struct rvin_dev *vin)
break; break;
case MEDIA_BUS_FMT_UYVY10_2X10: case MEDIA_BUS_FMT_UYVY10_2X10:
/* BT.656 10bit YCbCr422 or BT.601 10bit YCbCr422 */ /* 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; VNMC_INF_YUV10_BT656 : VNMC_INF_YUV10_BT601;
input_is_yuv = true; input_is_yuv = true;
break; break;
...@@ -655,11 +655,11 @@ static int rvin_setup(struct rvin_dev *vin) ...@@ -655,11 +655,11 @@ static int rvin_setup(struct rvin_dev *vin)
dmr2 = VNDMR2_FTEV | VNDMR2_VLV(1); dmr2 = VNDMR2_FTEV | VNDMR2_VLV(1);
/* Hsync Signal Polarity Select */ /* 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; dmr2 |= VNDMR2_HPS;
/* Vsync Signal Polarity Select */ /* 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; dmr2 |= VNDMR2_VPS;
/* /*
......
...@@ -186,7 +186,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which, ...@@ -186,7 +186,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
pix->pixelformat == V4L2_PIX_FMT_XBGR32)) pix->pixelformat == V4L2_PIX_FMT_XBGR32))
pix->pixelformat = RVIN_DEFAULT_FORMAT; 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 */ /* Allow the video device to override field and to scale */
field = pix->field; field = pix->field;
......
...@@ -60,8 +60,6 @@ struct rvin_video_format { ...@@ -60,8 +60,6 @@ struct rvin_video_format {
* struct rvin_graph_entity - Video endpoint from async framework * struct rvin_graph_entity - Video endpoint from async framework
* @asd: sub-device descriptor for async framework * @asd: sub-device descriptor for async framework
* @subdev: subdevice matched using 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 * @source_pad: source pad of remote subdevice
* @sink_pad: sink pad of remote subdevice * @sink_pad: sink pad of remote subdevice
*/ */
...@@ -69,9 +67,6 @@ struct rvin_graph_entity { ...@@ -69,9 +67,6 @@ struct rvin_graph_entity {
struct v4l2_async_subdev asd; struct v4l2_async_subdev asd;
struct v4l2_subdev *subdev; struct v4l2_subdev *subdev;
u32 code;
struct v4l2_mbus_config mbus_cfg;
unsigned int source_pad; unsigned int source_pad;
unsigned int sink_pad; unsigned int sink_pad;
}; };
...@@ -113,6 +108,8 @@ struct rvin_info { ...@@ -113,6 +108,8 @@ struct rvin_info {
* @sequence: V4L2 buffers sequence number * @sequence: V4L2 buffers sequence number
* @state: keeps track of operation state * @state: keeps track of operation state
* *
* @mbus_cfg: media bus configuration from DT
* @mbus_code: media bus format code
* @format: active V4L2 pixel format * @format: active V4L2 pixel format
* *
* @crop: active cropping * @crop: active cropping
...@@ -142,6 +139,8 @@ struct rvin_dev { ...@@ -142,6 +139,8 @@ struct rvin_dev {
unsigned int sequence; unsigned int sequence;
enum rvin_dma_state state; enum rvin_dma_state state;
struct v4l2_mbus_config mbus_cfg;
u32 mbus_code;
struct v4l2_pix_format format; struct v4l2_pix_format format;
struct v4l2_rect crop; struct v4l2_rect crop;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment