.. | .. |
---|
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 | |
---|