From e1acb40a3addc9aceb4600f04c9c86b50770b9b8 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Thu, 19 Dec 2013 11:59:54 +0800 Subject: ASoC: simple-card: Use devm_snd_soc_register_card() Makes the code slightly shorter. Signed-off-by: Xiubo Li Acked-by: Kuninori Morimoto Signed-off-by: Mark Brown --- sound/soc/generic/simple-card.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'sound/soc/generic') diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index 7a9b6b4898c..3d190d05ad4 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -234,14 +234,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev) cinfo->snd_card.num_links = 1; cinfo->snd_card.dev = &pdev->dev; - return snd_soc_register_card(&cinfo->snd_card); -} - -static int asoc_simple_card_remove(struct platform_device *pdev) -{ - struct asoc_simple_card_info *cinfo = pdev->dev.platform_data; - - return snd_soc_unregister_card(&cinfo->snd_card); + return devm_snd_soc_register_card(&pdev->dev, &cinfo->snd_card); } static const struct of_device_id asoc_simple_of_match[] = { @@ -257,7 +250,6 @@ static struct platform_driver asoc_simple_card = { .of_match_table = asoc_simple_of_match, }, .probe = asoc_simple_card_probe, - .remove = asoc_simple_card_remove, }; module_platform_driver(asoc_simple_card); -- cgit v1.2.3-70-g09d2 From d4c22094b256a7327346738721b89a78d4680b08 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Mon, 23 Dec 2013 12:57:01 +0800 Subject: ASoC: simple-card: Add DAPM routes parse from device tree Parses a simple DAPM route table from device tree. Signed-off-by: Xiubo Li Signed-off-by: Mark Brown --- Documentation/devicetree/bindings/sound/simple-card.txt | 13 +++++++++++-- sound/soc/generic/simple-card.c | 11 +++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'sound/soc/generic') diff --git a/Documentation/devicetree/bindings/sound/simple-card.txt b/Documentation/devicetree/bindings/sound/simple-card.txt index 769a346f890..2ee80c76ca6 100644 --- a/Documentation/devicetree/bindings/sound/simple-card.txt +++ b/Documentation/devicetree/bindings/sound/simple-card.txt @@ -9,8 +9,13 @@ Required properties: Optional properties: - simple-audio-card,format : CPU/CODEC common audio format. - "i2s", "right_j", "left_j" , "dsp_a" - "dsp_b", "ac97", "pdm", "msb", "lsb" + "i2s", "right_j", "left_j" , "dsp_a" + "dsp_b", "ac97", "pdm", "msb", "lsb" +- simple-audio-routing : A list of the connections between audio components. + Each entry is a pair of strings, the first being the + connection's sink, the second being the connection's + source. + Required subnodes: - simple-audio-card,cpu : CPU sub-node @@ -38,6 +43,10 @@ Example: sound { compatible = "simple-audio-card"; simple-audio-card,format = "left_j"; + simple-audio-routing = + "MIC_IN", "Mic Jack", + "Headphone Jack", "HP_OUT", + "Ext Spk", "LINE_OUT"; simple-audio-card,cpu { sound-dai = <&sh_fsi2 0>; diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index 3d190d05ad4..6230efb05fd 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -116,12 +116,18 @@ static int asoc_simple_card_parse_of(struct device_node *node, { struct device_node *np; char *name; - int ret = 0; + int ret; /* get CPU/CODEC common format via simple-audio-card,format */ info->daifmt = snd_soc_of_parse_daifmt(node, "simple-audio-card,") & (SND_SOC_DAIFMT_FORMAT_MASK | SND_SOC_DAIFMT_INV_MASK); + /* DAPM routes */ + ret = snd_soc_of_parse_audio_routing(&info->snd_card, + "simple-audio-routing"); + if (ret) + return ret; + /* CPU sub-node */ ret = -EINVAL; np = of_get_child_by_name(node, "simple-audio-card,cpu"); @@ -182,6 +188,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev) cinfo = devm_kzalloc(dev, sizeof(*cinfo), GFP_KERNEL); if (cinfo) { int ret; + cinfo->snd_card.dev = &pdev->dev; ret = asoc_simple_card_parse_of(np, cinfo, dev, &of_cpu, &of_codec, @@ -193,6 +200,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev) } } } else { + cinfo->snd_card.dev = &pdev->dev; cinfo = pdev->dev.platform_data; } @@ -232,7 +240,6 @@ static int asoc_simple_card_probe(struct platform_device *pdev) cinfo->snd_card.owner = THIS_MODULE; cinfo->snd_card.dai_link = &cinfo->snd_link; cinfo->snd_card.num_links = 1; - cinfo->snd_card.dev = &pdev->dev; return devm_snd_soc_register_card(&pdev->dev, &cinfo->snd_card); } -- cgit v1.2.3-70-g09d2 From e874ddead38996ec40c6a6be2347a69fac520126 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Mon, 23 Dec 2013 13:24:59 +0800 Subject: ASoC: simple-card: Cleanup __asoc_simple_card_dai_init() ret check The ret parameter is always equal to zero till here. Signed-off-by: Xiubo Li Signed-off-by: Mark Brown --- sound/soc/generic/simple-card.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sound/soc/generic') diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index 6230efb05fd..3ba65bb6343 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -25,7 +25,7 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai, daifmt |= set->fmt; - if (!ret && daifmt) + if (daifmt) ret = snd_soc_dai_set_fmt(dai, daifmt); if (ret == -ENOTSUPP) { -- cgit v1.2.3-70-g09d2 From 71467e46414d3bab220de77d3d085be0c0aa03e1 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Mon, 23 Dec 2013 15:25:38 +0800 Subject: ASoC: simple-card: Add device's module clock selection. Try to get the device's module clock if the dt has no clocks and system-clock-frequency properties. Signed-off-by: Xiubo Li Signed-off-by: Mark Brown --- sound/soc/generic/simple-card.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'sound/soc/generic') diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index 3ba65bb6343..58c217e403a 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -90,14 +90,29 @@ asoc_simple_card_sub_parse_of(struct device_node *np, * dai->sysclk come from * "clocks = <&xxx>" (if system has common clock) * or "system-clock-frequency = " + * or device's module clock. */ - clk = of_clk_get(np, 0); - if (IS_ERR(clk)) + if (of_property_read_bool(np, "clocks")) { + clk = of_clk_get(np, 0); + if (IS_ERR(clk)) { + ret = PTR_ERR(clk); + goto parse_error; + } + + dai->sysclk = clk_get_rate(clk); + } else if (of_property_read_bool(np, "system-clock-frequency")) { of_property_read_u32(np, "system-clock-frequency", &dai->sysclk); - else + } else { + clk = of_clk_get(*node, 0); + if (IS_ERR(clk)) { + ret = PTR_ERR(clk); + goto parse_error; + } + dai->sysclk = clk_get_rate(clk); + } ret = 0; -- cgit v1.2.3-70-g09d2