Re: [PATCH v3 2/2] arm64: dts: rockchip: add HDMI sound node for rk3328-rock64

From: Jonas Karlman
Date: Sun Mar 17 2019 - 08:33:31 EST


Hello Katsuhiro,

Sorry for the delay, I have not been able to fully test this yet but will do more testing later tonight.

My concern are regarding how to configure a single graph card node to add a hdmi: (and iec958: for spdif) variants using an alsa config file.
In LibreELEC I expose HDMI and SPDIF as two different card nodes to simplify applying alsa config files, see [1] and [2] for the alsa config files I use.
Do you know how I can configure the hdmi: and iec958: cards and add a "IEC958 Playback" ctl with the combined graph card node?

I am also working on NL-PCM/HBR-audio support for dw-hdmi-i2s and it will require "IEC958 Playback" ctl and players such as kodi and mpv only sets AES0-3 for hdmi: and iec958: cards.

[1] https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/filesystem/usr/share/alsa/cards/HDMI.conf
[2] https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/filesystem/usr/share/alsa/cards/SPDIF.conf

Regards,
Jonas

On 2019-03-17 10:54, Katsuhiro Suzuki wrote:
> Hello Jonas,
>
> How about this topic?
>
> I think this patch does not have bad effect for multi channel
> sound of HDMI. If you don't think so, please tell me.
> I wait your sound patch and after re-check this patch.
>
> Best Regards,
> Katsuhiro Suzuki
>
> On 2019/03/03 4:26, Katsuhiro Suzuki wrote:
>> Hello Jonas,
>>
>> Thanks for your comments.
>>
>> On 2019/03/03 2:20, Jonas Karlman wrote:
>>> On 2019-03-02 15:19, Katsuhiro Suzuki wrote:
>>>> Ping...
>>>>
>>>> On 2019/02/18 2:34, Katsuhiro Suzuki wrote:
>>>>> This patch adds HDMI sound (I2S0) node for rock64.
>>>>>
>>>>> After apply this patch, UART2 will fail to allocate DMA resources
>>>>> but UART driver can work fine without DMA.
>>>>>
>>>>> This error is related to the DMAC of rk3328 (pl330 or compatible).
>>>>> DMAC connected to 16 DMA sources. Each sources have ID number that is
>>>>> called 'Req number' in rk3328 TRM. Currently total 7 sources has been
>>>>> activated as follows:
>>>>>
>>>>> | Req number | Source | Required |
>>>>> | | | channels |
>>>>> |------------+--------+-----------|
>>>>> | 14, 15ÂÂÂÂ | I2S1ÂÂ | 2chÂÂÂÂÂÂ |
>>>>> | 6, 7 | UART2 | 2ch |
>>>>> |ÂÂÂÂ 10ÂÂÂÂ | SPDIFÂ | 1chÂÂÂÂÂÂ |
>>>>> | 8, 9 | SPI0 | 2ch |
>>>>> |------------+--------+-----------|
>>>>> | | Total | 7ch |
>>>>>
>>>>> HDMI audio needs to activate new source I2S0 (Req number 11 and 12).
>>>>> I2S0 can work concurrently with other sources, but rk3328 DMAC can
>>>>> use max 8 channels at same time. If I2S0 is simply activated by this
>>>>> patch, required DMAC channels will be 9. So last one (UART2) cannot
>>>>> allocate the DMA resources.
>>>>>
>>>>> Virt-dma mechanism for pl0330 DMAC driver is needed to fix this
>>>>> problem.
>>>>>
>>>>> Signed-off-by: Katsuhiro Suzuki <katsuhiro@xxxxxxxxxxxxx>
>>>>> ---
>>>>> ÂÂ .../arm64/boot/dts/rockchip/rk3328-rock64.dts | 21
>>>>> ++++++++++++++++++-
>>>>> ÂÂ 1 file changed, 20 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
>>>>> b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
>>>>> index 2157a528276b..bfc0930d245c 100644
>>>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
>>>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
>>>>> @@ -68,7 +68,8 @@
>>>>> ÂÂÂÂÂÂ sound {
>>>>> ÂÂÂÂÂÂÂÂÂÂ compatible = "audio-graph-card";
>>>>> ÂÂÂÂÂÂÂÂÂÂ label = "rockchip,rk3328";
>>>>> -ÂÂÂÂÂÂÂ dais = <&i2s1_p0
>>>>> +ÂÂÂÂÂÂÂ dais = <&i2s0_p0
>>>>> +ÂÂÂÂÂÂÂÂÂÂÂ &i2s1_p0
>>>>> ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ &spdif_p0>;
>>> I am working on multi-channel hdmi audio support for dw-hdmi at [1]
>>> and are wondering if having multiple dais on one graph card
>>> instead of a separate hdmi sound card will affect the ability to
>>> define a proper alsa config for multi channel hdmi sound.
>>>
>>> [1]
>>> https://github.com/Kwiboo/linux-rockchip/compare/8874c206d613dc575f5cb6e385e7a866020138d0...92b20eaa6b6dd2cf3418a428f905d10bbc62724f
>>>
>>>
>> It seems a part of multi channel (5.1 ch) has already been supported
>> by rockchip-i2s and dw-hdmi. So I applied this patch and tried below
>> command.
>> Â speaker-test -D hw:0,0 -f 48000 -c 6
>> It does not return errors.
>>
>> Would you tell me more details you worried about if something wrong?
>>
>>
>> FYI: Rock64 PCM devices are as follows after applied this patch.
>> ~~~~~
>> $ cat /proc/asound/pcm
>> 00-00: ff000000.i2s-i2s-hifi i2s-hifi-0 :Â : playback 1
>> 00-01: ff010000.i2s-rk3328-hifi ff410000.codec-1 :Â : playback 1 :
>> capture 1
>> 00-02: ff030000.spdif-dit-hifi dit-hifi-2 :Â : playback 1
>> ~~~~~
>>
>> Best Regards,
>> Katsuhiro Suzuki
>>
>>
>>> Regards,
>>> Jonas
>>>
>>>>> ÂÂÂÂÂÂ };
>>>>> @@ -141,6 +142,12 @@
>>>>> ÂÂ &hdmi {
>>>>> ÂÂÂÂÂÂ status = "okay";
>>>>> +
>>>>> +ÂÂÂ port@0 {
>>>>> +ÂÂÂÂÂÂÂ hdmi_p0_0: endpoint {
>>>>> +ÂÂÂÂÂÂÂÂÂÂÂ remote-endpoint = <&i2s0_p0_0>;
>>>>> +ÂÂÂÂÂÂÂ };
>>>>> +ÂÂÂ };
>>>>> ÂÂ };
>>>>> ÂÂ &hdmiphy {
>>>>> @@ -256,6 +263,18 @@
>>>>> ÂÂÂÂÂÂ };
>>>>> ÂÂ };
>>>>> +&i2s0 {
>>>>> +ÂÂÂ status = "okay";
>>>>> +
>>>>> +ÂÂÂ i2s0_p0: port {
>>>>> +ÂÂÂÂÂÂÂ i2s0_p0_0: endpoint {
>>>>> +ÂÂÂÂÂÂÂÂÂÂÂ dai-format = "i2s";
>>>>> +ÂÂÂÂÂÂÂÂÂÂÂ mclk-fs = <256>;
>>>>> +ÂÂÂÂÂÂÂÂÂÂÂ remote-endpoint = <&hdmi_p0_0>;
>>>>> +ÂÂÂÂÂÂÂ };
>>>>> +ÂÂÂ };
>>>>> +};
>>>>> +
>>>>> ÂÂ &i2s1 {
>>>>> ÂÂÂÂÂÂ status = "okay";
>>>>>
>>>> _______________________________________________
>>>> Linux-rockchip mailing list
>>>> Linux-rockchip@xxxxxxxxxxxxxxxxxxx
>>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>>>>
>>>
>>>
>>