arm64: tegra: Enable OPE on various platforms
authorSameer Pujar <spujar@nvidia.com>
Mon, 6 Jun 2022 14:58:57 +0000 (20:28 +0530)
committerThierry Reding <treding@nvidia.com>
Fri, 8 Jul 2022 16:00:12 +0000 (18:00 +0200)
Enable OPE module usage on various Jetson platforms. This can be plugged
into an audio path using ALSA mixer controls. Add audio-graph-port binding
to use OPE device with generic audio-graph based sound card.

Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts
arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts
arch/arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts
arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts

index 70737a09a9b8676c91df31c3d64705f1adf8dc8b..bd1897707fccb7c07bd5ece585ff6c5424fe8871 100644 (file)
                                                remote-endpoint = <&asrc_in7_ep>;
                                        };
                                };
+
+                               xbar_ope1_in_port: port@70 {
+                                       reg = <0x70>;
+
+                                       xbar_ope1_in_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_in_ep>;
+                                       };
+                               };
+
+                               port@71 {
+                                       reg = <0x71>;
+
+                                       xbar_ope1_out_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_out_ep>;
+                                       };
+                               };
                        };
 
                        admaif@290f000 {
                                };
                        };
 
+                       processing-engine@2908000 {
+                               status = "okay";
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0x0>;
+
+                                               ope1_cif_in_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_in_ep>;
+                                               };
+                                       };
+
+                                       ope1_out_port: port@1 {
+                                               reg = <0x1>;
+
+                                               ope1_cif_out_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_out_ep>;
+                                               };
+                                       };
+                               };
+                       };
+
                        amixer@290bb00 {
                                status = "okay";
 
                       <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>,
                       <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>,
                       <&xbar_asrc_in7_port>,
+                      <&xbar_ope1_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mixer_out5_port>,
                       <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>,
                       <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>,
+                      <&ope1_out_port>,
                       /* I/O */
                       <&i2s1_port>, <&i2s2_port>, <&i2s3_port>, <&i2s4_port>,
                       <&i2s5_port>, <&i2s6_port>, <&dmic1_port>, <&dmic2_port>,
index bce518ace6a009e82eb8d8a77050389e67b8764c..fafd7073d18cc27b2cb181f757aac84031329a07 100644 (file)
                                                        remote-endpoint = <&asrc_in7_ep>;
                                                };
                                        };
+
+                                       xbar_ope1_in_port: port@70 {
+                                               reg = <0x70>;
+
+                                               xbar_ope1_in_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_in_ep>;
+                                               };
+                                       };
+
+                                       port@71 {
+                                               reg = <0x71>;
+
+                                               xbar_ope1_out_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_out_ep>;
+                                               };
+                                       };
                                };
 
                                admaif@290f000 {
                                        };
                                };
 
+                               processing-engine@2908000 {
+                                       status = "okay";
+
+                                       ports {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               port@0 {
+                                                       reg = <0x0>;
+
+                                                       ope1_cif_in_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_in_ep>;
+                                                       };
+                                               };
+
+                                               ope1_out_port: port@1 {
+                                                       reg = <0x1>;
+
+                                                       ope1_cif_out_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_out_ep>;
+                                                       };
+                                               };
+                                       };
+                               };
+
                                amixer@290bb00 {
                                        status = "okay";
 
                       <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>,
                       <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>,
                       <&xbar_asrc_in7_port>,
+                      <&xbar_ope1_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mixer_out4_port>, <&mixer_out5_port>,
                       <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>,
                       <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>,
+                      <&ope1_out_port>,
                       /* BE I/O Ports */
                       <&i2s1_port>, <&i2s2_port>, <&i2s4_port>, <&i2s6_port>,
                       <&dmic3_port>;
index 7acc32dd290a291939ede760c95c4e8a6ea0ef57..4cee935e44a53d85c7fd19b38e8d848728671170 100644 (file)
                                                        remote-endpoint = <&asrc_in7_ep>;
                                                };
                                        };
+
+                                       xbar_ope1_in_port: port@70 {
+                                               reg = <0x70>;
+
+                                               xbar_ope1_in_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_in_ep>;
+                                               };
+                                       };
+
+                                       port@71 {
+                                               reg = <0x71>;
+
+                                               xbar_ope1_out_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_out_ep>;
+                                               };
+                                       };
                                };
 
                                admaif@290f000 {
                                        };
                                };
 
+                               processing-engine@2908000 {
+                                       status = "okay";
+
+                                       ports {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               port@0 {
+                                                       reg = <0x0>;
+
+                                                       ope1_cif_in_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_in_ep>;
+                                                       };
+                                               };
+
+                                               ope1_out_port: port@1 {
+                                                       reg = <0x1>;
+
+                                                       ope1_cif_out_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_out_ep>;
+                                                       };
+                                               };
+                                       };
+                               };
+
                                amixer@290bb00 {
                                        status = "okay";
 
                       <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>,
                       <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>,
                       <&xbar_asrc_in7_port>,
+                      <&xbar_ope1_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mixer_out5_port>,
                       <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>,
                       <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>,
+                      <&ope1_out_port>,
                       /* BE I/O Ports */
                       <&i2s3_port>, <&i2s5_port>,
                       <&dmic1_port>, <&dmic2_port>, <&dmic4_port>,
index 328fbfec4ee8d72a9324533e4ab212385e6a75d8..1e26ca91a94498e96fa6e845772af82348094faf 100644 (file)
                                };
                        };
 
+                       processing-engine@702d8000 {
+                               status = "okay";
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0x0>;
+
+                                               ope1_cif_in_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_in_ep>;
+                                               };
+                                       };
+
+                                       ope1_out_port: port@1 {
+                                               reg = <0x1>;
+
+                                               ope1_cif_out_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_out_ep>;
+                                               };
+                                       };
+                               };
+                       };
+
+                       processing-engine@702d8400 {
+                               status = "okay";
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0x0>;
+
+                                               ope2_cif_in_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope2_in_ep>;
+                                               };
+                                       };
+
+                                       ope2_out_port: port@1 {
+                                               reg = <0x1>;
+
+                                               ope2_cif_out_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope2_out_ep>;
+                                               };
+                                       };
+                               };
+                       };
+
                        amixer@702dbb00 {
                                status = "okay";
 
                                                remote-endpoint = <&mixer_out5_ep>;
                                        };
                                };
+
+                               xbar_ope1_in_port: port@41 {
+                                       reg = <0x41>;
+
+                                       xbar_ope1_in_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_in_ep>;
+                                       };
+                               };
+
+                               port@42 {
+                                       reg = <0x42>;
+
+                                       xbar_ope1_out_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_out_ep>;
+                                       };
+                               };
+
+                               xbar_ope2_in_port: port@43 {
+                                       reg = <0x43>;
+
+                                       xbar_ope2_in_ep: endpoint {
+                                               remote-endpoint = <&ope2_cif_in_ep>;
+                                       };
+                               };
+
+                               port@44 {
+                                       reg = <0x44>;
+
+                                       xbar_ope2_out_ep: endpoint {
+                                               remote-endpoint = <&ope2_cif_out_ep>;
+                                       };
+                               };
                        };
                };
        };
                       <&xbar_mixer_in5_port>, <&xbar_mixer_in6_port>,
                       <&xbar_mixer_in7_port>, <&xbar_mixer_in8_port>,
                       <&xbar_mixer_in9_port>, <&xbar_mixer_in10_port>,
+                      <&xbar_ope1_in_port>, <&xbar_ope2_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mixer_out1_port>, <&mixer_out2_port>,
                       <&mixer_out3_port>, <&mixer_out4_port>,
                       <&mixer_out5_port>,
+                      <&ope1_out_port>, <&ope2_out_port>,
                       /* I/O DAP Ports */
                       <&i2s1_port>, <&i2s2_port>, <&i2s3_port>, <&i2s4_port>,
                       <&i2s5_port>, <&dmic1_port>, <&dmic2_port>, <&dmic3_port>;
index 746bd52ea3f7cde8477d792f4c9c758181dd5b67..749b44cf3ffa67ff68c34acb9315c92d7c5967b5 100644 (file)
                                };
                        };
 
+                       processing-engine@702d8000 {
+                               status = "okay";
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0x0>;
+
+                                               ope1_cif_in_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_in_ep>;
+                                               };
+                                       };
+
+                                       ope1_out_port: port@1 {
+                                               reg = <0x1>;
+
+                                               ope1_cif_out_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope1_out_ep>;
+                                               };
+                                       };
+                               };
+                       };
+
+                       processing-engine@702d8400 {
+                               status = "okay";
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0x0>;
+
+                                               ope2_cif_in_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope2_in_ep>;
+                                               };
+                                       };
+
+                                       ope2_out_port: port@1 {
+                                               reg = <0x1>;
+
+                                               ope2_cif_out_ep: endpoint {
+                                                       remote-endpoint = <&xbar_ope2_out_ep>;
+                                               };
+                                       };
+                               };
+                       };
+
                        amixer@702dbb00 {
                                status = "okay";
 
                                                remote-endpoint = <&mixer_out5_ep>;
                                        };
                                };
+
+                               xbar_ope1_in_port: port@41 {
+                                       reg = <0x41>;
+
+                                       xbar_ope1_in_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_in_ep>;
+                                       };
+                               };
+
+                               port@42 {
+                                       reg = <0x42>;
+
+                                       xbar_ope1_out_ep: endpoint {
+                                               remote-endpoint = <&ope1_cif_out_ep>;
+                                       };
+                               };
+
+                               xbar_ope2_in_port: port@43 {
+                                       reg = <0x43>;
+
+                                       xbar_ope2_in_ep: endpoint {
+                                               remote-endpoint = <&ope2_cif_in_ep>;
+                                       };
+                               };
+
+                               port@44 {
+                                       reg = <0x44>;
+
+                                       xbar_ope2_out_ep: endpoint {
+                                               remote-endpoint = <&ope2_cif_out_ep>;
+                                       };
+                               };
                        };
                };
        };
                       <&xbar_mixer_in5_port>, <&xbar_mixer_in6_port>,
                       <&xbar_mixer_in7_port>, <&xbar_mixer_in8_port>,
                       <&xbar_mixer_in9_port>, <&xbar_mixer_in10_port>,
+                      <&xbar_ope1_in_port>, <&xbar_ope2_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mixer_out1_port>, <&mixer_out2_port>,
                       <&mixer_out3_port>, <&mixer_out4_port>,
                       <&mixer_out5_port>,
+                      <&ope1_out_port>, <&ope2_out_port>,
                       /* I/O DAP Ports */
                       <&i2s3_port>, <&i2s4_port>,
                       <&dmic1_port>, <&dmic2_port>;
index eaf1994abb0458e46133eb441f13ed46ff8ec3ed..3f6c399e3371389ea862c024979c73419cc5af5f 100644 (file)
                                                        remote-endpoint = <&asrc_in7_ep>;
                                                };
                                        };
+
+                                       xbar_ope1_in_port: port@70 {
+                                               reg = <0x70>;
+
+                                               xbar_ope1_in_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_in_ep>;
+                                               };
+                                       };
+
+                                       port@71 {
+                                               reg = <0x71>;
+
+                                               xbar_ope1_out_ep: endpoint {
+                                                       remote-endpoint = <&ope1_cif_out_ep>;
+                                               };
+                                       };
                                };
 
                                i2s@2901000 {
                                        };
                                };
 
+                               processing-engine@2908000 {
+                                       status = "okay";
+
+                                       ports {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               port@0 {
+                                                       reg = <0x0>;
+
+                                                       ope1_cif_in_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_in_ep>;
+                                                       };
+                                               };
+
+                                               ope1_out_port: port@1 {
+                                                       reg = <0x1>;
+
+                                                       ope1_cif_out_ep: endpoint {
+                                                               remote-endpoint = <&xbar_ope1_out_ep>;
+                                                       };
+                                               };
+                                       };
+                               };
+
                                mvc@290a000 {
                                        status = "okay";
 
                       <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>,
                       <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>,
                       <&xbar_asrc_in7_port>,
+                      <&xbar_ope1_in_port>,
                       /* HW accelerators */
                       <&sfc1_out_port>, <&sfc2_out_port>,
                       <&sfc3_out_port>, <&sfc4_out_port>,
                       <&mix_out4_port>, <&mix_out5_port>,
                       <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>,
                       <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>,
+                      <&ope1_out_port>,
                       /* BE I/O Ports */
                       <&i2s1_port>, <&i2s2_port>, <&i2s4_port>, <&i2s6_port>,
                       <&dmic3_port>;