Select dir parameters for set_sysclk calls in the card init phase.

Signed-off-by: Jyri Sarha <jsa...@ti.com>
---
 .../devicetree/bindings/sound/simple-card.txt      |    1 +
 include/sound/simple_card.h                        |    1 +
 sound/soc/generic/simple-card.c                    |   14 +++++++++++++-
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/sound/simple-card.txt 
b/Documentation/devicetree/bindings/sound/simple-card.txt
index c2e9841..8460744 100644
--- a/Documentation/devicetree/bindings/sound/simple-card.txt
+++ b/Documentation/devicetree/bindings/sound/simple-card.txt
@@ -71,6 +71,7 @@ Optional CPU/CODEC subnodes properties:
                                          it can be specified via "clocks" if 
system has
                                          clock node (= common clock), or 
"system-clock-frequency"
                                          (if system doens't support common 
clock)
+- system-clock-direction               : "in" or "out", default "in"
 
 Example 1 - single DAI link:
 
diff --git a/include/sound/simple_card.h b/include/sound/simple_card.h
index 9b0ac77..6d74fef 100644
--- a/include/sound/simple_card.h
+++ b/include/sound/simple_card.h
@@ -18,6 +18,7 @@ struct asoc_simple_dai {
        const char *name;
        unsigned int fmt;
        unsigned int sysclk;
+       int sysclk_dir;
        int slots;
        int slot_width;
 };
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 159e517f..8dd7957 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -64,7 +64,8 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai 
*dai,
        }
 
        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;
@@ -116,6 +117,7 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
 {
        struct device_node *node;
        struct clk *clk;
+       const char *str;
        u32 val;
        int ret;
 
@@ -138,6 +140,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;
+       }
+
        /*
         * dai->sysclk come from
         *  "clocks = <&xxx>" (if system has common clock)
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to