diff options
author | Charles Keepax <ckeepax@opensource.cirrus.com> | 2018-04-24 11:39:02 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-04-26 07:24:43 -0400 |
commit | ef050bece1b5564b2c7135ceadc0d5ffdcf152f7 (patch) | |
tree | 43cf51aa080a649bfa710a0b59676292624a94ba /sound/soc/soc-pcm.c | |
parent | c0c0be9d12bb5983569f796954f4734734c0aaac (diff) |
ASoC: Remove platform code now everything is componentised
As all drivers have been moved over to the new generic component
code remove the now unused platform specific code.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Acked-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r-- | sound/soc/soc-pcm.c | 119 |
1 files changed, 3 insertions, 116 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 68d9dc930096..da5a2dcb6520 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c | |||
@@ -456,13 +456,12 @@ static void soc_pcm_init_runtime_hw(struct snd_pcm_substream *substream) | |||
456 | /* | 456 | /* |
457 | * Called by ALSA when a PCM substream is opened, the runtime->hw record is | 457 | * Called by ALSA when a PCM substream is opened, the runtime->hw record is |
458 | * then initialized and any private data can be allocated. This also calls | 458 | * then initialized and any private data can be allocated. This also calls |
459 | * startup for the cpu DAI, platform, machine and codec DAI. | 459 | * startup for the cpu DAI, component, machine and codec DAI. |
460 | */ | 460 | */ |
461 | static int soc_pcm_open(struct snd_pcm_substream *substream) | 461 | static int soc_pcm_open(struct snd_pcm_substream *substream) |
462 | { | 462 | { |
463 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 463 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
464 | struct snd_pcm_runtime *runtime = substream->runtime; | 464 | struct snd_pcm_runtime *runtime = substream->runtime; |
465 | struct snd_soc_platform *platform = rtd->platform; | ||
466 | struct snd_soc_component *component; | 465 | struct snd_soc_component *component; |
467 | struct snd_soc_rtdcom_list *rtdcom; | 466 | struct snd_soc_rtdcom_list *rtdcom; |
468 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 467 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -492,23 +491,10 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
492 | } | 491 | } |
493 | } | 492 | } |
494 | 493 | ||
495 | if (platform && platform->driver->ops && platform->driver->ops->open) { | ||
496 | ret = platform->driver->ops->open(substream); | ||
497 | if (ret < 0) { | ||
498 | dev_err(platform->dev, "ASoC: can't open platform" | ||
499 | " %s: %d\n", platform->component.name, ret); | ||
500 | goto platform_err; | ||
501 | } | ||
502 | } | ||
503 | |||
504 | ret = 0; | 494 | ret = 0; |
505 | for_each_rtdcom(rtd, rtdcom) { | 495 | for_each_rtdcom(rtd, rtdcom) { |
506 | component = rtdcom->component; | 496 | component = rtdcom->component; |
507 | 497 | ||
508 | /* ignore duplication for now */ | ||
509 | if (platform && (component == &platform->component)) | ||
510 | continue; | ||
511 | |||
512 | if (!component->driver->ops || | 498 | if (!component->driver->ops || |
513 | !component->driver->ops->open) | 499 | !component->driver->ops->open) |
514 | continue; | 500 | continue; |
@@ -634,10 +620,6 @@ component_err: | |||
634 | for_each_rtdcom(rtd, rtdcom) { | 620 | for_each_rtdcom(rtd, rtdcom) { |
635 | component = rtdcom->component; | 621 | component = rtdcom->component; |
636 | 622 | ||
637 | /* ignore duplication for now */ | ||
638 | if (platform && (component == &platform->component)) | ||
639 | continue; | ||
640 | |||
641 | if (!component->driver->ops || | 623 | if (!component->driver->ops || |
642 | !component->driver->ops->close) | 624 | !component->driver->ops->close) |
643 | continue; | 625 | continue; |
@@ -645,10 +627,6 @@ component_err: | |||
645 | component->driver->ops->close(substream); | 627 | component->driver->ops->close(substream); |
646 | } | 628 | } |
647 | 629 | ||
648 | if (platform && platform->driver->ops && platform->driver->ops->close) | ||
649 | platform->driver->ops->close(substream); | ||
650 | |||
651 | platform_err: | ||
652 | if (cpu_dai->driver->ops->shutdown) | 630 | if (cpu_dai->driver->ops->shutdown) |
653 | cpu_dai->driver->ops->shutdown(substream, cpu_dai); | 631 | cpu_dai->driver->ops->shutdown(substream, cpu_dai); |
654 | out: | 632 | out: |
@@ -701,13 +679,12 @@ static void close_delayed_work(struct work_struct *work) | |||
701 | 679 | ||
702 | /* | 680 | /* |
703 | * Called by ALSA when a PCM substream is closed. Private data can be | 681 | * Called by ALSA when a PCM substream is closed. Private data can be |
704 | * freed here. The cpu DAI, codec DAI, machine and platform are also | 682 | * freed here. The cpu DAI, codec DAI, machine and components are also |
705 | * shutdown. | 683 | * shutdown. |
706 | */ | 684 | */ |
707 | static int soc_pcm_close(struct snd_pcm_substream *substream) | 685 | static int soc_pcm_close(struct snd_pcm_substream *substream) |
708 | { | 686 | { |
709 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 687 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
710 | struct snd_soc_platform *platform = rtd->platform; | ||
711 | struct snd_soc_component *component; | 688 | struct snd_soc_component *component; |
712 | struct snd_soc_rtdcom_list *rtdcom; | 689 | struct snd_soc_rtdcom_list *rtdcom; |
713 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 690 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -742,16 +719,9 @@ static int soc_pcm_close(struct snd_pcm_substream *substream) | |||
742 | if (rtd->dai_link->ops->shutdown) | 719 | if (rtd->dai_link->ops->shutdown) |
743 | rtd->dai_link->ops->shutdown(substream); | 720 | rtd->dai_link->ops->shutdown(substream); |
744 | 721 | ||
745 | if (platform && platform->driver->ops && platform->driver->ops->close) | ||
746 | platform->driver->ops->close(substream); | ||
747 | |||
748 | for_each_rtdcom(rtd, rtdcom) { | 722 | for_each_rtdcom(rtd, rtdcom) { |
749 | component = rtdcom->component; | 723 | component = rtdcom->component; |
750 | 724 | ||
751 | /* ignore duplication for now */ | ||
752 | if (platform && (component == &platform->component)) | ||
753 | continue; | ||
754 | |||
755 | if (!component->driver->ops || | 725 | if (!component->driver->ops || |
756 | !component->driver->ops->close) | 726 | !component->driver->ops->close) |
757 | continue; | 727 | continue; |
@@ -805,7 +775,6 @@ static int soc_pcm_close(struct snd_pcm_substream *substream) | |||
805 | static int soc_pcm_prepare(struct snd_pcm_substream *substream) | 775 | static int soc_pcm_prepare(struct snd_pcm_substream *substream) |
806 | { | 776 | { |
807 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 777 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
808 | struct snd_soc_platform *platform = rtd->platform; | ||
809 | struct snd_soc_component *component; | 778 | struct snd_soc_component *component; |
810 | struct snd_soc_rtdcom_list *rtdcom; | 779 | struct snd_soc_rtdcom_list *rtdcom; |
811 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 780 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -823,22 +792,9 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream) | |||
823 | } | 792 | } |
824 | } | 793 | } |
825 | 794 | ||
826 | if (platform && platform->driver->ops && platform->driver->ops->prepare) { | ||
827 | ret = platform->driver->ops->prepare(substream); | ||
828 | if (ret < 0) { | ||
829 | dev_err(platform->dev, "ASoC: platform prepare error:" | ||
830 | " %d\n", ret); | ||
831 | goto out; | ||
832 | } | ||
833 | } | ||
834 | |||
835 | for_each_rtdcom(rtd, rtdcom) { | 795 | for_each_rtdcom(rtd, rtdcom) { |
836 | component = rtdcom->component; | 796 | component = rtdcom->component; |
837 | 797 | ||
838 | /* ignore duplication for now */ | ||
839 | if (platform && (component == &platform->component)) | ||
840 | continue; | ||
841 | |||
842 | if (!component->driver->ops || | 798 | if (!component->driver->ops || |
843 | !component->driver->ops->prepare) | 799 | !component->driver->ops->prepare) |
844 | continue; | 800 | continue; |
@@ -932,7 +888,6 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream, | |||
932 | struct snd_pcm_hw_params *params) | 888 | struct snd_pcm_hw_params *params) |
933 | { | 889 | { |
934 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 890 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
935 | struct snd_soc_platform *platform = rtd->platform; | ||
936 | struct snd_soc_component *component; | 891 | struct snd_soc_component *component; |
937 | struct snd_soc_rtdcom_list *rtdcom; | 892 | struct snd_soc_rtdcom_list *rtdcom; |
938 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 893 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -994,23 +949,10 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream, | |||
994 | if (ret < 0) | 949 | if (ret < 0) |
995 | goto interface_err; | 950 | goto interface_err; |
996 | 951 | ||
997 | if (platform && platform->driver->ops && platform->driver->ops->hw_params) { | ||
998 | ret = platform->driver->ops->hw_params(substream, params); | ||
999 | if (ret < 0) { | ||
1000 | dev_err(platform->dev, "ASoC: %s hw params failed: %d\n", | ||
1001 | platform->component.name, ret); | ||
1002 | goto platform_err; | ||
1003 | } | ||
1004 | } | ||
1005 | |||
1006 | ret = 0; | 952 | ret = 0; |
1007 | for_each_rtdcom(rtd, rtdcom) { | 953 | for_each_rtdcom(rtd, rtdcom) { |
1008 | component = rtdcom->component; | 954 | component = rtdcom->component; |
1009 | 955 | ||
1010 | /* ignore duplication for now */ | ||
1011 | if (platform && (component == &platform->component)) | ||
1012 | continue; | ||
1013 | |||
1014 | if (!component->driver->ops || | 956 | if (!component->driver->ops || |
1015 | !component->driver->ops->hw_params) | 957 | !component->driver->ops->hw_params) |
1016 | continue; | 958 | continue; |
@@ -1043,10 +985,6 @@ component_err: | |||
1043 | for_each_rtdcom(rtd, rtdcom) { | 985 | for_each_rtdcom(rtd, rtdcom) { |
1044 | component = rtdcom->component; | 986 | component = rtdcom->component; |
1045 | 987 | ||
1046 | /* ignore duplication */ | ||
1047 | if (platform && (component == &platform->component)) | ||
1048 | continue; | ||
1049 | |||
1050 | if (!component->driver->ops || | 988 | if (!component->driver->ops || |
1051 | !component->driver->ops->hw_free) | 989 | !component->driver->ops->hw_free) |
1052 | continue; | 990 | continue; |
@@ -1054,10 +992,6 @@ component_err: | |||
1054 | component->driver->ops->hw_free(substream); | 992 | component->driver->ops->hw_free(substream); |
1055 | } | 993 | } |
1056 | 994 | ||
1057 | if (platform && platform->driver->ops && platform->driver->ops->hw_free) | ||
1058 | platform->driver->ops->hw_free(substream); | ||
1059 | |||
1060 | platform_err: | ||
1061 | if (cpu_dai->driver->ops->hw_free) | 995 | if (cpu_dai->driver->ops->hw_free) |
1062 | cpu_dai->driver->ops->hw_free(substream, cpu_dai); | 996 | cpu_dai->driver->ops->hw_free(substream, cpu_dai); |
1063 | 997 | ||
@@ -1085,7 +1019,6 @@ codec_err: | |||
1085 | static int soc_pcm_hw_free(struct snd_pcm_substream *substream) | 1019 | static int soc_pcm_hw_free(struct snd_pcm_substream *substream) |
1086 | { | 1020 | { |
1087 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 1021 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
1088 | struct snd_soc_platform *platform = rtd->platform; | ||
1089 | struct snd_soc_component *component; | 1022 | struct snd_soc_component *component; |
1090 | struct snd_soc_rtdcom_list *rtdcom; | 1023 | struct snd_soc_rtdcom_list *rtdcom; |
1091 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 1024 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -1123,18 +1056,10 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream) | |||
1123 | if (rtd->dai_link->ops->hw_free) | 1056 | if (rtd->dai_link->ops->hw_free) |
1124 | rtd->dai_link->ops->hw_free(substream); | 1057 | rtd->dai_link->ops->hw_free(substream); |
1125 | 1058 | ||
1126 | /* free any DMA resources */ | ||
1127 | if (platform && platform->driver->ops && platform->driver->ops->hw_free) | ||
1128 | platform->driver->ops->hw_free(substream); | ||
1129 | |||
1130 | /* free any component resources */ | 1059 | /* free any component resources */ |
1131 | for_each_rtdcom(rtd, rtdcom) { | 1060 | for_each_rtdcom(rtd, rtdcom) { |
1132 | component = rtdcom->component; | 1061 | component = rtdcom->component; |
1133 | 1062 | ||
1134 | /* ignore duplication for now */ | ||
1135 | if (platform && (component == &platform->component)) | ||
1136 | continue; | ||
1137 | |||
1138 | if (!component->driver->ops || | 1063 | if (!component->driver->ops || |
1139 | !component->driver->ops->hw_free) | 1064 | !component->driver->ops->hw_free) |
1140 | continue; | 1065 | continue; |
@@ -1159,7 +1084,6 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream) | |||
1159 | static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | 1084 | static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) |
1160 | { | 1085 | { |
1161 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 1086 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
1162 | struct snd_soc_platform *platform = rtd->platform; | ||
1163 | struct snd_soc_component *component; | 1087 | struct snd_soc_component *component; |
1164 | struct snd_soc_rtdcom_list *rtdcom; | 1088 | struct snd_soc_rtdcom_list *rtdcom; |
1165 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 1089 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -1176,19 +1100,9 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | |||
1176 | } | 1100 | } |
1177 | } | 1101 | } |
1178 | 1102 | ||
1179 | if (platform && platform->driver->ops && platform->driver->ops->trigger) { | ||
1180 | ret = platform->driver->ops->trigger(substream, cmd); | ||
1181 | if (ret < 0) | ||
1182 | return ret; | ||
1183 | } | ||
1184 | |||
1185 | for_each_rtdcom(rtd, rtdcom) { | 1103 | for_each_rtdcom(rtd, rtdcom) { |
1186 | component = rtdcom->component; | 1104 | component = rtdcom->component; |
1187 | 1105 | ||
1188 | /* ignore duplication for now */ | ||
1189 | if (platform && (component == &platform->component)) | ||
1190 | continue; | ||
1191 | |||
1192 | if (!component->driver->ops || | 1106 | if (!component->driver->ops || |
1193 | !component->driver->ops->trigger) | 1107 | !component->driver->ops->trigger) |
1194 | continue; | 1108 | continue; |
@@ -1240,13 +1154,12 @@ static int soc_pcm_bespoke_trigger(struct snd_pcm_substream *substream, | |||
1240 | } | 1154 | } |
1241 | /* | 1155 | /* |
1242 | * soc level wrapper for pointer callback | 1156 | * soc level wrapper for pointer callback |
1243 | * If cpu_dai, codec_dai, platform driver has the delay callback, than | 1157 | * If cpu_dai, codec_dai, component driver has the delay callback, then |
1244 | * the runtime->delay will be updated accordingly. | 1158 | * the runtime->delay will be updated accordingly. |
1245 | */ | 1159 | */ |
1246 | static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) | 1160 | static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) |
1247 | { | 1161 | { |
1248 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 1162 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
1249 | struct snd_soc_platform *platform = rtd->platform; | ||
1250 | struct snd_soc_component *component; | 1163 | struct snd_soc_component *component; |
1251 | struct snd_soc_rtdcom_list *rtdcom; | 1164 | struct snd_soc_rtdcom_list *rtdcom; |
1252 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 1165 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
@@ -1257,16 +1170,9 @@ static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) | |||
1257 | snd_pcm_sframes_t codec_delay = 0; | 1170 | snd_pcm_sframes_t codec_delay = 0; |
1258 | int i; | 1171 | int i; |
1259 | 1172 | ||
1260 | if (platform && platform->driver->ops && platform->driver->ops->pointer) | ||
1261 | offset = platform->driver->ops->pointer(substream); | ||
1262 | |||
1263 | for_each_rtdcom(rtd, rtdcom) { | 1173 | for_each_rtdcom(rtd, rtdcom) { |
1264 | component = rtdcom->component; | 1174 | component = rtdcom->component; |
1265 | 1175 | ||
1266 | /* ignore duplication for now */ | ||
1267 | if (platform && (component == &platform->component)) | ||
1268 | continue; | ||
1269 | |||
1270 | if (!component->driver->ops || | 1176 | if (!component->driver->ops || |
1271 | !component->driver->ops->pointer) | 1177 | !component->driver->ops->pointer) |
1272 | continue; | 1178 | continue; |
@@ -2470,20 +2376,12 @@ static int soc_pcm_ioctl(struct snd_pcm_substream *substream, | |||
2470 | unsigned int cmd, void *arg) | 2376 | unsigned int cmd, void *arg) |
2471 | { | 2377 | { |
2472 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 2378 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
2473 | struct snd_soc_platform *platform = rtd->platform; | ||
2474 | struct snd_soc_component *component; | 2379 | struct snd_soc_component *component; |
2475 | struct snd_soc_rtdcom_list *rtdcom; | 2380 | struct snd_soc_rtdcom_list *rtdcom; |
2476 | 2381 | ||
2477 | if (platform && platform->driver->ops && platform->driver->ops->ioctl) | ||
2478 | return platform->driver->ops->ioctl(substream, cmd, arg); | ||
2479 | |||
2480 | for_each_rtdcom(rtd, rtdcom) { | 2382 | for_each_rtdcom(rtd, rtdcom) { |
2481 | component = rtdcom->component; | 2383 | component = rtdcom->component; |
2482 | 2384 | ||
2483 | /* ignore duplication for now */ | ||
2484 | if (platform && (component == &platform->component)) | ||
2485 | continue; | ||
2486 | |||
2487 | if (!component->driver->ops || | 2385 | if (!component->driver->ops || |
2488 | !component->driver->ops->ioctl) | 2386 | !component->driver->ops->ioctl) |
2489 | continue; | 2387 | continue; |
@@ -2987,7 +2885,6 @@ static int soc_rtdcom_mmap(struct snd_pcm_substream *substream, | |||
2987 | /* create a new pcm */ | 2885 | /* create a new pcm */ |
2988 | int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | 2886 | int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) |
2989 | { | 2887 | { |
2990 | struct snd_soc_platform *platform = rtd->platform; | ||
2991 | struct snd_soc_dai *codec_dai; | 2888 | struct snd_soc_dai *codec_dai; |
2992 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 2889 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
2993 | struct snd_soc_component *component; | 2890 | struct snd_soc_component *component; |
@@ -3106,16 +3003,6 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | |||
3106 | rtd->ops.mmap = soc_rtdcom_mmap; | 3003 | rtd->ops.mmap = soc_rtdcom_mmap; |
3107 | } | 3004 | } |
3108 | 3005 | ||
3109 | /* overwrite */ | ||
3110 | if (platform && platform->driver->ops) { | ||
3111 | rtd->ops.ack = platform->driver->ops->ack; | ||
3112 | rtd->ops.copy_user = platform->driver->ops->copy_user; | ||
3113 | rtd->ops.copy_kernel = platform->driver->ops->copy_kernel; | ||
3114 | rtd->ops.fill_silence = platform->driver->ops->fill_silence; | ||
3115 | rtd->ops.page = platform->driver->ops->page; | ||
3116 | rtd->ops.mmap = platform->driver->ops->mmap; | ||
3117 | } | ||
3118 | |||
3119 | if (playback) | 3006 | if (playback) |
3120 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &rtd->ops); | 3007 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &rtd->ops); |
3121 | 3008 | ||