* [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions
@ 2023-05-17 16:48 Oswald Buddenhagen
2023-05-17 16:55 ` Christophe Leroy
2023-05-17 20:18 ` Takashi Iwai
0 siblings, 2 replies; 3+ messages in thread
From: Oswald Buddenhagen @ 2023-05-17 16:48 UTC (permalink / raw)
To: alsa-devel
Cc: Takashi Iwai, Jaroslav Kysela, Christophe Leroy, Naresh Kamboju
32-bit platforms don't like these. As we're actually dealing with
constants, factor out the calculations and pass them in as additional
arguments. To keep the call sites clean, wrap the actual functions in
macros which generate the arguments.
Fixes: bb5ceb43b7bf ("ALSA: emu10k1: fix non-zero mixer control defaults in highres mode")
Fixes: 1298bc978afb ("ALSA: emu10k1: enable bit-exact playback, part 1: DSP attenuation")
Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
---
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
---
sound/pci/emu10k1/emufx.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
index f64b2b4eb348..e9855d37fa5c 100644
--- a/sound/pci/emu10k1/emufx.c
+++ b/sound/pci/emu10k1/emufx.c
@@ -1144,50 +1144,56 @@ static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu,
#define SND_EMU10K1_PLAYBACK_CHANNELS 8
#define SND_EMU10K1_CAPTURE_CHANNELS 4
+#define HR_VAL(v) ((v) * 0x80000000LL / 100 - 1)
+
static void
-snd_emu10k1_init_mono_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
- const char *name, int gpr, int defval)
+snd_emu10k1_init_mono_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
+ const char *name, int gpr, int defval, int defval_hr)
{
ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
strcpy(ctl->id.name, name);
ctl->vcount = ctl->count = 1;
if (high_res_gpr_volume) {
ctl->min = -1;
ctl->max = 0x7fffffff;
ctl->tlv = snd_emu10k1_db_linear;
ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
- defval = defval * 0x80000000LL / 100 - 1;
+ defval = defval_hr;
} else {
ctl->min = 0;
ctl->max = 100;
ctl->tlv = snd_emu10k1_db_scale1;
ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
}
ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
}
+#define snd_emu10k1_init_mono_control(ctl, name, gpr, defval) \
+ snd_emu10k1_init_mono_control2(ctl, name, gpr, defval, HR_VAL(defval))
static void
-snd_emu10k1_init_stereo_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
- const char *name, int gpr, int defval)
+snd_emu10k1_init_stereo_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
+ const char *name, int gpr, int defval, int defval_hr)
{
ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
strcpy(ctl->id.name, name);
ctl->vcount = ctl->count = 2;
if (high_res_gpr_volume) {
ctl->min = -1;
ctl->max = 0x7fffffff;
ctl->tlv = snd_emu10k1_db_linear;
ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
- defval = defval * 0x80000000LL / 100 - 1;
+ defval = defval_hr;
} else {
ctl->min = 0;
ctl->max = 100;
ctl->tlv = snd_emu10k1_db_scale1;
ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
}
ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
}
+#define snd_emu10k1_init_stereo_control(ctl, name, gpr, defval) \
+ snd_emu10k1_init_stereo_control2(ctl, name, gpr, defval, HR_VAL(defval))
static void
snd_emu10k1_init_mono_onoff_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
--
2.40.0.152.g15d061e6df
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions
2023-05-17 16:48 [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions Oswald Buddenhagen
@ 2023-05-17 16:55 ` Christophe Leroy
2023-05-17 20:18 ` Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Christophe Leroy @ 2023-05-17 16:55 UTC (permalink / raw)
To: Oswald Buddenhagen, alsa-devel@alsa-project.org
Cc: Takashi Iwai, Jaroslav Kysela, Naresh Kamboju
Le 17/05/2023 à 18:48, Oswald Buddenhagen a écrit :
> 32-bit platforms don't like these. As we're actually dealing with
> constants, factor out the calculations and pass them in as additional
> arguments. To keep the call sites clean, wrap the actual functions in
> macros which generate the arguments.
>
> Fixes: bb5ceb43b7bf ("ALSA: emu10k1: fix non-zero mixer control defaults in highres mode")
> Fixes: 1298bc978afb ("ALSA: emu10k1: enable bit-exact playback, part 1: DSP attenuation")
> Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Reported-by: Christophe Leroy <christophe.leroy@csgroup.eu>
>
> ---
>
> Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
> Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
> ---
> sound/pci/emu10k1/emufx.c | 18 ++++++++++++------
> 1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
> index f64b2b4eb348..e9855d37fa5c 100644
> --- a/sound/pci/emu10k1/emufx.c
> +++ b/sound/pci/emu10k1/emufx.c
> @@ -1144,50 +1144,56 @@ static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu,
> #define SND_EMU10K1_PLAYBACK_CHANNELS 8
> #define SND_EMU10K1_CAPTURE_CHANNELS 4
>
> +#define HR_VAL(v) ((v) * 0x80000000LL / 100 - 1)
> +
> static void
> -snd_emu10k1_init_mono_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
> - const char *name, int gpr, int defval)
> +snd_emu10k1_init_mono_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
> + const char *name, int gpr, int defval, int defval_hr)
> {
> ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
> strcpy(ctl->id.name, name);
> ctl->vcount = ctl->count = 1;
> if (high_res_gpr_volume) {
> ctl->min = -1;
> ctl->max = 0x7fffffff;
> ctl->tlv = snd_emu10k1_db_linear;
> ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
> - defval = defval * 0x80000000LL / 100 - 1;
> + defval = defval_hr;
> } else {
> ctl->min = 0;
> ctl->max = 100;
> ctl->tlv = snd_emu10k1_db_scale1;
> ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
> }
> ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
> }
> +#define snd_emu10k1_init_mono_control(ctl, name, gpr, defval) \
> + snd_emu10k1_init_mono_control2(ctl, name, gpr, defval, HR_VAL(defval))
>
> static void
> -snd_emu10k1_init_stereo_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
> - const char *name, int gpr, int defval)
> +snd_emu10k1_init_stereo_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
> + const char *name, int gpr, int defval, int defval_hr)
> {
> ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
> strcpy(ctl->id.name, name);
> ctl->vcount = ctl->count = 2;
> if (high_res_gpr_volume) {
> ctl->min = -1;
> ctl->max = 0x7fffffff;
> ctl->tlv = snd_emu10k1_db_linear;
> ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
> - defval = defval * 0x80000000LL / 100 - 1;
> + defval = defval_hr;
> } else {
> ctl->min = 0;
> ctl->max = 100;
> ctl->tlv = snd_emu10k1_db_scale1;
> ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
> }
> ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
> ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
> }
> +#define snd_emu10k1_init_stereo_control(ctl, name, gpr, defval) \
> + snd_emu10k1_init_stereo_control2(ctl, name, gpr, defval, HR_VAL(defval))
>
> static void
> snd_emu10k1_init_mono_onoff_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions
2023-05-17 16:48 [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions Oswald Buddenhagen
2023-05-17 16:55 ` Christophe Leroy
@ 2023-05-17 20:18 ` Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Takashi Iwai @ 2023-05-17 20:18 UTC (permalink / raw)
To: Oswald Buddenhagen
Cc: alsa-devel, Jaroslav Kysela, Christophe Leroy, Naresh Kamboju
On Wed, 17 May 2023 18:48:00 +0200,
Oswald Buddenhagen wrote:
>
> 32-bit platforms don't like these. As we're actually dealing with
> constants, factor out the calculations and pass them in as additional
> arguments. To keep the call sites clean, wrap the actual functions in
> macros which generate the arguments.
>
> Fixes: bb5ceb43b7bf ("ALSA: emu10k1: fix non-zero mixer control defaults in highres mode")
> Fixes: 1298bc978afb ("ALSA: emu10k1: enable bit-exact playback, part 1: DSP attenuation")
> Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
>
> ---
>
> Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
> Cc: Naresh Kamboju <naresh.kamboju@linaro.org>
> ---
Thanks, applied now.
Takashi
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-05-17 20:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-17 16:48 [PATCH] ALSA: emu10k1: remove runtime 64-bit divisions Oswald Buddenhagen
2023-05-17 16:55 ` Christophe Leroy
2023-05-17 20:18 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox