Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1303557 > unrolled thread
| Started by | Javier Martinez Canillas <javier@osg.samsung.com> |
|---|---|
| First post | 2016-01-07 13:50 +0100 |
| Last post | 2016-01-07 14:00 +0100 |
| Articles | 4 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v2 00/10] [media] tvp5150: add MC and DT support Javier Martinez Canillas <javier@osg.samsung.com> - 2016-01-07 13:50 +0100
[PATCH v2 05/10] [media] tvp5150: Add s_stream subdev operation support Javier Martinez Canillas <javier@osg.samsung.com> - 2016-01-07 14:00 +0100
[PATCH v2 08/10] [media] tvp5150: Add OF match table Javier Martinez Canillas <javier@osg.samsung.com> - 2016-01-07 14:00 +0100
[PATCH v2 03/10] [media] tvp5150: Add pad-level subdev operations Javier Martinez Canillas <javier@osg.samsung.com> - 2016-01-07 14:00 +0100
| From | Javier Martinez Canillas <javier@osg.samsung.com> |
|---|---|
| Date | 2016-01-07 13:50 +0100 |
| Subject | [PATCH v2 00/10] [media] tvp5150: add MC and DT support |
| Message-ID | <qOiaR-8bd-3@gated-at.bofh.it> |
Hello, One of my testing platforms for the MC next gen [0] work has been an OMAP3 board (IGEPv2) with a tvp5151 video decoder attached to the OMAP3ISP block. I've been using some patches from Laurent Pinchart that adds MC support to the tvp5150 driver. The patches were never posted to the list and it seems he doesn't have time to continue working on this so I have taken them from his personal tree [1] and submitting now for review. The series also contains patches that adds DT support to the driver so it can be used in DT based platforms. This is the second version of the series that fixes issues addressed by Rob Herring and Laurent Pinchart. The first patch-set version was [2]. To test, the following media pipeline was used: $ media-ctl -r -l '"tvp5150 1-005c":0->"OMAP3 ISP CCDC":0[1], "OMAP3 ISP CCDC":1->"OMAP3 ISP CCDC output":0[1]' $ media-ctl -v --set-format '"OMAP3 ISP CCDC":0 [UYVY2X8 720x240 field:alternate]' $ media-ctl -v --set-format '"OMAP3 ISP CCDC":1 [UYVY2X8 720x240 field:interlaced-tb]' And frames captured with the yavta tool: $ yavta -f UYVY -s 720x480 -n 1 --field interlaced-tb --capture=1 -F /dev/video2 $ raw2rgbpnm -f UYVY -s 720x480 frame-000000.bin frame-000000.pnm The patches are on top of [0] not because is a depedency but just to avoid merge conflicts and I don't expect them to be picked before that anyways. Best regards, Javier [0]: http://lists.infradead.org/pipermail/linux-arm-kernel/2015-August/367109.html [1]: http://git.linuxtv.org/pinchartl/media.git/log/?h=omap3isp/tvp5151 [2]: https://lkml.org/lkml/2016/1/4/216 Changes in v2: - Fix indentation of the DTS example. Suggested by Rob Herring. - Rename powerdown-gpios to pdn-gpios to match the pin name in the datasheet. Suggested by Laurent Pinchart. - Add optional properties for the video endpoint and list the supported values. Suggested by Laurent Pinchart. - Add Reviewed-by tag from Laurent Pinchart to patch 8/10. - Include missing linux/gpio/consumer.h header. Reported by kbuild test robot. - Keep the headers sorted alphabetically. Suggested by Laurent Pinchart. - Rename powerdown to pdn to match datasheet pin. Suggested by Laurent Pinchart. - Embed mbus_type into struct tvp5150. Suggested by Laurent Pinchart. - Remove platform data support. Suggested by Laurent Pinchart. - Check if the hsync, vsync and field even active properties are correct. Suggested by Laurent Pinchart. Eduard Gavin (1): [media] tvp5150: Add OF match table Javier Martinez Canillas (3): [media] tvp5150: Add device tree binding document [media] tvp5150: Initialize the chip on probe [media] tvp5150: Configure data interface via DT Laurent Pinchart (6): [media] tvp5150: Restructure version detection [media] tvp5150: Add tvp5151 support [media] tvp5150: Add pad-level subdev operations [media] tvp5150: Add pixel rate control support [media] tvp5150: Add s_stream subdev operation support [media] tvp5150: Add g_mbus_config subdev operation support .../devicetree/bindings/media/i2c/tvp5150.txt | 45 ++++ drivers/media/i2c/tvp5150.c | 269 +++++++++++++++++---- 2 files changed, 268 insertions(+), 46 deletions(-) create mode 100644 Documentation/devicetree/bindings/media/i2c/tvp5150.txt -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Javier Martinez Canillas <javier@osg.samsung.com> |
|---|---|
| Date | 2016-01-07 14:00 +0100 |
| Subject | [PATCH v2 05/10] [media] tvp5150: Add s_stream subdev operation support |
| Message-ID | <qOiky-8ew-1@gated-at.bofh.it> |
| In reply to | #1303557 |
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This patch adds the .s_stream subdev operation to the driver.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---
Changes in v2: None
drivers/media/i2c/tvp5150.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index 71473cec236a..fb7a4ddff1fe 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -973,6 +973,21 @@ static int tvp5150_enum_frame_size(struct v4l2_subdev *sd,
I2C Command
****************************************************************************/
+static int tvp5150_s_stream(struct v4l2_subdev *sd, int enable)
+{
+ /* Initializes TVP5150 to its default values */
+ /* # set PCLK (27MHz) */
+ tvp5150_write(sd, TVP5150_CONF_SHARED_PIN, 0x00);
+
+ /* Output format: 8-bit ITU-R BT.656 with embedded syncs */
+ if (enable)
+ tvp5150_write(sd, TVP5150_MISC_CTL, 0x09);
+ else
+ tvp5150_write(sd, TVP5150_MISC_CTL, 0x00);
+
+ return 0;
+}
+
static int tvp5150_s_routing(struct v4l2_subdev *sd,
u32 input, u32 output, u32 config)
{
@@ -1094,6 +1109,7 @@ static const struct v4l2_subdev_tuner_ops tvp5150_tuner_ops = {
static const struct v4l2_subdev_video_ops tvp5150_video_ops = {
.s_std = tvp5150_s_std,
+ .s_stream = tvp5150_s_stream,
.s_routing = tvp5150_s_routing,
.s_crop = tvp5150_s_crop,
.g_crop = tvp5150_g_crop,
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Javier Martinez Canillas <javier@osg.samsung.com> |
|---|---|
| Date | 2016-01-07 14:00 +0100 |
| Subject | [PATCH v2 08/10] [media] tvp5150: Add OF match table |
| Message-ID | <qOiky-8ew-11@gated-at.bofh.it> |
| In reply to | #1303557 |
From: Eduard Gavin <egavinc@gmail.com>
The Documentation/devicetree/bindings/media/i2c/tvp5150.txt DT binding doc
lists "ti,tvp5150" as the device compatible string but the driver does not
have an OF match table. Add the table to the driver so the I2C core can do
an OF style match.
Signed-off-by: Eduard Gavin <egavinc@gmail.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes in v2:
- Add Reviewed-by tag from Laurent Pinchart to patch 8/10.
drivers/media/i2c/tvp5150.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index 105bd1c6b17f..caac96a577f8 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -1295,8 +1295,17 @@ static const struct i2c_device_id tvp5150_id[] = {
};
MODULE_DEVICE_TABLE(i2c, tvp5150_id);
+#if IS_ENABLED(CONFIG_OF)
+static const struct of_device_id tvp5150_of_match[] = {
+ { .compatible = "ti,tvp5150", },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(of, tvp5150_of_match);
+#endif
+
static struct i2c_driver tvp5150_driver = {
.driver = {
+ .of_match_table = of_match_ptr(tvp5150_of_match),
.name = "tvp5150",
},
.probe = tvp5150_probe,
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Javier Martinez Canillas <javier@osg.samsung.com> |
|---|---|
| Date | 2016-01-07 14:00 +0100 |
| Subject | [PATCH v2 03/10] [media] tvp5150: Add pad-level subdev operations |
| Message-ID | <qOikz-8ew-21@gated-at.bofh.it> |
| In reply to | #1303557 |
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This patch enables the tvp5150 decoder driver to be used with the media
controller framework by adding pad-level subdev operations and init the
media entity pad.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
---
Changes in v2: None
drivers/media/i2c/tvp5150.c | 60 +++++++++++++++++++++++++++++++++------------
1 file changed, 45 insertions(+), 15 deletions(-)
diff --git a/drivers/media/i2c/tvp5150.c b/drivers/media/i2c/tvp5150.c
index b3b34e24db13..82fba9d46f30 100644
--- a/drivers/media/i2c/tvp5150.c
+++ b/drivers/media/i2c/tvp5150.c
@@ -35,6 +35,7 @@ MODULE_PARM_DESC(debug, "Debug level (0-2)");
struct tvp5150 {
struct v4l2_subdev sd;
+ struct media_pad pad;
struct v4l2_ctrl_handler hdl;
struct v4l2_rect rect;
@@ -818,17 +819,6 @@ static v4l2_std_id tvp5150_read_std(struct v4l2_subdev *sd)
}
}
-static int tvp5150_enum_mbus_code(struct v4l2_subdev *sd,
- struct v4l2_subdev_pad_config *cfg,
- struct v4l2_subdev_mbus_code_enum *code)
-{
- if (code->pad || code->index)
- return -EINVAL;
-
- code->code = MEDIA_BUS_FMT_UYVY8_2X8;
- return 0;
-}
-
static int tvp5150_fill_fmt(struct v4l2_subdev *sd,
struct v4l2_subdev_pad_config *cfg,
struct v4l2_subdev_format *format)
@@ -841,13 +831,11 @@ static int tvp5150_fill_fmt(struct v4l2_subdev *sd,
f = &format->format;
- tvp5150_reset(sd, 0);
-
f->width = decoder->rect.width;
- f->height = decoder->rect.height;
+ f->height = decoder->rect.height / 2;
f->code = MEDIA_BUS_FMT_UYVY8_2X8;
- f->field = V4L2_FIELD_SEQ_TB;
+ f->field = V4L2_FIELD_ALTERNATE;
f->colorspace = V4L2_COLORSPACE_SMPTE170M;
v4l2_dbg(1, debug, sd, "width = %d, height = %d\n", f->width,
@@ -948,6 +936,39 @@ static int tvp5150_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a)
return 0;
}
+ /****************************************************************************
+ V4L2 subdev pad ops
+ ****************************************************************************/
+
+static int tvp5150_enum_mbus_code(struct v4l2_subdev *sd,
+ struct v4l2_subdev_pad_config *cfg,
+ struct v4l2_subdev_mbus_code_enum *code)
+{
+ if (code->index)
+ return -EINVAL;
+
+ code->code = MEDIA_BUS_FMT_UYVY8_2X8;
+ return 0;
+}
+
+static int tvp5150_enum_frame_size(struct v4l2_subdev *sd,
+ struct v4l2_subdev_pad_config *cfg,
+ struct v4l2_subdev_frame_size_enum *fse)
+{
+ struct tvp5150 *decoder = to_tvp5150(sd);
+
+ if (fse->index >= 8 || fse->code != MEDIA_BUS_FMT_UYVY8_2X8)
+ return -EINVAL;
+
+ fse->code = MEDIA_BUS_FMT_UYVY8_2X8;
+ fse->min_width = decoder->rect.width;
+ fse->max_width = decoder->rect.width;
+ fse->min_height = decoder->rect.height / 2;
+ fse->max_height = decoder->rect.height / 2;
+
+ return 0;
+}
+
/****************************************************************************
I2C Command
****************************************************************************/
@@ -1088,6 +1109,7 @@ static const struct v4l2_subdev_vbi_ops tvp5150_vbi_ops = {
static const struct v4l2_subdev_pad_ops tvp5150_pad_ops = {
.enum_mbus_code = tvp5150_enum_mbus_code,
+ .enum_frame_size = tvp5150_enum_frame_size,
.set_fmt = tvp5150_fill_fmt,
.get_fmt = tvp5150_fill_fmt,
};
@@ -1165,6 +1187,14 @@ static int tvp5150_probe(struct i2c_client *c,
return -ENOMEM;
sd = &core->sd;
v4l2_i2c_subdev_init(sd, c, &tvp5150_ops);
+ sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+
+#if defined(CONFIG_MEDIA_CONTROLLER)
+ core->pad.flags = MEDIA_PAD_FL_SOURCE;
+ res = media_entity_pads_init(&sd->entity, 1, &core->pad);
+ if (res < 0)
+ return res;
+#endif
res = tvp5150_detect_version(core);
if (res < 0)
--
2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web