|
@@ -1647,6 +1647,17 @@ out:
|
|
|
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)
|
|
|
{
|
|
|
struct snd_pcm_substream *substream =
|
|
@@ -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.close = dpcm_fe_dai_close;
|
|
|
rtd->ops.pointer = soc_pcm_pointer;
|
|
|
+ rtd->ops.ioctl = soc_pcm_ioctl;
|
|
|
} else {
|
|
|
rtd->ops.open = soc_pcm_open;
|
|
|
rtd->ops.hw_params = soc_pcm_hw_params;
|
|
@@ -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.close = soc_pcm_close;
|
|
|
rtd->ops.pointer = soc_pcm_pointer;
|
|
|
+ rtd->ops.ioctl = soc_pcm_ioctl;
|
|
|
}
|
|
|
|
|
|
if (platform->driver->ops) {
|