Move dai-link level properties away from dai subnodes
Subsystems (4)
v3 cover Move dai-link level properties away from dai subnodes
This patch is implemented on top of late patches from Jean-Francois Moine [1].
These patches implement the main part of the simple-card changes discussed in alsa-devel mailing list [2].
Since RFC v2 version of the patches, address remaining comments from Jean-Francois Moine [4]:
- ASoC: simple-card: Move dai-link level properties away from dai subnodes
- Only allow legacy parsing if there is no dai-link node.
- Fix double unref in of_card parsing loop.
Since RFC version of the patches:
- ASoC: core: Update snd_soc_of_parse_daifmt() interface
- Make minimal changes to simple-card for it to work with the updated snd_soc_of_parse_daifmt(). (Kuninori Morimoto's comment [3]).
- ASoC: simple-card: Move dai-link level properties away from dai subnodes
- Fix typo in DT binding document (Jean-Francois Moine's comment [4]).
- Remove #define DEBUG
- Remove accidental line wrap at simple-audio-card,name property descripition in the DT binding document
[1] http://mailman.alsa-project.org/pipermail/alsa-devel/2014-March/074592.html
[2] http://mailman.alsa-project.org/pipermail/alsa-devel/2014-March/074388.html
[3] http://mailman.alsa-project.org/pipermail/alsa-devel/2014-March/074699.html
[4] http://mailman.alsa-project.org/pipermail/alsa-devel/2014-March/074697.html
Best regards,
Jyri
Jyri Sarha (2):
ASoC: core: Update snd_soc_of_parse_daifmt() interface
ASoC: simple-card: Move dai-link level properties away from dai
subnodes
.../devicetree/bindings/sound/simple-card.txt | 88 ++++---- include/sound/soc.h | 4 +- sound/soc/generic/simple-card.c | 238 ++++++++++++-------- sound/soc/soc-core.c | 8 +- 4 files changed, 200 insertions(+), 138 deletions(-)
Signature · 1 line
1.7.9.5
RFC PATCH v3 1/2 ASoC: core: Update snd_soc_of_parse_daifmt() interface
Adds struct device_node **bitclkmaster and struct device_node **framemaster function parameters. With the new syntax bitclock-master and frame-master properties can explicitly indicate the dai-link bit-clock and frame masters with a phandle. This patch also makes the minimal changes to simple-card for it to work with the updated snd_soc_of_parse_daifmt(). Simple-card appears to be the only user of snd_soc_of_parse_daifmt() for now.
--- include/sound/soc.h | 4 +++- sound/soc/generic/simple-card.c | 5 +++-- sound/soc/soc-core.c | 8 +++++++- 3 files changed, 13 insertions(+), 4 deletions(-)
include/sound/soc.h +3 -1
@@ -1228,7 +1228,9 @@ int snd_soc_of_parse_tdm_slot(struct device_node *np,int snd_soc_of_parse_audio_routing (struct snd_soc_card *card,const char *propname);unsigned int snd_soc_of_parse_daifmt (struct device_node *np, -const char *prefix); +const char *prefix, +struct device_node **bitclkmaster, +struct device_node **framemaster);int snd_soc_of_get_dai_name (struct device_node *of_node,const char **dai_name);
sound/soc/generic/simple-card.c +3 -2
@@ -121,7 +121,7 @@ asoc_simple_card_sub_parse_of(struct device_node *np,* bitclock-master, frame-master * and specific "format" if it has */ - dai->fmt =snd_soc_of_parse_daifmt (np,NULL ); + dai->fmt =snd_soc_of_parse_daifmt (np,NULL ,NULL ,NULL ); dai->fmt |= daifmt;/*
@@ -201,7 +201,8 @@ static int asoc_simple_card_parse_of(struct device_node *node,snd_soc_of_parse_card_name (&priv->snd_card,"simple-audio-card,name" );/* get CPU/CODEC common format via simple-audio-card,format */ - daifmt =snd_soc_of_parse_daifmt (node,"simple-audio-card," ) & + daifmt =snd_soc_of_parse_daifmt (node,"simple-audio-card," ,NULL , +NULL ) & (SND_SOC_DAIFMT_FORMAT_MASK |SND_SOC_DAIFMT_INV_MASK );/* off-codec widgets */
sound/soc/soc-core.c +7 -1
@@ -4560,7 +4560,9 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,EXPORT_SYMBOL_GPL (snd_soc_of_parse_audio_routing);unsigned int snd_soc_of_parse_daifmt (struct device_node *np, -const char *prefix) +const char *prefix, +struct device_node **bitclkmaster, +struct device_node **framemaster) {int ret, i;char prop[128 ];
@@ -4643,9 +4645,13 @@ unsigned int snd_soc_of_parse_daifmt(struct device_node *np,*/ snprintf (prop,sizeof (prop),"%sbitclock-master" , prefix); bit = !!of_get_property (np, prop,NULL ); +if (bit && bitclkmaster) + *bitclkmaster =of_parse_phandle (np, prop,0 );snprintf (prop,sizeof (prop),"%sframe-master" , prefix); frame = !!of_get_property (np, prop,NULL ); +if (frame && framemaster) + *framemaster =of_parse_phandle (np, prop,0 );switch ((bit <<4 ) + frame) {case 0x11 :
Signature · 1 line
1.7.9.5
RFC PATCH v3 2/2 ASoC: simple-card: Move dai-link level properties away from dai subnodes
In reply to Jyri SarhaThe properties like format, bitclock-master, frame-master, bitclock-inversion, and frame-inversion should be common to the dais connected with a dai-link. For bitclock-master and frame-master properties to be unambiguous they need to indicate the mastering dai node with a phandle.
--- .../devicetree/bindings/sound/simple-card.txt | 88 +++---- sound/soc/generic/simple-card.c | 239 ++++++++++++-------- 2 files changed, 190 insertions(+), 137 deletions(-)
Documentation/devicetree/bindings/sound/simple-card.txt +50 -38
@@ -1,6 +1,6 @@ Simple-Card: -Simple-Card specifies audio DAI connection of SoC <-> codec. +Simple-Card specifies audio DAI connections of SoC <-> codec. Required properties:
@@ -10,26 +10,51 @@ Optional properties: - simple-audio-card,name : User specified audio sound card name, one string property. -- simple-audio-card,format : CPU/CODEC common audio format. - "i2s", "right_j", "left_j" , "dsp_a" - "dsp_b", "ac97", "pdm", "msb", "lsb" - simple-audio-card,widgets : Please refer to widgets.txt. - simple-audio-card,routing : A list of the connections between audio components. Each entry is a pair of strings, the first being the connection's sink, the second being the connection's source. -- dai-tdm-slot-num : Please refer to tdm-slot.txt. -- dai-tdm-slot-width : Please refer to tdm-slot.txt. +Optional subnodes: + +- simple-audio-card,dai-link : Container for dai-link level + properties and the CPU and CODEC + sub-nodes. This container may be + omitted when the card has only one + DAI link. See the examples and the + section bellow. + +Dai-link subnode properties and subnodes: + +If dai-link subnode is omitted and the subnode properties are directly +under "sound"-node the subnode property and subnode names have to be +prefixed with "simple-audio-card,"-prefix. -Required subnodes: +Required dai-link subnodes: -- simple-audio-card,dai-link : container for the CPU and CODEC sub-nodes - This container may be omitted when the - card has only one DAI link. - See the examples. +- cpu : CPU sub-node +- codec : CODEC sub-node -- simple-audio-card,cpu : CPU sub-node -- simple-audio-card,codec : CODEC sub-node +Optional dai-link subnode properties: + +- format : CPU/CODEC common audio format. + "i2s", "right_j", "left_j" , "dsp_a" + "dsp_b", "ac97", "pdm", "msb", "lsb" +- frame-master : Indicates dai-link frame master. + phandle to a cpu or codec subnode. +- bitclock-master : Indicates dai-link bit clock master. + phandle to a cpu or codec subnode. +- bitclock-inversion : bool property. Add this if the + dai-link uses bit clock inversion. +- frame-inversion : bool property. Add this if the + dai-link uses frame clock inversion. + +For backward compatibility the frame-master and bitclock-master +properties can be used as booleans in codec subnode to indicate if the +codec is the dai-link frame or bit clock master. In this case there +should be no dai-link node, the same properties should not be present +at sound-node level, and the bitclock-inversion and frame-inversion +properties should also be placed in the codec node if needed. Required CPU/CODEC subnodes properties:
@@ -37,29 +62,21 @@ Required CPU/CODEC subnodes properties: Optional CPU/CODEC subnodes properties: -- format : CPU/CODEC specific audio format if needed. - see simple-audio-card,format -- frame-master : bool property. add this if subnode is frame master -- bitclock-master : bool property. add this if subnode is bitclock master -- bitclock-inversion : bool property. add this if subnode has clock inversion -- frame-inversion : bool property. add this if subnode has frame inversion +- dai-tdm-slot-num : Please refer to tdm-slot.txt. +- dai-tdm-slot-width : Please refer to tdm-slot.txt. - clocks / system-clock-frequency : specify subnode's clock if needed. it can be specified via "clocks" if system has clock node (= common clock), or "system-clock-frequency" (if system doens't support common clock) -Note: - * For 'format', 'frame-master', 'bitclock-master', 'bitclock-inversion' and - 'frame-inversion', the simple card will use the settings of CODEC for both - CPU and CODEC sides as we need to keep the settings identical for both ends - of the link. - Example 1 - single DAI link: sound { compatible = "simple-audio-card"; simple-audio-card,name = "VF610-Tower-Sound-Card"; simple-audio-card,format = "left_j"; + simple-audio-card,bitclock-master = <&dailink0_master>; + simple-audio-card,frame-master = <&dailink0_master>; simple-audio-card,widgets = "Microphone", "Microphone Jack", "Headphone", "Headphone Jack",
@@ -69,17 +86,12 @@ sound { "Headphone Jack", "HP_OUT", "External Speaker", "LINE_OUT"; - dai-tdm-slot-num = <2>; - dai-tdm-slot-width = <8>; - simple-audio-card,cpu { sound-dai = <&sh_fsi2 0>; }; - simple-audio-card,codec { + dailink0_master: simple-audio-card,codec { sound-dai = <&ak4648>; - bitclock-master; - frame-master; clocks = <&osc>; }; };
@@ -105,31 +117,31 @@ Example 2 - many DAI links: sound { compatible = "simple-audio-card"; simple-audio-card,name = "Cubox Audio"; - simple-audio-card,format = "i2s"; simple-audio-card,dai-link@0 { /* I2S - HDMI */ - simple-audio-card,cpu { + format = "i2s"; + cpu { sound-dai = <&audio1 0>; }; - simple-audio-card,codec { + codec { sound-dai = <&tda998x 0>; }; }; simple-audio-card,dai-link@1 { /* S/PDIF - HDMI */ - simple-audio-card,cpu { + cpu { sound-dai = <&audio1 1>; }; - simple-audio-card,codec { + codec { sound-dai = <&tda998x 1>; }; }; simple-audio-card,dai-link@2 { /* S/PDIF - S/PDIF */ - simple-audio-card,cpu { + cpu { sound-dai = <&audio1 1>; }; - simple-audio-card,codec { + codec { sound-dai = <&spdif_codec>; }; };
sound/soc/generic/simple-card.c +140 -99
288 lines not on this page · raw message
Signature · 1 line
1.7.9.5
Quoted 5 lines · On Mon, 24 Mar 2014 12:15:23 +0200 Jyri Sarha <[email protected]> wrote:
This patch is implemented on top of late patches from Jean-Francois Moine [1].
These patches implement the main part of the simple-card changes discussed in alsa-devel mailing list [2].
Signature · 6 lines
Ken ar c'hentañ | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 2 lines · Jyri Sarha
This patch is implemented on top of late patches from Jean-Francois Moine [1].
Applied both, thanks.