The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/device-tree/Bindings/sound/audio-graph-card.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 Audio Graph Card:
    2 
    3 Audio Graph Card specifies audio DAI connections of SoC <-> codec.
    4 It is based on common bindings for device graphs.
    5 see ${LINUX}/Documentation/devicetree/bindings/graph.txt
    6 
    7 Basically, Audio Graph Card property is same as Simple Card.
    8 see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.yaml
    9 
   10 Below are same as Simple-Card.
   11 
   12 - label
   13 - widgets
   14 - routing
   15 - dai-format
   16 - frame-master
   17 - bitclock-master
   18 - bitclock-inversion
   19 - frame-inversion
   20 - mclk-fs
   21 - hp-det-gpio
   22 - mic-det-gpio
   23 - dai-tdm-slot-num
   24 - dai-tdm-slot-width
   25 - clocks / system-clock-frequency
   26 
   27 Required properties:
   28 
   29 - compatible                            : "audio-graph-card";
   30 - dais                                  : list of CPU DAI port{s}
   31 
   32 Optional properties:
   33 - pa-gpios: GPIO used to control external amplifier.
   34 
   35 -----------------------
   36 Example: Single DAI case
   37 -----------------------
   38 
   39         sound_card {
   40                 compatible = "audio-graph-card";
   41 
   42                 dais = <&cpu_port>;
   43         };
   44 
   45         dai-controller {
   46                 ...
   47                 cpu_port: port {
   48                         cpu_endpoint: endpoint {
   49                                 remote-endpoint = <&codec_endpoint>;
   50 
   51                                 dai-format = "left_j";
   52                                 ...
   53                         };
   54                 };
   55         };
   56 
   57         audio-codec {
   58                 ...
   59                 port {
   60                         codec_endpoint: endpoint {
   61                                 remote-endpoint = <&cpu_endpoint>;
   62                         };
   63                 };
   64         };
   65 
   66 -----------------------
   67 Example: Multi DAI case
   68 -----------------------
   69 
   70         sound-card {
   71                 compatible = "audio-graph-card";
   72 
   73                 label = "sound-card";
   74 
   75                 dais = <&cpu_port0
   76                         &cpu_port1
   77                         &cpu_port2>;
   78         };
   79 
   80         audio-codec@0 {
   81                 ...
   82                 port {
   83                         codec0_endpoint: endpoint {
   84                                 remote-endpoint = <&cpu_endpoint0>;
   85                         };
   86                 };
   87         };
   88 
   89         audio-codec@1 {
   90                 ...
   91                 port {
   92                         codec1_endpoint: endpoint {
   93                                 remote-endpoint = <&cpu_endpoint1>;
   94                         };
   95                 };
   96         };
   97 
   98         audio-codec@2 {
   99                 ...
  100                 port {
  101                         codec2_endpoint: endpoint {
  102                                 remote-endpoint = <&cpu_endpoint2>;
  103                         };
  104                 };
  105         };
  106 
  107         dai-controller {
  108                 ...
  109                 ports {
  110                         cpu_port0: port@0 {
  111                                 cpu_endpoint0: endpoint {
  112                                         remote-endpoint = <&codec0_endpoint>;
  113 
  114                                         dai-format = "left_j";
  115                                         ...
  116                                 };
  117                         };
  118                         cpu_port1: port@1 {
  119                                 cpu_endpoint1: endpoint {
  120                                         remote-endpoint = <&codec1_endpoint>;
  121 
  122                                         dai-format = "i2s";
  123                                         ...
  124                                 };
  125                         };
  126                         cpu_port2: port@2 {
  127                                 cpu_endpoint2: endpoint {
  128                                         remote-endpoint = <&codec2_endpoint>;
  129 
  130                                         dai-format = "i2s";
  131                                         ...
  132                                 };
  133                         };
  134                 };
  135         };
  136 
  137 
  138 -----------------------
  139 Example: Sampling Rate Conversion
  140 -----------------------
  141 
  142         sound_card {
  143                 compatible = "audio-graph-card";
  144 
  145                 label = "sound-card";
  146                 prefix = "codec";
  147                 routing = "codec Playback", "DAI0 Playback",
  148                           "DAI0 Capture",   "codec Capture";
  149                 convert-rate = <48000>;
  150 
  151                 dais = <&cpu_port>;
  152         };
  153 
  154         audio-codec {
  155                 ...
  156                 port {
  157                         codec_endpoint: endpoint {
  158                                 remote-endpoint = <&cpu_endpoint>;
  159                         };
  160                 };
  161         };
  162 
  163         dai-controller {
  164                 ...
  165                 cpu_port: port {
  166                         cpu_endpoint: endpoint {
  167                                 remote-endpoint = <&codec_endpoint>;
  168 
  169                                 dai-format = "left_j";
  170                                 ...
  171                         };
  172                 };
  173         };
  174 
  175 -----------------------
  176 Example: 2 CPU 1 Codec (Mixing)
  177 -----------------------
  178 
  179         sound_card {
  180                 compatible = "audio-graph-card";
  181 
  182                 label = "sound-card";
  183                 routing = "codec Playback", "DAI0 Playback",
  184                           "codec Playback", "DAI1 Playback",
  185                           "DAI0 Capture",   "codec Capture";
  186 
  187                 dais = <&cpu_port>;
  188         };
  189 
  190         audio-codec {
  191                 ...
  192 
  193                 audio-graph-card,prefix = "codec";
  194                 audio-graph-card,convert-rate = <48000>;
  195                 port {
  196                         reg = <0>;
  197                         codec_endpoint0: endpoint@0 {
  198                                 remote-endpoint = <&cpu_endpoint0>;
  199                         };
  200                         codec_endpoint1: endpoint@1 {
  201                                 remote-endpoint = <&cpu_endpoint1>;
  202                         };
  203                 };
  204         };
  205 
  206         dai-controller {
  207                 ...
  208                 cpu_port: port {
  209                         cpu_endpoint0: endpoint@0 {
  210                                 remote-endpoint = <&codec_endpoint0>;
  211 
  212                                 dai-format = "left_j";
  213                                 ...
  214                         };
  215                         cpu_endpoint1: endpoint@1 {
  216                                 remote-endpoint = <&codec_endpoint1>;
  217 
  218                                 dai-format = "left_j";
  219                                 ...
  220                         };
  221                 };
  222         };
  223 
  224 -----------------------
  225 Example: Multi DAI with DPCM
  226 -----------------------
  227 
  228         CPU0 ------ ak4613
  229         CPU1 ------ HDMI
  230         CPU2 ------ PCM3168A-p  /* DPCM 1ch/2ch */
  231         CPU3 --/                /* DPCM 3ch/4ch */
  232         CPU4 --/                /* DPCM 5ch/6ch */
  233         CPU5 --/                /* DPCM 7ch/8ch */
  234         CPU6 ------ PCM3168A-c
  235 
  236         sound_card: sound {
  237                 compatible = "audio-graph-card";
  238 
  239                 label = "sound-card";
  240 
  241                 routing =       "pcm3168a Playback", "DAI2 Playback",
  242                                 "pcm3168a Playback", "DAI3 Playback",
  243                                 "pcm3168a Playback", "DAI4 Playback",
  244                                 "pcm3168a Playback", "DAI5 Playback";
  245 
  246                 dais = <&snd_port0      /* ak4613 */
  247                         &snd_port1      /* HDMI0  */
  248                         &snd_port2      /* pcm3168a playback */
  249                         &snd_port3      /* pcm3168a capture  */
  250                         >;
  251         };
  252 
  253         ak4613: codec@10 {
  254                 ...
  255                 port {
  256                         ak4613_endpoint: endpoint {
  257                                 remote-endpoint = <&rsnd_endpoint0>;
  258                         };
  259                 };
  260         };
  261 
  262         pcm3168a: audio-codec@44 {
  263                 ...
  264                 audio-graph-card,prefix = "pcm3168a";
  265                 audio-graph-card,convert-channels = <8>; /* TDM Split */
  266                 ports {
  267                         port@0 {
  268                                 reg = <0>;
  269                                 pcm3168a_endpoint_p1: endpoint@1 {
  270                                         remote-endpoint = <&rsnd_endpoint2>;
  271                                         ...
  272                                 };
  273                                 pcm3168a_endpoint_p2: endpoint@2 {
  274                                         remote-endpoint = <&rsnd_endpoint3>;
  275                                         ...
  276                                 };
  277                                 pcm3168a_endpoint_p3: endpoint@3 {
  278                                         remote-endpoint = <&rsnd_endpoint4>;
  279                                         ...
  280                                 };
  281                                 pcm3168a_endpoint_p4: endpoint@4 {
  282                                         remote-endpoint = <&rsnd_endpoint5>;
  283                                         ...
  284                                 };
  285                         };
  286                         port@1 {
  287                                 reg = <1>;
  288                                 pcm3168a_endpoint_c: endpoint {
  289                                         remote-endpoint = <&rsnd_endpoint6>;
  290                                         ...
  291                                 };
  292                         };
  293                 };
  294         };
  295 
  296         &sound {
  297                 ports {
  298                         snd_port0: port@0 {
  299                                 rsnd_endpoint0: endpoint {
  300                                         remote-endpoint = <&ak4613_endpoint>;
  301                                         ...
  302                                 };
  303                         };
  304                         snd_port1: port@1 {
  305                                 rsnd_endpoint1: endpoint {
  306                                         remote-endpoint = <&dw_hdmi0_snd_in>;
  307                                         ...
  308                                 };
  309                         };
  310                         snd_port2: port@2 {
  311                                 #address-cells = <1>;
  312                                 #size-cells = <0>;
  313                                 rsnd_endpoint2: endpoint@2 {
  314                                         remote-endpoint = <&pcm3168a_endpoint_p1>;
  315                                         ...
  316                                 };
  317                                 rsnd_endpoint3: endpoint@3 {
  318                                         remote-endpoint = <&pcm3168a_endpoint_p2>;
  319                                         ...
  320                                 };
  321                                 rsnd_endpoint4: endpoint@4 {
  322                                         remote-endpoint = <&pcm3168a_endpoint_p3>;
  323                                         ...
  324                                 };
  325                                 rsnd_endpoint5: endpoint@5 {
  326                                         remote-endpoint = <&pcm3168a_endpoint_p4>;
  327                                         ...
  328                                 };
  329                         };
  330                         snd_port3: port@6 {
  331                                 rsnd_endpoint6: endpoint {
  332                                         remote-endpoint = <&pcm3168a_endpoint_c>;
  333                                         ...
  334                                 };
  335                         };
  336                 };
  337         };

Cache object: b7405b9995e244f0c674582c86384318


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.