static long audio_ioctl_shared(struct file *file, unsigned int cmd,
						void *arg)
{
	struct q6audio_aio *audio = file->private_data;
	int rc = 0;

	switch (cmd) {
	case AUDIO_START: {
		struct asm_wma_cfg wma_cfg;
		struct msm_audio_wma_config_v2 *wma_config;
		pr_debug("%s[%p]: AUDIO_START session_id[%d]\n", __func__,
						audio, audio->ac->session);
		if (audio->feedback == NON_TUNNEL_MODE) {
			/* Configure PCM output block */
			rc = q6asm_enc_cfg_blk_pcm(audio->ac,
					audio->pcm_cfg.sample_rate,
					audio->pcm_cfg.channel_count);
			if (rc < 0) {
				pr_err("pcm output block config failed\n");
				break;
			}
		}
		wma_config = (struct msm_audio_wma_config_v2 *)audio->codec_cfg;
		wma_cfg.format_tag = wma_config->format_tag;
		wma_cfg.ch_cfg = wma_config->numchannels;
		wma_cfg.sample_rate =  wma_config->samplingrate;
		wma_cfg.avg_bytes_per_sec = wma_config->avgbytespersecond;
		wma_cfg.block_align = wma_config->block_align;
		wma_cfg.valid_bits_per_sample =
				wma_config->validbitspersample;
		wma_cfg.ch_mask =  wma_config->channelmask;
		wma_cfg.encode_opt = wma_config->encodeopt;
		/* Configure Media format block */
		rc = q6asm_media_format_block_wma(audio->ac, &wma_cfg,
				audio->ac->stream_id);
		if (rc < 0) {
			pr_err("cmd media format block failed\n");
			break;
		}
		rc = audio_aio_enable(audio);
		audio->eos_rsp = 0;
		audio->eos_flag = 0;
		if (!rc) {
			audio->enabled = 1;
		} else {
			audio->enabled = 0;
			pr_err("Audio Start procedure failed rc=%d\n", rc);
			break;
		}
		pr_debug("AUDIO_START success enable[%d]\n", audio->enabled);
		if (audio->stopped == 1)
			audio->stopped = 0;
		break;
	}
	default:
		pr_err("%s: Unknown ioctl cmd = %d", __func__, cmd);
		break;
	}
	return rc;
}
Example #2
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: {
		struct asm_wma_cfg wma_cfg;
		struct msm_audio_wma_config_v2 *wma_config;
		pr_debug("%s[%p]: AUDIO_START session_id[%d]\n", __func__,
						audio, audio->ac->session);
		if (audio->feedback == NON_TUNNEL_MODE) {
			
			rc = q6asm_enc_cfg_blk_pcm(audio->ac,
					audio->pcm_cfg.sample_rate,
					audio->pcm_cfg.channel_count);
			if (rc < 0) {
				pr_err("pcm output block config failed\n");
				break;
			}
		}
		wma_config = (struct msm_audio_wma_config_v2 *)audio->codec_cfg;
		wma_cfg.format_tag = wma_config->format_tag;
		wma_cfg.ch_cfg = wma_config->numchannels;
		wma_cfg.sample_rate =  wma_config->samplingrate;
		wma_cfg.avg_bytes_per_sec = wma_config->avgbytespersecond;
		wma_cfg.block_align = wma_config->block_align;
		wma_cfg.valid_bits_per_sample =
				wma_config->validbitspersample;
		wma_cfg.ch_mask =  wma_config->channelmask;
		wma_cfg.encode_opt = wma_config->encodeopt;
		
		rc = q6asm_media_format_block_wma(audio->ac, &wma_cfg);
		if (rc < 0) {
			pr_err("cmd media format block failed\n");
			break;
		}
		rc = audio_aio_enable(audio);
		audio->eos_rsp = 0;
		audio->eos_flag = 0;
		if (!rc) {
			audio->enabled = 1;
		} else {
			audio->enabled = 0;
			pr_err("Audio Start procedure failed rc=%d\n", rc);
			break;
		}
		pr_debug("AUDIO_START success enable[%d]\n", audio->enabled);
		if (audio->stopped == 1)
			audio->stopped = 0;
		break;
	}
	case AUDIO_GET_WMA_CONFIG_V2: {
		if (copy_to_user((void *)arg, audio->codec_cfg,
			sizeof(struct msm_audio_wma_config_v2))) {
			rc = -EFAULT;
			break;
		}
		break;
	}
	case AUDIO_SET_WMA_CONFIG_V2: {
		if (copy_from_user(audio->codec_cfg, (void *)arg,
			sizeof(struct msm_audio_wma_config_v2))) {
			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);
	}
	return rc;
}