Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: snd-pcsp: silent misleading warning snd-pcsp: depend on CONFIG_EXPERIMENTAL snd-pcsp: put back the compatibility code for the older alsa-libs snd-pcsp: adjust help texts to frighten users
This commit is contained in:
commit
83e0c24a38
3 changed files with 30 additions and 13 deletions
|
@ -28,11 +28,6 @@ config SOUND
|
||||||
and read <file:Documentation/sound/oss/README.modules>; the module
|
and read <file:Documentation/sound/oss/README.modules>; the module
|
||||||
will be called soundcore.
|
will be called soundcore.
|
||||||
|
|
||||||
I'm told that even without a sound card, you can make your computer
|
|
||||||
say more than an occasional beep, by programming the PC speaker.
|
|
||||||
Kernel patches and supporting utilities to do that are in the pcsp
|
|
||||||
package, available at <ftp://ftp.infradead.org/pub/pcsp/>.
|
|
||||||
|
|
||||||
source "sound/oss/dmasound/Kconfig"
|
source "sound/oss/dmasound/Kconfig"
|
||||||
|
|
||||||
if !M68K
|
if !M68K
|
||||||
|
|
|
@ -5,9 +5,10 @@ menu "Generic devices"
|
||||||
|
|
||||||
|
|
||||||
config SND_PCSP
|
config SND_PCSP
|
||||||
tristate "PC-Speaker support"
|
tristate "PC-Speaker support (READ HELP!)"
|
||||||
depends on PCSPKR_PLATFORM && X86_PC && HIGH_RES_TIMERS
|
depends on PCSPKR_PLATFORM && X86_PC && HIGH_RES_TIMERS
|
||||||
depends on INPUT
|
depends on INPUT
|
||||||
|
depends on EXPERIMENTAL
|
||||||
depends on SND
|
depends on SND
|
||||||
select SND_PCM
|
select SND_PCM
|
||||||
help
|
help
|
||||||
|
@ -18,11 +19,21 @@ config SND_PCSP
|
||||||
|
|
||||||
You can compile this as a module which will be called snd-pcsp.
|
You can compile this as a module which will be called snd-pcsp.
|
||||||
|
|
||||||
|
WARNING: if you already have a soundcard, enabling this
|
||||||
|
driver may lead to a problem. Namely, it may get loaded
|
||||||
|
before the other sound driver of yours, making the
|
||||||
|
pc-speaker a default sound device. Which is likely not
|
||||||
|
what you want. To make this driver play nicely with other
|
||||||
|
sound driver, you can add this into your /etc/modprobe.conf:
|
||||||
|
options snd-pcsp index=2
|
||||||
|
|
||||||
You don't need this driver if you only want your pc-speaker to beep.
|
You don't need this driver if you only want your pc-speaker to beep.
|
||||||
You don't need this driver if you have a tablet piezo beeper
|
You don't need this driver if you have a tablet piezo beeper
|
||||||
in your PC instead of the real speaker.
|
in your PC instead of the real speaker.
|
||||||
|
|
||||||
It should not hurt to say Y or M here in all other cases.
|
Say N if you have a sound card.
|
||||||
|
Say M if you don't.
|
||||||
|
Say Y only if you really know what you do.
|
||||||
|
|
||||||
config SND_MPU401_UART
|
config SND_MPU401_UART
|
||||||
tristate
|
tristate
|
||||||
|
|
|
@ -18,6 +18,8 @@ module_param(nforce_wa, bool, 0444);
|
||||||
MODULE_PARM_DESC(nforce_wa, "Apply NForce chipset workaround "
|
MODULE_PARM_DESC(nforce_wa, "Apply NForce chipset workaround "
|
||||||
"(expect bad sound)");
|
"(expect bad sound)");
|
||||||
|
|
||||||
|
#define DMIX_WANTS_S16 1
|
||||||
|
|
||||||
static void pcsp_start_timer(unsigned long dummy)
|
static void pcsp_start_timer(unsigned long dummy)
|
||||||
{
|
{
|
||||||
hrtimer_start(&pcsp_chip.timer, ktime_set(0, 0), HRTIMER_MODE_REL);
|
hrtimer_start(&pcsp_chip.timer, ktime_set(0, 0), HRTIMER_MODE_REL);
|
||||||
|
@ -47,7 +49,7 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned char timer_cnt, val;
|
unsigned char timer_cnt, val;
|
||||||
int periods_elapsed;
|
int fmt_size, periods_elapsed;
|
||||||
u64 ns;
|
u64 ns;
|
||||||
size_t period_bytes, buffer_bytes;
|
size_t period_bytes, buffer_bytes;
|
||||||
struct snd_pcm_substream *substream;
|
struct snd_pcm_substream *substream;
|
||||||
|
@ -92,8 +94,11 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
|
||||||
goto exit_nr_unlock2;
|
goto exit_nr_unlock2;
|
||||||
|
|
||||||
runtime = substream->runtime;
|
runtime = substream->runtime;
|
||||||
/* assume it is u8 mono */
|
fmt_size = snd_pcm_format_physical_width(runtime->format) >> 3;
|
||||||
val = runtime->dma_area[chip->playback_ptr];
|
/* assume it is mono! */
|
||||||
|
val = runtime->dma_area[chip->playback_ptr + fmt_size - 1];
|
||||||
|
if (snd_pcm_format_signed(runtime->format))
|
||||||
|
val ^= 0x80;
|
||||||
timer_cnt = val * CUR_DIV() / 256;
|
timer_cnt = val * CUR_DIV() / 256;
|
||||||
|
|
||||||
if (timer_cnt && chip->enable) {
|
if (timer_cnt && chip->enable) {
|
||||||
|
@ -111,12 +116,14 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
|
||||||
|
|
||||||
period_bytes = snd_pcm_lib_period_bytes(substream);
|
period_bytes = snd_pcm_lib_period_bytes(substream);
|
||||||
buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
|
buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
|
||||||
chip->playback_ptr += PCSP_INDEX_INC();
|
chip->playback_ptr += PCSP_INDEX_INC() * fmt_size;
|
||||||
periods_elapsed = chip->playback_ptr - chip->period_ptr;
|
periods_elapsed = chip->playback_ptr - chip->period_ptr;
|
||||||
if (periods_elapsed < 0) {
|
if (periods_elapsed < 0) {
|
||||||
printk(KERN_WARNING "PCSP: playback_ptr inconsistent "
|
#if PCSP_DEBUG
|
||||||
|
printk(KERN_INFO "PCSP: buffer_bytes mod period_bytes != 0 ? "
|
||||||
"(%zi %zi %zi)\n",
|
"(%zi %zi %zi)\n",
|
||||||
chip->playback_ptr, period_bytes, buffer_bytes);
|
chip->playback_ptr, period_bytes, buffer_bytes);
|
||||||
|
#endif
|
||||||
periods_elapsed += buffer_bytes;
|
periods_elapsed += buffer_bytes;
|
||||||
}
|
}
|
||||||
periods_elapsed /= period_bytes;
|
periods_elapsed /= period_bytes;
|
||||||
|
@ -270,7 +277,11 @@ static struct snd_pcm_hardware snd_pcsp_playback = {
|
||||||
.info = (SNDRV_PCM_INFO_INTERLEAVED |
|
.info = (SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_HALF_DUPLEX |
|
SNDRV_PCM_INFO_HALF_DUPLEX |
|
||||||
SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID),
|
SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID),
|
||||||
.formats = SNDRV_PCM_FMTBIT_U8,
|
.formats = (SNDRV_PCM_FMTBIT_U8
|
||||||
|
#if DMIX_WANTS_S16
|
||||||
|
| SNDRV_PCM_FMTBIT_S16_LE
|
||||||
|
#endif
|
||||||
|
),
|
||||||
.rates = SNDRV_PCM_RATE_KNOT,
|
.rates = SNDRV_PCM_RATE_KNOT,
|
||||||
.rate_min = PCSP_DEFAULT_SRATE,
|
.rate_min = PCSP_DEFAULT_SRATE,
|
||||||
.rate_max = PCSP_DEFAULT_SRATE,
|
.rate_max = PCSP_DEFAULT_SRATE,
|
||||||
|
|
Loading…
Reference in a new issue