]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: meson: vdec: add g12a platform
authorMaxime Jourdan <mjourdan@baylibre.com>
Thu, 5 Dec 2019 15:34:07 +0000 (16:34 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 16 Dec 2019 09:11:27 +0000 (10:11 +0100)
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>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/meson/vdec/vdec.c
drivers/staging/media/meson/vdec/vdec.h
drivers/staging/media/meson/vdec/vdec_platform.c
drivers/staging/media/meson/vdec/vdec_platform.h

index 8dd1396909d7e61ad3c53c15142084ed2cafae3f..0a6a5efb217c2b34dc7442758f088dcb841e34b2 100644 (file)
@@ -958,6 +958,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);
@@ -1005,6 +1007,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;
@@ -1047,8 +1058,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);
index d811e79765198a83db6f40f753809f37c4521a9c..0faa1ec4858ec0ab537147b273556d05ea5df78d 100644 (file)
@@ -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;
 
index 824dbc7f46f568976c20df804c6222e895d7173b..7845a889ce248b45b5ffaf98c90e4b6c0ddac309 100644 (file)
@@ -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,
+};
index f6025326db1d6f2cf35a4a7512c2cbb625ac912f..7c61b941b39f43dbd70e1dcb1e07e40338f0a3bb 100644 (file)
@@ -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