.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);
        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;
                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);
 
        },
 };
 
+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),
        .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,
+};