* Attach Meson64 to mainline with a bunch of patches. Tested, but need further work. * Enable DVFS on N2 which sometimes works, sometime doesn't, cleanup * Enable beta targets for Meson64 kernel family * Bump with version
136 lines
4.6 KiB
Diff
136 lines
4.6 KiB
Diff
From ae3d47a9e80766f4b77166304248d645df4597bc Mon Sep 17 00:00:00 2001
|
|
From: Maxime Jourdan <mjourdan@baylibre.com>
|
|
Date: Thu, 7 Feb 2019 17:37:34 +0100
|
|
Subject: [PATCH 03/17] 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: Maxime Jourdan <mjourdan@baylibre.com>
|
|
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
|
|
---
|
|
drivers/staging/media/meson/vdec/vdec.c | 13 ++++++++--
|
|
drivers/staging/media/meson/vdec/vdec.h | 1 +
|
|
drivers/staging/media/meson/vdec/vdec_platform.c | 30 ++++++++++++++++++++++++
|
|
drivers/staging/media/meson/vdec/vdec_platform.h | 2 ++
|
|
4 files changed, 44 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.c
|
|
index 0a1a04f..875a12b 100644
|
|
--- a/drivers/staging/media/meson/vdec/vdec.c
|
|
+++ b/drivers/staging/media/meson/vdec/vdec.c
|
|
@@ -956,6 +956,8 @@ static const struct of_device_id vdec_dt_match[] = {
|
|
.data = &vdec_platform_gxm },
|
|
{ .compatible = "amlogic,gxl-vdec",
|
|
.data = &vdec_platform_gxl },
|
|
+ { .compatible = "amlogic,g12a-vdec",
|
|
+ .data = &vdec_platform_g12a },
|
|
{}
|
|
};
|
|
MODULE_DEVICE_TABLE(of, vdec_dt_match);
|
|
@@ -1003,6 +1005,15 @@ static int vdec_probe(struct platform_device *pdev)
|
|
if (IS_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");
|
|
if (IS_ERR(core->dos_parser_clk))
|
|
return -EPROBE_DEFER;
|
|
@@ -1045,8 +1056,6 @@ static int vdec_probe(struct platform_device *pdev)
|
|
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->dev_dec = dev;
|
|
mutex_init(&core->lock);
|
|
diff --git a/drivers/staging/media/meson/vdec/vdec.h b/drivers/staging/media/meson/vdec/vdec.h
|
|
index d811e79..0faa1ec 100644
|
|
--- a/drivers/staging/media/meson/vdec/vdec.h
|
|
+++ b/drivers/staging/media/meson/vdec/vdec.h
|
|
@@ -74,6 +74,7 @@ struct amvdec_core {
|
|
struct clk *dos_clk;
|
|
struct clk *vdec_1_clk;
|
|
struct clk *vdec_hevc_clk;
|
|
+ struct clk *vdec_hevcf_clk;
|
|
|
|
struct reset_control *esparser_reset;
|
|
|
|
diff --git a/drivers/staging/media/meson/vdec/vdec_platform.c b/drivers/staging/media/meson/vdec/vdec_platform.c
|
|
index 824dbc7..7845a88 100644
|
|
--- a/drivers/staging/media/meson/vdec/vdec_platform.c
|
|
+++ b/drivers/staging/media/meson/vdec/vdec_platform.c
|
|
@@ -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 = {
|
|
.formats = vdec_formats_gxbb,
|
|
.num_formats = ARRAY_SIZE(vdec_formats_gxbb),
|
|
@@ -99,3 +123,9 @@ const struct vdec_platform vdec_platform_gxm = {
|
|
.num_formats = ARRAY_SIZE(vdec_formats_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,
|
|
+};
|
|
diff --git a/drivers/staging/media/meson/vdec/vdec_platform.h b/drivers/staging/media/meson/vdec/vdec_platform.h
|
|
index f602532..7c61b94 100644
|
|
--- a/drivers/staging/media/meson/vdec/vdec_platform.h
|
|
+++ b/drivers/staging/media/meson/vdec/vdec_platform.h
|
|
@@ -15,6 +15,7 @@ enum vdec_revision {
|
|
VDEC_REVISION_GXBB,
|
|
VDEC_REVISION_GXL,
|
|
VDEC_REVISION_GXM,
|
|
+ VDEC_REVISION_G12A,
|
|
};
|
|
|
|
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_gxm;
|
|
extern const struct vdec_platform vdec_platform_gxl;
|
|
+extern const struct vdec_platform vdec_platform_g12a;
|
|
|
|
#endif
|
|
--
|
|
2.7.1
|
|
|