コード例 #1
0
static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct q6audio_aio *audio = file->private_data;
	int rc = 0;

	switch (cmd) {
	case AUDIO_START: {
		rc = audio_ioctl_shared(file, cmd, (void *)arg);
		break;
	}
	case AUDIO_GET_AAC_CONFIG: {
		if (copy_to_user((void *)arg, audio->codec_cfg,
			sizeof(struct msm_audio_aac_config))) {
			pr_err("%s: copy_to_user for AUDIO_GET_AAC_CONFIG failed\n"
				, __func__);
			rc = -EFAULT;
			break;
		}
		break;
	}
	case AUDIO_SET_AAC_CONFIG: {
		struct msm_audio_aac_config aac_config;
		if (copy_from_user(&aac_config, (void *)arg,
			sizeof(aac_config))) {
			pr_err("%s: copy_from_user for AUDIO_SET_AAC_CONFIG failed\n"
				, __func__);
			rc = -EFAULT;
		}
		rc = audio_ioctl_shared(file, cmd, &aac_config);
		if (rc)
			pr_err("%s:AUDIO_SET_AAC_CONFIG failed. Rc= %d\n",
				__func__, rc);
		break;
	}
	case AUDIO_SET_AAC_MIX_CONFIG:	{
		u32 mix_config;
		pr_debug("%s, AUDIO_SET_AAC_MIX_CONFIG", __func__);
		if (copy_from_user(&mix_config, (void *)arg,
			sizeof(u32))) {
			pr_err("%s: copy_from_user for AUDIO_SET_AAC_MIX_CONFIG failed\n",
				__func__);
			rc = -EFAULT;
			break;
		}
		rc = audio_ioctl_shared(file, cmd, &mix_config);
		if (rc)
			pr_err("%s:AUDIO_SET_AAC_CONFIG failed. Rc= %d\n",
			__func__, rc);
		break;
	}
	default: {
		pr_debug("Calling utils ioctl\n");
		rc = audio->codec_ioctl(file, cmd, arg);
	}
	}
	return rc;
}
コード例 #2
0
ファイル: audio_alac.c プロジェクト: BeastOn/yu_msm8916
static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct q6audio_aio *audio = file->private_data;
	int rc = 0;

	switch (cmd) {
	case AUDIO_START: {
		rc = audio_ioctl_shared(file, cmd, (void *)arg);
		break;
	}
	case AUDIO_GET_ALAC_CONFIG: {
		if (copy_to_user((void *)arg, audio->codec_cfg,
			sizeof(struct msm_audio_alac_config))) {
			pr_err("%s:copy_to_user for AUDIO_GET_ALAC_CONFIG failed\n",
				__func__);
			rc = -EFAULT;
			break;
		}
		break;
	}
	case AUDIO_SET_ALAC_CONFIG: {
		if (copy_from_user(audio->codec_cfg, (void *)arg,
			sizeof(struct msm_audio_alac_config))) {
			pr_err("%s:copy_from_user for AUDIO_SET_ALAC_CONFIG failed\n",
				__func__);
			rc = -EFAULT;
			break;
		}
		break;
	}
	default: {
		pr_debug("%s[%p]: Calling utils ioctl\n", __func__, audio);
		rc = audio->codec_ioctl(file, cmd, arg);
		if (rc)
			pr_err("Failed in utils_ioctl: %d\n", rc);
		break;
	}
	}
	return rc;
}