aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-pcm.c
diff options
context:
space:
mode:
authorLiam Girdwood <lrg@ti.com>2012-04-26 11:16:10 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-04-26 12:48:43 -0400
commitbe3f3f2ce6029d622d158de4274f86e3b47c9c03 (patch)
tree4c42257f089bb385c229d0232701cc9cbbaf754f /sound/soc/soc-pcm.c
parent07bf84aaf736781a283b1bd36eaa911453b14574 (diff)
ASoC: pcm: Add pcm operation for pcm ioctl.
Provide an ioctl marshaller for ASoC platform drivers. This will use the default ALSA handler if no platform handler exists. This is also required for DPCM BE PCMs as snd_pcm_info() will call the ioctl as part of stream startup. Signed-off-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r--sound/soc/soc-pcm.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 5bd8270beea4..4e3be82e79cb 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -1647,6 +1647,17 @@ out:
1647 return ret; 1647 return ret;
1648} 1648}
1649 1649
1650static int soc_pcm_ioctl(struct snd_pcm_substream *substream,
1651 unsigned int cmd, void *arg)
1652{
1653 struct snd_soc_pcm_runtime *rtd = substream->private_data;
1654 struct snd_soc_platform *platform = rtd->platform;
1655
1656 if (platform->driver->ops->ioctl)
1657 return platform->driver->ops->ioctl(substream, cmd, arg);
1658 return snd_pcm_lib_ioctl(substream, cmd, arg);
1659}
1660
1650static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream) 1661static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
1651{ 1662{
1652 struct snd_pcm_substream *substream = 1663 struct snd_pcm_substream *substream =
@@ -2051,6 +2062,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2051 rtd->ops.hw_free = dpcm_fe_dai_hw_free; 2062 rtd->ops.hw_free = dpcm_fe_dai_hw_free;
2052 rtd->ops.close = dpcm_fe_dai_close; 2063 rtd->ops.close = dpcm_fe_dai_close;
2053 rtd->ops.pointer = soc_pcm_pointer; 2064 rtd->ops.pointer = soc_pcm_pointer;
2065 rtd->ops.ioctl = soc_pcm_ioctl;
2054 } else { 2066 } else {
2055 rtd->ops.open = soc_pcm_open; 2067 rtd->ops.open = soc_pcm_open;
2056 rtd->ops.hw_params = soc_pcm_hw_params; 2068 rtd->ops.hw_params = soc_pcm_hw_params;
@@ -2059,6 +2071,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2059 rtd->ops.hw_free = soc_pcm_hw_free; 2071 rtd->ops.hw_free = soc_pcm_hw_free;
2060 rtd->ops.close = soc_pcm_close; 2072 rtd->ops.close = soc_pcm_close;
2061 rtd->ops.pointer = soc_pcm_pointer; 2073 rtd->ops.pointer = soc_pcm_pointer;
2074 rtd->ops.ioctl = soc_pcm_ioctl;
2062 } 2075 }
2063 2076
2064 if (platform->driver->ops) { 2077 if (platform->driver->ops) {