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
|
||||
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"
|
||||
|
||||
if !M68K
|
||||
|
|
|
@ -5,9 +5,10 @@ menu "Generic devices"
|
|||
|
||||
|
||||
config SND_PCSP
|
||||
tristate "PC-Speaker support"
|
||||
tristate "PC-Speaker support (READ HELP!)"
|
||||
depends on PCSPKR_PLATFORM && X86_PC && HIGH_RES_TIMERS
|
||||
depends on INPUT
|
||||
depends on EXPERIMENTAL
|
||||
depends on SND
|
||||
select SND_PCM
|
||||
help
|
||||
|
@ -18,11 +19,21 @@ config 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 have a tablet piezo beeper
|
||||
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
|
||||
tristate
|
||||
|
|
|
@ -18,6 +18,8 @@ module_param(nforce_wa, bool, 0444);
|
|||
MODULE_PARM_DESC(nforce_wa, "Apply NForce chipset workaround "
|
||||
"(expect bad sound)");
|
||||
|
||||
#define DMIX_WANTS_S16 1
|
||||
|
||||
static void pcsp_start_timer(unsigned long dummy)
|
||||
{
|
||||
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 char timer_cnt, val;
|
||||
int periods_elapsed;
|
||||
int fmt_size, periods_elapsed;
|
||||
u64 ns;
|
||||
size_t period_bytes, buffer_bytes;
|
||||
struct snd_pcm_substream *substream;
|
||||
|
@ -92,8 +94,11 @@ enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle)
|
|||
goto exit_nr_unlock2;
|
||||
|
||||
runtime = substream->runtime;
|
||||
/* assume it is u8 mono */
|
||||
val = runtime->dma_area[chip->playback_ptr];
|
||||
fmt_size = snd_pcm_format_physical_width(runtime->format) >> 3;
|
||||
/* 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;
|
||||
|
||||
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);
|
||||
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;
|
||||
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",
|
||||
chip->playback_ptr, period_bytes, buffer_bytes);
|
||||
#endif
|
||||
periods_elapsed += buffer_bytes;
|
||||
}
|
||||
periods_elapsed /= period_bytes;
|
||||
|
@ -270,7 +277,11 @@ static struct snd_pcm_hardware snd_pcsp_playback = {
|
|||
.info = (SNDRV_PCM_INFO_INTERLEAVED |
|
||||
SNDRV_PCM_INFO_HALF_DUPLEX |
|
||||
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,
|
||||
.rate_min = PCSP_DEFAULT_SRATE,
|
||||
.rate_max = PCSP_DEFAULT_SRATE,
|
||||
|
|
Loading…
Reference in a new issue