|
@@ -1810,6 +1810,9 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
|
|
|
{ "Slim2 Capture", NULL, "SYSCLK" },
|
|
|
{ "Slim3 Capture", NULL, "SYSCLK" },
|
|
|
|
|
|
+ { "Voice Control DSP", NULL, "DSP3" },
|
|
|
+ { "Voice Control DSP", NULL, "SYSCLK" },
|
|
|
+
|
|
|
{ "IN1L PGA", NULL, "IN1L" },
|
|
|
{ "IN1R PGA", NULL, "IN1R" },
|
|
|
|
|
@@ -2132,6 +2135,27 @@ static struct snd_soc_dai_driver wm5110_dai[] = {
|
|
|
},
|
|
|
.ops = &arizona_simple_dai_ops,
|
|
|
},
|
|
|
+ {
|
|
|
+ .name = "wm5110-cpu-voicectrl",
|
|
|
+ .capture = {
|
|
|
+ .stream_name = "Voice Control CPU",
|
|
|
+ .channels_min = 1,
|
|
|
+ .channels_max = 1,
|
|
|
+ .rates = WM5110_RATES,
|
|
|
+ .formats = WM5110_FORMATS,
|
|
|
+ },
|
|
|
+ .compress_new = snd_soc_new_compress,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "wm5110-dsp-voicectrl",
|
|
|
+ .capture = {
|
|
|
+ .stream_name = "Voice Control DSP",
|
|
|
+ .channels_min = 1,
|
|
|
+ .channels_max = 1,
|
|
|
+ .rates = WM5110_RATES,
|
|
|
+ .formats = WM5110_FORMATS,
|
|
|
+ },
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static int wm5110_codec_probe(struct snd_soc_codec *codec)
|
|
@@ -2224,6 +2248,13 @@ static struct snd_soc_codec_driver soc_codec_dev_wm5110 = {
|
|
|
.num_dapm_routes = ARRAY_SIZE(wm5110_dapm_routes),
|
|
|
};
|
|
|
|
|
|
+static struct snd_compr_ops wm5110_compr_ops = {
|
|
|
+};
|
|
|
+
|
|
|
+static struct snd_soc_platform_driver wm5110_compr_platform = {
|
|
|
+ .compr_ops = &wm5110_compr_ops,
|
|
|
+};
|
|
|
+
|
|
|
static int wm5110_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct arizona *arizona = dev_get_drvdata(pdev->dev.parent);
|
|
@@ -2284,8 +2315,21 @@ static int wm5110_probe(struct platform_device *pdev)
|
|
|
pm_runtime_enable(&pdev->dev);
|
|
|
pm_runtime_idle(&pdev->dev);
|
|
|
|
|
|
- return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5110,
|
|
|
+ ret = snd_soc_register_platform(&pdev->dev, &wm5110_compr_platform);
|
|
|
+ if (ret < 0) {
|
|
|
+ dev_err(&pdev->dev, "Failed to register platform: %d\n", ret);
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5110,
|
|
|
wm5110_dai, ARRAY_SIZE(wm5110_dai));
|
|
|
+ if (ret < 0) {
|
|
|
+ dev_err(&pdev->dev, "Failed to register codec: %d\n", ret);
|
|
|
+ snd_soc_unregister_platform(&pdev->dev);
|
|
|
+ }
|
|
|
+
|
|
|
+error:
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int wm5110_remove(struct platform_device *pdev)
|