| From 990b46defa1032606071010a7890b64d81c5748c Mon Sep 17 00:00:00 2001 |
| From: Xiubo Li <Li.Xiubo@freescale.com> |
| Date: Fri, 14 Feb 2014 09:34:36 +0800 |
| Subject: ASoC: simple-card: add slot information parsing supports |
| |
| For some CPU/CODEC DAI devices the slot information maybe needed. This |
| patch adds the slot information parsing for simple-card driver. |
| |
| Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 6ff62eedce4f7756b092d276165d8e11edab9f28) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| .../devicetree/bindings/sound/simple-card.txt | 5 +++++ |
| include/sound/simple_card.h | 2 ++ |
| sound/soc/generic/simple-card.c | 18 ++++++++++++++++++ |
| 3 files changed, 25 insertions(+) |
| |
| diff --git a/Documentation/devicetree/bindings/sound/simple-card.txt b/Documentation/devicetree/bindings/sound/simple-card.txt |
| index 05273583490c..b30c222f9cd3 100644 |
| --- a/Documentation/devicetree/bindings/sound/simple-card.txt |
| +++ b/Documentation/devicetree/bindings/sound/simple-card.txt |
| @@ -18,6 +18,8 @@ Optional properties: |
| Each entry is a pair of strings, the first being the |
| connection's sink, the second being the connection's |
| source. |
| +- dai-tdm-slot-num : Please refer to tdm-slot.txt. |
| +- dai-tdm-slot-width : Please refer to tdm-slot.txt. |
| |
| Required subnodes: |
| |
| @@ -56,6 +58,9 @@ sound { |
| "Headphone Jack", "HP_OUT", |
| "External Speaker", "LINE_OUT"; |
| |
| + dai-tdm-slot-num = <2>; |
| + dai-tdm-slot-width = <8>; |
| + |
| simple-audio-card,cpu { |
| sound-dai = <&sh_fsi2 0>; |
| }; |
| diff --git a/include/sound/simple_card.h b/include/sound/simple_card.h |
| index e1ac996c8feb..9b0ac77177b6 100644 |
| --- a/include/sound/simple_card.h |
| +++ b/include/sound/simple_card.h |
| @@ -18,6 +18,8 @@ struct asoc_simple_dai { |
| const char *name; |
| unsigned int fmt; |
| unsigned int sysclk; |
| + int slots; |
| + int slot_width; |
| }; |
| |
| struct asoc_simple_card_info { |
| diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c |
| index 4fe8abc6e216..bdd176ddff07 100644 |
| --- a/sound/soc/generic/simple-card.c |
| +++ b/sound/soc/generic/simple-card.c |
| @@ -9,11 +9,14 @@ |
| * published by the Free Software Foundation. |
| */ |
| #include <linux/clk.h> |
| +#include <linux/device.h> |
| #include <linux/module.h> |
| #include <linux/of.h> |
| #include <linux/platform_device.h> |
| #include <linux/string.h> |
| #include <sound/simple_card.h> |
| +#include <sound/soc-dai.h> |
| +#include <sound/soc.h> |
| |
| struct simple_card_data { |
| struct snd_soc_card snd_card; |
| @@ -44,6 +47,16 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai, |
| } |
| } |
| |
| + if (set->slots) { |
| + ret = snd_soc_dai_set_tdm_slot(dai, 0, 0, |
| + set->slots, |
| + set->slot_width); |
| + if (ret && ret != -ENOTSUPP) { |
| + dev_err(dai->dev, "simple-card: set_tdm_slot error\n"); |
| + goto err; |
| + } |
| + } |
| + |
| ret = 0; |
| |
| err: |
| @@ -94,6 +107,11 @@ asoc_simple_card_sub_parse_of(struct device_node *np, |
| if (ret < 0) |
| goto parse_error; |
| |
| + /* parse TDM slot */ |
| + ret = snd_soc_of_parse_tdm_slot(np, &dai->slots, &dai->slot_width); |
| + if (ret) |
| + goto parse_error; |
| + |
| /* |
| * bitclock-inversion, frame-inversion |
| * bitclock-master, frame-master |
| -- |
| 2.1.2 |
| |