summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-pcm.c
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.cirrus.com>2018-04-24 11:39:02 -0400
committerMark Brown <broonie@kernel.org>2018-04-26 07:24:43 -0400
commitef050bece1b5564b2c7135ceadc0d5ffdcf152f7 (patch)
tree43cf51aa080a649bfa710a0b59676292624a94ba /sound/soc/soc-pcm.c
parentc0c0be9d12bb5983569f796954f4734734c0aaac (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.c119
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 */
461static int soc_pcm_open(struct snd_pcm_substream *substream) 461static 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
651platform_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);
654out: 632out:
@@ -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 */
707static int soc_pcm_close(struct snd_pcm_substream *substream) 685static 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)
805static int soc_pcm_prepare(struct snd_pcm_substream *substream) 775static 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
1060platform_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:
1085static int soc_pcm_hw_free(struct snd_pcm_substream *substream) 1019static 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)
1159static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd) 1084static 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 */
1246static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) 1160static 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 */
2988int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) 2886int 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