Merge "ASoC: pcm: Add support for compat mode"
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 7af4b28..725b79b 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -2569,6 +2569,28 @@
return ret;
}
+static int soc_pcm_compat_ioctl(struct snd_pcm_substream *substream,
+ unsigned int cmd, void *arg)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_component *component;
+ struct snd_soc_rtdcom_list *rtdcom;
+
+ for_each_rtdcom(rtd, rtdcom) {
+ component = rtdcom->component;
+
+ if (!component->driver->ops ||
+ !component->driver->ops->compat_ioctl)
+ continue;
+
+ /* FIXME: use 1st ioctl */
+ return component->driver->ops->compat_ioctl(
+ substream, cmd, arg);
+ }
+
+ return snd_pcm_lib_ioctl(substream, cmd, arg);
+}
+
static int soc_pcm_ioctl(struct snd_pcm_substream *substream,
unsigned int cmd, void *arg)
{
@@ -3193,6 +3215,7 @@
rtd->ops.close = dpcm_fe_dai_close;
rtd->ops.pointer = soc_pcm_pointer;
rtd->ops.ioctl = soc_pcm_ioctl;
+ rtd->ops.compat_ioctl = soc_pcm_compat_ioctl;
} else {
rtd->ops.open = soc_pcm_open;
rtd->ops.hw_params = soc_pcm_hw_params;
@@ -3202,6 +3225,7 @@
rtd->ops.close = soc_pcm_close;
rtd->ops.pointer = soc_pcm_pointer;
rtd->ops.ioctl = soc_pcm_ioctl;
+ rtd->ops.compat_ioctl = soc_pcm_compat_ioctl;
}
for_each_rtdcom(rtd, rtdcom) {