mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
ALSA: dummy: Add customizable volume min/max.
Add module parameters to support customized min/max volume leveling, which will be useful to test devices with different volume granularity. Signed-off-by: YJ Lee <yunjunlee@chromium.org> Link: https://lore.kernel.org/r/20220912072945.760949-1-yunjunlee@chromium.org Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7ae22bdf49
commit
446bc11f86
@ -42,6 +42,8 @@ MODULE_LICENSE("GPL");
|
||||
#define USE_CHANNELS_MAX 2
|
||||
#define USE_PERIODS_MIN 1
|
||||
#define USE_PERIODS_MAX 1024
|
||||
#define USE_MIXER_VOLUME_LEVEL_MIN -50
|
||||
#define USE_MIXER_VOLUME_LEVEL_MAX 100
|
||||
|
||||
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
|
||||
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
|
||||
@ -50,6 +52,8 @@ static char *model[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = NULL};
|
||||
static int pcm_devs[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1};
|
||||
static int pcm_substreams[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 8};
|
||||
//static int midi_devs[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
|
||||
static int mixer_volume_level_min = USE_MIXER_VOLUME_LEVEL_MIN;
|
||||
static int mixer_volume_level_max = USE_MIXER_VOLUME_LEVEL_MAX;
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
static bool hrtimer = 1;
|
||||
#endif
|
||||
@ -69,6 +73,10 @@ module_param_array(pcm_substreams, int, NULL, 0444);
|
||||
MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-128) for dummy driver.");
|
||||
//module_param_array(midi_devs, int, NULL, 0444);
|
||||
//MODULE_PARM_DESC(midi_devs, "MIDI devices # (0-2) for dummy driver.");
|
||||
module_param(mixer_volume_level_min, int, 0444);
|
||||
MODULE_PARM_DESC(mixer_volume_level_min, "Minimum mixer volume level for dummy driver. Default: -50");
|
||||
module_param(mixer_volume_level_max, int, 0444);
|
||||
MODULE_PARM_DESC(mixer_volume_level_max, "Maximum mixer volume level for dummy driver. Default: 100");
|
||||
module_param(fake_buffer, bool, 0444);
|
||||
MODULE_PARM_DESC(fake_buffer, "Fake buffer allocations.");
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
@ -713,8 +721,8 @@ static int snd_dummy_volume_info(struct snd_kcontrol *kcontrol,
|
||||
{
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
uinfo->count = 2;
|
||||
uinfo->value.integer.min = -50;
|
||||
uinfo->value.integer.max = 100;
|
||||
uinfo->value.integer.min = mixer_volume_level_min;
|
||||
uinfo->value.integer.max = mixer_volume_level_max;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -739,15 +747,15 @@ static int snd_dummy_volume_put(struct snd_kcontrol *kcontrol,
|
||||
int left, right;
|
||||
|
||||
left = ucontrol->value.integer.value[0];
|
||||
if (left < -50)
|
||||
left = -50;
|
||||
if (left > 100)
|
||||
left = 100;
|
||||
if (left < mixer_volume_level_min)
|
||||
left = mixer_volume_level_min;
|
||||
if (left > mixer_volume_level_max)
|
||||
left = mixer_volume_level_max;
|
||||
right = ucontrol->value.integer.value[1];
|
||||
if (right < -50)
|
||||
right = -50;
|
||||
if (right > 100)
|
||||
right = 100;
|
||||
if (right < mixer_volume_level_min)
|
||||
right = mixer_volume_level_min;
|
||||
if (right > mixer_volume_level_max)
|
||||
right = mixer_volume_level_max;
|
||||
spin_lock_irq(&dummy->mixer_lock);
|
||||
change = dummy->mixer_volume[addr][0] != left ||
|
||||
dummy->mixer_volume[addr][1] != right;
|
||||
@ -1076,6 +1084,12 @@ static int snd_dummy_probe(struct platform_device *devptr)
|
||||
dummy->pcm_hw.channels_max = m->channels_max;
|
||||
}
|
||||
|
||||
if (mixer_volume_level_min > mixer_volume_level_max) {
|
||||
pr_warn("snd-dummy: Invalid mixer volume level: min=%d, max=%d. Fall back to default value.\n",
|
||||
mixer_volume_level_min, mixer_volume_level_max);
|
||||
mixer_volume_level_min = USE_MIXER_VOLUME_LEVEL_MIN;
|
||||
mixer_volume_level_max = USE_MIXER_VOLUME_LEVEL_MAX;
|
||||
}
|
||||
err = snd_card_dummy_new_mixer(dummy);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user