mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 19:36:44 +07:00
ASoC: rsnd: merge snd_pcm_ops::open and snd_soc_dai_ops::startup
Current rsnd driver has snd_pcm_ops::open and snd_soc_dai_ops::startup, but, these are called from soc_pcm_open in same time. This patch merge these into rsnd_soc_dai_startup() Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
16d4498962
commit
3c9736aa1a
@ -844,12 +844,28 @@ static int rsnd_soc_hw_rule_channels(struct snd_pcm_hw_params *params,
|
||||
ir, &ic);
|
||||
}
|
||||
|
||||
static void rsnd_soc_hw_constraint(struct snd_pcm_runtime *runtime,
|
||||
struct snd_soc_dai *dai)
|
||||
static struct snd_pcm_hardware rsnd_pcm_hardware = {
|
||||
.info = SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_MMAP |
|
||||
SNDRV_PCM_INFO_MMAP_VALID,
|
||||
.buffer_bytes_max = 64 * 1024,
|
||||
.period_bytes_min = 32,
|
||||
.period_bytes_max = 8192,
|
||||
.periods_min = 1,
|
||||
.periods_max = 32,
|
||||
.fifo_size = 256,
|
||||
};
|
||||
|
||||
static int rsnd_soc_dai_startup(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
|
||||
struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
|
||||
struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
|
||||
struct snd_pcm_hw_constraint_list *constraint = &rdai->constraint;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
unsigned int max_channels = rsnd_rdai_channels_get(rdai);
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
/*
|
||||
@ -866,34 +882,26 @@ static void rsnd_soc_hw_constraint(struct snd_pcm_runtime *runtime,
|
||||
constraint->count = i + 1;
|
||||
}
|
||||
|
||||
snd_soc_set_runtime_hwparams(substream, &rsnd_pcm_hardware);
|
||||
|
||||
snd_pcm_hw_constraint_list(runtime, 0,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS, constraint);
|
||||
|
||||
snd_pcm_hw_constraint_integer(runtime,
|
||||
SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
|
||||
/*
|
||||
* Sampling Rate / Channel Limitation
|
||||
* It depends on Clock Master Mode
|
||||
*/
|
||||
if (!rsnd_rdai_is_clk_master(rdai))
|
||||
return;
|
||||
|
||||
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
|
||||
rsnd_soc_hw_rule_rate, dai,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
|
||||
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
|
||||
rsnd_soc_hw_rule_channels, dai,
|
||||
SNDRV_PCM_HW_PARAM_RATE, -1);
|
||||
}
|
||||
|
||||
static int rsnd_soc_dai_startup(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
|
||||
struct rsnd_priv *priv = rsnd_rdai_to_priv(rdai);
|
||||
struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
|
||||
int ret;
|
||||
|
||||
/* rsnd_io_to_runtime() is not yet enabled here */
|
||||
rsnd_soc_hw_constraint(substream->runtime, dai);
|
||||
if (rsnd_rdai_is_clk_master(rdai)) {
|
||||
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
|
||||
rsnd_soc_hw_rule_rate, dai,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
|
||||
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
|
||||
rsnd_soc_hw_rule_channels, dai,
|
||||
SNDRV_PCM_HW_PARAM_RATE, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
* call rsnd_dai_call without spinlock
|
||||
@ -1105,31 +1113,6 @@ static int rsnd_dai_probe(struct rsnd_priv *priv)
|
||||
/*
|
||||
* pcm ops
|
||||
*/
|
||||
static struct snd_pcm_hardware rsnd_pcm_hardware = {
|
||||
.info = SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_MMAP |
|
||||
SNDRV_PCM_INFO_MMAP_VALID,
|
||||
.buffer_bytes_max = 64 * 1024,
|
||||
.period_bytes_min = 32,
|
||||
.period_bytes_max = 8192,
|
||||
.periods_min = 1,
|
||||
.periods_max = 32,
|
||||
.fifo_size = 256,
|
||||
};
|
||||
|
||||
static int rsnd_pcm_open(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
int ret = 0;
|
||||
|
||||
snd_soc_set_runtime_hwparams(substream, &rsnd_pcm_hardware);
|
||||
|
||||
ret = snd_pcm_hw_constraint_integer(runtime,
|
||||
SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rsnd_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *hw_params)
|
||||
{
|
||||
@ -1159,7 +1142,6 @@ static snd_pcm_uframes_t rsnd_pointer(struct snd_pcm_substream *substream)
|
||||
}
|
||||
|
||||
static struct snd_pcm_ops rsnd_pcm_ops = {
|
||||
.open = rsnd_pcm_open,
|
||||
.ioctl = snd_pcm_lib_ioctl,
|
||||
.hw_params = rsnd_hw_params,
|
||||
.hw_free = snd_pcm_lib_free_pages,
|
||||
|
Loading…
Reference in New Issue
Block a user