static int audio_set_hw_params()

in most_snd.c [446:483]


static int audio_set_hw_params(struct snd_pcm_hardware *pcm_hw,
			       u16 ch_num, char *sample_res,
			       struct most_channel_config *cfg)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(sinfo); i++) {
		if (!strcmp(sample_res, sinfo[i].sample_res))
			goto found;
	}
	pr_err("Unsupported PCM format\n");
	return -EINVAL;

found:
	if (!ch_num) {
		pr_err("Bad number of channels\n");
		return -EINVAL;
	}

	if (cfg->subbuffer_size != ch_num * sinfo[i].bytes) {
		pr_err("Audio resolution doesn't fit subbuffer size\n");
		return -EINVAL;
	}

	pcm_hw->info = MOST_PCM_INFO;
	pcm_hw->rates = SNDRV_PCM_RATE_48000;
	pcm_hw->rate_min = 48000;
	pcm_hw->rate_max = 48000;
	pcm_hw->buffer_bytes_max = cfg->num_buffers * cfg->buffer_size;
	pcm_hw->period_bytes_min = cfg->buffer_size;
	pcm_hw->period_bytes_max = cfg->buffer_size;
	pcm_hw->periods_min = 1;
	pcm_hw->periods_max = cfg->num_buffers;
	pcm_hw->channels_min = ch_num;
	pcm_hw->channels_max = ch_num;
	pcm_hw->formats = sinfo[i].formats;
	return 0;
}