aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/sound/simple-card.txt3
-rw-r--r--include/sound/simple_card_utils.h1
-rw-r--r--sound/soc/generic/simple-card-utils.c9
3 files changed, 11 insertions, 2 deletions
diff --git a/Documentation/devicetree/bindings/sound/simple-card.txt b/Documentation/devicetree/bindings/sound/simple-card.txt
index c7a93931fad2..166f2290233b 100644
--- a/Documentation/devicetree/bindings/sound/simple-card.txt
+++ b/Documentation/devicetree/bindings/sound/simple-card.txt
@@ -86,6 +86,9 @@ Optional CPU/CODEC subnodes properties:
86 in dai startup() and disabled with 86 in dai startup() and disabled with
87 clk_disable_unprepare() in dai 87 clk_disable_unprepare() in dai
88 shutdown(). 88 shutdown().
89- system-clock-direction-out : specifies clock direction as 'out' on
90 initialization. It is useful for some aCPUs with
91 fixed clocks.
89 92
90Example 1 - single DAI link: 93Example 1 - single DAI link:
91 94
diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
index 42c6a6ac3ce6..7e25afce6566 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -15,6 +15,7 @@
15struct asoc_simple_dai { 15struct asoc_simple_dai {
16 const char *name; 16 const char *name;
17 unsigned int sysclk; 17 unsigned int sysclk;
18 int clk_direction;
18 int slots; 19 int slots;
19 int slot_width; 20 int slot_width;
20 unsigned int tx_slot_mask; 21 unsigned int tx_slot_mask;
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index 26d64fa40c9c..af44c8c52a19 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -196,7 +196,11 @@ int asoc_simple_card_parse_clk(struct device *dev,
196 simple_dai->sysclk = clk_get_rate(clk); 196 simple_dai->sysclk = clk_get_rate(clk);
197 } 197 }
198 198
199 dev_dbg(dev, "%s : sysclk = %d\n", name, simple_dai->sysclk); 199 if (of_property_read_bool(node, "system-clock-direction-out"))
200 simple_dai->clk_direction = SND_SOC_CLOCK_OUT;
201
202 dev_dbg(dev, "%s : sysclk = %d, direction %d\n", name,
203 simple_dai->sysclk, simple_dai->clk_direction);
200 204
201 return 0; 205 return 0;
202} 206}
@@ -310,7 +314,8 @@ int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
310 int ret; 314 int ret;
311 315
312 if (simple_dai->sysclk) { 316 if (simple_dai->sysclk) {
313 ret = snd_soc_dai_set_sysclk(dai, 0, simple_dai->sysclk, 0); 317 ret = snd_soc_dai_set_sysclk(dai, 0, simple_dai->sysclk,
318 simple_dai->clk_direction);
314 if (ret && ret != -ENOTSUPP) { 319 if (ret && ret != -ENOTSUPP) {
315 dev_err(dai->dev, "simple-card: set_sysclk error\n"); 320 dev_err(dai->dev, "simple-card: set_sysclk error\n");
316 return ret; 321 return ret;