Hi Arnd
Looks very good overall, I just have one more idea for simplifying the binding, please see if that can work or not:
(snip)
ssi3: ssi@3 { interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>; dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>; dma-names = "rx", "tx", "rxu", "txu"; };
I tried this idea before, but I got issues on DT. I forgot detail, but if my memory was correct, it was dev->of_node.
sound { ... ssi3: ssi@3 { interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>; dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>; dma-names = "rx", "tx", "rxu", "txu"; }; }
dma_request_slave_channel_compat() requests "dev", and this dev means sound here.
This "dev" will be used in dma_request_slave_channel_reason() and, it uses "dev->of_node". But, here, "dev->of_node" means "sound" here.
If I use your style, I need to do like below, or I need new compat function which can select of_node.
tmp_node = dev->of_node; dev->of_node = subnode; dma_request_slave_channel_compat(... dev ...); dev->of_node = tmp_node;
Best regards --- Kuninori Morimoto