Prev: bmp085: add inline and ABI documentation
Next: how to (really) cleanly shutdown the system when root is on multiple stacked block devices
From: Shérab on 26 Jun 2010 07:40 Dear all, The problem is on a computer with an HDA Intel sound card, Intel G45 DEVCTG chip and appears will all version s of the kernel. Running e.g. beep 440 produces a beep whose audible frequency is very low, definitely not 440 Hz. However, it is worth notiing that grub is able to produce a beep of the right frequency at boot time. Can this problem be fixed ? Should you need any additional bit of information or testing, please ask. Many thanks in advance for your help, Sh�rab. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Takashi Iwai on 5 Jul 2010 02:20 At Sat, 26 Jun 2010 13:25:04 +0200, Shérab wrote: > > Dear all, > > The problem is on a computer with an HDA Intel sound card, Intel G45 > DEVCTG chip and appears will all version s of the kernel. > > Running e.g. > beep 440 > produces a beep whose audible frequency is very low, definitely not 440 > Hz. > > However, it is worth notiing that grub is able to produce a beep of the > right frequency at boot time. > > Can this problem be fixed ? There are a few ways. If you build your kernel with SND_HDA_INPUT_BEEP_MODE=2, or set the option of snd-hda-intel module beep_mode=2, you'll be able to switch to the native beep from HD-audio codec digital beep via muting "Beep" mixer switch. Or, if the value above is 0, it'll be always the system-native beep. This can be done also via writing sysfs codec hint, as documented in HD-Audio.txt. Alternatively, you can reload pcspkr module so that it grabs the beep output again over snd-hda-intel, "modprobe -r pcspkr; modprobe pcspkr" Takashi -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Daniel J Blueman on 5 Jul 2010 07:30 On Jun 26, 12:40 pm, Sh�rab <Sebastien.Hinderer(a)ens-lyon.org> wrote: > Dear all, > > The problem is on a computer with an HDA Intel sound card, Intel G45 > DEVCTG chip and appears will all version s of the kernel. > > Running e.g. > beep 440 > produces a beep whose audible frequency is very low, definitely not 440 > Hz. > > However, it is worth notiing that grub is able to produce a beep of the > right frequency at boot time. > > Can this problem be fixed ? > > Should you need any additional bit of information or testing, please ask. I was finding the same with my Dell Studio 1557. It may be worth using some printk calls [1] showing what frequency value is sent to the codec, then checking with the codec datasheet - we'll need to know which one, eg from 'dmesg' or 'alsa-info.sh' (from http://www.alsa-project.org/alsa-info.sh). We'll probably need to check the configuration registers of the beep widget to check what divider it's using... Thanks, Daniel --- [1] diff --git a/sound/pci/hda/hda_beep.c b/sound/pci/hda/hda_beep.c index 29714c8..98d0d6c 100644 --- a/sound/pci/hda/hda_beep.c +++ b/sound/pci/hda/hda_beep.c @@ -69,6 +69,7 @@ static int beep_linear_tone(struct hda_beep *beep, int hz) hz /= DIGBEEP_HZ_STEP; hz = 255 - hz; } + printk(KERN_ERR "HDA beep: linear value %d\n", hz); return hz; } @@ -87,6 +88,7 @@ static int beep_standard_tone(struct hda_beep *beep, int hz) return 0xff; if (hz <= 0) return 1; + printk(KERN_ERR "HDA beep: standard value %d\n", hz); return hz; } -- Daniel J Blueman -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Shérab on 2 Aug 2010 14:30 Dear Daniel, Many thanks for your helpful e-mail and sorry for the delay, it was hard to find the time for testing. Daniel J Blueman (2010/07/05 12:20 +0100): > > On Jun 26, 12:40 pm, Sh�rab <Sebastien.Hinderer(a)ens-lyon.org> wrote: > > Dear all, > > > > The problem is on a computer with an HDA Intel sound card, Intel G45 > > DEVCTG chip and appears will all version s of the kernel. > > > > Running e.g. > > beep 440 > > produces a beep whose audible frequency is very low, definitely not 440 > > Hz. > > > > However, it is worth notiing that grub is able to produce a beep of the > > right frequency at boot time. > > > > Can this problem be fixed ? > > > > Should you need any additional bit of information or testing, please ask. > > I was finding the same with my Dell Studio 1557. Good to know one is not alone. > It may be worth using some printk calls [1] showing what frequency > value is sent to the codec, I applied your patch on top of 9fe6206f400646a2322096b56c59891d530e8d51 When a console bell is produced, one gets: HDA beep: linear value 241 And running the command beep 440 produces the following output: HDA beep: linear value 248 Aso, the printk you added saying "printk(KERN_ERR "HDA beep: standard value" never appears in the logs. Was this result predictable ? I thought that to each standard value one linear value would correspond, or something like that. > then checking with the codec datasheet - > we'll need to know which one, eg from 'dmesg' or 'alsa-info.sh' (from > http://www.alsa-project.org/alsa-info.sh). I attach the bzipped alsa-info.txt, hope this will help you guys. > We'll probably need to check the configuration registers of the beep > widget to check what divider it's using... That I don't know how to do, sorry. Any clue would be warmly appreciated. Thanks again, Sh�rab.
From: Daniel J Blueman on 2 Aug 2010 17:50
On 2 August 2010 19:14, Sh�rab <Sebastien.Hinderer(a)ens-lyon.org> wrote: > Dear Daniel, > > Many thanks for your helpful e-mail and sorry for the delay, it was hard > to find the time for testing. > > Daniel J Blueman (2010/07/05 12:20 +0100): >> >> On Jun 26, 12:40 pm, Sh�rab <Sebastien.Hinderer(a)ens-lyon.org> wrote: >> > Dear all, >> > >> > The problem is on a computer with an HDA Intel sound card, Intel G45 >> > DEVCTG chip and appears will all version s of the kernel. >> > >> > Running e.g. >> > beep 440 >> > produces a beep whose audible frequency is very low, definitely not 440 >> > Hz. >> > >> > However, it is worth notiing that grub is able to produce a beep of the >> > right frequency at boot time. >> > >> > Can this problem be fixed ? >> > >> > Should you need any additional bit of information or testing, please ask. >> >> I was finding the same with my Dell Studio 1557. > > Good to know one is not alone. > >> It may be worth using some printk calls [1] showing what frequency >> value is sent to the codec, > > I applied your patch on top of > 9fe6206f400646a2322096b56c59891d530e8d51 > > When a console bell is produced, one gets: > HDA beep: linear value 241 > > And running the command > beep 440 > produces the following output: > HDA beep: linear value 248 > > Aso, the printk you added saying "printk(KERN_ERR "HDA beep: standard > value" never appears in the logs. > Was this result predictable ? > I thought that to each standard value one linear value would correspond, > or something like that. I looked into this further, and on my Dell Studio 15 (with similar IDT codec), I get value 248 written with the linear calculation. The datasheet [http://www.idt.com/products/getDoc.cfm?docID=18716251] has conflicting information: page 28 tells us the HD Audio spec 'standard' calculation is used (ie freq=48000/4*val), but page 165 tells the linear calculation is used (ie freq=48000*(257-val)/1024). A handy app on my phone tells me the frequency produced is 48.4Hz. Well, 48000/4*248~=48, so it is clear Linux is using the wrong calculation method. Testing with value 27 (ie 48000/4*27~=440), we hear the expected tone: $ sudo ./hda-verb /dev/snd/hwC0D0 0x1c SET_BEEP_CONTROL 27 (of course, your beep widget may not be 0x1c) The problem is the assumption in patch_sigmatel.c:stac92xx_parse_auto_config(): /* setup digital beep controls and input device */ #ifdef CONFIG_SND_HDA_INPUT_BEEP if (spec->digbeep_nid > 0) { hda_nid_t nid = spec->digbeep_nid; unsigned int caps; err = stac92xx_auto_create_beep_ctls(codec, nid); if (err < 0) return err; err = snd_hda_attach_beep_device(codec, nid); if (err < 0) return err; if (codec->beep) { /* IDT/STAC codecs have linear beep tone parameter */ codec->beep->linear_tone = 1; /* if no beep switch is available, make its own one */ caps = query_amp_caps(codec, nid, HDA_OUTPUT); if (!(caps & AC_AMPCAP_MUTE)) { err = stac92xx_beep_switch_ctl(codec); if (err < 0) return err; } } } #endif So, linear calculation is used for all SigmaTel/IDT codecs. Takashi, is then (eg) a white-list the best way to select linear calculation, as clearly IDT have reverted to the spec? Thanks, Daniel -- Daniel J Blueman -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |