提交 83e0c24a 编写于 作者: L Linus Torvalds

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
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册