On Mon, 12 Jan 2015 14:04:56 +0000 Russell King - ARM Linux linux@arm.linux.org.uk wrote:
On Mon, Jan 12, 2015 at 02:59:57PM +0100, Philipp Zabel wrote:
Am Montag, den 12.01.2015, 12:25 +0000 schrieb Russell King - ARM Linux:
It's not quite that simple, because the SPDIF AP pins are multiplexed with the I2S pins - and there is variation between chip models and packages.
So, it's probably best if port@0 is the video port, and then port@1..n can describe the audio inputs, including a property which specifies whether they are I2S or SPDIF, and the value to be programmed into the AP enable register (which is a bit field of the AP pins which should be unmasked.) I guess we can re-use the reg= property for that value, since video will always be zero.
Note that of_graph_parse_endpoint interprets the port node's reg property as port id. And the unit address part of the node name should match the first address in the reg property.
This is not the case in vexpress-v2p-ca15_a7.dts.
So that's not going to work very well... because the AP register is a bitmask.
I guess we could specify a node unit and reg, which the code otherwise ignores, and specify a philipps,ap-mask = property for the audio ports instead.
Also, the video and audio ports must be distinguished. They could be defined in different port groups.
Example from the Cubox:
video-ports: ports@0 { port { tda998x_video: endpoint { remote-endpoint = <&lcd0_0>; nxp,video-port = <0x230145>; }; }; }; audio-ports: ports@1 { port@0 { /* AP1 = I2S */ tda998x_i2s: endpoint@0 { remote-endpoint = <&audio1_i2s>; nxp,audio-port = <0x03>; }; }; port@1 { /* AP2 = S/PDIF */ tda998x_spdif: endpoint@1 { remote-endpoint = <&audio1_spdif1>; nxp,audio-port = <0x04>; }; }; };
The port type is identified by the bit AP0.