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; }