aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/sh/Kconfig1
-rw-r--r--sound/soc/sh/rcar/rsrc-card.c38
2 files changed, 5 insertions, 34 deletions
diff --git a/sound/soc/sh/Kconfig b/sound/soc/sh/Kconfig
index c9902a6d6fa0..9311f119feb5 100644
--- a/sound/soc/sh/Kconfig
+++ b/sound/soc/sh/Kconfig
@@ -44,6 +44,7 @@ config SND_SOC_RCAR
44 44
45config SND_SOC_RSRC_CARD 45config SND_SOC_RSRC_CARD
46 tristate "Renesas Sampling Rate Convert Sound Card" 46 tristate "Renesas Sampling Rate Convert Sound Card"
47 select SND_SIMPLE_CARD_UTILS
47 help 48 help
48 This option enables simple sound if you need sampling rate convert 49 This option enables simple sound if you need sampling rate convert
49 50
diff --git a/sound/soc/sh/rcar/rsrc-card.c b/sound/soc/sh/rcar/rsrc-card.c
index 1bc7ecfc42a9..984d8fed0dbd 100644
--- a/sound/soc/sh/rcar/rsrc-card.c
+++ b/sound/soc/sh/rcar/rsrc-card.c
@@ -20,6 +20,7 @@
20#include <sound/jack.h> 20#include <sound/jack.h>
21#include <sound/soc.h> 21#include <sound/soc.h>
22#include <sound/soc-dai.h> 22#include <sound/soc-dai.h>
23#include <sound/simple_card_utils.h>
23 24
24struct rsrc_card_of_data { 25struct rsrc_card_of_data {
25 const char *prefix; 26 const char *prefix;
@@ -159,38 +160,6 @@ static int rsrc_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
159 return 0; 160 return 0;
160} 161}
161 162
162static int rsrc_card_parse_daifmt(struct device_node *node,
163 struct device_node *codec,
164 struct rsrc_card_priv *priv,
165 struct snd_soc_dai_link *dai_link,
166 unsigned int *retfmt)
167{
168 struct device_node *bitclkmaster = NULL;
169 struct device_node *framemaster = NULL;
170 unsigned int daifmt;
171
172 daifmt = snd_soc_of_parse_daifmt(node, NULL,
173 &bitclkmaster, &framemaster);
174 daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
175
176 if (!bitclkmaster && !framemaster)
177 return -EINVAL;
178
179 if (codec == bitclkmaster)
180 daifmt |= (codec == framemaster) ?
181 SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS;
182 else
183 daifmt |= (codec == framemaster) ?
184 SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS;
185
186 of_node_put(bitclkmaster);
187 of_node_put(framemaster);
188
189 *retfmt = daifmt;
190
191 return 0;
192}
193
194static int rsrc_card_parse_links(struct device_node *np, 163static int rsrc_card_parse_links(struct device_node *np,
195 struct rsrc_card_priv *priv, 164 struct rsrc_card_priv *priv,
196 int idx, bool is_fe) 165 int idx, bool is_fe)
@@ -358,6 +327,7 @@ static int rsrc_card_dai_sub_link_of(struct device_node *node,
358static int rsrc_card_dai_link_of(struct device_node *node, 327static int rsrc_card_dai_link_of(struct device_node *node,
359 struct rsrc_card_priv *priv) 328 struct rsrc_card_priv *priv)
360{ 329{
330 struct device *dev = rsrc_priv_to_dev(priv);
361 struct snd_soc_dai_link *dai_link; 331 struct snd_soc_dai_link *dai_link;
362 struct device_node *np; 332 struct device_node *np;
363 unsigned int daifmt = 0; 333 unsigned int daifmt = 0;
@@ -370,8 +340,8 @@ static int rsrc_card_dai_link_of(struct device_node *node,
370 dai_link = rsrc_priv_to_link(priv, i); 340 dai_link = rsrc_priv_to_link(priv, i);
371 341
372 if (strcmp(np->name, "codec") == 0) { 342 if (strcmp(np->name, "codec") == 0) {
373 ret = rsrc_card_parse_daifmt(node, np, priv, 343 ret = asoc_simple_card_parse_daifmt(dev, node, np,
374 dai_link, &daifmt); 344 NULL, &daifmt);
375 if (ret < 0) 345 if (ret < 0)
376 return ret; 346 return ret;
377 break; 347 break;