Beispiel #1
0
static long audpre_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct audio_in *audio = file->private_data;
	int rc = 0, enable;
	uint16_t enable_mask;

	mutex_lock(&audio->lock);
	switch (cmd) {
	case AUDIO_ENABLE_AUDPRE:
		if (copy_from_user(&enable_mask, (void *) arg,
						sizeof(enable_mask))) {
			rc = -EFAULT;
			break;
		}

		enable = (enable_mask & AGC_ENABLE) ? 1 : 0;
		audio_enable_tx_agc(audio, enable);
		enable = (enable_mask & NS_ENABLE) ? 1 : 0;
		audio_enable_ns(audio, enable);
		enable = (enable_mask & TX_IIR_ENABLE) ? 1 : 0;
		audio_enable_iir(audio, enable);
		break;

	case AUDIO_SET_AGC:
		if (copy_from_user(&audio->tx_agc_cfg, (void *) arg,
						sizeof(audio->tx_agc_cfg)))
			rc = -EFAULT;
		break;

	case AUDIO_SET_NS:
		if (copy_from_user(&audio->ns_cfg, (void *) arg,
						sizeof(audio->ns_cfg)))
			rc = -EFAULT;
		break;

	case AUDIO_SET_TX_IIR:
		if (copy_from_user(&audio->iir_cfg, (void *) arg,
						sizeof(audio->iir_cfg)))
			rc = -EFAULT;
		break;

	default:
		rc = -EINVAL;
	}

	mutex_unlock(&audio->lock);
	return rc;
}
static long audpre_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct audio_in *audio = file->private_data;
	int rc = 0, enable;
	uint16_t enable_mask;
#if DEBUG
	int i;
#endif

	mutex_lock(&audio->lock);
	switch (cmd) {
	case AUDIO_ENABLE_AUDPRE: {

		if (is_acdb_enabled()) {
			MM_INFO("Audpp is supported via acdb\n");
			rc = -EFAULT;
			break;
		}

		if (copy_from_user(&enable_mask, (void *) arg,
				sizeof(enable_mask)))
			goto out_fault;

		enable = (enable_mask & AGC_ENABLE) ? 1 : 0;
		audio_enable_tx_agc(audio, enable);
		enable = (enable_mask & NS_ENABLE) ? 1 : 0;
		audio_enable_ns(audio, enable);
		enable = (enable_mask & TX_IIR_ENABLE) ? 1 : 0;
		audio_enable_iir(audio, enable);
		break;
	}
	case AUDIO_SET_AGC: {
		if (copy_from_user(&audio->agc, (void *) arg,
				sizeof(audio->agc)))
			goto out_fault;
#if DEBUG
		MM_AUD_INFO("set agc\n");
		for (i = 0; i < AGC_PARAM_SIZE; i++) \
			MM_AUD_INFO("agc_params[%d] = 0x%04x\n", i,
				audio->agc.agc_params[i]);
#endif
		break;
	}
	case AUDIO_SET_NS: {
		if (copy_from_user(&audio->ns, (void *) arg, sizeof(audio->ns)))
			goto out_fault;
#if DEBUG
		MM_AUD_INFO("set ns\n");
		for (i = 0; i < NS_PARAM_SIZE; i++) \
			MM_AUD_INFO("ns_params[%d] = 0x%04x\n",
				i, audio->ns.ns_params[i]);
#endif
		break;
	}
	case AUDIO_SET_TX_IIR: {
		if (copy_from_user(&audio->iir, (void *) arg,
					sizeof(audio->iir)))
			goto out_fault;
#if DEBUG
		MM_AUD_INFO("set iir\n");
		MM_AUD_INFO("iir.num_bands = 0x%04x\n", audio->iir.num_bands);
		for (i = 0; i < IIR_PARAM_SIZE; i++) \
			MM_AUD_INFO("iir_params[%d] = 0x%04x\n",
				i, audio->iir.iir_params[i]);
#endif
		break;
	}
	default:
		rc = -EINVAL;
	}

	goto out;

out_fault:
	rc = -EFAULT;
out:
	mutex_unlock(&audio->lock);
	return rc;
}