Commit 97c52eb9 authored by Linus Walleij's avatar Linus Walleij Committed by Mark Brown

ASoC: qcom: move clock names into LPASS variant struct

The clock names for the two supported codecs are either
"mi2s-*" name variants generated by code. This naming scheme
does not work for platforms like MSM8660 which has I2S channels
named CODEC_I2S_SPKR (rather than just "MI2S tertiary" and other
repetitive names) and consequently have clocks named
"codec-i2s-spkr-osr-clk" and similar.

Skip the runtime generation of clock names and replace it with
name lookup tables encoded into the variant data.
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c1ae3cfa
...@@ -231,6 +231,18 @@ static struct lpass_variant apq8016_data = { ...@@ -231,6 +231,18 @@ static struct lpass_variant apq8016_data = {
.wrdma_channels = 2, .wrdma_channels = 2,
.dai_driver = apq8016_lpass_cpu_dai_driver, .dai_driver = apq8016_lpass_cpu_dai_driver,
.num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver), .num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver),
.dai_osr_clk_names = (const char *[]) {
"mi2s-osr-clk0",
"mi2s-osr-clk1",
"mi2s-osr-clk2",
"mi2s-osr-clk3",
},
.dai_bit_clk_names = (const char *[]) {
"mi2s-bit-clk0",
"mi2s-bit-clk1",
"mi2s-bit-clk2",
"mi2s-bit-clk3",
},
.init = apq8016_lpass_init, .init = apq8016_lpass_init,
.exit = apq8016_lpass_exit, .exit = apq8016_lpass_exit,
.alloc_dma_channel = apq8016_lpass_alloc_dma_channel, .alloc_dma_channel = apq8016_lpass_alloc_dma_channel,
......
...@@ -429,7 +429,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev) ...@@ -429,7 +429,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
struct lpass_variant *variant; struct lpass_variant *variant;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct of_device_id *match; const struct of_device_id *match;
char clk_name[16];
int ret, i, dai_id; int ret, i, dai_id;
dsp_of_node = of_parse_phandle(pdev->dev.of_node, "qcom,adsp", 0); dsp_of_node = of_parse_phandle(pdev->dev.of_node, "qcom,adsp", 0);
...@@ -477,31 +476,24 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev) ...@@ -477,31 +476,24 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
for (i = 0; i < variant->num_dai; i++) { for (i = 0; i < variant->num_dai; i++) {
dai_id = variant->dai_driver[i].id; dai_id = variant->dai_driver[i].id;
if (variant->num_dai > 1)
sprintf(clk_name, "mi2s-osr-clk%d", i);
else
sprintf(clk_name, "mi2s-osr-clk");
drvdata->mi2s_osr_clk[dai_id] = devm_clk_get(&pdev->dev, drvdata->mi2s_osr_clk[dai_id] = devm_clk_get(&pdev->dev,
clk_name); variant->dai_osr_clk_names[i]);
if (IS_ERR(drvdata->mi2s_osr_clk[dai_id])) { if (IS_ERR(drvdata->mi2s_osr_clk[dai_id])) {
dev_warn(&pdev->dev, dev_warn(&pdev->dev,
"error getting optional mi2s-osr-clk: %ld\n", "%s() error getting optional %s: %ld\n",
__func__,
variant->dai_osr_clk_names[i],
PTR_ERR(drvdata->mi2s_osr_clk[dai_id])); PTR_ERR(drvdata->mi2s_osr_clk[dai_id]));
drvdata->mi2s_osr_clk[dai_id] = NULL; drvdata->mi2s_osr_clk[dai_id] = NULL;
} }
if (variant->num_dai > 1)
sprintf(clk_name, "mi2s-bit-clk%d", i);
else
sprintf(clk_name, "mi2s-bit-clk");
drvdata->mi2s_bit_clk[dai_id] = devm_clk_get(&pdev->dev, drvdata->mi2s_bit_clk[dai_id] = devm_clk_get(&pdev->dev,
clk_name); variant->dai_bit_clk_names[i]);
if (IS_ERR(drvdata->mi2s_bit_clk[dai_id])) { if (IS_ERR(drvdata->mi2s_bit_clk[dai_id])) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"error getting mi2s-bit-clk: %ld\n", "error getting %s: %ld\n",
variant->dai_bit_clk_names[i],
PTR_ERR(drvdata->mi2s_bit_clk[dai_id])); PTR_ERR(drvdata->mi2s_bit_clk[dai_id]));
return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]); return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]);
} }
......
...@@ -92,6 +92,12 @@ static struct lpass_variant ipq806x_data = { ...@@ -92,6 +92,12 @@ static struct lpass_variant ipq806x_data = {
.wrdma_channels = 4, .wrdma_channels = 4,
.dai_driver = &ipq806x_lpass_cpu_dai_driver, .dai_driver = &ipq806x_lpass_cpu_dai_driver,
.num_dai = 1, .num_dai = 1,
.dai_osr_clk_names = (const char *[]) {
"mi2s-osr-clk",
},
.dai_bit_clk_names = (const char *[]) {
"mi2s-bit-clk",
},
.alloc_dma_channel = ipq806x_lpass_alloc_dma_channel, .alloc_dma_channel = ipq806x_lpass_alloc_dma_channel,
.free_dma_channel = ipq806x_lpass_free_dma_channel, .free_dma_channel = ipq806x_lpass_free_dma_channel,
}; };
......
...@@ -91,6 +91,8 @@ struct lpass_variant { ...@@ -91,6 +91,8 @@ struct lpass_variant {
/* SOC specific dais */ /* SOC specific dais */
struct snd_soc_dai_driver *dai_driver; struct snd_soc_dai_driver *dai_driver;
int num_dai; int num_dai;
const char * const *dai_osr_clk_names;
const char * const *dai_bit_clk_names;
}; };
/* register the platform driver from the CPU DAI driver */ /* register the platform driver from the CPU DAI driver */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment