diff options
-rw-r--r-- | sound/soc/soc-pcm.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 8aa7cec6eab2..cdc860a5ff37 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c | |||
@@ -598,17 +598,6 @@ static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) | |||
598 | return offset; | 598 | return offset; |
599 | } | 599 | } |
600 | 600 | ||
601 | /* ASoC PCM operations */ | ||
602 | static struct snd_pcm_ops soc_pcm_ops = { | ||
603 | .open = soc_pcm_open, | ||
604 | .close = soc_pcm_close, | ||
605 | .hw_params = soc_pcm_hw_params, | ||
606 | .hw_free = soc_pcm_hw_free, | ||
607 | .prepare = soc_pcm_prepare, | ||
608 | .trigger = soc_pcm_trigger, | ||
609 | .pointer = soc_pcm_pointer, | ||
610 | }; | ||
611 | |||
612 | /* create a new pcm */ | 601 | /* create a new pcm */ |
613 | int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | 602 | int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) |
614 | { | 603 | { |
@@ -616,10 +605,19 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | |||
616 | struct snd_soc_platform *platform = rtd->platform; | 605 | struct snd_soc_platform *platform = rtd->platform; |
617 | struct snd_soc_dai *codec_dai = rtd->codec_dai; | 606 | struct snd_soc_dai *codec_dai = rtd->codec_dai; |
618 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 607 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
608 | struct snd_pcm_ops *soc_pcm_ops = &rtd->ops; | ||
619 | struct snd_pcm *pcm; | 609 | struct snd_pcm *pcm; |
620 | char new_name[64]; | 610 | char new_name[64]; |
621 | int ret = 0, playback = 0, capture = 0; | 611 | int ret = 0, playback = 0, capture = 0; |
622 | 612 | ||
613 | soc_pcm_ops->open = soc_pcm_open; | ||
614 | soc_pcm_ops->close = soc_pcm_close; | ||
615 | soc_pcm_ops->hw_params = soc_pcm_hw_params; | ||
616 | soc_pcm_ops->hw_free = soc_pcm_hw_free; | ||
617 | soc_pcm_ops->prepare = soc_pcm_prepare; | ||
618 | soc_pcm_ops->trigger = soc_pcm_trigger; | ||
619 | soc_pcm_ops->pointer = soc_pcm_pointer; | ||
620 | |||
623 | /* check client and interface hw capabilities */ | 621 | /* check client and interface hw capabilities */ |
624 | snprintf(new_name, sizeof(new_name), "%s %s-%d", | 622 | snprintf(new_name, sizeof(new_name), "%s %s-%d", |
625 | rtd->dai_link->stream_name, codec_dai->name, num); | 623 | rtd->dai_link->stream_name, codec_dai->name, num); |
@@ -643,20 +641,20 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) | |||
643 | rtd->pcm = pcm; | 641 | rtd->pcm = pcm; |
644 | pcm->private_data = rtd; | 642 | pcm->private_data = rtd; |
645 | if (platform->driver->ops) { | 643 | if (platform->driver->ops) { |
646 | soc_pcm_ops.mmap = platform->driver->ops->mmap; | 644 | soc_pcm_ops->mmap = platform->driver->ops->mmap; |
647 | soc_pcm_ops.pointer = platform->driver->ops->pointer; | 645 | soc_pcm_ops->pointer = platform->driver->ops->pointer; |
648 | soc_pcm_ops.ioctl = platform->driver->ops->ioctl; | 646 | soc_pcm_ops->ioctl = platform->driver->ops->ioctl; |
649 | soc_pcm_ops.copy = platform->driver->ops->copy; | 647 | soc_pcm_ops->copy = platform->driver->ops->copy; |
650 | soc_pcm_ops.silence = platform->driver->ops->silence; | 648 | soc_pcm_ops->silence = platform->driver->ops->silence; |
651 | soc_pcm_ops.ack = platform->driver->ops->ack; | 649 | soc_pcm_ops->ack = platform->driver->ops->ack; |
652 | soc_pcm_ops.page = platform->driver->ops->page; | 650 | soc_pcm_ops->page = platform->driver->ops->page; |
653 | } | 651 | } |
654 | 652 | ||
655 | if (playback) | 653 | if (playback) |
656 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops); | 654 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, soc_pcm_ops); |
657 | 655 | ||
658 | if (capture) | 656 | if (capture) |
659 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops); | 657 | snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, soc_pcm_ops); |
660 | 658 | ||
661 | if (platform->driver->pcm_new) { | 659 | if (platform->driver->pcm_new) { |
662 | ret = platform->driver->pcm_new(rtd); | 660 | ret = platform->driver->pcm_new(rtd); |