[alsa-devel] [PATCH] snd-hda-intel: fix beep tone calculation for IDT/STAC codecs

Takashi Iwai tiwai at suse.de
Thu Jul 9 09:38:09 CEST 2009


At Wed, 8 Jul 2009 23:57:46 -0700,
Paul Vojta wrote:
> 
> In the beep tone calculation for IDT/STAC codecs, lower numbers correspond
> to higher frequencies and vice versa.  The current code has this backwards,
> resulting in beep frequencies which are way too high (and sound bad on
> tinny laptop speakers, resulting in complaints).
> 
> Signed-off-by: Paul Vojta <vojta at math.berkeley.edu>

Thanks, applied now (with a minor modification).


Takashi

> 
> diff --git a/sound/pci/hda/hda_beep.c b/sound/pci/hda/hda_beep.c
> index 08fe659..d559a7a 100644
> --- a/sound/pci/hda/hda_beep.c
> +++ b/sound/pci/hda/hda_beep.c
> @@ -51,19 +51,20 @@ static void snd_hda_generate_beep(struct work_struct *work)
>   * The tone frequency of beep generator on IDT/STAC codecs is
>   * defined from the 8bit tone parameter, in Hz,
>   *    freq = 48000 * (257 - tone) / 1024
> - * that is from 12kHz to 93.75kHz in step of 46.875 hz
> + * that is from 12kHz to 93.75Hz in steps of 46.875 Hz
>   */
>  static int beep_linear_tone(struct hda_beep *beep, int hz)
>  {
>  	hz *= 1000; /* fixed point */
> -	hz = hz - DIGBEEP_HZ_MIN;
> +	hz = hz - DIGBEEP_HZ_MIN
> +	        + DIGBEEP_HZ_STEP / 2; /* round to nearest step */
>  	if (hz < 0)
>  		hz = 0; /* turn off PC beep*/
>  	else if (hz >= (DIGBEEP_HZ_MAX - DIGBEEP_HZ_MIN))
> -		hz = 0xff;
> +		hz = 1; /* max frequency */
>  	else {
>  		hz /= DIGBEEP_HZ_STEP;
> -		hz++;
> +		hz = 255 - hz;
>  	}
>  	return hz;
>  }
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


More information about the Alsa-devel mailing list