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: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
c1ae3cfa0e
Коммит
97c52eb969
|
@ -231,6 +231,18 @@ static struct lpass_variant apq8016_data = {
|
|||
.wrdma_channels = 2,
|
||||
.dai_driver = 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,
|
||||
.exit = apq8016_lpass_exit,
|
||||
.alloc_dma_channel = apq8016_lpass_alloc_dma_channel,
|
||||
|
|
|
@ -429,7 +429,6 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
|
|||
struct lpass_variant *variant;
|
||||
struct device *dev = &pdev->dev;
|
||||
const struct of_device_id *match;
|
||||
char clk_name[16];
|
||||
int ret, i, dai_id;
|
||||
|
||||
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)
|
|||
|
||||
for (i = 0; i < variant->num_dai; i++) {
|
||||
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,
|
||||
clk_name);
|
||||
variant->dai_osr_clk_names[i]);
|
||||
if (IS_ERR(drvdata->mi2s_osr_clk[dai_id])) {
|
||||
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]));
|
||||
|
||||
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,
|
||||
clk_name);
|
||||
variant->dai_bit_clk_names[i]);
|
||||
if (IS_ERR(drvdata->mi2s_bit_clk[dai_id])) {
|
||||
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]));
|
||||
return PTR_ERR(drvdata->mi2s_bit_clk[dai_id]);
|
||||
}
|
||||
|
|
|
@ -92,6 +92,12 @@ static struct lpass_variant ipq806x_data = {
|
|||
.wrdma_channels = 4,
|
||||
.dai_driver = &ipq806x_lpass_cpu_dai_driver,
|
||||
.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,
|
||||
.free_dma_channel = ipq806x_lpass_free_dma_channel,
|
||||
};
|
||||
|
|
|
@ -91,6 +91,8 @@ struct lpass_variant {
|
|||
/* SOC specific dais */
|
||||
struct snd_soc_dai_driver *dai_driver;
|
||||
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 */
|
||||
|
|
Загрузка…
Ссылка в новой задаче