Skip to content

Commit

Permalink
ASoC: rockchip: Add support rt5514 dsp summy dailink
Browse files Browse the repository at this point in the history
This patch can attach automaticlly rt5514 spi DAI with driver name "rt5514"
in the snd_soc_find_dai process. Turn this feature on, we can enable the
voice wake up via rt5514 dsp for RK3399 Gru Boards.

Signed-off-by: Xing Zheng <zhengxing@rock-chips.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Xing Zheng authored and Mark Brown committed Aug 19, 2016
1 parent c6eac8a commit e5abe95
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
1 change: 1 addition & 0 deletions sound/soc/rockchip/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ config SND_SOC_RK3399_GRU_SOUND
select SND_SOC_MAX98357A
select SND_SOC_RT5514
select SND_SOC_DA7219
select SND_SOC_RT5514_SPI
help
Say Y or M here if you want to add support multiple codecs for SoC
audio on Rockchip RK3399 GRU boards.
39 changes: 38 additions & 1 deletion sound/soc/rockchip/rk3399_gru_sound.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,11 @@ enum {
DAILINK_MAX98357A,
DAILINK_RT5514,
DAILINK_DA7219,
DAILINK_RT5514_DSP,
};

#define DAILINK_ENTITIES (DAILINK_DA7219 + 1)

static struct snd_soc_dai_link rockchip_dailinks[] = {
[DAILINK_MAX98357A] = {
.name = "MAX98357A",
Expand Down Expand Up @@ -261,6 +264,13 @@ static struct snd_soc_dai_link rockchip_dailinks[] = {
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBS_CFS,
},
/* RT5514 DSP for voice wakeup via spi bus */
[DAILINK_RT5514_DSP] = {
.name = "RT5514 DSP",
.stream_name = "Wake on Voice",
.codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai",
},
};

static struct snd_soc_card rockchip_sound_card = {
Expand All @@ -276,10 +286,17 @@ static struct snd_soc_card rockchip_sound_card = {
.num_controls = ARRAY_SIZE(rockchip_controls),
};

static int rockchip_sound_match_stub(struct device *dev, void *data)
{
return 1;
}

static int rockchip_sound_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = &rockchip_sound_card;
struct device_node *cpu_node;
struct device *dev;
struct device_driver *drv;
int i, ret;

cpu_node = of_parse_phandle(pdev->dev.of_node, "rockchip,cpu", 0);
Expand All @@ -288,7 +305,7 @@ static int rockchip_sound_probe(struct platform_device *pdev)
return -EINVAL;
}

for (i = 0; i < card->num_links; i++) {
for (i = 0; i < DAILINK_ENTITIES; i++) {
rockchip_dailinks[i].platform_of_node = cpu_node;
rockchip_dailinks[i].cpu_of_node = cpu_node;

Expand All @@ -301,6 +318,26 @@ static int rockchip_sound_probe(struct platform_device *pdev)
}
}

/**
* To acquire the spi driver of the rt5514 and set the dai-links names
* for soc_bind_dai_link
*/
drv = driver_find("rt5514", &spi_bus_type);
if (!drv) {
dev_err(&pdev->dev, "Can not find the rt5514 driver at the spi bus\n");
return -EINVAL;
}

dev = driver_find_device(drv, NULL, NULL, rockchip_sound_match_stub);
if (!dev) {
dev_err(&pdev->dev, "Can not find the rt5514 device\n");
return -ENODEV;
}

rockchip_dailinks[DAILINK_RT5514_DSP].cpu_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
rockchip_dailinks[DAILINK_RT5514_DSP].cpu_dai_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
rockchip_dailinks[DAILINK_RT5514_DSP].platform_name = kstrdup_const(dev_name(dev), GFP_KERNEL);

card->dev = &pdev->dev;
platform_set_drvdata(pdev, card);

Expand Down

0 comments on commit e5abe95

Please sign in to comment.