Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d735ab91 authored by Gopikrishnaiah Anand's avatar Gopikrishnaiah Anand Committed by Gerrit - the friendly Code Review server
Browse files

ASoC: pcm: Add support for compat mode



When kernel is compiled for 64 bit and userspace client
is in 32 bit mode compat ioctl path will be taken. If
platform driver supports compat mode asoc framework
should call compat function pointers.
Change adds support in asoc framework to support compat mode.

Change-Id: I4929bc89c2ad467cdc83f5a00fe9d38e425c3ca2
Signed-off-by: default avatarGopikrishnaiah Anand <agopik@codeaurora.org>
Signed-off-by: default avatarBanajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: default avatarMeng Wang <mwang@codeaurora.org>
parent d5768539
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -2569,6 +2569,28 @@ static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
	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 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
		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 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
		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) {