- reg
    - "#sound-dai-cells"
  
 -            - items:   #for ADSP based platforms
+ allOf:
+   - $ref: dai-common.yaml#
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sc7280-lpass-rx-macro
+     then:
+       properties:
+         clock-names:
+           oneOf:
 -            - items:   #for ADSP bypass based platforms
++            - items:   # for ADSP based platforms
+                 - const: mclk
+                 - const: npl
+                 - const: macro
+                 - const: dcodec
+                 - const: fsgen
++            - items:   # for ADSP bypass based platforms
+                 - const: mclk
+                 - const: npl
+                 - const: fsgen
+ 
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sc8280xp-lpass-rx-macro
+             - qcom,sm8250-lpass-rx-macro
+             - qcom,sm8450-lpass-rx-macro
+     then:
+       properties:
+         clocks:
+           minItems: 5
+           maxItems: 5
+         clock-names:
+           items:
+             - const: mclk
+             - const: npl
+             - const: macro
+             - const: dcodec
+             - const: fsgen
+ 
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sm8550-lpass-rx-macro
+     then:
+       properties:
+         clocks:
+           minItems: 4
+           maxItems: 4
+         clock-names:
+           items:
+             - const: mclk
+             - const: macro
+             - const: dcodec
+             - const: fsgen
+ 
  unevaluatedProperties: false
  
  examples:
 
    - reg
    - "#sound-dai-cells"
  
 -            - items:   #for ADSP based platforms
+ allOf:
+   - $ref: dai-common.yaml#
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sc7280-lpass-tx-macro
+     then:
+       properties:
+         clock-names:
+           oneOf:
 -            - items:   #for ADSP bypass based platforms
++            - items:   # for ADSP based platforms
+                 - const: mclk
+                 - const: npl
+                 - const: macro
+                 - const: dcodec
+                 - const: fsgen
++            - items:   # for ADSP bypass based platforms
+                 - const: mclk
+                 - const: npl
+                 - const: fsgen
+ 
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sc8280xp-lpass-tx-macro
+             - qcom,sm8250-lpass-tx-macro
+             - qcom,sm8450-lpass-tx-macro
+     then:
+       properties:
+         clocks:
+           minItems: 5
+           maxItems: 5
+         clock-names:
+           items:
+             - const: mclk
+             - const: npl
+             - const: macro
+             - const: dcodec
+             - const: fsgen
+ 
+   - if:
+       properties:
+         compatible:
+           enum:
+             - qcom,sm8550-lpass-tx-macro
+     then:
+       properties:
+         clocks:
+           minItems: 4
+           maxItems: 4
+         clock-names:
+           items:
+             - const: mclk
+             - const: macro
+             - const: dcodec
+             - const: fsgen
+ 
  unevaluatedProperties: false
  
  examples:
 
        u32 header, extension;
        int ret;
  
+       /* no route set up if chain DMA is used */
+       if (src_pipeline->use_chain_dma || sink_pipeline->use_chain_dma) {
+               if (!src_pipeline->use_chain_dma || !sink_pipeline->use_chain_dma) {
+                       dev_err(sdev->dev,
+                               "use_chain_dma must be set for both src %s and sink %s pipelines\n",
+                               src_widget->widget->name, sink_widget->widget->name);
+                       return -EINVAL;
+               }
+               return 0;
+       }
+ 
        if (!src_fw_module || !sink_fw_module) {
 -              /* The NULL module will print as "(efault)" */
 -              dev_err(sdev->dev, "source %s or sink %s widget weren't set up properly\n",
 -                      src_fw_module->man4_module_entry.name,
 -                      sink_fw_module->man4_module_entry.name);
 +              dev_err(sdev->dev,
 +                      "cannot bind %s -> %s, no firmware module for: %s%s\n",
 +                      src_widget->widget->name, sink_widget->widget->name,
 +                      src_fw_module ? "" : " source",
 +                      sink_fw_module ? "" : " sink");
 +
                return -ENODEV;
        }