Commit 8299c653 authored by Maxime Jourdan's avatar Maxime Jourdan Committed by Mauro Carvalho Chehab

media: meson: vdec: add g12a platform

Add support for the G12A platform by:
- adding the G12A codec support, here MPEG1 & MPEG2
- getting the new hevcf clock for the upcoming HEVC/VP9 decoding support
Signed-off-by: default avatarMaxime Jourdan <mjourdan@baylibre.com>
Signed-off-by: default avatarNeil Armstrong <narmstrong@baylibre.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 70ae805a
...@@ -958,6 +958,8 @@ static const struct of_device_id vdec_dt_match[] = { ...@@ -958,6 +958,8 @@ static const struct of_device_id vdec_dt_match[] = {
.data = &vdec_platform_gxm }, .data = &vdec_platform_gxm },
{ .compatible = "amlogic,gxl-vdec", { .compatible = "amlogic,gxl-vdec",
.data = &vdec_platform_gxl }, .data = &vdec_platform_gxl },
{ .compatible = "amlogic,g12a-vdec",
.data = &vdec_platform_g12a },
{} {}
}; };
MODULE_DEVICE_TABLE(of, vdec_dt_match); MODULE_DEVICE_TABLE(of, vdec_dt_match);
...@@ -1005,6 +1007,15 @@ static int vdec_probe(struct platform_device *pdev) ...@@ -1005,6 +1007,15 @@ static int vdec_probe(struct platform_device *pdev)
if (IS_ERR(core->canvas)) if (IS_ERR(core->canvas))
return PTR_ERR(core->canvas); return PTR_ERR(core->canvas);
of_id = of_match_node(vdec_dt_match, dev->of_node);
core->platform = of_id->data;
if (core->platform->revision == VDEC_REVISION_G12A) {
core->vdec_hevcf_clk = devm_clk_get(dev, "vdec_hevcf");
if (IS_ERR(core->vdec_hevcf_clk))
return -EPROBE_DEFER;
}
core->dos_parser_clk = devm_clk_get(dev, "dos_parser"); core->dos_parser_clk = devm_clk_get(dev, "dos_parser");
if (IS_ERR(core->dos_parser_clk)) if (IS_ERR(core->dos_parser_clk))
return -EPROBE_DEFER; return -EPROBE_DEFER;
...@@ -1047,8 +1058,6 @@ static int vdec_probe(struct platform_device *pdev) ...@@ -1047,8 +1058,6 @@ static int vdec_probe(struct platform_device *pdev)
goto err_vdev_release; goto err_vdev_release;
} }
of_id = of_match_node(vdec_dt_match, dev->of_node);
core->platform = of_id->data;
core->vdev_dec = vdev; core->vdev_dec = vdev;
core->dev_dec = dev; core->dev_dec = dev;
mutex_init(&core->lock); mutex_init(&core->lock);
......
...@@ -74,6 +74,7 @@ struct amvdec_core { ...@@ -74,6 +74,7 @@ struct amvdec_core {
struct clk *dos_clk; struct clk *dos_clk;
struct clk *vdec_1_clk; struct clk *vdec_1_clk;
struct clk *vdec_hevc_clk; struct clk *vdec_hevc_clk;
struct clk *vdec_hevcf_clk;
struct reset_control *esparser_reset; struct reset_control *esparser_reset;
......
...@@ -82,6 +82,30 @@ static const struct amvdec_format vdec_formats_gxm[] = { ...@@ -82,6 +82,30 @@ static const struct amvdec_format vdec_formats_gxm[] = {
}, },
}; };
static const struct amvdec_format vdec_formats_g12a[] = {
{
.pixfmt = V4L2_PIX_FMT_MPEG1,
.min_buffers = 8,
.max_buffers = 8,
.max_width = 1920,
.max_height = 1080,
.vdec_ops = &vdec_1_ops,
.codec_ops = &codec_mpeg12_ops,
.firmware_path = "meson/vdec/gxl_mpeg12.bin",
.pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
}, {
.pixfmt = V4L2_PIX_FMT_MPEG2,
.min_buffers = 8,
.max_buffers = 8,
.max_width = 1920,
.max_height = 1080,
.vdec_ops = &vdec_1_ops,
.codec_ops = &codec_mpeg12_ops,
.firmware_path = "meson/vdec/gxl_mpeg12.bin",
.pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
},
};
const struct vdec_platform vdec_platform_gxbb = { const struct vdec_platform vdec_platform_gxbb = {
.formats = vdec_formats_gxbb, .formats = vdec_formats_gxbb,
.num_formats = ARRAY_SIZE(vdec_formats_gxbb), .num_formats = ARRAY_SIZE(vdec_formats_gxbb),
...@@ -99,3 +123,9 @@ const struct vdec_platform vdec_platform_gxm = { ...@@ -99,3 +123,9 @@ const struct vdec_platform vdec_platform_gxm = {
.num_formats = ARRAY_SIZE(vdec_formats_gxm), .num_formats = ARRAY_SIZE(vdec_formats_gxm),
.revision = VDEC_REVISION_GXM, .revision = VDEC_REVISION_GXM,
}; };
const struct vdec_platform vdec_platform_g12a = {
.formats = vdec_formats_g12a,
.num_formats = ARRAY_SIZE(vdec_formats_g12a),
.revision = VDEC_REVISION_G12A,
};
...@@ -15,6 +15,7 @@ enum vdec_revision { ...@@ -15,6 +15,7 @@ enum vdec_revision {
VDEC_REVISION_GXBB, VDEC_REVISION_GXBB,
VDEC_REVISION_GXL, VDEC_REVISION_GXL,
VDEC_REVISION_GXM, VDEC_REVISION_GXM,
VDEC_REVISION_G12A,
}; };
struct vdec_platform { struct vdec_platform {
...@@ -26,5 +27,6 @@ struct vdec_platform { ...@@ -26,5 +27,6 @@ struct vdec_platform {
extern const struct vdec_platform vdec_platform_gxbb; extern const struct vdec_platform vdec_platform_gxbb;
extern const struct vdec_platform vdec_platform_gxm; extern const struct vdec_platform vdec_platform_gxm;
extern const struct vdec_platform vdec_platform_gxl; extern const struct vdec_platform vdec_platform_gxl;
extern const struct vdec_platform vdec_platform_g12a;
#endif #endif
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