@@ -84,6 +84,7 @@ Optional CPU/CODEC subnodes properties:
in dai startup() and disabled with
clk_disable_unprepare() in dai
shutdown().
+- system-clock-direction : "in" or "out", default "in"
Example 1 - single DAI link:
@@ -17,6 +17,7 @@
struct asoc_simple_dai {
const char *name;
unsigned int sysclk;
+ int sysclk_dir;
int slots;
int slot_width;
unsigned int tx_slot_mask;
@@ -142,7 +142,8 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai,
int ret;
if (set->sysclk) {
- ret = snd_soc_dai_set_sysclk(dai, 0, set->sysclk, 0);
+ ret = snd_soc_dai_set_sysclk(dai, 0, set->sysclk,
+ set->sysclk_dir);
if (ret && ret != -ENOTSUPP) {
dev_err(dai->dev, "simple-card: set_sysclk error\n");
goto err;
@@ -220,6 +221,7 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
{
struct of_phandle_args args;
struct clk *clk;
+ const char *str;
u32 val;
int ret;
@@ -249,6 +251,16 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
if (ret)
return ret;
+ ret = of_property_read_string(np, "system-clock-direction", &str);
+ if (ret == 0) {
+ if (!strcmp(str, "out"))
+ dai->sysclk_dir = SND_SOC_CLOCK_OUT;
+ else if (!strcmp(str, "in"))
+ dai->sysclk_dir = SND_SOC_CLOCK_IN;
+ else
+ return -EINVAL;
+ }
+
/*
* Parse dai->sysclk come from "clocks = <&xxx>"
* (if system has common clock)