浏览代码

ASoC: soc-core: adjust for graph on snd_soc_of_parse_audio_simple_widgets

It is assuming that the card related information is located on
"card" node, but graph case doesn't have it.
This patch adds node parameter to adjust for graph support

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Kuninori Morimoto 8 年之前
父节点
当前提交
1ef5bcd57b
共有 2 个文件被更改,包括 12 次插入5 次删除
  1. 6 2
      include/sound/soc.h
  2. 6 3
      sound/soc/soc-core.c

+ 6 - 2
include/sound/soc.h

@@ -1647,8 +1647,12 @@ void snd_soc_util_exit(void);
 int snd_soc_of_parse_card_name_from_node(struct snd_soc_card *card,
 int snd_soc_of_parse_card_name_from_node(struct snd_soc_card *card,
 					 struct device_node *np,
 					 struct device_node *np,
 					 const char *propname);
 					 const char *propname);
-int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
-					  const char *propname);
+#define snd_soc_of_parse_audio_simple_widgets(card, propname)\
+	snd_soc_of_parse_audio_simple_widgets_from_node(card, NULL, propname)
+int snd_soc_of_parse_audio_simple_widgets_from_node(struct snd_soc_card *card,
+						    struct device_node *np,
+						    const char *propname);
+
 int snd_soc_of_parse_tdm_slot(struct device_node *np,
 int snd_soc_of_parse_tdm_slot(struct device_node *np,
 			      unsigned int *tx_mask,
 			      unsigned int *tx_mask,
 			      unsigned int *rx_mask,
 			      unsigned int *rx_mask,

+ 6 - 3
sound/soc/soc-core.c

@@ -3462,14 +3462,17 @@ static const struct snd_soc_dapm_widget simple_widgets[] = {
 	SND_SOC_DAPM_SPK("Speaker", NULL),
 	SND_SOC_DAPM_SPK("Speaker", NULL),
 };
 };
 
 
-int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
+int snd_soc_of_parse_audio_simple_widgets_from_node(struct snd_soc_card *card,
+					  struct device_node *np,
 					  const char *propname)
 					  const char *propname)
 {
 {
-	struct device_node *np = card->dev->of_node;
 	struct snd_soc_dapm_widget *widgets;
 	struct snd_soc_dapm_widget *widgets;
 	const char *template, *wname;
 	const char *template, *wname;
 	int i, j, num_widgets, ret;
 	int i, j, num_widgets, ret;
 
 
+	if (!np)
+		np = card->dev->of_node;
+
 	num_widgets = of_property_count_strings(np, propname);
 	num_widgets = of_property_count_strings(np, propname);
 	if (num_widgets < 0) {
 	if (num_widgets < 0) {
 		dev_err(card->dev,
 		dev_err(card->dev,
@@ -3540,7 +3543,7 @@ int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
 
 
 	return 0;
 	return 0;
 }
 }
-EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets);
+EXPORT_SYMBOL_GPL(snd_soc_of_parse_audio_simple_widgets_from_node);
 
 
 static int snd_soc_of_get_slot_mask(struct device_node *np,
 static int snd_soc_of_get_slot_mask(struct device_node *np,
 				    const char *prop_name,
 				    const char *prop_name,