| .. | .. |
|---|
| 252 | 252 | struct rockchip_vad *vad = NULL; |
|---|
| 253 | 253 | unsigned int i; |
|---|
| 254 | 254 | |
|---|
| 255 | | - if (PCM_RUNTIME_CHECK(substream)) |
|---|
| 256 | | - return NULL; |
|---|
| 257 | 255 | if (!rtd) |
|---|
| 258 | 256 | return NULL; |
|---|
| 259 | 257 | |
|---|
| 260 | 258 | for (i = 0; i < rtd->num_codecs; i++) { |
|---|
| 261 | | - struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; |
|---|
| 259 | + struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, i); |
|---|
| 262 | 260 | |
|---|
| 263 | 261 | if (strstr(codec_dai->name, "vad")) |
|---|
| 264 | 262 | vad = snd_soc_component_get_drvdata(codec_dai->component); |
|---|
| .. | .. |
|---|
| 624 | 622 | { /* sentinel */ }, |
|---|
| 625 | 623 | }; |
|---|
| 626 | 624 | |
|---|
| 625 | +static const struct audio_src_addr_map rk3588_addr_map[] = { |
|---|
| 626 | + { 0, RK3588_PDM0 }, |
|---|
| 627 | + { 1, RK3588_I2S1_8CH }, |
|---|
| 628 | + { /* sentinel */ }, |
|---|
| 629 | +}; |
|---|
| 630 | + |
|---|
| 627 | 631 | static const struct vad_soc_data rk1808es_soc_data = { |
|---|
| 628 | 632 | .version = VAD_RK1808ES, |
|---|
| 629 | 633 | .map = rk1808_addr_map, |
|---|
| .. | .. |
|---|
| 644 | 648 | .map = rk3568_addr_map, |
|---|
| 645 | 649 | }; |
|---|
| 646 | 650 | |
|---|
| 651 | +static const struct vad_soc_data rk3588_soc_data = { |
|---|
| 652 | + .version = VAD_RK1808, |
|---|
| 653 | + .map = rk3588_addr_map, |
|---|
| 654 | +}; |
|---|
| 655 | + |
|---|
| 647 | 656 | static int rockchip_vad_get_audio_src_address(struct rockchip_vad *vad, |
|---|
| 648 | 657 | u32 addr) |
|---|
| 649 | 658 | { |
|---|
| 650 | 659 | const struct audio_src_addr_map *map = vad->soc_data->map; |
|---|
| 651 | 660 | |
|---|
| 652 | 661 | for (; map->addr; map++) { |
|---|
| 653 | | - if ((addr & map->addr) == addr) { |
|---|
| 662 | + if ((map->addr & 0xffff0000) == addr) { |
|---|
| 654 | 663 | vad->audio_src = map->id; |
|---|
| 655 | 664 | vad->audio_src_addr = map->addr; |
|---|
| 656 | 665 | return 0; |
|---|
| .. | .. |
|---|
| 720 | 729 | |
|---|
| 721 | 730 | dai_component.of_node = np; |
|---|
| 722 | 731 | |
|---|
| 723 | | - return snd_soc_find_dai(&dai_component); |
|---|
| 732 | + return snd_soc_find_dai_with_mutex(&dai_component); |
|---|
| 724 | 733 | } |
|---|
| 725 | 734 | |
|---|
| 726 | 735 | static void hw_refine_channels(struct snd_pcm_hw_params *params, |
|---|
| .. | .. |
|---|
| 745 | 754 | unsigned int *channel_maps; |
|---|
| 746 | 755 | int i; |
|---|
| 747 | 756 | |
|---|
| 748 | | - cpu_dai = rtd->cpu_dai; |
|---|
| 757 | + cpu_dai = asoc_rtd_to_cpu(rtd, 0); |
|---|
| 749 | 758 | vad->cpu_dai = cpu_dai; |
|---|
| 750 | 759 | vad->substream = substream; |
|---|
| 751 | 760 | np = cpu_dai->dev->of_node; |
|---|
| .. | .. |
|---|
| 863 | 872 | return 0; |
|---|
| 864 | 873 | |
|---|
| 865 | 874 | pm_runtime_get_sync(cpu_dai->dev); |
|---|
| 875 | + if (cpu_dai->driver->ops) { |
|---|
| 876 | + if (cpu_dai->driver->ops->startup) |
|---|
| 877 | + ret = cpu_dai->driver->ops->startup(substream, |
|---|
| 878 | + cpu_dai); |
|---|
| 866 | 879 | |
|---|
| 867 | | - if (cpu_dai->driver->ops && cpu_dai->driver->ops->trigger) |
|---|
| 868 | | - ret = cpu_dai->driver->ops->trigger(substream, |
|---|
| 869 | | - SNDRV_PCM_TRIGGER_START, |
|---|
| 870 | | - cpu_dai); |
|---|
| 880 | + if (cpu_dai->driver->ops->prepare) |
|---|
| 881 | + ret |= cpu_dai->driver->ops->prepare(substream, |
|---|
| 882 | + cpu_dai); |
|---|
| 883 | + |
|---|
| 884 | + if (cpu_dai->driver->ops->trigger) |
|---|
| 885 | + ret |= cpu_dai->driver->ops->trigger(substream, |
|---|
| 886 | + SNDRV_PCM_TRIGGER_START, |
|---|
| 887 | + cpu_dai); |
|---|
| 888 | + } |
|---|
| 871 | 889 | |
|---|
| 872 | 890 | return ret; |
|---|
| 873 | 891 | } |
|---|
| .. | .. |
|---|
| 1130 | 1148 | { .compatible = "rockchip,rk1808-vad", .data = &rk1808_soc_data }, |
|---|
| 1131 | 1149 | { .compatible = "rockchip,rk3308-vad", .data = &rk3308_soc_data }, |
|---|
| 1132 | 1150 | { .compatible = "rockchip,rk3568-vad", .data = &rk3568_soc_data }, |
|---|
| 1151 | + { .compatible = "rockchip,rk3588-vad", .data = &rk3588_soc_data }, |
|---|
| 1133 | 1152 | {}, |
|---|
| 1134 | 1153 | }; |
|---|
| 1135 | 1154 | |
|---|