* [PATCH v1] ALSA: dummy: Add customizable volume min/max.
@ 2022-09-12 7:29 YJ Lee
2022-09-12 7:52 ` Takashi Iwai
0 siblings, 1 reply; 3+ messages in thread
From: YJ Lee @ 2022-09-12 7:29 UTC (permalink / raw)
Cc: Jaroslav Kysela, Takashi Iwai, YJ Lee, alsa-devel, linux-kernel,
yuhsuan, whalechang
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>
---
sound/drivers/dummy.c | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index 2a7fc49c1a7c5..64fb2778f1e9a 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -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;
--
2.31.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1] ALSA: dummy: Add customizable volume min/max.
2022-09-12 7:29 [PATCH v1] ALSA: dummy: Add customizable volume min/max YJ Lee
@ 2022-09-12 7:52 ` Takashi Iwai
2022-09-12 8:48 ` YJ Lee
0 siblings, 1 reply; 3+ messages in thread
From: Takashi Iwai @ 2022-09-12 7:52 UTC (permalink / raw)
To: YJ Lee
Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, yuhsuan,
whalechang
On Mon, 12 Sep 2022 09:29:45 +0200,
YJ Lee wrote:
>
> 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>
> ---
> sound/drivers/dummy.c | 34 ++++++++++++++++++++++++----------
> 1 file changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
> index 2a7fc49c1a7c5..64fb2778f1e9a 100644
> --- a/sound/drivers/dummy.c
> +++ b/sound/drivers/dummy.c
> @@ -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);
I can imagine that the permission could be 0644, so that the
parameters can be changed dynamically via sysfs, too. But it may skip
the sanity check at probe, hence more code would be needed, OTOH.
So I applied the patch as is now.
thanks,
Takashi
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1] ALSA: dummy: Add customizable volume min/max.
2022-09-12 7:52 ` Takashi Iwai
@ 2022-09-12 8:48 ` YJ Lee
0 siblings, 0 replies; 3+ messages in thread
From: YJ Lee @ 2022-09-12 8:48 UTC (permalink / raw)
To: Takashi Iwai
Cc: Jaroslav Kysela, Takashi Iwai, alsa-devel, linux-kernel, yuhsuan,
whalechang
On Mon, Sep 12, 2022 at 3:52 PM Takashi Iwai <tiwai@suse.de> wrote:
>
> On Mon, 12 Sep 2022 09:29:45 +0200,
> YJ Lee wrote:
> >
> > 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>
> > ---
> > sound/drivers/dummy.c | 34 ++++++++++++++++++++++++----------
> > 1 file changed, 24 insertions(+), 10 deletions(-)
> >
> > diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
> > index 2a7fc49c1a7c5..64fb2778f1e9a 100644
> > --- a/sound/drivers/dummy.c
> > +++ b/sound/drivers/dummy.c
> > @@ -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);
>
> I can imagine that the permission could be 0644, so that the
> parameters can be changed dynamically via sysfs, too. But it may skip
> the sanity check at probe, hence more code would be needed, OTOH.
>
> So I applied the patch as is now.
>
>
> thanks,
>
> Takashi
Thanks for the insight! Learned a lot from your kind explanation and
constant help.
Appreciated,
YJ
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-09-12 8:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-12 7:29 [PATCH v1] ALSA: dummy: Add customizable volume min/max YJ Lee
2022-09-12 7:52 ` Takashi Iwai
2022-09-12 8:48 ` YJ Lee
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®