Commit be3f3f2c authored by Liam Girdwood's avatar Liam Girdwood Committed by Mark Brown

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: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 07bf84aa
...@@ -1647,6 +1647,17 @@ int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream) ...@@ -1647,6 +1647,17 @@ int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
return ret; return ret;
} }
static int soc_pcm_ioctl(struct snd_pcm_substream *substream,
unsigned int cmd, void *arg)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_platform *platform = rtd->platform;
if (platform->driver->ops->ioctl)
return platform->driver->ops->ioctl(substream, cmd, arg);
return snd_pcm_lib_ioctl(substream, cmd, arg);
}
static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream) static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream)
{ {
struct snd_pcm_substream *substream = struct snd_pcm_substream *substream =
...@@ -2051,6 +2062,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) ...@@ -2051,6 +2062,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
rtd->ops.hw_free = dpcm_fe_dai_hw_free; rtd->ops.hw_free = dpcm_fe_dai_hw_free;
rtd->ops.close = dpcm_fe_dai_close; rtd->ops.close = dpcm_fe_dai_close;
rtd->ops.pointer = soc_pcm_pointer; rtd->ops.pointer = soc_pcm_pointer;
rtd->ops.ioctl = soc_pcm_ioctl;
} else { } else {
rtd->ops.open = soc_pcm_open; rtd->ops.open = soc_pcm_open;
rtd->ops.hw_params = soc_pcm_hw_params; 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,6 +2071,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
rtd->ops.hw_free = soc_pcm_hw_free; rtd->ops.hw_free = soc_pcm_hw_free;
rtd->ops.close = soc_pcm_close; rtd->ops.close = soc_pcm_close;
rtd->ops.pointer = soc_pcm_pointer; rtd->ops.pointer = soc_pcm_pointer;
rtd->ops.ioctl = soc_pcm_ioctl;
} }
if (platform->driver->ops) { if (platform->driver->ops) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment