Loading include/sound/simple_card.h +1 −10 Original line number Diff line number Diff line Loading @@ -13,16 +13,7 @@ #define __SIMPLE_CARD_H #include <sound/soc.h> struct asoc_simple_dai { const char *name; unsigned int sysclk; int slots; int slot_width; unsigned int tx_slot_mask; unsigned int rx_slot_mask; struct clk *clk; }; #include <sound/simple_card_utils.h> struct asoc_simple_card_info { const char *name; Loading include/sound/simple_card_utils.h +10 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,16 @@ #include <sound/soc.h> struct asoc_simple_dai { const char *name; unsigned int sysclk; int slots; int slot_width; unsigned int tx_slot_mask; unsigned int rx_slot_mask; struct clk *clk; }; int asoc_simple_card_parse_daifmt(struct device *dev, struct device_node *node, struct device_node *codec, Loading sound/soc/generic/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -3,5 +3,6 @@ config SND_SIMPLE_CARD_UTILS config SND_SIMPLE_CARD tristate "ASoC Simple sound card support" select SND_SIMPLE_CARD_UTILS help This option enables generic simple sound card support sound/soc/generic/simple-card.c +2 −44 Original line number Diff line number Diff line Loading @@ -308,48 +308,6 @@ asoc_simple_card_sub_parse_of(struct device_node *np, return 0; } static int asoc_simple_card_parse_daifmt(struct device_node *node, struct simple_card_data *priv, struct device_node *codec, char *prefix, int idx) { struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx); struct device *dev = simple_priv_to_dev(priv); struct device_node *bitclkmaster = NULL; struct device_node *framemaster = NULL; unsigned int daifmt; daifmt = snd_soc_of_parse_daifmt(node, prefix, &bitclkmaster, &framemaster); daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK; if (strlen(prefix) && !bitclkmaster && !framemaster) { /* * No dai-link level and master setting was not found from * sound node level, revert back to legacy DT parsing and * take the settings from codec node. */ dev_dbg(dev, "Revert to legacy daifmt parsing\n"); daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) | (daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK); } else { if (codec == bitclkmaster) daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS; else daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS; } dai_link->dai_fmt = daifmt; of_node_put(bitclkmaster); of_node_put(framemaster); return 0; } static int asoc_simple_card_dai_link_of(struct device_node *node, struct simple_card_data *priv, int idx, Loading Loading @@ -386,8 +344,8 @@ static int asoc_simple_card_dai_link_of(struct device_node *node, goto dai_link_of_err; } ret = asoc_simple_card_parse_daifmt(node, priv, codec, prefix, idx); ret = asoc_simple_card_parse_daifmt(dev, node, codec, prefix, &dai_link->dai_fmt); if (ret < 0) goto dai_link_of_err; Loading Loading
include/sound/simple_card.h +1 −10 Original line number Diff line number Diff line Loading @@ -13,16 +13,7 @@ #define __SIMPLE_CARD_H #include <sound/soc.h> struct asoc_simple_dai { const char *name; unsigned int sysclk; int slots; int slot_width; unsigned int tx_slot_mask; unsigned int rx_slot_mask; struct clk *clk; }; #include <sound/simple_card_utils.h> struct asoc_simple_card_info { const char *name; Loading
include/sound/simple_card_utils.h +10 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,16 @@ #include <sound/soc.h> struct asoc_simple_dai { const char *name; unsigned int sysclk; int slots; int slot_width; unsigned int tx_slot_mask; unsigned int rx_slot_mask; struct clk *clk; }; int asoc_simple_card_parse_daifmt(struct device *dev, struct device_node *node, struct device_node *codec, Loading
sound/soc/generic/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -3,5 +3,6 @@ config SND_SIMPLE_CARD_UTILS config SND_SIMPLE_CARD tristate "ASoC Simple sound card support" select SND_SIMPLE_CARD_UTILS help This option enables generic simple sound card support
sound/soc/generic/simple-card.c +2 −44 Original line number Diff line number Diff line Loading @@ -308,48 +308,6 @@ asoc_simple_card_sub_parse_of(struct device_node *np, return 0; } static int asoc_simple_card_parse_daifmt(struct device_node *node, struct simple_card_data *priv, struct device_node *codec, char *prefix, int idx) { struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx); struct device *dev = simple_priv_to_dev(priv); struct device_node *bitclkmaster = NULL; struct device_node *framemaster = NULL; unsigned int daifmt; daifmt = snd_soc_of_parse_daifmt(node, prefix, &bitclkmaster, &framemaster); daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK; if (strlen(prefix) && !bitclkmaster && !framemaster) { /* * No dai-link level and master setting was not found from * sound node level, revert back to legacy DT parsing and * take the settings from codec node. */ dev_dbg(dev, "Revert to legacy daifmt parsing\n"); daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) | (daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK); } else { if (codec == bitclkmaster) daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS; else daifmt |= (codec == framemaster) ? SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS; } dai_link->dai_fmt = daifmt; of_node_put(bitclkmaster); of_node_put(framemaster); return 0; } static int asoc_simple_card_dai_link_of(struct device_node *node, struct simple_card_data *priv, int idx, Loading Loading @@ -386,8 +344,8 @@ static int asoc_simple_card_dai_link_of(struct device_node *node, goto dai_link_of_err; } ret = asoc_simple_card_parse_daifmt(node, priv, codec, prefix, idx); ret = asoc_simple_card_parse_daifmt(dev, node, codec, prefix, &dai_link->dai_fmt); if (ret < 0) goto dai_link_of_err; Loading