hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/sound/soc/rockchip/rockchip_vad.c
....@@ -252,13 +252,11 @@
252252 struct rockchip_vad *vad = NULL;
253253 unsigned int i;
254254
255
- if (PCM_RUNTIME_CHECK(substream))
256
- return NULL;
257255 if (!rtd)
258256 return NULL;
259257
260258 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);
262260
263261 if (strstr(codec_dai->name, "vad"))
264262 vad = snd_soc_component_get_drvdata(codec_dai->component);
....@@ -624,6 +622,12 @@
624622 { /* sentinel */ },
625623 };
626624
625
+static const struct audio_src_addr_map rk3588_addr_map[] = {
626
+ { 0, RK3588_PDM0 },
627
+ { 1, RK3588_I2S1_8CH },
628
+ { /* sentinel */ },
629
+};
630
+
627631 static const struct vad_soc_data rk1808es_soc_data = {
628632 .version = VAD_RK1808ES,
629633 .map = rk1808_addr_map,
....@@ -644,13 +648,18 @@
644648 .map = rk3568_addr_map,
645649 };
646650
651
+static const struct vad_soc_data rk3588_soc_data = {
652
+ .version = VAD_RK1808,
653
+ .map = rk3588_addr_map,
654
+};
655
+
647656 static int rockchip_vad_get_audio_src_address(struct rockchip_vad *vad,
648657 u32 addr)
649658 {
650659 const struct audio_src_addr_map *map = vad->soc_data->map;
651660
652661 for (; map->addr; map++) {
653
- if ((addr & map->addr) == addr) {
662
+ if ((map->addr & 0xffff0000) == addr) {
654663 vad->audio_src = map->id;
655664 vad->audio_src_addr = map->addr;
656665 return 0;
....@@ -720,7 +729,7 @@
720729
721730 dai_component.of_node = np;
722731
723
- return snd_soc_find_dai(&dai_component);
732
+ return snd_soc_find_dai_with_mutex(&dai_component);
724733 }
725734
726735 static void hw_refine_channels(struct snd_pcm_hw_params *params,
....@@ -745,7 +754,7 @@
745754 unsigned int *channel_maps;
746755 int i;
747756
748
- cpu_dai = rtd->cpu_dai;
757
+ cpu_dai = asoc_rtd_to_cpu(rtd, 0);
749758 vad->cpu_dai = cpu_dai;
750759 vad->substream = substream;
751760 np = cpu_dai->dev->of_node;
....@@ -863,11 +872,20 @@
863872 return 0;
864873
865874 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);
866879
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
+ }
871889
872890 return ret;
873891 }
....@@ -1130,6 +1148,7 @@
11301148 { .compatible = "rockchip,rk1808-vad", .data = &rk1808_soc_data },
11311149 { .compatible = "rockchip,rk3308-vad", .data = &rk3308_soc_data },
11321150 { .compatible = "rockchip,rk3568-vad", .data = &rk3568_soc_data },
1151
+ { .compatible = "rockchip,rk3588-vad", .data = &rk3588_soc_data },
11331152 {},
11341153 };
11351154