http://linux-sound.bkbits.net/linux-sound
perex@suse.cz|ChangeSet|20040922104053|50923 perex

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/09/22 13:51:44-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/mixart/mixart.c
#   2004/09/22 13:51:39-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/intel8x0.c
#   2004/09/22 13:51:39-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/09/22 13:51:39-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs4281.c
#   2004/09/22 13:51:39-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/09/22 13:51:39-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/22 12:28:46+02:00 perex@suse.cz 
#   [ALSA]  don't stop capture on errors
#   
#   BT87x driver
#   don't stop capture on errors because there's too much broken hardware out there
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 12:28:15+02:00 perex@suse.cz 
#   [ALSA]  remove 'Rawmidi' part from sequencer port names
#   
#   ALSA sequencer
#   
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 11:25:08+02:00 perex@suse.cz 
#   Merge
# 
# ChangeSet
#   2004/09/22 10:06:58+02:00 perex@suse.cz 
#   Merge suse.cz:/home/perex/bk/linux-sound/linux-2.5
#   into suse.cz:/home/perex/bk/linux-sound/linux-sound
# 
# sound/pci/bt87x.c
#   2004/09/22 03:53:26+02:00 perex@suse.cz +2 -3
#   [ALSA]  don't stop capture on errors
#   
#   D:2004/09/22 09:53:26
#   C:BT87x driver
#   F:pci/bt87x.c:1.12->1.13 
#   L:don't stop capture on errors because there's too much broken hardware out there
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/seq/seq_midi.c
#   2004/09/22 02:16:27+02:00 perex@suse.cz +1 -1
#   [ALSA]  remove 'Rawmidi' part from sequencer port names
#   
#   D:2004/09/22 08:16:27
#   C:ALSA sequencer
#   F:core/seq/seq_midi.c:1.22->1.23 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/22 11:24:55+02:00 perex@suse.cz +0 -8
#   SCCS merged
# 
# sound/pci/atiixp_modem.c
#   2004/09/22 11:23:23+02:00 perex@suse.cz +0 -3
#   SCCS merged
# 
# sound/pci/atiixp.c
#   2004/09/22 11:23:14+02:00 perex@suse.cz +0 -3
#   SCCS merged
# 
# sound/pci/intel8x0.c
#   2004/09/22 10:06:47+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/22 09:55:28+02:00 perex@suse.cz 
#   [ALSA]  use card-specific driver name
#   
#   au88x0 driver
#   use CARD_NAME_SHORT as driver name to allow different configuration file aliases in alsa-lib
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/au88x0/au88x0.c
#   2004/09/22 02:11:15+02:00 perex@suse.cz +1 -1
#   [ALSA]  use card-specific driver name
#   
#   D:2004/09/22 08:11:15
#   C:au88x0 driver
#   F:pci/au88x0/au88x0.c:1.12->1.13 
#   L:use CARD_NAME_SHORT as driver name to allow different configuration file aliases in alsa-lib
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:55:06+02:00 perex@suse.cz 
#   [ALSA]  Fix SPDIF rate setting for old ICHs
#   
#   Intel8x0 driver
#   Force to set SPDIF rate when PCMOUT is used on ICH[1-3].
#   ICH4, NFORCE and ALI uses a separate DMA for SPDIF.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/09/21 08:15:27+02:00 perex@suse.cz +12 -12
#   [ALSA]  Fix SPDIF rate setting for old ICHs
#   
#   D:2004/09/21 14:15:27
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.170->1.171 
#   L:Force to set SPDIF rate when PCMOUT is used on ICH[1-3].
#   L:ICH4, NFORCE and ALI uses a separate DMA for SPDIF.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:54:42+02:00 perex@suse.cz 
#   [ALSA]  [hdsp] Fix for 64bit architectures
#   
#   RME HDSP driver
#   Fixed the loading of firmware data and the handling of meter mmap
#   on 64bit architectures.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/09/21 05:32:27+02:00 perex@suse.cz +3 -3
#   [ALSA]  [hdsp] Fix for 64bit architectures
#   
#   D:2004/09/21 11:32:27
#   C:RME HDSP driver
#   F:include/hdsp.h:1.5->1.6 
#   F:pci/rme9652/hdsp.c:1.68->1.69 
#   L:Fixed the loading of firmware data and the handling of meter mmap
#   L:on 64bit architectures.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/hdsp.h
#   2004/09/21 05:32:27+02:00 perex@suse.cz +1 -1
#   [ALSA]  [hdsp] Fix for 64bit architectures
#   
#   D:2004/09/21 11:32:27
#   C:RME HDSP driver
#   F:include/hdsp.h:1.5->1.6 
#   F:pci/rme9652/hdsp.c:1.68->1.69 
#   L:Fixed the loading of firmware data and the handling of meter mmap
#   L:on 64bit architectures.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:54:19+02:00 perex@suse.cz 
#   [ALSA]  rme32 segfault fix
#   
#   RME32 driver
#   - disables buffer prefill in halfduplex mode, which fixes segmentation fault
#     of rme32 for playback in halfduplex mode
#   
#   Signed-Off-By: Martin Langer <martin-langer@gmx.de>
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/09/20 05:10:47+02:00 perex@suse.cz +1 -1
#   [ALSA]  rme32 segfault fix
#   
#   D:2004/09/20 11:10:47
#   C:RME32 driver
#   F:pci/rme32.c:1.46->1.47 
#   L:- disables buffer prefill in halfduplex mode, which fixes segmentation fault
#   L:  of rme32 for playback in halfduplex mode
#   L:
#   L:Signed-Off-By: Martin Langer <martin-langer@gmx.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:53:57+02:00 perex@suse.cz 
#   [ALSA]  Added support of Mediastation
#   
#   ICE1712 driver
#   The support for Lionstracs Mediastation is added.
#   The model name is 'mediastation'.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/delta.h
#   2004/09/17 12:38:26+02:00 perex@suse.cz +3 -1
#   [ALSA]  Added support of Mediastation
#   
#   D:2004/09/17 18:38:26
#   C:ICE1712 driver
#   F:pci/ice1712/delta.c:1.18->1.19 
#   F:pci/ice1712/delta.h:1.6->1.7 
#   L:The support for Lionstracs Mediastation is added.
#   L:The model name is 'mediastation'.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/delta.c
#   2004/09/17 12:38:26+02:00 perex@suse.cz +13 -0
#   [ALSA]  Added support of Mediastation
#   
#   D:2004/09/17 18:38:26
#   C:ICE1712 driver
#   F:pci/ice1712/delta.c:1.18->1.19 
#   F:pci/ice1712/delta.h:1.6->1.7 
#   L:The support for Lionstracs Mediastation is added.
#   L:The model name is 'mediastation'.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:53:32+02:00 perex@suse.cz 
#   [ALSA]  Fix iomem variable type
#   
#   Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   RME9652 driver,PPC Tumbler driver
#   The type of iomem variables is changed to void __iomem *.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/tumbler.c
#   2004/09/16 13:40:26+02:00 perex@suse.cz +3 -3
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/09/16 13:40:26+02:00 perex@suse.cz +2 -2
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/09/16 13:40:26+02:00 perex@suse.cz +5 -5
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/09/16 13:40:26+02:00 perex@suse.cz +29 -29
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +8 -6
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +10 -10
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/09/16 13:40:26+02:00 perex@suse.cz +17 -17
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.h
#   2004/09/16 13:40:25+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/09/16 13:40:25+02:00 perex@suse.cz +3 -3
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/09/16 13:40:25+02:00 perex@suse.cz +34 -33
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +10 -10
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +10 -10
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/dsp_spos_scb_lib.c
#   2004/09/16 13:40:25+02:00 perex@suse.cz +2 -2
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/dsp_spos.c
#   2004/09/16 13:40:25+02:00 perex@suse.cz +5 -5
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/09/16 13:40:25+02:00 perex@suse.cz +5 -5
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs4281.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +8 -8
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0.h
#   2004/09/16 13:40:24+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +5 -5
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/09/16 13:40:24+02:00 perex@suse.cz +5 -5
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_lib.c
#   2004/09/16 13:40:23+02:00 perex@suse.cz +4 -4
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/mpu401/mpu401_uart.c
#   2004/09/16 13:40:23+02:00 perex@suse.cz +2 -2
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memory.c
#   2004/09/16 13:40:23+02:00 perex@suse.cz +4 -4
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ymfpci.h
#   2004/09/16 13:40:24+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/cs46xx.h
#   2004/09/16 13:40:24+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/core.h
#   2004/09/16 13:40:24+02:00 perex@suse.cz +2 -2
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/09/16 13:40:23+02:00 perex@suse.cz +3 -4
#   [ALSA]  Fix iomem variable type
#   
#   D:2004/09/16 19:40:23
#   C:Documentation,ALSA Core,MPU401 UART,OPL3,CS46xx driver,YMFPCI driver
#   C:ATIIXP driver,ATIIXP-modem driver,CS4281 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,RME32 driver,RME96 driver,au88x0 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,PPC Tumbler driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.39->1.40 
#   F:core/memory.c:1.31->1.32 
#   F:drivers/mpu401/mpu401_uart.c:1.31->1.32 
#   F:drivers/opl3/opl3_lib.c:1.21->1.22 
#   F:include/core.h:1.57->1.58 
#   F:include/cs46xx.h:1.21->1.22 
#   F:include/ymfpci.h:1.16->1.17 
#   F:pci/atiixp.c:1.23->1.24 
#   F:pci/atiixp_modem.c:1.7->1.8 
#   F:pci/cs4281.c:1.63->1.64 
#   F:pci/intel8x0.c:1.169->1.170 
#   F:pci/intel8x0m.c:1.20->1.21 
#   F:pci/rme32.c:1.45->1.46 
#   F:pci/rme96.c:1.43->1.44 
#   F:pci/au88x0/au88x0.c:1.11->1.12 
#   F:pci/au88x0/au88x0.h:1.7->1.8 
#   F:pci/cs46xx/cs46xx_lib.c:1.84->1.85 
#   F:pci/cs46xx/dsp_spos.c:1.26->1.27 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.24->1.25 
#   F:pci/korg1212/korg1212.c:1.48->1.49 
#   F:pci/mixart/mixart.c:1.17->1.18 
#   F:pci/mixart/mixart.h:1.5->1.6 
#   F:pci/nm256/nm256.c:1.50->1.51 
#   F:pci/rme9652/hdsp.c:1.67->1.68 
#   F:pci/rme9652/rme9652.c:1.52->1.53 
#   F:pci/ymfpci/ymfpci_main.c:1.57->1.58 
#   F:ppc/tumbler.c:1.33->1.34 
#   L:The type of iomem variables is changed to void __iomem *.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:53:03+02:00 perex@suse.cz 
#   [ALSA]  Fix auto-loading of sequencer modules
#   
#   ALSA sequencer
#   Allow auto-loading of sequencer modules except for module init time
#   (which may cause blocking).
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_clientmgr.c
#   2004/09/16 13:35:29+02:00 perex@suse.cz +5 -3
#   [ALSA]  Fix auto-loading of sequencer modules
#   
#   D:2004/09/16 19:35:29
#   C:ALSA sequencer
#   F:core/seq/seq.c:1.14->1.15 
#   F:core/seq/seq_clientmgr.c:1.36->1.37 
#   L:Allow auto-loading of sequencer modules except for module init time
#   L:(which may cause blocking).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq.c
#   2004/09/16 13:35:29+02:00 perex@suse.cz +4 -0
#   [ALSA]  Fix auto-loading of sequencer modules
#   
#   D:2004/09/16 19:35:29
#   C:ALSA sequencer
#   F:core/seq/seq.c:1.14->1.15 
#   F:core/seq/seq_clientmgr.c:1.36->1.37 
#   L:Allow auto-loading of sequencer modules except for module init time
#   L:(which may cause blocking).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:52:41+02:00 perex@suse.cz 
#   [ALSA]  Fixed the obsolete description in comments
#   
#   IOCTL32 emulation
#   
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/ioctl32.h
#   2004/09/16 07:27:18+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fixed the obsolete description in comments
#   
#   D:2004/09/16 13:27:18
#   C:IOCTL32 emulation
#   F:core/ioctl32/ioctl32.h:1.14->1.15 
#   L:
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:52:19+02:00 perex@suse.cz 
#   [ALSA]  Improved clock measurement
#   
#   Intel8x0 driver
#   Improved the clock measurement routine to allow the longer sleep time.
#   Now it invokes schedule_timeout() instead of a long mdelay().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/09/16 07:26:16+02:00 perex@suse.cz +5 -6
#   [ALSA]  Improved clock measurement
#   
#   D:2004/09/16 13:26:16
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.168->1.169 
#   L:Improved the clock measurement routine to allow the longer sleep time.
#   L:Now it invokes schedule_timeout() instead of a long mdelay().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:51:57+02:00 perex@suse.cz 
#   [ALSA]  Remove delay() to improve latency
#   
#   ES1968 driver
#   - Removed mdelay() in ac97 codec handling.
#   - Improved the clock measurement routine to allow the longer sleep time.
#     Now it invokes schedule_timeout() instead of a long mdelay().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/09/16 07:25:25+02:00 perex@suse.cz +28 -20
#   [ALSA]  Remove delay() to improve latency
#   
#   D:2004/09/16 13:25:25
#   C:ES1968 driver
#   F:pci/es1968.c:1.75->1.76 
#   L:- Removed mdelay() in ac97 codec handling.
#   L:- Improved the clock measurement routine to allow the longer sleep time.
#   L:  Now it invokes schedule_timeout() instead of a long mdelay().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:51:34+02:00 perex@suse.cz 
#   [ALSA]  Support for capture of 16,32,64 channels on emu10k1 device 2
#   
#   EMU10K1/EMU10K2 driver
#   This patch changes default constraint on 'EFX voices mask' control and
#   allow capture of 1, 2, 4, 8, 16, 32, 64 channels instead of 1, 2, 4, 8.
#   
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/09/16 05:36:44+02:00 perex@suse.cz +8 -1
#   [ALSA]  Support for capture of 16,32,64 channels on emu10k1 device 2
#   
#   D:2004/09/16 11:36:44
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emupcm.c:1.31->1.32 
#   L:This patch changes default constraint on 'EFX voices mask' control and
#   L:allow capture of 1, 2, 4, 8, 16, 32, 64 channels instead of 1, 2, 4, 8.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:35:51+02:00 perex@suse.cz 
#   [ALSA]  Fixes for PCM/control 32bit emulation
#   
#   PCM Midlevel,IOCTL32 emulation
#   - Size mismatch of control element struct due to packed attribute
#     is removed.
#   - A typo in PCM syncptr definition is fixed.
#   - Suppress the mmap of PCM status/control records on 32bit emulation
#     mode since the record size doesn't match.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_native.c
#   2004/09/15 04:30:08+02:00 perex@suse.cz +5 -0
#   [ALSA]  Fixes for PCM/control 32bit emulation
#   
#   D:2004/09/15 10:30:08
#   C:PCM Midlevel,IOCTL32 emulation
#   F:core/pcm_native.c:1.105->1.106 
#   F:core/ioctl32/ioctl32.c:1.21->1.22 
#   F:core/ioctl32/pcm32.c:1.20->1.21 
#   F:include/pcm.h:1.47->1.48 
#   L:- Size mismatch of control element struct due to packed attribute
#   L:  is removed.
#   L:- A typo in PCM syncptr definition is fixed.
#   L:- Suppress the mmap of PCM status/control records on 32bit emulation
#   L:  mode since the record size doesn't match.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/pcm32.c
#   2004/09/15 04:30:08+02:00 perex@suse.cz +27 -2
#   [ALSA]  Fixes for PCM/control 32bit emulation
#   
#   D:2004/09/15 10:30:08
#   C:PCM Midlevel,IOCTL32 emulation
#   F:core/pcm_native.c:1.105->1.106 
#   F:core/ioctl32/ioctl32.c:1.21->1.22 
#   F:core/ioctl32/pcm32.c:1.20->1.21 
#   F:include/pcm.h:1.47->1.48 
#   L:- Size mismatch of control element struct due to packed attribute
#   L:  is removed.
#   L:- A typo in PCM syncptr definition is fixed.
#   L:- Suppress the mmap of PCM status/control records on 32bit emulation
#   L:  mode since the record size doesn't match.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/ioctl32.c
#   2004/09/15 04:30:08+02:00 perex@suse.cz +1 -1
#   [ALSA]  Fixes for PCM/control 32bit emulation
#   
#   D:2004/09/15 10:30:08
#   C:PCM Midlevel,IOCTL32 emulation
#   F:core/pcm_native.c:1.105->1.106 
#   F:core/ioctl32/ioctl32.c:1.21->1.22 
#   F:core/ioctl32/pcm32.c:1.20->1.21 
#   F:include/pcm.h:1.47->1.48 
#   L:- Size mismatch of control element struct due to packed attribute
#   L:  is removed.
#   L:- A typo in PCM syncptr definition is fixed.
#   L:- Suppress the mmap of PCM status/control records on 32bit emulation
#   L:  mode since the record size doesn't match.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/09/15 04:30:08+02:00 perex@suse.cz +2 -0
#   [ALSA]  Fixes for PCM/control 32bit emulation
#   
#   D:2004/09/15 10:30:08
#   C:PCM Midlevel,IOCTL32 emulation
#   F:core/pcm_native.c:1.105->1.106 
#   F:core/ioctl32/ioctl32.c:1.21->1.22 
#   F:core/ioctl32/pcm32.c:1.20->1.21 
#   F:include/pcm.h:1.47->1.48 
#   L:- Size mismatch of control element struct due to packed attribute
#   L:  is removed.
#   L:- A typo in PCM syncptr definition is fixed.
#   L:- Suppress the mmap of PCM status/control records on 32bit emulation
#   L:  mode since the record size doesn't match.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:35:27+02:00 perex@suse.cz 
#   [ALSA]  fix ALI M5451 description
#   
#   PCI drivers
#   modify ali5451 and intel8x0 help texts to better distinguish
#   between M5451 and M5455 AC97 controllers
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/Kconfig
#   2004/09/13 07:53:25+02:00 perex@suse.cz +8 -4
#   [ALSA]  fix ALI M5451 description
#   
#   D:2004/09/13 13:53:25
#   C:PCI drivers
#   F:pci/Kconfig:1.33->1.34 
#   L:modify ali5451 and intel8x0 help texts to better distinguish
#   L:between M5451 and M5455 AC97 controllers
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:35:05+02:00 perex@suse.cz 
#   [ALSA]  remove 'ALSA' from Kconfig USB menu name
#   
#   USB
#   make ISA, PCI and USB device look the same in {q,x,menu}config
#   
#   Signed-off-by: Thierry Vignaud <tvignaud@mandrakesoft.com>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/Kconfig
#   2004/09/13 05:53:20+02:00 perex@suse.cz +1 -1
#   [ALSA]  remove 'ALSA' from Kconfig USB menu name
#   
#   D:2004/09/13 11:53:20
#   C:USB
#   F:usb/Kconfig:1.6->1.7 
#   L:make ISA, PCI and USB device look the same in {q,x,menu}config
#   Signed-off-by: Thierry Vignaud <tvignaud@mandrakesoft.com>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:34:41+02:00 perex@suse.cz 
#   [ALSA]  enhance Kconfig help texts
#   
#   ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   USB
#   add module names and references to other documentation files
#   add more help for generic options
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/Kconfig
#   2004/09/13 02:15:00+02:00 perex@suse.cz +9 -2
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/ppc/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +5 -0
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pcmcia/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +15 -3
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +200 -63
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/parisc/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +4 -1
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +141 -48
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +38 -10
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/Kconfig
#   2004/09/13 02:14:59+02:00 perex@suse.cz +57 -18
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/arm/Kconfig
#   2004/09/13 02:14:58+02:00 perex@suse.cz +6 -3
#   [ALSA]  enhance Kconfig help texts
#   
#   D:2004/09/13 08:14:58
#   C:ARM,ALSA Core,Generic drivers,ISA,PARISC,PCI drivers,PCMCIA Kconfig,PPC
#   C:USB
#   F:arm/Kconfig:1.2->1.3 
#   F:core/Kconfig:1.5->1.6 
#   F:drivers/Kconfig:1.6->1.7 
#   F:isa/Kconfig:1.13->1.14 
#   F:parisc/Kconfig:1.2->1.3 
#   F:pci/Kconfig:1.32->1.33 
#   F:pcmcia/Kconfig:1.7->1.8 
#   F:ppc/Kconfig:1.4->1.5 
#   F:usb/Kconfig:1.5->1.6 
#   L:add module names and references to other documentation files
#   L:add more help for generic options
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:34:18+02:00 perex@suse.cz 
#   [ALSA]  adjust intel8x0 joystick documentation
#   
#   Documentation
#   
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/Joystick.txt
#   2004/09/13 01:56:22+02:00 perex@suse.cz +4 -6
#   [ALSA]  adjust intel8x0 joystick documentation
#   
#   D:2004/09/13 07:56:22
#   C:Documentation
#   F:Documentation/Joystick.txt:1.3->1.4 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:33:57+02:00 perex@suse.cz 
#   [ALSA]  show codec name in card description
#   
#   AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   Include the AC97 codec name in the card longname of
#   motherboard controllers.
#   (to enhance the chance of getting useful bug reports :)
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/via82xx.c
#   2004/09/10 09:19:29+02:00 perex@suse.cz +3 -2
#   [ALSA]  show codec name in card description
#   
#   D:2004/09/10 15:19:28
#   C:AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   F:include/ac97_codec.h:1.55->1.56 
#   F:pci/atiixp.c:1.22->1.23 
#   F:pci/intel8x0.c:1.167->1.168 
#   F:pci/via82xx.c:1.121->1.122 
#   F:pci/ac97/ac97_codec.c:1.148->1.149 
#   L:Include the AC97 codec name in the card longname of
#   L:motherboard controllers.
#   L:(to enhance the chance of getting useful bug reports :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/10 09:19:29+02:00 perex@suse.cz +3 -2
#   [ALSA]  show codec name in card description
#   
#   D:2004/09/10 15:19:28
#   C:AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   F:include/ac97_codec.h:1.55->1.56 
#   F:pci/atiixp.c:1.22->1.23 
#   F:pci/intel8x0.c:1.167->1.168 
#   F:pci/via82xx.c:1.121->1.122 
#   F:pci/ac97/ac97_codec.c:1.148->1.149 
#   L:Include the AC97 codec name in the card longname of
#   L:motherboard controllers.
#   L:(to enhance the chance of getting useful bug reports :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/atiixp.c
#   2004/09/10 09:19:29+02:00 perex@suse.cz +4 -2
#   [ALSA]  show codec name in card description
#   
#   D:2004/09/10 15:19:28
#   C:AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   F:include/ac97_codec.h:1.55->1.56 
#   F:pci/atiixp.c:1.22->1.23 
#   F:pci/intel8x0.c:1.167->1.168 
#   F:pci/via82xx.c:1.121->1.122 
#   F:pci/ac97/ac97_codec.c:1.148->1.149 
#   L:Include the AC97 codec name in the card longname of
#   L:motherboard controllers.
#   L:(to enhance the chance of getting useful bug reports :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/09/10 09:19:29+02:00 perex@suse.cz +17 -0
#   [ALSA]  show codec name in card description
#   
#   D:2004/09/10 15:19:28
#   C:AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   F:include/ac97_codec.h:1.55->1.56 
#   F:pci/atiixp.c:1.22->1.23 
#   F:pci/intel8x0.c:1.167->1.168 
#   F:pci/via82xx.c:1.121->1.122 
#   F:pci/ac97/ac97_codec.c:1.148->1.149 
#   L:Include the AC97 codec name in the card longname of
#   L:motherboard controllers.
#   L:(to enhance the chance of getting useful bug reports :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# include/sound/ac97_codec.h
#   2004/09/10 09:19:28+02:00 perex@suse.cz +1 -0
#   [ALSA]  show codec name in card description
#   
#   D:2004/09/10 15:19:28
#   C:AC97 Codec Core,ATIIXP driver,Intel8x0 driver,VIA82xx driver
#   F:include/ac97_codec.h:1.55->1.56 
#   F:pci/atiixp.c:1.22->1.23 
#   F:pci/intel8x0.c:1.167->1.168 
#   F:pci/via82xx.c:1.121->1.122 
#   F:pci/ac97/ac97_codec.c:1.148->1.149 
#   L:Include the AC97 codec name in the card longname of
#   L:motherboard controllers.
#   L:(to enhance the chance of getting useful bug reports :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:33:34+02:00 perex@suse.cz 
#   [ALSA]  Fix driver name for nforce and clean-up
#   
#   Intel8x0-modem driver
#   Driver name is always ICH-MODEM as defined in alsa-lib config.
#   Cosmetic cleanups: unused include files, MODULE_DEVICE update.
#   
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/09/08 10:23:50+02:00 perex@suse.cz +8 -13
#   [ALSA]  Fix driver name for nforce and clean-up
#   
#   D:2004/09/08 16:23:50
#   C:Intel8x0-modem driver
#   F:pci/intel8x0m.c:1.19->1.20 
#   L:Driver name is always ICH-MODEM as defined in alsa-lib config.
#   L:Cosmetic cleanups: unused include files, MODULE_DEVICE update.
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/22 09:33:11+02:00 perex@suse.cz 
#   [ALSA]  Added missing header file for AudioTrak Prodigy 192 cards
#   
#   ICE1712 driver
#   
#   
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/stac946x.h
#   2004/09/22 09:09:18+02:00 perex@suse.cz +25 -0
#   [ALSA]  Added missing header file for AudioTrak Prodigy 192 cards
#   
#   D:2004/09/08 12:28:25
#   C:ICE1712 driver
#   F:pci/ice1712/stac946x.h:INITIAL->1.1 
#   L:
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/stac946x.h
#   2004/09/22 09:09:18+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/stac946x.h
# 
# ChangeSet
#   2004/09/22 09:32:47+02:00 perex@suse.cz 
#   [ALSA]  copy_to_user() return value checking in snd_seq_read()
#   
#   ALSA sequencer
#   Here's a patch that ensures the copy_to_user() return value gets checked
#   and acted upon if it is != 0 (that is, if we failed to copy all data) in
#   snd_seq_read().
#   
#   Signed-off-by: Jesper Juhl <juhl-lkml@dif.dk>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/seq/seq_clientmgr.c
#   2004/09/07 14:22:28+02:00 perex@suse.cz +4 -1
#   [ALSA]  copy_to_user() return value checking in snd_seq_read()
#   
#   D:2004/09/07 20:22:28
#   C:ALSA sequencer
#   F:core/seq/seq_clientmgr.c:1.35->1.36 
#   L:Here's a patch that ensures the copy_to_user() return value gets checked
#   L:and acted upon if it is != 0 (that is, if we failed to copy all data) in
#   L:snd_seq_read().
#   Signed-off-by: Jesper Juhl <juhl-lkml@dif.dk>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/09/22 09:32:20+02:00 perex@suse.cz 
#   [ALSA]  [ac97 core] added AC97_SCAP_DETECT_BY_VENDOR flag
#   
#   AC97 Codec Core,Intel8x0 driver
#   This patch adds a AC97_SCAP_DETECT_BY_VENDOR flag for Xbox. If the flag
#   is set, the AC97 codec is detected only by reading of a reasonable
#   vendor ID. It seems that Xbox has accessible only vendor/device ID
#   registers for reading. Also, a new xbox parameter for snd-intel8x0
#   has been introduced to let user force this behaviour.
#   
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/intel8x0.c
#   2004/09/07 10:58:24+02:00 perex@suse.cz +8 -0
#   [ALSA]  [ac97 core] added AC97_SCAP_DETECT_BY_VENDOR flag
#   
#   D:2004/09/07 16:58:24
#   C:AC97 Codec Core,Intel8x0 driver
#   F:include/ac97_codec.h:1.54->1.55 
#   F:pci/intel8x0.c:1.166->1.167 
#   F:pci/ac97/ac97_codec.c:1.147->1.148 
#   L:This patch adds a AC97_SCAP_DETECT_BY_VENDOR flag for Xbox. If the flag
#   L:is set, the AC97 codec is detected only by reading of a reasonable
#   L:vendor ID. It seems that Xbox has accessible only vendor/device ID
#   L:registers for reading. Also, a new xbox parameter for snd-intel8x0
#   L:has been introduced to let user force this behaviour.
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/09/07 10:58:24+02:00 perex@suse.cz +18 -10
#   [ALSA]  [ac97 core] added AC97_SCAP_DETECT_BY_VENDOR flag
#   
#   D:2004/09/07 16:58:24
#   C:AC97 Codec Core,Intel8x0 driver
#   F:include/ac97_codec.h:1.54->1.55 
#   F:pci/intel8x0.c:1.166->1.167 
#   F:pci/ac97/ac97_codec.c:1.147->1.148 
#   L:This patch adds a AC97_SCAP_DETECT_BY_VENDOR flag for Xbox. If the flag
#   L:is set, the AC97 codec is detected only by reading of a reasonable
#   L:vendor ID. It seems that Xbox has accessible only vendor/device ID
#   L:registers for reading. Also, a new xbox parameter for snd-intel8x0
#   L:has been introduced to let user force this behaviour.
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# include/sound/ac97_codec.h
#   2004/09/07 10:58:24+02:00 perex@suse.cz +1 -0
#   [ALSA]  [ac97 core] added AC97_SCAP_DETECT_BY_VENDOR flag
#   
#   D:2004/09/07 16:58:24
#   C:AC97 Codec Core,Intel8x0 driver
#   F:include/ac97_codec.h:1.54->1.55 
#   F:pci/intel8x0.c:1.166->1.167 
#   F:pci/ac97/ac97_codec.c:1.147->1.148 
#   L:This patch adds a AC97_SCAP_DETECT_BY_VENDOR flag for Xbox. If the flag
#   L:is set, the AC97 codec is detected only by reading of a reasonable
#   L:vendor ID. It seems that Xbox has accessible only vendor/device ID
#   L:registers for reading. Also, a new xbox parameter for snd-intel8x0
#   L:has been introduced to let user force this behaviour.
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/09/22 09:30:18+02:00 perex@suse.cz 
#   [ALSA]  mark snd_card_dummy_new_mixer() as static
#   
#   Generic drivers
#   
#   
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/drivers/dummy.c
#   2004/09/07 10:52:40+02:00 perex@suse.cz +1 -1
#   [ALSA]  mark snd_card_dummy_new_mixer() as static
#   
#   D:2004/09/07 16:52:40
#   C:Generic drivers
#   F:drivers/dummy.c:1.32->1.33 
#   L:
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/09/22 09:29:41+02:00 perex@suse.cz 
#   [ALSA]  add UA-1000 sample rate detection
#   
#   USB generic driver
#   Instead of assuming 48 kHz, the driver now detects
#   the current sample rate setting.
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbquirks.h
#   2004/09/07 10:09:08+02:00 perex@suse.cz +2 -28
#   [ALSA]  add UA-1000 sample rate detection
#   
#   D:2004/09/07 16:09:08
#   C:USB generic driver
#   F:usb/usbaudio.c:1.107->1.108 
#   F:usb/usbaudio.h:1.33->1.34 
#   F:usb/usbquirks.h:1.36->1.37 
#   L:Instead of assuming 48 kHz, the driver now detects
#   L:the current sample rate setting.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.h
#   2004/09/07 10:09:08+02:00 perex@suse.cz +2 -1
#   [ALSA]  add UA-1000 sample rate detection
#   
#   D:2004/09/07 16:09:08
#   C:USB generic driver
#   F:usb/usbaudio.c:1.107->1.108 
#   F:usb/usbaudio.h:1.33->1.34 
#   F:usb/usbquirks.h:1.36->1.37 
#   L:Instead of assuming 48 kHz, the driver now detects
#   L:the current sample rate setting.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.c
#   2004/09/07 10:09:08+02:00 perex@suse.cz +52 -0
#   [ALSA]  add UA-1000 sample rate detection
#   
#   D:2004/09/07 16:09:08
#   C:USB generic driver
#   F:usb/usbaudio.c:1.107->1.108 
#   F:usb/usbaudio.h:1.33->1.34 
#   F:usb/usbquirks.h:1.36->1.37 
#   L:Instead of assuming 48 kHz, the driver now detects
#   L:the current sample rate setting.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/22 09:29:10+02:00 perex@suse.cz 
#   [ALSA]  Added support for AudioTrak Prodigy 192 cards
#   
#   ICE1712 driver,ICE1724 driver
#   
#   
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/prodigy192.h
#   2004/09/22 09:08:13+02:00 perex@suse.cz +11 -0
#   [ALSA]  Added support for AudioTrak Prodigy 192 cards
#   
#   D:2004/09/07 16:02:49
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.13->1.14 
#   F:pci/ice1712/ice1724.c:1.44->1.45 
#   F:pci/ice1712/prodigy192.c:INITIAL->1.1 
#   F:pci/ice1712/prodigy192.h:INITIAL->1.1 
#   L:
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/prodigy192.h
#   2004/09/22 09:08:13+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/prodigy192.h
# 
# sound/pci/ice1712/ice1724.c
#   2004/09/07 10:02:49+02:00 perex@suse.cz +3 -0
#   [ALSA]  Added support for AudioTrak Prodigy 192 cards
#   
#   D:2004/09/07 16:02:49
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.13->1.14 
#   F:pci/ice1712/ice1724.c:1.44->1.45 
#   F:pci/ice1712/prodigy192.c:INITIAL->1.1 
#   F:pci/ice1712/prodigy192.h:INITIAL->1.1 
#   L:
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/Makefile
#   2004/09/07 10:02:49+02:00 perex@suse.cz +1 -1
#   [ALSA]  Added support for AudioTrak Prodigy 192 cards
#   
#   D:2004/09/07 16:02:49
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.13->1.14 
#   F:pci/ice1712/ice1724.c:1.44->1.45 
#   F:pci/ice1712/prodigy192.c:INITIAL->1.1 
#   F:pci/ice1712/prodigy192.h:INITIAL->1.1 
#   L:
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/prodigy192.c
#   2004/09/22 09:08:08+02:00 perex@suse.cz +524 -0
#   [ALSA]  Added support for AudioTrak Prodigy 192 cards
#   
#   D:2004/09/07 16:02:49
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.13->1.14 
#   F:pci/ice1712/ice1724.c:1.44->1.45 
#   F:pci/ice1712/prodigy192.c:INITIAL->1.1 
#   F:pci/ice1712/prodigy192.h:INITIAL->1.1 
#   L:
#   Signed-off-by: Kouichi ONO <co2b@ceres.dti.ne.jp>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/ice1712/prodigy192.c
#   2004/09/22 09:08:08+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/prodigy192.c
# 
# ChangeSet
#   2004/09/22 09:28:40+02:00 perex@suse.cz 
#   [ALSA]  Fix the OSS PCM emulation - O_NONBLOCK write
#   
#   ALSA<-OSS emulation
#   This patch fixes the OSS PCM write() in O_NONBLOCK mode.
#   The previous code had not returned partial written bytes.
#   
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/oss/pcm_oss.c
#   2004/09/07 09:17:48+02:00 perex@suse.cz +9 -1
#   [ALSA]  Fix the OSS PCM emulation - O_NONBLOCK write
#   
#   D:2004/09/07 15:17:48
#   C:ALSA<-OSS emulation
#   F:core/oss/pcm_oss.c:1.77->1.78 
#   L:This patch fixes the OSS PCM write() in O_NONBLOCK mode.
#   L:The previous code had not returned partial written bytes.
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/09/14 14:23:42-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/09/14 14:23:38-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/slab.h
#   2004/09/14 14:23:38-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/11 14:57:37-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/intel8x0.c
#   2004/09/11 14:57:32-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/08 11:38:39-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/emu10k1/emuproc.c
#   2004/09/08 11:38:35-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/09/08 11:38:35-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/09/08 11:38:35-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/06 20:33:07+02:00 perex@suse.cz 
#   [ALSA]  [emu10k1] Audigy DSP support
#   
#   EMU10K1/EMU10K2 driver
#   This patch will add better support for Audigy DSP.  More gpr,
#   instruction and tram.  It will break binary compatibility for app
#   which use emu10k1 hwdep.
#   
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emuproc.c
#   2004/09/06 10:05:19+02:00 perex@suse.cz +19 -11
#   [ALSA]  [emu10k1] Audigy DSP support
#   
#   D:2004/09/06 16:05:18
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.45->1.46 
#   F:pci/emu10k1/emufx.c:1.58->1.59 
#   F:pci/emu10k1/emuproc.c:1.20->1.21 
#   L:This patch will add better support for Audigy DSP.  More gpr,
#   L:instruction and tram.  It will break binary compatibility for app
#   L:which use emu10k1 hwdep.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/09/06 10:05:18+02:00 perex@suse.cz +25 -17
#   [ALSA]  [emu10k1] Audigy DSP support
#   
#   D:2004/09/06 16:05:18
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.45->1.46 
#   F:pci/emu10k1/emufx.c:1.58->1.59 
#   F:pci/emu10k1/emuproc.c:1.20->1.21 
#   L:This patch will add better support for Audigy DSP.  More gpr,
#   L:instruction and tram.  It will break binary compatibility for app
#   L:which use emu10k1 hwdep.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/09/06 10:05:18+02:00 perex@suse.cz +37 -24
#   [ALSA]  [emu10k1] Audigy DSP support
#   
#   D:2004/09/06 16:05:18
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.45->1.46 
#   F:pci/emu10k1/emufx.c:1.58->1.59 
#   F:pci/emu10k1/emuproc.c:1.20->1.21 
#   L:This patch will add better support for Audigy DSP.  More gpr,
#   L:instruction and tram.  It will break binary compatibility for app
#   L:which use emu10k1 hwdep.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:25:33+02:00 perex@suse.cz 
#   [ALSA]  Added Compaq Evo W4000 quirk
#   
#   Intel8x0 driver
#   Added an AC97 quirk entry for Compaq Evo W4000.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/09/06 07:51:11+02:00 perex@suse.cz +6 -0
#   [ALSA]  Added Compaq Evo W4000 quirk
#   
#   D:2004/09/06 13:51:11
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.165->1.166 
#   L:Added an AC97 quirk entry for Compaq Evo W4000.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:24:49+02:00 perex@suse.cz 
#   [ALSA]  detect errors reported by the hardware
#   
#   BT87x driver
#   stop the PCM if the hardware reports FIFO/PCI errors
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/bt87x.c
#   2004/09/06 03:10:32+02:00 perex@suse.cz +3 -2
#   [ALSA]  detect errors reported by the hardware
#   
#   D:2004/09/06 09:10:32
#   C:BT87x driver
#   F:pci/bt87x.c:1.11->1.12 
#   L:stop the PCM if the hardware reports FIFO/PCI errors
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:24:04+02:00 perex@suse.cz 
#   [ALSA]  inverted EAPD support
#   
#   Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   Since there are more than one (broken) implementation of EAPD bit
#   on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   snd_ac97_tune_hardware().
#   
#   The ac97 quirk entry for Sony S1XP is added to turn this on.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/09/03 09:21:14+02:00 perex@suse.cz +6 -0
#   [ALSA]  inverted EAPD support
#   
#   D:2004/09/03 15:21:13
#   C:Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   F:Documentation/ALSA-Configuration.txt:1.51->1.52 
#   F:include/ac97_codec.h:1.53->1.54 
#   F:pci/intel8x0.c:1.164->1.165 
#   F:pci/ac97/ac97_codec.c:1.146->1.147 
#   F:pci/cs46xx/cs46xx_lib.c:1.83->1.84 
#   L:Since there are more than one (broken) implementation of EAPD bit
#   L:on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   L:Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   L:snd_ac97_tune_hardware().
#   L:
#   L:The ac97 quirk entry for Sony S1XP is added to turn this on.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/09/03 09:21:24+02:00 perex@suse.cz +2 -12
#   [ALSA]  inverted EAPD support
#   
#   D:2004/09/03 15:21:13
#   C:Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   F:Documentation/ALSA-Configuration.txt:1.51->1.52 
#   F:include/ac97_codec.h:1.53->1.54 
#   F:pci/intel8x0.c:1.164->1.165 
#   F:pci/ac97/ac97_codec.c:1.146->1.147 
#   F:pci/cs46xx/cs46xx_lib.c:1.83->1.84 
#   L:Since there are more than one (broken) implementation of EAPD bit
#   L:on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   L:Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   L:snd_ac97_tune_hardware().
#   L:
#   L:The ac97 quirk entry for Sony S1XP is added to turn this on.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/09/03 09:21:14+02:00 perex@suse.cz +30 -6
#   [ALSA]  inverted EAPD support
#   
#   D:2004/09/03 15:21:13
#   C:Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   F:Documentation/ALSA-Configuration.txt:1.51->1.52 
#   F:include/ac97_codec.h:1.53->1.54 
#   F:pci/intel8x0.c:1.164->1.165 
#   F:pci/ac97/ac97_codec.c:1.146->1.147 
#   F:pci/cs46xx/cs46xx_lib.c:1.83->1.84 
#   L:Since there are more than one (broken) implementation of EAPD bit
#   L:on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   L:Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   L:snd_ac97_tune_hardware().
#   L:
#   L:The ac97 quirk entry for Sony S1XP is added to turn this on.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ac97_codec.h
#   2004/09/03 09:21:14+02:00 perex@suse.cz +2 -0
#   [ALSA]  inverted EAPD support
#   
#   D:2004/09/03 15:21:13
#   C:Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   F:Documentation/ALSA-Configuration.txt:1.51->1.52 
#   F:include/ac97_codec.h:1.53->1.54 
#   F:pci/intel8x0.c:1.164->1.165 
#   F:pci/ac97/ac97_codec.c:1.146->1.147 
#   F:pci/cs46xx/cs46xx_lib.c:1.83->1.84 
#   L:Since there are more than one (broken) implementation of EAPD bit
#   L:on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   L:Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   L:snd_ac97_tune_hardware().
#   L:
#   L:The ac97 quirk entry for Sony S1XP is added to turn this on.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/09/03 09:21:13+02:00 perex@suse.cz +1 -0
#   [ALSA]  inverted EAPD support
#   
#   D:2004/09/03 15:21:13
#   C:Documentation,AC97 Codec Core,Intel8x0 driver,CS46xx driver
#   F:Documentation/ALSA-Configuration.txt:1.51->1.52 
#   F:include/ac97_codec.h:1.53->1.54 
#   F:pci/intel8x0.c:1.164->1.165 
#   F:pci/ac97/ac97_codec.c:1.146->1.147 
#   F:pci/cs46xx/cs46xx_lib.c:1.83->1.84 
#   L:Since there are more than one (broken) implementation of EAPD bit
#   L:on ac97 chips, the new scaps bit is added for the inverted EAPD.
#   L:Also, AC97_TUNE_INV_EAPD is used to tune this behavior later by
#   L:snd_ac97_tune_hardware().
#   L:
#   L:The ac97 quirk entry for Sony S1XP is added to turn this on.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:23:17+02:00 perex@suse.cz 
#   [ALSA]  ac97 quirk entry for Soltek SL-75DRV5
#   
#   VIA82xx driver
#   Added an ac97 quirk entry for Soltek SL-75DRV5.
#   Since the PCI subsystem id is identical with ASRock K7VT2, codec_id is
#   used additionally to tell between them.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/09/03 09:17:29+02:00 perex@suse.cz +7 -0
#   [ALSA]  ac97 quirk entry for Soltek SL-75DRV5
#   
#   D:2004/09/03 15:17:29
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.120->1.121 
#   L:Added an ac97 quirk entry for Soltek SL-75DRV5.
#   L:Since the PCI subsystem id is identical with ASRock K7VT2, codec_id is
#   L:used additionally to tell between them.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:22:32+02:00 perex@suse.cz 
#   [ALSA]  [ac97] Check ac97 codec id in quirk table
#   
#   AC97 Codec Core
#   Added codec_id field to ac97_quirk struct so that the devices with
#   the same PCI subsystem IDs but with different AC97 chips can be
#   distinguished properly.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/09/03 09:15:35+02:00 perex@suse.cz +2 -0
#   [ALSA]  [ac97] Check ac97 codec id in quirk table
#   
#   D:2004/09/03 15:15:35
#   C:AC97 Codec Core
#   F:include/ac97_codec.h:1.52->1.53 
#   F:pci/ac97/ac97_codec.c:1.145->1.146 
#   L:Added codec_id field to ac97_quirk struct so that the devices with
#   L:the same PCI subsystem IDs but with different AC97 chips can be
#   L:distinguished properly.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ac97_codec.h
#   2004/09/03 09:15:35+02:00 perex@suse.cz +1 -0
#   [ALSA]  [ac97] Check ac97 codec id in quirk table
#   
#   D:2004/09/03 15:15:35
#   C:AC97 Codec Core
#   F:include/ac97_codec.h:1.52->1.53 
#   F:pci/ac97/ac97_codec.c:1.145->1.146 
#   L:Added codec_id field to ac97_quirk struct so that the devices with
#   L:the same PCI subsystem IDs but with different AC97 chips can be
#   L:distinguished properly.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:21:46+02:00 perex@suse.cz 
#   [ALSA]  [ac97] Added VIA shared type.
#   
#   AC97 Codec Core,VIA82xx driver
#   Added a new shared type AC97_SHARED_TYPE_VIA for via82xx southbridge
#   to share codecs between audio and modem drivers.
#   
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/09/03 08:50:25+02:00 perex@suse.cz +1 -0
#   [ALSA]  [ac97] Added VIA shared type.
#   
#   D:2004/09/03 14:50:25
#   C:AC97 Codec Core,VIA82xx driver
#   F:include/ac97_codec.h:1.51->1.52 
#   F:pci/via82xx.c:1.119->1.120 
#   L:Added a new shared type AC97_SHARED_TYPE_VIA for via82xx southbridge
#   L:to share codecs between audio and modem drivers.
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ac97_codec.h
#   2004/09/03 08:50:25+02:00 perex@suse.cz +1 -0
#   [ALSA]  [ac97] Added VIA shared type.
#   
#   D:2004/09/03 14:50:25
#   C:AC97 Codec Core,VIA82xx driver
#   F:include/ac97_codec.h:1.51->1.52 
#   F:pci/via82xx.c:1.119->1.120 
#   L:Added a new shared type AC97_SHARED_TYPE_VIA for via82xx southbridge
#   L:to share codecs between audio and modem drivers.
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:21:03+02:00 perex@suse.cz 
#   [ALSA]  add mixer quirk for LineX FM Transmitter
#   
#   USB generic driver
#   The LineX FM Transmitter needs a mixer quirk entry
#   to ignore control errors.
#   
#   Signed-off-by: Lonnie Mendez <dignome@gmail.com>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmixer_maps.c
#   2004/09/03 07:33:11+02:00 perex@suse.cz +9 -0
#   [ALSA]  add mixer quirk for LineX FM Transmitter
#   
#   D:2004/09/03 13:33:11
#   C:USB generic driver
#   F:usb/usbmixer_maps.c:1.7->1.8 
#   L:The LineX FM Transmitter needs a mixer quirk entry
#   L:to ignore control errors.
#   Signed-off-by: Lonnie Mendez <dignome@gmail.com>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:20:18+02:00 perex@suse.cz 
#   [ALSA]  remove gameport/MIDI support
#   
#   Documentation,PCI drivers,Intel8x0 driver
#   snd-intel8x0's gameport/MIDI code has quite a few problems:  the port
#   addresses cannot be detected reliably (or not at all with newer LPC
#   bridge devices), joystick port address 0x208 isn't supported, the MIDI
#   interrupt isn't detected, PnP isn't supported, changing the port
#   addresses in the LPC bridge configuration doesn't affect the devices
#   in the Super-I/O chip connected to the LPC bus, and registering this
#   driver for the LPC bridge PCI device prevents other drivers using the
#   LPC's PCI id from loading later.
#   
#   All these problems can be cured by removing the offending code and
#   using the proper modules for these devices (ns558/snd-mpu401) instead.
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/03 05:32:02+02:00 perex@suse.cz +0 -146
#   [ALSA]  remove gameport/MIDI support
#   
#   D:2004/09/03 11:32:02
#   C:Documentation,PCI drivers,Intel8x0 driver
#   F:Documentation/ALSA-Configuration.txt:1.50->1.51 
#   F:pci/Kconfig:1.31->1.32 
#   F:pci/intel8x0.c:1.163->1.164 
#   L:snd-intel8x0's gameport/MIDI code has quite a few problems:  the port
#   L:addresses cannot be detected reliably (or not at all with newer LPC
#   L:bridge devices), joystick port address 0x208 isn't supported, the MIDI
#   L:interrupt isn't detected, PnP isn't supported, changing the port
#   L:addresses in the LPC bridge configuration doesn't affect the devices
#   L:in the Super-I/O chip connected to the LPC bus, and registering this
#   L:driver for the LPC bridge PCI device prevents other drivers using the
#   L:LPC's PCI id from loading later.
#   L:
#   L:All these problems can be cured by removing the offending code and
#   L:using the proper modules for these devices (ns558/snd-mpu401) instead.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/Kconfig
#   2004/09/03 05:32:02+02:00 perex@suse.cz +0 -1
#   [ALSA]  remove gameport/MIDI support
#   
#   D:2004/09/03 11:32:02
#   C:Documentation,PCI drivers,Intel8x0 driver
#   F:Documentation/ALSA-Configuration.txt:1.50->1.51 
#   F:pci/Kconfig:1.31->1.32 
#   F:pci/intel8x0.c:1.163->1.164 
#   L:snd-intel8x0's gameport/MIDI code has quite a few problems:  the port
#   L:addresses cannot be detected reliably (or not at all with newer LPC
#   L:bridge devices), joystick port address 0x208 isn't supported, the MIDI
#   L:interrupt isn't detected, PnP isn't supported, changing the port
#   L:addresses in the LPC bridge configuration doesn't affect the devices
#   L:in the Super-I/O chip connected to the LPC bus, and registering this
#   L:driver for the LPC bridge PCI device prevents other drivers using the
#   L:LPC's PCI id from loading later.
#   L:
#   L:All these problems can be cured by removing the offending code and
#   L:using the proper modules for these devices (ns558/snd-mpu401) instead.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/09/03 05:32:02+02:00 perex@suse.cz +3 -4
#   [ALSA]  remove gameport/MIDI support
#   
#   D:2004/09/03 11:32:02
#   C:Documentation,PCI drivers,Intel8x0 driver
#   F:Documentation/ALSA-Configuration.txt:1.50->1.51 
#   F:pci/Kconfig:1.31->1.32 
#   F:pci/intel8x0.c:1.163->1.164 
#   L:snd-intel8x0's gameport/MIDI code has quite a few problems:  the port
#   L:addresses cannot be detected reliably (or not at all with newer LPC
#   L:bridge devices), joystick port address 0x208 isn't supported, the MIDI
#   L:interrupt isn't detected, PnP isn't supported, changing the port
#   L:addresses in the LPC bridge configuration doesn't affect the devices
#   L:in the Super-I/O chip connected to the LPC bus, and registering this
#   L:driver for the LPC bridge PCI device prevents other drivers using the
#   L:LPC's PCI id from loading later.
#   L:
#   L:All these problems can be cured by removing the offending code and
#   L:using the proper modules for these devices (ns558/snd-mpu401) instead.
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:19:32+02:00 perex@suse.cz 
#   [ALSA]  add AC97 quirk for Fujitsu-Siemens E4010
#   
#   Intel8x0 driver
#   
#   
#   Signed-off-by: <castet.matthieu@free.fr>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/02 06:59:21+02:00 perex@suse.cz +6 -0
#   [ALSA]  add AC97 quirk for Fujitsu-Siemens E4010
#   
#   D:2004/09/02 12:59:21
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.162->1.163 
#   L:
#   Signed-off-by: <castet.matthieu@free.fr>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:18:46+02:00 perex@suse.cz 
#   [ALSA]  Fix latency in ens1371 driver
#   
#   ENS1370/1+ driver
#   The high latency in prepare callback of ens1371 driver is fixed.
#   The *_rate_set() functions are moved outside of spinlock, and
#   cond_resched() is inserted in the busy probing loop.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/09/01 14:27:33+02:00 perex@suse.cz +18 -6
#   [ALSA]  Fix latency in ens1371 driver
#   
#   D:2004/09/01 20:27:33
#   C:ENS1370/1+ driver
#   F:pci/ens1370.c:1.68->1.69 
#   L:The high latency in prepare callback of ens1371 driver is fixed.
#   L:The *_rate_set() functions are moved outside of spinlock, and
#   L:cond_resched() is inserted in the busy probing loop.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:18:03+02:00 perex@suse.cz 
#   [ALSA]  suppress auto-loading of modules in module_init().
#   
#   ALSA sequencer
#   The auto-loading of sequencer modules is suppressed in module_init().
#   The recent module-init-tools may cause blocking.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_clientmgr.c
#   2004/09/01 14:25:27+02:00 perex@suse.cz +4 -1
#   [ALSA]  suppress auto-loading of modules in module_init().
#   
#   D:2004/09/01 20:25:27
#   C:ALSA sequencer
#   F:core/seq/seq_clientmgr.c:1.34->1.35 
#   L:The auto-loading of sequencer modules is suppressed in module_init().
#   L:The recent module-init-tools may cause blocking.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:17:20+02:00 perex@suse.cz 
#   [ALSA]  add missing ifdef for disabling MIDI
#   
#   Intel8x0 driver
#   
#   
#   Signed-off-by: <castet.matthieu@free.fr>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/01 02:41:19+02:00 perex@suse.cz +2 -0
#   [ALSA]  add missing ifdef for disabling MIDI
#   
#   D:2004/09/01 08:41:19
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.161->1.162 
#   L:
#   Signed-off-by: <castet.matthieu@free.fr>
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:16:34+02:00 perex@suse.cz 
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   Documentation,AC97 Codec Core,Intel8x0 driver
#   
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/09/01 02:30:56+02:00 perex@suse.cz +26 -11
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_proc.c
#   2004/09/01 02:30:57+02:00 perex@suse.cz +4 -0
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_pcm.c
#   2004/09/01 02:30:57+02:00 perex@suse.cz +120 -34
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/09/01 02:30:57+02:00 perex@suse.cz +31 -1
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# include/sound/ac97_codec.h
#   2004/09/01 02:30:56+02:00 perex@suse.cz +10 -1
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/09/01 02:30:56+02:00 perex@suse.cz +2 -2
#   [ALSA]  AC97 96 kHz sample rate support
#   
#   D:2004/09/01 08:30:56
#   C:Documentation,AC97 Codec Core,Intel8x0 driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.38->1.39 
#   F:include/ac97_codec.h:1.50->1.51 
#   F:pci/intel8x0.c:1.160->1.161 
#   F:pci/ac97/ac97_codec.c:1.144->1.145 
#   F:pci/ac97/ac97_pcm.c:1.16->1.17 
#   F:pci/ac97/ac97_proc.c:1.10->1.11 
#   L:
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/09/06 20:15:40+02:00 perex@suse.cz 
#   [ALSA]  Korg1212 misc fixes
#   
#   KORG1212 driver
#   The DSP firmware download timeout has been increased;
#   Some concurrent device settings has been fixed (I have shameless copied
#   some code from RME9652); and
#   One debug message was fixed.
#   
#   Signed-off-by: Haroldo Gamal <gamal@alternex.com.br>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/08/31 04:50:15+02:00 perex@suse.cz +59 -9
#   [ALSA]  Korg1212 misc fixes
#   
#   D:2004/08/31 10:50:15
#   C:KORG1212 driver
#   F:pci/korg1212/korg1212.c:1.47->1.48 
#   L:The DSP firmware download timeout has been increased;
#   L:Some concurrent device settings has been fixed (I have shameless copied
#   L:some code from RME9652); and
#   L:One debug message was fixed.
#   Signed-off-by: Haroldo Gamal <gamal@alternex.com.br>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:14:51+02:00 perex@suse.cz 
#   [ALSA]  Enable __GFP_NOWARN as default for buffer allocation
#   
#   Memalloc module
#   __GFP_NOWARN is enabled for DMA buffer allocation regardless of
#   its size.  The DMA buffer allocation is not a critical task.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memalloc.c
#   2004/08/31 04:49:23+02:00 perex@suse.cz +3 -4
#   [ALSA]  Enable __GFP_NOWARN as default for buffer allocation
#   
#   D:2004/08/31 10:49:23
#   C:Memalloc module
#   F:core/memalloc.c:1.37->1.38 
#   L:__GFP_NOWARN is enabled for DMA buffer allocation regardless of
#   L:its size.  The DMA buffer allocation is not a critical task.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:14:05+02:00 perex@suse.cz 
#   [ALSA]  Added __GFP_NORETRY to avoid OOM-killer
#   
#   Memalloc module
#   __GFP_NORETRY is added to the DMA buffer allocator to avoid triggering
#   OOM-killer.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memalloc.c
#   2004/08/30 12:39:22+02:00 perex@suse.cz +1 -0
#   [ALSA]  Added __GFP_NORETRY to avoid OOM-killer
#   
#   D:2004/08/30 18:39:22
#   C:Memalloc module
#   F:core/memalloc.c:1.36->1.37 
#   L:__GFP_NORETRY is added to the DMA buffer allocator to avoid triggering
#   L:OOM-killer.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:13:09+02:00 perex@suse.cz 
#   ALSA CVS update
#   ES18xx driver
#   Fixed a bug in setting the filter register.
#   
#   A fix from the kernel OSS driver.  The original report/patch is from
#   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=204147
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es18xx.c
#   2004/08/26 10:57:47+02:00 perex@suse.cz +5 -0
#   ALSA CVS update
#   D:2004/08/26 16:57:47
#   C:ES18xx driver
#   F:isa/es18xx.c:1.48->1.49 
#   L:Fixed a bug in setting the filter register.
#   L:
#   L:A fix from the kernel OSS driver.  The original report/patch is from
#   L:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=204147
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:12:22+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver
#   Allow the private EEPROM image for evaluation boards
#   
#   The driver may have a private EEPROM image instead of reading
#   from the board (as well as ice1724 does).  It'll be helpful for
#   test boards.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/08/26 10:55:43+02:00 perex@suse.cz +39 -19
#   ALSA CVS update
#   D:2004/08/26 16:55:43
#   C:ICE1712 driver
#   F:pci/ice1712/ice1712.c:1.61->1.62 
#   L:Allow the private EEPROM image for evaluation boards
#   L:
#   L:The driver may have a private EEPROM image instead of reading
#   L:from the board (as well as ice1724 does).  It'll be helpful for
#   L:test boards.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/06 20:11:34+02:00 perex@suse.cz 
#   ALSA CVS update
#   ENS1370/1+ driver
#   Fixed AC3-passthru on ens1371/1373 boards.
#   
#   SRC is bypassed when the sample rate is 48k, so that the non-audio
#   signal won't be broken.  The other sample rates still need SRC.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/08/26 10:53:55+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/08/26 16:53:55
#   C:ENS1370/1+ driver
#   F:pci/ens1370.c:1.67->1.68 
#   L:Fixed AC3-passthru on ens1371/1373 boards.
#   L:
#   L:SRC is bypassed when the sample rate is 48k, so that the non-audio
#   L:signal won't be broken.  The other sample rates still need SRC.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/09/03 14:06:33-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/09/03 14:06:28-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/slab.h
#   2004/09/03 14:06:28-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/31 22:37:51-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/mixart/mixart.c
#   2004/08/31 22:37:47-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/slab.h
#   2004/08/31 22:37:47-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/28 16:15:33-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# include/linux/pci_ids.h
#   2004/08/28 16:15:28-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/27 14:52:37-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/08/27 14:52:33-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/27 14:52:33-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/27 13:07:53-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/08/27 13:07:49-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/27 13:07:49-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/26 19:24:29-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/08/26 19:24:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/slab.h
#   2004/08/26 19:24:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/25 14:00:17-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# sound/parisc/harmony.c
#   2004/08/25 14:00:13-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/isa/wavefront/wavefront_fx.c
#   2004/08/25 14:00:13-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# mm/slab.c
#   2004/08/25 14:00:13-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/25 14:00:13-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/24 17:30:19-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# mm/slab.c
#   2004/08/24 17:30:14-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/slab.h
#   2004/08/24 17:30:13-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/23 16:35:28-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# include/linux/pci_ids.h
#   2004/08/23 16:35:23-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/23 13:44:30-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# sound/isa/wavefront/wavefront_fx.c
#   2004/08/23 13:44:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# mm/slab.c
#   2004/08/23 13:44:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/23 13:44:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/22 21:04:53-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# sound/parisc/harmony.c
#   2004/08/22 21:04:49-07:00 akpm@bix.(none) +0 -2
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/22 21:04:49-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/15 13:40:16-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/mixart/mixart.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/emu10k1/emuproc.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs4281.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/isa/gus/gus_mem_proc.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/drivers/opl4/opl4_proc.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/core/info.c
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/sound/info.h
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/08/15 13:40:12-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/09 18:30:30-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-alsa
# 
# sound/pci/mixart/mixart.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/emu10k1/emuproc.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/pci/cs4281.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/isa/gus/gus_mem_proc.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/drivers/opl4/opl4_proc.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# sound/core/info.c
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/sound/info.h
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/08/09 18:30:26-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/06 15:27:08-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/08/06 15:27:05-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/02 12:47:26-07:00 akpm@bix.(none) 
#   Merge http://linux-sound.bkbits.net/linux-sound
#   into bix.(none):/usr/src/bk-alsa
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/08/02 12:47:22-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
--- a/Documentation/sound/alsa/ALSA-Configuration.txt	2004-09-26 10:55:59 -07:00
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt	2004-09-26 10:55:59 -07:00
@@ -661,8 +661,6 @@
 			* ALi m5455
 
     ac97_clock	  - AC'97 codec clock base (0 = auto-detect)
-    joystick      - Enable joystick (default off)
-    mpu_port      - MPU401 port # (0 = disabled, 0x330,0x300)
     ac97_quirk    - AC'97 workaround for strange hardware (-1 = default)
                     -1 = default, don't override
                      0 = disable
@@ -670,6 +668,7 @@
                      2 = swap headphone and master controls
                      3 = for AD1985, turn on OMS bit and use headphone
                      4 = for ALC65x, turn on the jack sense mode
+                     5 = inverted EAPD implementation
     buggy_irq      - Enable workaround for buggy interrupts on some
                      motherboards (default off)
 
@@ -679,8 +678,9 @@
     if you still encounter too fast playback, specify the clock
     explicitly via the module option "ac97_clock=41194".
 
-    The joystick and MPU-401 are supported only certain hardwares.
-    MPU401 is experimental,  It doesn't work perfectly.
+    Joystick/MIDI ports are not supported by this driver.  If your
+    motherboard has these devices, use the ns558 or snd-mpu401
+    modules, respectively.
 
     The ac97_quirk option is used to enable/override the workaround
     for specific devices.  Some hardware have swapped output pins
diff -Nru a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
--- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl	2004-09-26 10:55:59 -07:00
+++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl	2004-09-26 10:55:59 -07:00
@@ -1479,7 +1479,7 @@
   struct snd_mychip {
           ....
           unsigned long iobase_phys;
-          unsigned long iobase_virt;
+          void __iomem *iobase_virt;
   };
 ]]>
           </programlisting>
@@ -1495,8 +1495,7 @@
           return err;
   }
   chip->iobase_phys = pci_resource_start(pci, 0);
-  chip->iobase_virt = (unsigned long)
-                      ioremap_nocache(chip->iobase_phys,
+  chip->iobase_virt = ioremap_nocache(chip->iobase_phys,
                                       pci_resource_len(pci, 0));
 ]]>
           </programlisting>
@@ -1511,7 +1510,7 @@
   {
           ....
           if (chip->iobase_virt)
-                  iounmap((void *)chip->iobase_virt);
+                  iounmap(chip->iobase_virt);
           ....
           pci_release_regions(chip->pci);
           ....
@@ -4060,8 +4059,8 @@
       <para>
         Also, there is a function to change the sample rate (of a
         certain register such as
-        <constant>AC97_PCM_FRONT_DAC_RATE</constant>) when VRA is
-        supported by the codec:
+        <constant>AC97_PCM_FRONT_DAC_RATE</constant>) when VRA or
+        DRA is supported by the codec:
         <function>snd_ac97_set_rate()</function>. 
 
         <informalexample>
diff -Nru a/Documentation/sound/alsa/Joystick.txt b/Documentation/sound/alsa/Joystick.txt
--- a/Documentation/sound/alsa/Joystick.txt	2004-09-26 10:55:59 -07:00
+++ b/Documentation/sound/alsa/Joystick.txt	2004-09-26 10:55:59 -07:00
@@ -49,17 +49,15 @@
     cs46xx	N/A		N/A
     es1938	N/A		N/A
     es1968	joystick	0 = disable (default), 1 = enable
-    intel8x0(*1)joystick	0 = disable (default), 1 = enable
     sonicvibes	N/A		N/A
     trident	N/A		N/A
-    via82xx(*2)	joystick	0 = disable (default), 1 = enable
+    via82xx(*1)	joystick	0 = disable (default), 1 = enable
     ymfpci	joystick_port	0 = disable (default), 1 = auto-detect,
-                                manual: 0x201, 0x202, 0x204, 0x205(*3)
+                                manual: 0x201, 0x202, 0x204, 0x205(*2)
     ---------------------------------------------------------------------------
 
-    *1)  not all chips support joystick
-    *2)  VIA686A/B only
-    *3)  With YMF744/754 chips, the port address can be chosen arbitrarily
+    *1)  VIA686A/B only
+    *2)  With YMF744/754 chips, the port address can be chosen arbitrarily
 
 The following drivers don't support gameport natively, but there are
 additional modules.  Load the corresponding module to add the gameport
diff -Nru a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
--- a/include/sound/ac97_codec.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/ac97_codec.h	2004-09-26 10:55:59 -07:00
@@ -26,6 +26,7 @@
  */
 
 #include <linux/bitops.h>
+#include "pcm.h"
 #include "control.h"
 #include "info.h"
 
@@ -133,6 +134,11 @@
 #define AC97_BC_20BIT_ADC	0x0200	/* 20-bit ADC resolution */
 #define AC97_BC_ADC_MASK	0x0300
 
+/* general purpose */
+#define AC97_GP_DRSS_MASK	0x0c00	/* double rate slot select */
+#define AC97_GP_DRSS_1011	0x0000	/* LR(C) 10+11(+12) */
+#define AC97_GP_DRSS_78		0x0400	/* LR 7+8 */
+
 /* extended audio ID bit defines */
 #define AC97_EI_VRA		0x0001	/* Variable bit rate supported */
 #define AC97_EI_DRA		0x0002	/* Double rate supported */
@@ -348,6 +354,8 @@
 #define AC97_SCAP_SKIP_AUDIO	(1<<4)	/* skip audio part of codec */
 #define AC97_SCAP_SKIP_MODEM	(1<<5)	/* skip modem part of codec */
 #define AC97_SCAP_INDEP_SDIN	(1<<6)	/* independent SDIN */
+#define AC97_SCAP_INV_EAPD	(1<<7)	/* inverted EAPD */
+#define AC97_SCAP_DETECT_BY_VENDOR (1<<8) /* use vendor registers for read tests */
 
 /* ac97->flags */
 #define AC97_HAS_PC_BEEP	(1<<0)	/* force PC Speaker usage */
@@ -355,6 +363,7 @@
 #define AC97_CS_SPDIF		(1<<2)	/* Cirrus Logic uses funky SPDIF */
 #define AC97_CX_SPDIF		(1<<3)	/* Conexant's spdif interface */
 #define AC97_STEREO_MUTES	(1<<4)	/* has stereo mute bits */
+#define AC97_DOUBLE_RATE	(1<<5)	/* supports double rate playback */
 
 /* rates indexes */
 #define AC97_RATES_FRONT_DAC	0
@@ -369,6 +378,7 @@
 	AC97_SHARED_TYPE_NONE,
 	AC97_SHARED_TYPE_ICH,
 	AC97_SHARED_TYPE_ATIIXP,
+	AC97_SHARED_TYPE_VIA,
 	AC97_SHARED_TYPES
 };
 
@@ -432,6 +442,7 @@
 	snd_card_t *card;
 	unsigned short num;	/* bus number */
 	unsigned short no_vra: 1, /* bridge doesn't support VRA */
+		       dra: 1,	/* bridge supports double rate */
 		       isdin: 1;/* independent SDIN */
 	unsigned int clock;	/* AC'97 base clock (usually 48000Hz) */
 	spinlock_t bus_lock;	/* used mainly for slot allocation */
@@ -518,6 +529,7 @@
 /* functions */
 int snd_ac97_bus(snd_card_t *card, int num, ac97_bus_ops_t *ops, void *private_data, ac97_bus_t **rbus); /* create new AC97 bus */
 int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97);	/* create mixer controls */
+const char *snd_ac97_get_short_name(ac97_t *ac97);
 
 void snd_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short value);
 unsigned short snd_ac97_read(ac97_t *ac97, unsigned short reg);
@@ -538,18 +550,20 @@
 	AC97_TUNE_SWAP_SURROUND, /* swap master and surround controls */
 	AC97_TUNE_AD_SHARING,	/* for AD1985, turn on OMS bit and use headphone */
 	AC97_TUNE_ALC_JACK,	/* for Realtek, enable JACK detection */
+	AC97_TUNE_INV_EAPD,	/* inverted EAPD implementation */
 };
 
 struct ac97_quirk {
 	unsigned short vendor;	/* PCI vendor id */
 	unsigned short device;	/* PCI device id */
 	unsigned short mask;	/* device id bit mask, 0 = accept all */
+	unsigned int codec_id;	/* codec id (if any), 0 = accept all */
 	const char *name;	/* name shown as info */
 	int type;		/* quirk type above */
 };
 
 int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk, int override);
-int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned short rate);
+int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned int rate);
 
 int snd_ac97_pcm_assign(ac97_bus_t *ac97,
 			unsigned short pcms_count,
@@ -557,5 +571,6 @@
 int snd_ac97_pcm_open(struct ac97_pcm *pcm, unsigned int rate,
 		      enum ac97_pcm_cfg cfg, unsigned short slots);
 int snd_ac97_pcm_close(struct ac97_pcm *pcm);
+int snd_ac97_pcm_double_rate_rules(snd_pcm_runtime_t *runtime);
 
 #endif /* __SOUND_AC97_CODEC_H */
diff -Nru a/include/sound/core.h b/include/sound/core.h
--- a/include/sound/core.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/core.h	2004-09-26 10:55:59 -07:00
@@ -307,8 +307,8 @@
 #define vfree_nocheck(obj) vfree(obj)
 #endif
 char *snd_kmalloc_strdup(const char *string, int flags);
-int copy_to_user_fromio(void __user *dst, unsigned long src, size_t count);
-int copy_from_user_toio(unsigned long dst, const void __user *src, size_t count);
+int copy_to_user_fromio(void __user *dst, const void __iomem *src, size_t count);
+int copy_from_user_toio(void __iomem *dst, const void __user *src, size_t count);
 
 /* init.c */
 
diff -Nru a/include/sound/cs46xx.h b/include/sound/cs46xx.h
--- a/include/sound/cs46xx.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/cs46xx.h	2004-09-26 10:55:59 -07:00
@@ -1662,7 +1662,7 @@
 typedef struct {
 	char name[24];
 	unsigned long base;
-	unsigned long remap_addr;
+	void __iomem *remap_addr;
 	unsigned long size;
 	struct resource *resource;
 } snd_cs46xx_region_t;
diff -Nru a/include/sound/emu10k1.h b/include/sound/emu10k1.h
--- a/include/sound/emu10k1.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/emu10k1.h	2004-09-26 10:55:59 -07:00
@@ -737,6 +737,9 @@
 #define FXGPREGBASE		0x100		/* FX general purpose registers base       	*/
 #define A_FXGPREGBASE		0x400		/* Audigy GPRs, 0x400 to 0x5ff			*/
 
+#define A_TANKMEMCTLREGBASE	0x100		/* Tank memory control registers base - only for Audigy */
+#define A_TANKMEMCTLREG_MASK	0x1f		/* only 5 bits used - only for Audigy */
+
 /* Tank audio data is logarithmically compressed down to 16 bits before writing to TRAM and is	*/
 /* decompressed back to 20 bits on a read.  There are a total of 160 locations, the last 32	*/
 /* locations are for external TRAM. 								*/
@@ -857,7 +860,7 @@
 	struct list_head list;		/* list link container */
 	unsigned int vcount;
 	unsigned int count;		/* count of GPR (1..16) */
-	unsigned char gpr[32];		/* GPR number(s) */
+	unsigned short gpr[32];		/* GPR number(s) */
 	unsigned int value[32];
 	unsigned int min;		/* minimum range */
 	unsigned int max;		/* maximum range */
@@ -870,7 +873,7 @@
 typedef struct _snd_emu10k1_fx8010_irq {
 	struct _snd_emu10k1_fx8010_irq *next;
 	snd_fx8010_irq_handler_t *handler;
-	unsigned char gpr_running;
+	unsigned short gpr_running;
 	void *private_data;
 } snd_emu10k1_fx8010_irq_t;
 
@@ -881,12 +884,12 @@
 	unsigned int channels;		/* 16-bit channels count */
 	unsigned int tram_start;	/* initial ring buffer position in TRAM (in samples) */
 	unsigned int buffer_size;	/* count of buffered samples */
-	unsigned char gpr_size;		/* GPR containing size of ring buffer in samples (host) */
-	unsigned char gpr_ptr;		/* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
-	unsigned char gpr_count;	/* GPR containing count of samples between two interrupts (host) */
-	unsigned char gpr_tmpcount;	/* GPR containing current count of samples to interrupt (host = set, FX8010) */
-	unsigned char gpr_trigger;	/* GPR containing trigger (activate) information (host) */
-	unsigned char gpr_running;	/* GPR containing info if PCM is running (FX8010) */
+	unsigned short gpr_size;		/* GPR containing size of ring buffer in samples (host) */
+	unsigned short gpr_ptr;		/* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
+	unsigned short gpr_count;	/* GPR containing count of samples between two interrupts (host) */
+	unsigned short gpr_tmpcount;	/* GPR containing current count of samples to interrupt (host = set, FX8010) */
+	unsigned short gpr_trigger;	/* GPR containing trigger (activate) information (host) */
+	unsigned short gpr_running;	/* GPR containing info if PCM is running (FX8010) */
 	unsigned char etram[32];	/* external TRAM address & data */
 	snd_pcm_indirect_t pcm_rec;
 	unsigned int tram_pos;
@@ -1141,6 +1144,13 @@
 #define ITRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
 #define ETRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
 
+#define A_ITRAM_DATA(x)	(TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_DATA(x)	(TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+#define A_ITRAM_CTL(x)	(A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
+#define A_ETRAM_CTL(x)	(A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
+
 #define A_FXBUS(x)	(0x00 + (x))	/* x = 0x00 - 0x3f? */
 #define A_EXTIN(x)	(0x40 + (x))	/* x = 0x00 - 0x1f? */
 #define A_EXTOUT(x)	(0x60 + (x))	/* x = 0x00 - 0x1f? */
@@ -1269,8 +1279,11 @@
 #define A_C_00100000	0xd5
 #define A_GPR_ACCU	0xd6		/* ACCUM, accumulator */
 #define A_GPR_COND	0xd7		/* CCR, condition register */
-/* 0xd8 = noise1 */
-/* 0xd9 = noise2 */
+#define A_GPR_NOISE0	0xd8		/* noise source */
+#define A_GPR_NOISE1	0xd9		/* noise source */
+#define A_GPR_IRQ	0xda		/* IRQ register */
+#define A_GPR_DBAC	0xdb		/* TRAM Delay Base Address Counter - internal */
+#define A_GPR_DBACE	0xde		/* TRAM Delay Base Address Counter - external */
 
 /* definitions for debug register */
 #define EMU10K1_DBG_ZC			0x80000000	/* zero tram counter */
@@ -1310,7 +1323,7 @@
 	snd_ctl_elem_id_t id;		/* full control ID definition */
 	unsigned int vcount;		/* visible count */
 	unsigned int count;		/* count of GPR (1..16) */
-	unsigned char gpr[32];		/* GPR number(s) */
+	unsigned short gpr[32];		/* GPR number(s) */
 	unsigned int value[32];		/* initial values */
 	unsigned int min;		/* minimum range */
 	unsigned int max;		/* maximum range */
@@ -1320,8 +1333,8 @@
 typedef struct {
 	char name[128];
 
-	unsigned long gpr_valid[0x100/(sizeof(unsigned long)*8)]; /* bitmask of valid initializers */
-	unsigned int gpr_map[0x100];	  /* initializers */
+	unsigned long gpr_valid[0x200/(sizeof(unsigned long)*8)]; /* bitmask of valid initializers */
+	unsigned int gpr_map[0x200];	  /* initializers */
 
 	unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
 	emu10k1_fx8010_control_gpr_t __user *gpr_add_controls; /* GPR controls to add/replace */
@@ -1333,12 +1346,12 @@
 	unsigned int gpr_list_control_total; /* total count of GPR controls */
 	emu10k1_fx8010_control_gpr_t __user *gpr_list_controls; /* listed GPR controls */
 
-	unsigned long tram_valid[0xa0/(sizeof(unsigned long)*8)]; /* bitmask of valid initializers */
-	unsigned int tram_data_map[0xa0]; /* data initializers */
-	unsigned int tram_addr_map[0xa0]; /* map initializers */
+	unsigned long tram_valid[0x100/(sizeof(unsigned long)*8)]; /* bitmask of valid initializers */
+	unsigned int tram_data_map[0x100]; /* data initializers */
+	unsigned int tram_addr_map[0x100]; /* map initializers */
 
-	unsigned long code_valid[512/(sizeof(unsigned long)*8)];  /* bitmask of valid instructions */
-	unsigned int code[512][2];	  /* one instruction - 64 bits */
+	unsigned long code_valid[1024/(sizeof(unsigned long)*8)];  /* bitmask of valid instructions */
+	unsigned int code[1024][2];	  /* one instruction - 64 bits */
 } emu10k1_fx8010_code_t;
 
 typedef struct {
@@ -1354,12 +1367,12 @@
 	unsigned int channels;		/* 16-bit channels count, zero = remove this substream */
 	unsigned int tram_start;	/* ring buffer position in TRAM (in samples) */
 	unsigned int buffer_size;	/* count of buffered samples */
-	unsigned char gpr_size;		/* GPR containing size of ringbuffer in samples (host) */
-	unsigned char gpr_ptr;		/* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
-	unsigned char gpr_count;	/* GPR containing count of samples between two interrupts (host) */
-	unsigned char gpr_tmpcount;	/* GPR containing current count of samples to interrupt (host = set, FX8010) */
-	unsigned char gpr_trigger;	/* GPR containing trigger (activate) information (host) */
-	unsigned char gpr_running;	/* GPR containing info if PCM is running (FX8010) */
+	unsigned short gpr_size;		/* GPR containing size of ringbuffer in samples (host) */
+	unsigned short gpr_ptr;		/* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
+	unsigned short gpr_count;	/* GPR containing count of samples between two interrupts (host) */
+	unsigned short gpr_tmpcount;	/* GPR containing current count of samples to interrupt (host = set, FX8010) */
+	unsigned short gpr_trigger;	/* GPR containing trigger (activate) information (host) */
+	unsigned short gpr_running;	/* GPR containing info if PCM is running (FX8010) */
 	unsigned char pad;		/* reserved */
 	unsigned char etram[32];	/* external TRAM address & data (one per channel) */
 	unsigned int res2;		/* reserved */
diff -Nru a/include/sound/hdsp.h b/include/sound/hdsp.h
--- a/include/sound/hdsp.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/hdsp.h	2004-09-26 10:55:59 -07:00
@@ -76,7 +76,7 @@
 typedef struct _snd_hdsp_firmware hdsp_firmware_t;
 
 struct _snd_hdsp_firmware {
-	unsigned long __user *firmware_data;	/* 24413 long words */
+	void __user *firmware_data;	/* 24413 x 4 bytes */
 };
 
 #define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, hdsp_firmware_t)
diff -Nru a/include/sound/pcm.h b/include/sound/pcm.h
--- a/include/sound/pcm.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/pcm.h	2004-09-26 10:55:59 -07:00
@@ -405,6 +405,8 @@
 	snd_info_entry_t *proc_sw_params_entry;
 	snd_info_entry_t *proc_status_entry;
 	snd_info_entry_t *proc_prealloc_entry;
+	/* misc flags */
+	unsigned int no_mmap_ctrl: 1;
 };
 
 #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
diff -Nru a/include/sound/ymfpci.h b/include/sound/ymfpci.h
--- a/include/sound/ymfpci.h	2004-09-26 10:55:59 -07:00
+++ b/include/sound/ymfpci.h	2004-09-26 10:55:59 -07:00
@@ -305,7 +305,7 @@
 	unsigned int device_id;	/* PCI device ID */
 	unsigned int rev;	/* PCI revision */
 	unsigned long reg_area_phys;
-	unsigned long reg_area_virt;
+	void __iomem *reg_area_virt;
 	struct resource *res_reg_area;
 	struct resource *fm_res;
 	struct resource *mpu_res;
diff -Nru a/sound/arm/Kconfig b/sound/arm/Kconfig
--- a/sound/arm/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/arm/Kconfig	2004-09-26 10:55:59 -07:00
@@ -4,12 +4,15 @@
 	depends on SND!=n && ARM
 
 config SND_SA11XX_UDA1341
-	tristate "SA11xx UDA1341TS driver (H3600)"
+	tristate "SA11xx UDA1341TS driver (iPaq H3600)"
 	depends on ARCH_SA1100 && SND && L3
 	select SND_PCM
 	help
-	  Say Y or M if you have a Compaq iPaq H3x00 handheld computer and want
-	  to use its Philips UDA 1341 audio chip.
+	  Say Y here if you have a Compaq iPaq H3x00 handheld computer
+	  and want to use its Philips UDA 1341 audio chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sa11xx-uda1341.
 
 endmenu
 
diff -Nru a/sound/core/Kconfig b/sound/core/Kconfig
--- a/sound/core/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/core/Kconfig	2004-09-26 10:55:59 -07:00
@@ -17,17 +17,26 @@
 	depends on SND
 	select SND_TIMER
 	help
-	  Say 'Y' or 'M' to enable MIDI sequencer and router support. This feature
-	  allows routing and enqueing MIDI events. Events can be processed at given
-	  time.
+	  Say Y or M to enable MIDI sequencer and router support.  This
+	  feature allows routing and enqueueing of MIDI events.  Events
+	  can be processed at a given time.
+
+	  Many programs require this feature, so you should enable it
+	  unless you know what you're doing.
 
 config SND_SEQ_DUMMY
 	tristate "Sequencer dummy client"
 	depends on SND_SEQUENCER
 	help
-	  Say 'Y' or 'M' to enable dummy sequencer client. This client is a simple
-	  midi-through client. All normal input events are redirected to output port
-	  immediately.
+	  Say Y here to enable the dummy sequencer client.  This client
+	  is a simple MIDI-through client: all normal input events are
+	  redirected to the output port immediately.
+
+	  You don't need this unless you want to connect many MIDI
+	  devices or applications together.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-seq-dummy.
 
 config SND_OSSEMUL
 	bool
@@ -37,7 +46,13 @@
 	depends on SND
 	select SND_OSSEMUL
 	help
-	  Say 'Y' or 'M' to enable mixer OSS API emulation (/dev/mixer*).
+	  To enable OSS mixer API emulation (/dev/mixer*), say Y here
+	  and read <file:Documentation/sound/alsa/OSS-Emulation.txt>.
+
+	  Many programs still use the OSS API, so say Y.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-mixer-oss.
 
 config SND_PCM_OSS
 	tristate "OSS PCM (digital audio) API"
@@ -45,15 +60,26 @@
 	select SND_OSSEMUL
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to enable digital audio (PCM) OSS API emulation (/dev/dsp*).
+	  To enable OSS digital audio (PCM) emulation (/dev/dsp*), say Y
+	  here and read <file:Documentation/sound/alsa/OSS-Emulation.txt>.
+
+	  Many programs still use the OSS API, so say Y.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-pcm-oss.
 
 config SND_SEQUENCER_OSS
 	bool "OSS Sequencer API"
 	depends on SND_SEQUENCER
 	select SND_OSSEMUL
 	help
-	  Say 'Y' to enable OSS sequencer emulation (both /dev/sequencer and
-	  /dev/music interfaces).
+	  Say Y here to enable OSS sequencer emulation (both
+	  /dev/sequencer and /dev/music interfaces).
+
+	  Many programs still use the OSS API, so say Y.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-seq-oss.
 
 config SND_BIT32_EMUL
 	tristate "Emulation for 32-bit applications"
@@ -63,38 +89,51 @@
 	select SND_TIMER
 	select SND_HWDEP
 	help
-	  Say 'Y' or 'M' to enable the emulation for 32-bit ALSA-native
+	  Say Y here to enable the emulation for 32-bit ALSA-native
 	  applications.
 
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ioctl32.
+
 config SND_RTCTIMER
 	tristate "RTC Timer support"
 	depends on SND && RTC
 	select SND_TIMER
 	help
-	  Say 'Y' or 'M' to enable RTC timer support for ALSA. ALSA code uses RTC
-	  timer as precise timing source and maps the RTC timer to the ALSA's timer
-	  interface. ALSA sequencer code can also use this timing source.
+	  Say Y here to enable RTC timer support for ALSA.  ALSA uses
+	  the RTC timer as a precise timing source and maps the RTC
+	  timer to ALSA's timer interface.  The ALSA sequencer code also
+	  can use this timing source.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-rtctimer.
 
 config SND_VERBOSE_PRINTK
 	bool "Verbose printk"
 	depends on SND
 	help
-	  Say 'Y' to enable verbose log messages. These messages will help to
-	  identify source file and position containing printed messages.
+	  Say Y here to enable verbose log messages.  These messages
+	  will help to identify source file and position containing
+	  printed messages.
+
+	  You don't need this unless you're debugging ALSA.
 
 config SND_DEBUG
 	bool "Debug"
 	depends on SND
 	help
-	  Say 'Y' to enable ALSA debug code.
+	  Say Y here to enable ALSA debug code.
 
 config SND_DEBUG_MEMORY
 	bool "Debug memory"
 	depends on SND_DEBUG
 	help
-	  Say 'Y' to enable debugging of memory allocation.
+	  Say Y here to enable debugging of memory allocations.
 
 config SND_DEBUG_DETECT
 	bool "Debug detection"
 	depends on SND_DEBUG
+	help
+	  Say Y here to enable extra-verbose log messages printed when
+	  detecting devices.
 
diff -Nru a/sound/core/ioctl32/ioctl32.c b/sound/core/ioctl32/ioctl32.c
--- a/sound/core/ioctl32/ioctl32.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/ioctl32/ioctl32.c	2004-09-26 10:55:59 -07:00
@@ -246,7 +246,7 @@
 		struct sndrv_aes_iec958 iec958;
         } value;
         unsigned char reserved[128];
-} __attribute__((packed));
+};
 
 
 /* hmm, it's so hard to retrieve the value type from the control id.. */
diff -Nru a/sound/core/ioctl32/ioctl32.h b/sound/core/ioctl32/ioctl32.h
--- a/sound/core/ioctl32/ioctl32.h	2004-09-26 10:55:59 -07:00
+++ b/sound/core/ioctl32/ioctl32.h	2004-09-26 10:55:59 -07:00
@@ -18,7 +18,7 @@
  *
  *
  * This file registers the converters from 32-bit ioctls to 64-bit ones.
- * The converter assumes that a 32-bit user-pointer can be casted by A(x)
+ * The converter assumes that a 32-bit user-pointer can be casted by compat_ptr(x)
  * macro to a valid 64-bit pointer which is accessible via copy_from/to_user.
  *
  */
diff -Nru a/sound/core/ioctl32/pcm32.c b/sound/core/ioctl32/pcm32.c
--- a/sound/core/ioctl32/pcm32.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/ioctl32/pcm32.c	2004-09-26 10:55:59 -07:00
@@ -439,6 +439,30 @@
 
 
 /*
+ * When PCM is used on 32bit mode, we need to disable
+ * mmap of PCM status/control records because of the size
+ * incompatibility.
+ * 
+ * Since INFO ioctl is always called at first, we mark the
+ * mmap-disabling in this ioctl wrapper.
+ */
+static int snd_pcm_info_ioctl32(unsigned int fd, unsigned int cmd, unsigned long arg, struct file *filp)
+{
+	snd_pcm_file_t *pcm_file;
+	snd_pcm_substream_t *substream;
+	if (! filp->f_op || ! filp->f_op->ioctl)
+		return -ENOTTY;
+	pcm_file = filp->private_data;
+	if (! pcm_file)
+		return -ENOTTY;
+	substream = pcm_file->substream;
+	if (! substream)
+		return -ENOTTY;
+	substream->no_mmap_ctrl = 1;
+	return filp->f_op->ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
+}
+
+/*
  */
 #define AP(x) snd_ioctl32_##x
 
@@ -456,13 +480,14 @@
 	SNDRV_PCM_IOCTL_READN_FRAMES32 = _IOR('A', 0x53, struct sndrv_xfern32),
 	SNDRV_PCM_IOCTL_HW_REFINE_OLD32 = _IOWR('A', 0x10, struct sndrv_pcm_hw_params_old32),
 	SNDRV_PCM_IOCTL_HW_PARAMS_OLD32 = _IOWR('A', 0x11, struct sndrv_pcm_hw_params_old32),
-	SNDRV_PCM_IOCTL_SYNC_PTR32 = _IOWR('A', 0x23, struct sndrv_pcm_sync_ptr),
+	SNDRV_PCM_IOCTL_SYNC_PTR32 = _IOWR('A', 0x23, struct sndrv_pcm_sync_ptr32),
 
 };
 
 struct ioctl32_mapper pcm_mappers[] = {
 	MAP_COMPAT(SNDRV_PCM_IOCTL_PVERSION),
-	MAP_COMPAT(SNDRV_PCM_IOCTL_INFO),
+	/* MAP_COMPAT(SNDRV_PCM_IOCTL_INFO), */
+	{ SNDRV_PCM_IOCTL_INFO, snd_pcm_info_ioctl32 },
 	MAP_COMPAT(SNDRV_PCM_IOCTL_TSTAMP),
 	{ SNDRV_PCM_IOCTL_HW_REFINE32, AP(pcm_hw_refine) },
 	{ SNDRV_PCM_IOCTL_HW_PARAMS32, AP(pcm_hw_params) },
diff -Nru a/sound/core/memalloc.c b/sound/core/memalloc.c
--- a/sound/core/memalloc.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/memalloc.c	2004-09-26 10:55:59 -07:00
@@ -246,9 +246,9 @@
 	snd_assert(size > 0, return NULL);
 	snd_assert(dma != NULL, return NULL);
 	pg = get_order(size);
-	gfp_flags = GFP_KERNEL;
-	if (pg > 0)
-		gfp_flags |= __GFP_NOWARN;
+	gfp_flags = GFP_KERNEL
+		| __GFP_NORETRY /* don't trigger OOM-killer */
+		| __GFP_NOWARN; /* no stack trace print - this call is non-critical */
 	res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags);
 	if (res != NULL) {
 #ifdef NEED_RESERVE_PAGES
diff -Nru a/sound/core/memory.c b/sound/core/memory.c
--- a/sound/core/memory.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/memory.c	2004-09-26 10:55:59 -07:00
@@ -257,7 +257,7 @@
  *
  * Returns zero if successful, or non-zero on failure.
  */
-int copy_to_user_fromio(void __user *dst, unsigned long src, size_t count)
+int copy_to_user_fromio(void __user *dst, const void __iomem *src, size_t count)
 {
 #if defined(__i386__) || defined(CONFIG_SPARC32)
 	return copy_to_user(dst, (const void*)src, count) ? -EFAULT : 0;
@@ -267,7 +267,7 @@
 		size_t c = count;
 		if (c > sizeof(buf))
 			c = sizeof(buf);
-		memcpy_fromio(buf, (void*)src, c);
+		memcpy_fromio(buf, src, c);
 		if (copy_to_user(dst, buf, c))
 			return -EFAULT;
 		count -= c;
@@ -288,7 +288,7 @@
  *
  * Returns zero if successful, or non-zero on failure.
  */
-int copy_from_user_toio(unsigned long dst, const void __user *src, size_t count)
+int copy_from_user_toio(void __iomem *dst, const void __user *src, size_t count)
 {
 #if defined(__i386__) || defined(CONFIG_SPARC32)
 	return copy_from_user((void*)dst, src, count) ? -EFAULT : 0;
@@ -300,7 +300,7 @@
 			c = sizeof(buf);
 		if (copy_from_user(buf, src, c))
 			return -EFAULT;
-		memcpy_toio((void*)dst, buf, c);
+		memcpy_toio(dst, buf, c);
 		count -= c;
 		dst += c;
 		src += c;
diff -Nru a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
--- a/sound/core/oss/pcm_oss.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/oss/pcm_oss.c	2004-09-26 10:55:59 -07:00
@@ -834,9 +834,14 @@
 				if (tmp <= 0)
 					return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp;
 				runtime->oss.bytes += tmp;
-				runtime->oss.buffer_used = 0;
 				runtime->oss.period_ptr += tmp;
 				runtime->oss.period_ptr %= runtime->oss.period_bytes;
+				if ((substream->ffile->f_flags & O_NONBLOCK) != 0 &&
+				    tmp != runtime->oss.buffer_used) {
+					runtime->oss.buffer_used = 0;
+					break;
+				}
+				runtime->oss.buffer_used = 0;
 			}
 		} else {
 			tmp = snd_pcm_oss_write2(substream, (char *)buf, runtime->oss.period_bytes, 0);
@@ -846,6 +851,9 @@
 			buf += tmp;
 			bytes -= tmp;
 			xfer += tmp;
+			if ((substream->ffile->f_flags & O_NONBLOCK) != 0 &&
+			    tmp != runtime->oss.period_bytes)
+				break;
 		}
 	}
 	return xfer;
diff -Nru a/sound/core/pcm_native.c b/sound/core/pcm_native.c
--- a/sound/core/pcm_native.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/pcm_native.c	2004-09-26 10:55:59 -07:00
@@ -1973,6 +1973,7 @@
 
 	str = substream->pstr;
 	substream->file = pcm_file;
+	substream->no_mmap_ctrl = 0;
 
 	pcm_file->substream = substream;
 
@@ -3158,8 +3159,12 @@
 	offset = area->vm_pgoff << PAGE_SHIFT;
 	switch (offset) {
 	case SNDRV_PCM_MMAP_OFFSET_STATUS:
+		if (substream->no_mmap_ctrl)
+			return -ENXIO;
 		return snd_pcm_mmap_status(substream, file, area);
 	case SNDRV_PCM_MMAP_OFFSET_CONTROL:
+		if (substream->no_mmap_ctrl)
+			return -ENXIO;
 		return snd_pcm_mmap_control(substream, file, area);
 	default:
 		return snd_pcm_mmap_data(substream, file, area);
diff -Nru a/sound/core/seq/seq.c b/sound/core/seq/seq.c
--- a/sound/core/seq/seq.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/seq/seq.c	2004-09-26 10:55:59 -07:00
@@ -71,11 +71,14 @@
  *  INIT PART
  */
 
+int snd_seq_in_init;
 
 static int __init alsa_seq_init(void)
 {
 	int err;
 
+	snd_seq_in_init = 1;
+
 	if ((err = client_init_data()) < 0)
 		return err;
 
@@ -99,6 +102,7 @@
 	if ((err = snd_seq_system_client_init()) < 0)
 		return err;
 
+	snd_seq_in_init = 0;
 	return 0;
 }
 
diff -Nru a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
--- a/sound/core/seq/seq_clientmgr.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/seq/seq_clientmgr.c	2004-09-26 10:55:59 -07:00
@@ -152,11 +152,16 @@
 		} else if (clientid >= 64 && clientid < 128) {
 			int card = (clientid - 64) / 8;
 			if (card < snd_ecards_limit) {
+				extern int snd_seq_in_init;
 				if (! card_requested[card]) {
 					card_requested[card] = 1;
 					snd_request_card(card);
 				}
-				snd_seq_device_load_drivers();
+				/* Calling request_module during module_init()
+				 * may cause blocking.
+				 */
+				if (! snd_seq_in_init)
+					snd_seq_device_load_drivers();
 			}
 		}
 		spin_lock_irqsave(&clients_lock, flags);
@@ -420,7 +425,10 @@
 			count -= err;
 			buf += err;
 		} else {
-			copy_to_user(buf, &cell->event, sizeof(snd_seq_event_t));
+			if (copy_to_user(buf, &cell->event, sizeof(snd_seq_event_t))) {
+				err = -EFAULT;
+				break;
+			}
 			count -= sizeof(snd_seq_event_t);
 			buf += sizeof(snd_seq_event_t);
 		}
diff -Nru a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
--- a/sound/core/seq/seq_midi.c	2004-09-26 10:55:59 -07:00
+++ b/sound/core/seq/seq_midi.c	2004-09-26 10:55:59 -07:00
@@ -279,7 +279,7 @@
 	cinfo.client = client->seq_client;
 	cinfo.type = KERNEL_CLIENT;
 	name = rmidi->name[0] ? (const char *)rmidi->name : "External MIDI";
-	snprintf(cinfo.name, sizeof(cinfo.name), "%s - Rawmidi %d", name, card->number);
+	strlcpy(cinfo.name, name, sizeof(cinfo.name));
 	return snd_seq_kernel_client_ctl(client->seq_client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &cinfo);
 }
 
diff -Nru a/sound/drivers/Kconfig b/sound/drivers/Kconfig
--- a/sound/drivers/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/drivers/Kconfig	2004-09-26 10:55:59 -07:00
@@ -30,8 +30,14 @@
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include dummy driver. This driver does nothing, but
-	  emulates various mixer controls and PCM devices.
+	  Say Y here to include the dummy driver.  This driver does
+	  nothing, but emulates various mixer controls and PCM devices.
+
+	  You don't need this unless you're testing the hardware support
+	  of programs using the ALSA API.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-dummy.
 
 config SND_VIRMIDI
 	tristate "Virtual MIDI soundcard"
@@ -39,8 +45,14 @@
 	select SND_TIMER
 	select SND_RAWMIDI
 	help
-	  Say 'Y' or 'M' to include virtual MIDI driver. This driver allows to
-	  connect applications using raw MIDI devices to sequencer.
+	  Say Y here to include the virtual MIDI driver.  This driver
+	  allows to connect applications using raw MIDI devices to
+	  sequencer clients.
+
+	  If you don't know what MIDI is, say N here.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-virmidi.
 
 config SND_MTPAV
 	tristate "MOTU MidiTimePiece AV multiport MIDI"
@@ -48,23 +60,39 @@
 	select SND_TIMER
 	select SND_RAWMIDI
 	help
-	  Say 'Y' or 'M' to include support for MOTU MidiTimePiece AV multiport
-	  MIDI adapter.
+	  To use a MOTU MidiTimePiece AV multiport MIDI adapter
+	  connected to the parallel port, say Y here and make sure that
+	  the standard parallel port driver isn't used for the port.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-mtpav.
 
 config SND_SERIAL_U16550
-	tristate "UART16550 - MIDI only driver"
+	tristate "UART16550 serial MIDI driver"
 	depends on SND
 	select SND_TIMER
 	select SND_RAWMIDI
 	help
-	  Say 'Y' or 'M' to include support for MIDI serial port driver. It works
-	  with serial UARTs 16550 and better.
+	  To include support for MIDI serial port interfaces, say Y here
+	  and read <file:Documentation/sound/alsa/serial-u16550.txt>.
+	  This driver works with serial UARTs 16550 and better.
+
+	  This driver accesses the serial port hardware directly, so
+	  make sure that the standard serial driver isn't used or
+	  deactivated with setserial before loading this driver.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-serial-u16550.
 
 config SND_MPU401
 	tristate "Generic MPU-401 UART driver"
 	depends on SND
 	select SND_MPU401_UART
 	help
-	  Say 'Y' or 'M' to include support for MPU401 hardware using UART access.
+	  Say Y here to include support for MIDI ports compatible with
+	  the Roland MPU-401 interface in UART mode.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-mpu401.
 
 endmenu
diff -Nru a/sound/drivers/dummy.c b/sound/drivers/dummy.c
--- a/sound/drivers/dummy.c	2004-09-26 10:55:59 -07:00
+++ b/sound/drivers/dummy.c	2004-09-26 10:55:59 -07:00
@@ -557,7 +557,7 @@
 DUMMY_CAPSRC("CD Capture Switch", 0, MIXER_ADDR_MASTER)
 };
 
-int __init snd_card_dummy_new_mixer(snd_card_dummy_t * dummy)
+static int __init snd_card_dummy_new_mixer(snd_card_dummy_t * dummy)
 {
 	snd_card_t *card = dummy->card;
 	unsigned int idx;
diff -Nru a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
--- a/sound/drivers/mpu401/mpu401_uart.c	2004-09-26 10:55:59 -07:00
+++ b/sound/drivers/mpu401/mpu401_uart.c	2004-09-26 10:55:59 -07:00
@@ -70,12 +70,12 @@
 
 static void mpu401_write_mmio(mpu401_t *mpu, unsigned char data, unsigned long addr)
 {
-	writeb(data, (unsigned long*)addr);
+	writeb(data, (void __iomem *)addr);
 }
 
 static unsigned char mpu401_read_mmio(mpu401_t *mpu, unsigned long addr)
 {
-	return readb((unsigned long*)addr);
+	return readb((void __iomem *)addr);
 }
 /*  */
 
diff -Nru a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c
--- a/sound/drivers/opl3/opl3_lib.c	2004-09-26 10:55:59 -07:00
+++ b/sound/drivers/opl3/opl3_lib.c	2004-09-26 10:55:59 -07:00
@@ -88,20 +88,20 @@
 void snd_opl3_cs4281_command(opl3_t * opl3, unsigned short cmd, unsigned char val)
 {
 	unsigned long flags;
-	unsigned long port;
+	void __iomem *port;
 
 	/*
 	 * CS4281 requires a special access to I/O registers
 	 */
 
-	port = (cmd & OPL3_RIGHT) ? opl3->r_port : opl3->l_port;
+	port = (void __iomem *)((cmd & OPL3_RIGHT) ? opl3->r_port : opl3->l_port);
 
 	spin_lock_irqsave(&opl3->reg_lock, flags);
 
-	writel((unsigned int)cmd, port << 2);
+	writel((unsigned int)cmd, port);
 	udelay(10);
 
-	writel((unsigned int)val, (port + 1) << 2);
+	writel((unsigned int)val, port + 4);
 	udelay(30);
 
 	spin_unlock_irqrestore(&opl3->reg_lock, flags);
diff -Nru a/sound/isa/Kconfig b/sound/isa/Kconfig
--- a/sound/isa/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/isa/Kconfig	2004-09-26 10:55:59 -07:00
@@ -10,17 +10,25 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Analog Devices SoundPort AD1816A or
-	  compatible sound chips.
+	  Say Y here to include support for Analog Devices SoundPort
+	  AD1816A or compatible sound chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ad1816a.
 
 config SND_AD1848
 	tristate "Generic AD1848/CS4248 driver"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for AD1848 (Analog Devices) or CS4248 
-	  (Cirrus Logic - Crystal Semiconductors) chips. Please, for newer chips
-	  from Cirrus Logic, use CS4231, CS4232 or CS4236+ driver.
+	  Say Y here to include support for AD1848 (Analog Devices) or
+	  CS4248 (Cirrus Logic - Crystal Semiconductors) chips.
+	  
+	  For newer chips from Cirrus Logic, use the CS4231, CS4232 or
+	  CS4236+ drivers.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ad1848.
 
 config SND_CS4231
 	tristate "Generic Cirrus Logic CS4231 driver"
@@ -28,8 +36,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for CS4231 chips from Cirrus Logic -
-	  Crystal Semiconductors.
+	  Say Y here to include support for CS4231 chips from Cirrus
+	  Logic - Crystal Semiconductors.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cs4231.
 
 config SND_CS4232
 	tristate "Generic Cirrus Logic CS4232 driver"
@@ -38,8 +49,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for CS4232 chips from Cirrus Logic -
-	  Crystal Semiconductors.
+	  Say Y here to include support for CS4232 chips from Cirrus
+	  Logic - Crystal Semiconductors.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cs4232.
 
 config SND_CS4236
 	tristate "Generic Cirrus Logic CS4236+ driver"
@@ -48,8 +62,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for CS4235,CS4236,CS4237B,CS4238B,CS4239
-	  chips from Cirrus Logic - Crystal Semiconductors.
+	  Say Y to include support for CS4235,CS4236,CS4237B,CS4238B,
+	  CS4239 chips from Cirrus Logic - Crystal Semiconductors.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cs4236.
 
 config SND_ES968
 	tristate "Generic ESS ES968 driver"
@@ -57,7 +74,10 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for ESS AudioDrive ES968 chip.
+	  Say Y here to include support for ESS AudioDrive ES968 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-es968.
 
 config SND_ES1688
 	tristate "Generic ESS ES688/ES1688 driver"
@@ -66,7 +86,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for ESS AudioDrive ES688 or ES1688 chips.
+	  Say Y here to include support for ESS AudioDrive ES688 or
+	  ES1688 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-es1688.
 
 config SND_ES18XX
 	tristate "Generic ESS ES18xx driver"
@@ -75,7 +99,10 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for ESS AudioDrive ES18xx chips.
+	  Say Y here to include support for ESS AudioDrive ES18xx chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-es18xx.
 
 config SND_GUS_SYNTH
 	tristate
@@ -87,7 +114,11 @@
 	select SND_PCM
 	select SND_GUS_SYNTH
 	help
-	  Say 'Y' or 'M' to include support for Gravis UltraSound Classic soundcard.
+	  Say Y here to include support for Gravis UltraSound Classic
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-gusclassic.
 
 config SND_GUSEXTREME
 	tristate "Gravis UltraSound Extreme"
@@ -97,7 +128,11 @@
 	select SND_PCM
 	select SND_GUS_SYNTH
 	help
-	  Say 'Y' or 'M' to include support for Gravis UltraSound Extreme soundcard.
+	  Say Y here to include support for Gravis UltraSound Extreme
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-gusextreme.
 
 config SND_GUSMAX
 	tristate "Gravis UltraSound MAX"
@@ -106,7 +141,11 @@
 	select SND_PCM
 	select SND_GUS_SYNTH
 	help
-	  Say 'Y' or 'M' to include support for Gravis UltraSound MAX soundcard.
+	  Say Y here to include support for Gravis UltraSound MAX
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-gusmax.
 
 config SND_INTERWAVE
 	tristate "AMD InterWave, Gravis UltraSound PnP"
@@ -115,9 +154,12 @@
 	select SND_PCM
 	select SND_GUS_SYNTH
 	help
-	  Say 'Y' or 'M' to include support for AMD InterWave based soundcards
-	  (Gravis UltraSound Plug & Play, STB SoundRage32, MED3210, Dynasonic Pro,
-	  Panasonic PCA761AW).
+	  Say Y here to include support for AMD InterWave based
+	  soundcards (Gravis UltraSound Plug & Play, STB SoundRage32,
+	  MED3210, Dynasonic Pro, Panasonic PCA761AW).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-interwave.
 
 config SND_INTERWAVE_STB
 	tristate "AMD InterWave + TEA6330T (UltraSound 32-Pro)"
@@ -126,8 +168,12 @@
 	select SND_PCM
 	select SND_GUS_SYNTH
 	help
-	  Say 'Y' or 'M' to include support for AMD InterWave based soundcards
-	  with TEA6330T bass and treble regulator (UltraSound 32-Pro).
+	  Say Y here to include support for AMD InterWave based
+	  soundcards with a TEA6330T bass and treble regulator
+	  (UltraSound 32-Pro).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-interwave-stb.
 
 config SND_OPTI92X_AD1848
 	tristate "OPTi 82C92x - AD1848"
@@ -137,8 +183,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Opti92x soundcards equiped with
-	  AD1848 codec.
+	  Say Y here to include support for soundcards based on Opti
+	  82C92x or OTI-601 chips and using an AD1848 codec.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-opti92x-ad1848.
 
 config SND_OPTI92X_CS4231
 	tristate "OPTi 82C92x - CS4231"
@@ -148,8 +197,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Opti92x soundcards equiped with
-	  CS4231 codec.
+	  Say Y here to include support for soundcards based on Opti
+	  82C92x chips and using a CS4231 codec.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-opti92x-cs4231.
 
 config SND_OPTI93X
 	tristate "OPTi 82C93x"
@@ -158,7 +210,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Opti93x soundcards.
+	  Say Y here to include support for soundcards based on Opti
+	  82C93x chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-opti93x.
 
 config SND_SB8
 	tristate "Sound Blaster 1.0/2.0/Pro (8-bit)"
@@ -167,8 +223,11 @@
 	select SND_RAWMIDI
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Sound Blaster 1.0/2.0/Pro (8-bit)
-	  soundcards or 100% compatible from Creative.
+	  Say Y here to include support for Creative Sound Blaster 1.0/
+	  2.0/Pro (8-bit) or 100% compatible soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sb8.
 
 config SND_SB16
 	tristate "Sound Blaster 16 (PnP)"
@@ -177,8 +236,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Sound Blaster 16 (including
-	  Plug and Play version).
+	  Say Y here to include support for Sound Blaster 16 soundcards
+	  (including the Plug and Play version).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sb16.
 
 config SND_SBAWE
 	tristate "Sound Blaster AWE (32,64) (PnP)"
@@ -187,16 +249,19 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Sound Blaster AWE (including
-	  Plug and Play version).
+	  Say Y here to include support for Sound Blaster AWE soundcards
+	  (including the Plug and Play version).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sbawe.
 
 config SND_SB16_CSP
 	bool "Sound Blaster 16/AWE CSP support"
 	depends on (SND_SB16 || SND_SBAWE) && (BROKEN || !PPC)
 	help
-	  Say 'Y' to include support for CSP core. This special coprocessor
-	  can do variable tasks like various compression and decompression
-	  algorithms.
+	  Say Y here to include support for the CSP core.  This special
+	  coprocessor can do variable tasks like various compression and
+	  decompression algorithms.
 
 config SND_WAVEFRONT
 	tristate "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
@@ -205,8 +270,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Turtle Beach Maui, Tropez
-	  and Tropez+ soundcards based on Wavefront chip.
+	  Say Y here to include support for Turtle Beach Maui, Tropez
+	  and Tropez+ soundcards based on the Wavefront chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-wavefront.
 
 config SND_ALS100
 	tristate "Avance Logic ALS100/ALS120"
@@ -215,8 +283,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Avance Logic ALS100, ALS110,
-	  ALS120 and ALS200 soundcards.
+	  Say Y here to include support for soundcards based on Avance
+	  Logic ALS100, ALS110, ALS120 and ALS200 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-als100.
 
 config SND_AZT2320
 	tristate "Aztech Systems AZT2320"
@@ -225,14 +296,22 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Aztech Systems AZT2320 soundcard.
+	  Say Y here to include support for soundcards based on the
+	  Aztech Systems AZT2320 chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-azt2320.
 
 config SND_CMI8330
 	tristate "C-Media CMI8330"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for C-Media CMI8330 based soundcards.
+	  Say Y here to include support for soundcards based on the
+	  C-Media CMI8330 chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cmi8330.
 
 config SND_DT019X
 	tristate "Diamond Technologies DT-019X, Avance Logic ALS-007"
@@ -241,8 +320,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Diamond Technologies DT-019X and
-	  Avance Logic ALS-007 soundcards.
+	  Say Y here to include support for soundcards based on the
+	  Diamond Technologies DT-019X or Avance Logic ALS-007 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-dt019x.
 
 config SND_OPL3SA2
 	tristate "Yamaha OPL3-SA2/SA3"
@@ -251,14 +333,22 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Yamaha OPL3SA2 or OPL3SA3 chips.
+	  Say Y here to include support for Yamaha OPL3-SA2 and OPL3-SA3
+	  chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-opl3sa2.
 
 config SND_SGALAXY
 	tristate "Aztech Sound Galaxy"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Aztech Sound Galaxy.
+	  Say Y here to include support for Aztech Sound Galaxy
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sgalaxy.
 
 config SND_SSCAPE
 	tristate "Ensoniq SoundScape PnP driver"
@@ -267,7 +357,10 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Ensoniq SoundScape PnP
-	  soundcard.
+	  Say Y here to include support for Ensoniq SoundScape PnP
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sscape.
 
 endmenu
diff -Nru a/sound/isa/es18xx.c b/sound/isa/es18xx.c
--- a/sound/isa/es18xx.c	2004-09-26 10:55:59 -07:00
+++ b/sound/isa/es18xx.c	2004-09-26 10:55:59 -07:00
@@ -419,6 +419,11 @@
 		
 	if ((chip->caps & ES18XX_PCM2) && mode == DAC2) {
 		snd_es18xx_mixer_write(chip, 0x70, bits);
+		/*
+		 * Comment from kernel oss driver:
+		 * FKS: fascinating: 0x72 doesn't seem to work.
+		 */
+		snd_es18xx_write(chip, 0xA2, div0);
 		snd_es18xx_mixer_write(chip, 0x72, div0);
 	} else {
 		snd_es18xx_write(chip, 0xA1, bits);
diff -Nru a/sound/parisc/Kconfig b/sound/parisc/Kconfig
--- a/sound/parisc/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/parisc/Kconfig	2004-09-26 10:55:59 -07:00
@@ -8,7 +8,10 @@
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Harmony/Vivace soundchip
+	  Say Y here to include support for the Harmony/Vivace soundchip
 	  on HP712s, 715/new and many other GSC based machines.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-harmony.
 
 endmenu
diff -Nru a/sound/pci/Kconfig b/sound/pci/Kconfig
--- a/sound/pci/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/Kconfig	2004-09-26 10:55:59 -07:00
@@ -8,27 +8,41 @@
 	select SND_PCM
 
 config SND_ALI5451
-	tristate "ALi PCI Audio M5451"
+	tristate "ALi M5451 PCI Audio Controller"
 	depends on SND
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ALI PCI Audio M5451 sound core.
+	  Say Y here to include support for the integrated AC97 sound
+	  device on motherboards using the ALi M5451 Audio Controller
+	  (M1535/M1535D/M1535+/M1535D+ south bridges).  Newer chipsets
+	  use the "Intel/SiS/nVidia/AMD/ALi AC97 Controller" driver.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ali5451.
 
 config SND_ATIIXP
-	tristate "ATI IXP 150/200/250/300"
+	tristate "ATI IXP AC97 Controller"
 	depends on SND
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ATI IXP 150/200/250/300 AC97 controller.
+	  Say Y here to include support for the integrated AC97 sound
+	  device on motherboards with ATI chipsets (ATI IXP 150/200/250/
+	  300/400).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-atiixp.
 
 config SND_ATIIXP_MODEM
-	tristate "ATI IXP 150/200/250 Modem"
+	tristate "ATI IXP Modem"
 	depends on SND
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ATI IXP 150/200/250 AC97 modem
-	  controller.
+	  Say Y here to include support for the integrated MC97 modem on
+	  motherboards with ATI chipsets (ATI IXP 150/200/250).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-atiixp-modem.
 
 config SND_AU8810
         tristate "Aureal Advantage"
@@ -36,10 +50,14 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
         help
-          Say 'Y' or 'M' to include support for Aureal Advantage soundcards.
-          Supported features: Hardware Mixer, SRC, EQ and SPDIF output.
+	  Say Y here to include support for Aureal Advantage soundcards.
+
+	  Supported features: Hardware Mixer, SRC, EQ and SPDIF output.
           3D support code is in place, but not yet useable. For more info, 
           email the ALSA developer list, or mjander@users.sourceforge.net.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-au8810.
  
 config SND_AU8820
         tristate "Aureal Vortex"
@@ -47,9 +65,13 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
         help
-          Say 'Y' or 'M' to include support for Aureal Vortex soundcards.
+	  Say Y here to include support for Aureal Vortex soundcards.
+
           Supported features: Hardware Mixer and SRC. For more info, email 
           the ALSA developer list, or mjander@users.sourceforge.net.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-au8820.
  
 config SND_AU8830
         tristate "Aureal Vortex 2"
@@ -57,10 +79,14 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
         help
-          Say 'Y' or 'M' to include support for Aureal Vortex 2 soundcards.
+	  Say Y here to include support for Aureal Vortex 2 soundcards.
+
           Supported features: Hardware Mixer, SRC, EQ and SPDIF output.
           3D support code is in place, but not yet useable. For more info, 
           email the ALSA developer list, or mjander@users.sourceforge.net.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-au8830.
  
 config SND_AZT3328
 	tristate "Aztech AZF3328 / PCI168 (EXPERIMENTAL)"
@@ -69,15 +95,22 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Aztech AZF3328 (PCI168) soundcards.
+	  Say Y here to include support for Aztech AZF3328 (PCI168)
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-azt3328.
 
 config SND_BT87X
         tristate "Bt87x Audio Capture"
         depends on SND
 	select SND_PCM
         help
-          Say 'Y' or 'M' to include support for recording audio from TV cards
-          based on Brooktree Bt878/Bt879 chips.
+	  Say Y here to include support for recording audio from TV
+	  cards based on Brooktree Bt878/Bt879 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-bt87x.
 
 config SND_CS46XX
 	tristate "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
@@ -85,14 +118,19 @@
 	select SND_RAWMIDI
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Cirrus Logic CS4610 / CS4612 /
-	  CS4614 / CS4615 / CS4622 / CS4624 / CS4630 / CS4280 chips.
+	  Say Y here to include support for Cirrus Logic CS4610/CS4612/
+	  CS4614/CS4615/CS4622/CS4624/CS4630/CS4280 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cs46xx.
 
 config SND_CS46XX_NEW_DSP
 	bool "Cirrus Logic (Sound Fusion) New DSP support (EXPERIMENTAL)"
 	depends on SND_CS46XX && EXPERIMENTAL
 	help
-	  Say 'Y' to use a new DSP image for SPDIF and dual codecs.
+	  Say Y here to use a new DSP image for SPDIF and dual codecs.
+
+	  This works better than the old code, so say Y.
 
 config SND_CS4281
 	tristate "Cirrus Logic (Sound Fusion) CS4281"
@@ -101,24 +139,37 @@
 	select SND_RAWMIDI
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Cirrus Logic CS4281.
+	  Say Y here to include support for Cirrus Logic CS4281 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cs4281.
 
 config SND_EMU10K1
-	tristate "EMU10K1 (SB Live! & Audigy, E-mu APS)"
+	tristate "Emu10k1 (SB Live!, Audigy, E-mu APS)"
 	depends on SND
 	select SND_HWDEP
 	select SND_RAWMIDI
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Sound Blaster PCI 512, Live!,
-	  Audigy and E-mu APS (partially supported).
+	  Say Y to include support for Sound Blaster PCI 512, Live!,
+	  Audigy and E-mu APS (partially supported) soundcards.
+
+	  The confusing multitude of mixer controls is documented in
+	  <file:Documentation/sound/alsa/SB-Live-mixer.txt> and
+	  <file:Documentation/sound/alsa/Audigy-mixer.txt>.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-emu10k1.
 
 config SND_KORG1212
 	tristate "Korg 1212 IO"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Korg 1212IO.
+	  Say Y here to include support for Korg 1212IO soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-korg1212.
 
 config SND_MIXART
 	tristate "Digigram miXart"
@@ -126,38 +177,55 @@
 	select SND_HWDEP
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Digigram miXart soundcard.
+	  If you want to use Digigram miXart soundcards, say Y here and
+	  read <file:Documentation/sound/alsa/MIXART.txt>.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-mixart.
 
 config SND_NM256
 	tristate "NeoMagic NM256AV/ZX"
 	depends on SND
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for NeoMagic NM256AV/ZX chips.
+	  Say Y here to include support for NeoMagic NM256AV/ZX chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-nm256.
 
 config SND_RME32
 	tristate "RME Digi32, 32/8, 32 PRO"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for RME Digi32, Digi32 PRO and
-	  Digi32/8 (Sek'd Prodif32, Prodif96 and Prodif Gold) audio devices.
+	  Say Y to include support for RME Digi32, Digi32 PRO and
+	  Digi32/8 (Sek'd Prodif32, Prodif96 and Prodif Gold) audio
+	  devices.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-rme32.
 
 config SND_RME96
 	tristate "RME Digi96, 96/8, 96/8 PRO"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for RME Digi96, Digi96/8 and
-	  Digi96/8 PRO/PAD/PST.
+	  Say Y here to include support for RME Digi96, Digi96/8 and
+	  Digi96/8 PRO/PAD/PST soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-rme96.
 
 config SND_RME9652
 	tristate "RME Digi9652 (Hammerfall)"
 	depends on SND
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for RME Hammerfall (RME Digi9652 /
-	  Digi9636) soundcards.
+	  Say Y here to include support for RME Hammerfall (RME
+	  Digi9652/Digi9636) soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-rme9652.
 
 config SND_HDSP
 	tristate "RME Hammerfall DSP Audio"
@@ -166,17 +234,23 @@
 	select SND_RAWMIDI
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for RME Hammerfall DSP Audio
+	  Say Y here to include support for RME Hammerfall DSP Audio
 	  soundcards.
 
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-hdsp.
+
 config SND_TRIDENT
 	tristate "Trident 4D-Wave DX/NX; SiS 7018"
 	depends on SND
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Trident 4D-Wave DX/NX and
-	  SiS 7018 soundcards.
+	  Say Y here to include support for soundcards based on Trident
+	  4D-Wave DX/NX or SiS 7018 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-trident.
 
 config SND_YMFPCI
 	tristate "Yamaha YMF724/740/744/754"
@@ -185,9 +259,12 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Yamaha PCI audio chips - 
+	  Say Y here to include support for Yamaha PCI audio chips -
 	  YMF724, YMF724F, YMF740, YMF740C, YMF744, YMF754.
 
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ymfpci.
+
 config SND_ALS4000
 	tristate "Avance Logic ALS4000"
 	depends on SND
@@ -195,7 +272,11 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Avance Logic ALS4000.
+	  Say Y here to include support for soundcards based on Avance Logic
+	  ALS4000 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-als4000.
 
 config SND_CMIPCI
 	tristate "C-Media 8738, 8338"
@@ -204,8 +285,12 @@
 	select SND_MPU401_UART
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for C-Media CMI8338 and 8738 PCI
-	  soundcards.
+	  If you want to use soundcards based on C-Media CMI8338 or CMI8738
+	  chips, say Y here and read
+	  <file:Documentation/sound/alsa/CMIPCI.txt>.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-cmipci.
 
 config SND_ENS1370
 	tristate "(Creative) Ensoniq AudioPCI 1370"
@@ -213,7 +298,10 @@
 	select SND_RAWMIDI
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Ensoniq AudioPCI ES1370.
+	  Say Y here to include support for Ensoniq AudioPCI ES1370 chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ens1370.
 
 config SND_ENS1371
 	tristate "(Creative) Ensoniq AudioPCI 1371/1373"
@@ -221,9 +309,12 @@
 	select SND_RAWMIDI
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Ensoniq AudioPCI ES1371 and
+	  Say Y here to include support for Ensoniq AudioPCI ES1371 chips and
 	  Sound Blaster PCI 64 or 128 soundcards.
 
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ens1371.
+
 config SND_ES1938
 	tristate "ESS ES1938/1946/1969 (Solo-1)"
 	depends on SND
@@ -231,8 +322,11 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ESS Solo-1 (ES1938, ES1946, ES1969)
-	  soundcard.
+	  Say Y here to include support for soundcards based on ESS Solo-1
+	  (ES1938, ES1946, ES1969) chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-es1938.
 
 config SND_ES1968
 	tristate "ESS ES1968/1978 (Maestro-1/2/2E)"
@@ -240,14 +334,22 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ESS Maestro 1/2/2E.
+	  Say Y here to include support for soundcards based on ESS Maestro
+	  1/2/2E chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-es1968.
 
 config SND_MAESTRO3
 	tristate "ESS Allegro/Maestro3"
 	depends on SND
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ESS Maestro 3 (Allegro) soundcard.
+	  Say Y here to include support for soundcards based on ESS Maestro 3
+	  (Allegro) chips.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-maestro3.
 
 config SND_FM801
 	tristate "ForteMedia FM801"
@@ -256,15 +358,23 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ForteMedia FM801 based soundcards.
+	  Say Y here to include support for soundcards based on the ForteMedia
+	  FM801 chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-fm801.
 
 config SND_FM801_TEA575X
 	tristate "ForteMedia FM801 + TEA5757 tuner"
 	depends on SND_FM801
         select VIDEO_DEV
 	help
-	  Say 'Y' or 'M' to include support for ForteMedia FM801 based soundcards
-          with TEA5757 tuner connected to GPIO1-3 pins (Media Forte SF256-PCS-02).
+	  Say Y here to include support for soundcards based on the ForteMedia
+	  FM801 chip with a TEA5757 tuner connected to GPIO1-3 pins (Media
+	  Forte SF256-PCS-02).
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-fm801-tea575x.
 
 config SND_ICE1712
 	tristate "ICEnsemble ICE1712 (Envy24)"
@@ -272,10 +382,16 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ICE1712 (Envy24) based soundcards.
-	  Currently supported hardware is: MidiMan M Audio - Delta 1010(LT), Dio 2496,
-	  Delta 66/44, Audiophile 24/96; Hoontech SoundTrack DSP 24 (Value);
-	  TerraTec - EWX 24/96, EWS 88MT, EWS 88D, DMX 6Fire.
+	  Say Y here to include support for soundcards based on the
+	  ICE1712 (Envy24) chip.
+
+	  Currently supported hardware is: M-Audio Delta 1010(LT),
+	  DiO 2496, 66, 44, 410, Audiophile 24/96; Digigram VX442;
+	  TerraTec EWX 24/96, EWS 88MT, 88D, DMX 6Fire, Phase 88;
+	  Hoontech SoundTrack DSP 24/Value/Media7.1; Event EZ8.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ice1712.
 
 config SND_ICE1724
 	tristate "ICE/VT1724/1720 (Envy24HT/PT)"
@@ -283,27 +399,40 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for ICE/VT1724/1720 (Envy24HT/PT) based
-	  soundcards.
-	  Currently supported hardware is: MidiMan M Audio - Revolution 7.1,
-	  AMP Ltd AUDIO2000, Terratec Aureon 5.1 Sky/7.1, AudioTrak Prodigy 7.1.
+	  Say Y here to include support for soundcards based on
+	  ICE/VT1724/1720 (Envy24HT/PT) chips.
+
+	  Currently supported hardware is: AMP AUDIO2000; M-Audio
+	  Revolution 7.1; TerraTec Aureon 5.1 Sky, 7.1 Space/Universe;
+	  AudioTrak Prodigy 7.1; Pontis MS300; Albatron K8X800 Pro II;
+	  Chaintech ZNF3-150/250.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-ice1724.
 
 config SND_INTEL8X0
-	tristate "Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111"
+	tristate "Intel/SiS/nVidia/AMD/ALi AC97 Controller"
 	depends on SND
-	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Intel8x0 based soundcards,
-	  SiS 7012, AMD768/8111, NVidia NForce and ALi 5455 chips.
+	  Say Y here to include support for the integrated AC97 sound
+	  device on motherboards with Intel/SiS/nVidia/AMD chipsets, or
+	  ALi chipsets using the M5455 Audio Controller.  (There is a
+	  separate driver for ALi M5451 Audio Controllers.)
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-intel8x0.
 
 config SND_INTEL8X0M
-	tristate "Intel i8x0/MX440; SiS 7013; NForce; AMD768/8111 modems (EXPERIMENTAL)"
+	tristate "Intel/SiS/nVidia/AMD MC97 Modem (EXPERIMENTAL)"
 	depends on SND && EXPERIMENTAL
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Intel8x0, SiS 7013, NVidia NForce
-          and AMD768/8111 based modems.
+	  Say Y here to include support for the integrated MC97 modem on
+	  motherboards with Intel/SiS/nVidia/AMD chipsets.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-intel8x0m.
 
 config SND_SONICVIBES
 	tristate "S3 SonicVibes"
@@ -312,22 +441,33 @@
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for S3 SonicVibes based soundcards.
+	  Say Y here to include support for soundcards based on the S3
+	  SonicVibes chip.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-sonicvibes.
 
 config SND_VIA82XX
-	tristate "VIA 82C686A/B, 8233 South Bridge"
+	tristate "VIA 82C686A/B, 8233/8235 AC97 Controller"
 	depends on SND
 	select SND_MPU401_UART
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for VIA VT82C686A/B, VT8233 South Bridge.
+	  Say Y here to include support for the integrated AC97 sound
+	  device on motherboards with VIA chipsets.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-via82xx.
 
 config SND_VX222
 	tristate "Digigram VX222"
 	depends on SND
 	select SND_VX_LIB
 	help
-	  Say 'Y' or 'M' to include support for Digigram VX222 soundcards.
+	  Say Y here to include support for Digigram VX222 soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-vx222.
 
 endmenu
 
diff -Nru a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
--- a/sound/pci/ac97/ac97_codec.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ac97/ac97_codec.c	2004-09-26 10:55:59 -07:00
@@ -749,6 +749,14 @@
 static const snd_kcontrol_new_t snd_ac97_control_eapd =
 AC97_SINGLE("External Amplifier", AC97_POWERDOWN, 15, 1, 1);
 
+/* change the existing EAPD control as inverted */
+static void set_inv_eapd(ac97_t *ac97, snd_kcontrol_t *kctl)
+{
+	kctl->private_value = AC97_SINGLE_VALUE(AC97_POWERDOWN, 15, 1, 0);
+	snd_ac97_update_bits(ac97, AC97_POWERDOWN, (1<<15), (1<<15)); /* EAPD up */
+	ac97->scaps |= AC97_SCAP_INV_EAPD;
+}
+
 static int snd_ac97_spdif_mask_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
@@ -1559,7 +1567,7 @@
 			return err;
 	}
 
-	snd_ac97_write_cache(ac97, AC97_GENERAL_PURPOSE, 0x0000);
+	snd_ac97_update_bits(ac97, AC97_GENERAL_PURPOSE, ~AC97_GP_DRSS_MASK, 0x0000);
 
 	/* build 3D controls */
 	if (ac97->build_ops && ac97->build_ops->build_3d) {
@@ -1610,7 +1618,12 @@
 			return err;
 
 	if (snd_ac97_try_bit(ac97, AC97_POWERDOWN, 15)) {
-		if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_control_eapd, ac97))) < 0)
+		kctl = snd_ac97_cnew(&snd_ac97_control_eapd, ac97);
+		if (! kctl)
+			return -ENOMEM;
+		if (ac97->scaps & AC97_SCAP_INV_EAPD)
+			set_inv_eapd(ac97, kctl);
+		if ((err = snd_ctl_add(card, kctl)) < 0)
 			return err;
 	}
 
@@ -1646,6 +1659,9 @@
 {
 	unsigned int result = 0;
 
+	if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE)
+		snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS,
+				     AC97_EA_DRA, 0);
 	/* test a non-standard rate */
 	if (snd_ac97_test_rate(ac97, reg, shadow_reg, 11000))
 		result |= SNDRV_PCM_RATE_CONTINUOUS;
@@ -1664,6 +1680,23 @@
 		result |= SNDRV_PCM_RATE_44100;
 	if (snd_ac97_test_rate(ac97, reg, shadow_reg, 48000))
 		result |= SNDRV_PCM_RATE_48000;
+	if ((ac97->flags & AC97_DOUBLE_RATE) &&
+	    reg == AC97_PCM_FRONT_DAC_RATE) {
+		/* test standard double rates */
+		snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS,
+				     AC97_EA_DRA, AC97_EA_DRA);
+		if (snd_ac97_test_rate(ac97, reg, shadow_reg, 64000 / 2))
+			result |= SNDRV_PCM_RATE_64000;
+		if (snd_ac97_test_rate(ac97, reg, shadow_reg, 88200 / 2))
+			result |= SNDRV_PCM_RATE_88200;
+		if (snd_ac97_test_rate(ac97, reg, shadow_reg, 96000 / 2))
+			result |= SNDRV_PCM_RATE_96000;
+		/* some codecs don't support variable double rates */
+		if (!snd_ac97_test_rate(ac97, reg, shadow_reg, 76100 / 2))
+			result &= ~SNDRV_PCM_RATE_CONTINUOUS;
+		snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS,
+				     AC97_EA_DRA, 0);
+	}
 	*r_result = result;
 }
 
@@ -1726,6 +1759,22 @@
 	sprintf(name + strlen(name), " id %x", id & 0xff);
 }
 
+/**
+ * snd_ac97_get_short_name - retrieve codec name
+ * @ac97: the codec instance
+ *
+ * Returns the short identifying name of the codec.
+ */
+const char *snd_ac97_get_short_name(ac97_t *ac97)
+{
+	const ac97_codec_id_t *pid;
+
+	for (pid = snd_ac97_codec_ids; pid->id; pid++)
+		if (pid->id == (ac97->id & pid->mask))
+			return pid->name;
+	return "unknown codec";
+}
+
 
 /* wait for a while until registers are accessible after RESET
  * return 0 if ok, negative not ready
@@ -1733,9 +1782,10 @@
 static int ac97_reset_wait(ac97_t *ac97, int timeout, int with_modem)
 {
 	unsigned long end_time;
+	unsigned short val;
+
 	end_time = jiffies + timeout;
 	do {
-		unsigned short ext_mid;
 		
 		/* use preliminary reads to settle the communication */
 		snd_ac97_read(ac97, AC97_RESET);
@@ -1743,17 +1793,24 @@
 		snd_ac97_read(ac97, AC97_VENDOR_ID2);
 		/* modem? */
 		if (with_modem) {
-			ext_mid = snd_ac97_read(ac97, AC97_EXTENDED_MID);
-			if (ext_mid != 0xffff && (ext_mid & 1) != 0)
+			val = snd_ac97_read(ac97, AC97_EXTENDED_MID);
+			if (val != 0xffff && (val & 1) != 0)
+				return 0;
+		}
+		if (ac97->scaps & AC97_SCAP_DETECT_BY_VENDOR) {
+			/* probably only Xbox issue - all registers are read as zero */
+			val = snd_ac97_read(ac97, AC97_VENDOR_ID1);
+			if (val != 0 && val != 0xffff)
+				return 0;
+		} else {
+			/* because the PCM or MASTER volume registers can be modified,
+			 * the REC_GAIN register is used for tests
+			 */
+			/* test if we can write to the record gain volume register */
+			snd_ac97_write_cache(ac97, AC97_REC_GAIN, 0x8a05);
+			if ((snd_ac97_read(ac97, AC97_REC_GAIN) & 0x7fff) == 0x0a05)
 				return 0;
 		}
-		/* because the PCM or MASTER volume registers can be modified,
-		 * the REC_GAIN register is used for tests
-		 */
-		/* test if we can write to the record gain volume register */
-		snd_ac97_write_cache(ac97, AC97_REC_GAIN, 0x8a05);
-		if ((snd_ac97_read(ac97, AC97_REC_GAIN) & 0x7fff) == 0x0a05)
-			return 0;
 		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(1);
 	} while (time_after_eq(end_time, jiffies));
@@ -2006,11 +2063,20 @@
 		ac97->addr = (ac97->ext_mid & AC97_MEI_ADDR_MASK) >> AC97_MEI_ADDR_SHIFT;
 	if (ac97->ext_id & 0x0189)	/* L/R, MIC, SDAC, LDAC VRA support */
 		snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, ac97->ext_id & 0x0189);
+	if ((ac97->ext_id & AC97_EI_DRA) && bus->dra) {
+		/* Intel controllers require double rate data to be put in
+		 * slots 7+8, so let's hope the codec supports it. */
+		snd_ac97_update_bits(ac97, AC97_GENERAL_PURPOSE, AC97_GP_DRSS_MASK, AC97_GP_DRSS_78);
+		if ((snd_ac97_read(ac97, AC97_GENERAL_PURPOSE) & AC97_GP_DRSS_MASK) == AC97_GP_DRSS_78)
+			ac97->flags |= AC97_DOUBLE_RATE;
+	}
 	if (ac97->ext_id & AC97_EI_VRA) {	/* VRA support */
 		snd_ac97_determine_rates(ac97, AC97_PCM_FRONT_DAC_RATE, 0, &ac97->rates[AC97_RATES_FRONT_DAC]);
 		snd_ac97_determine_rates(ac97, AC97_PCM_LR_ADC_RATE, 0, &ac97->rates[AC97_RATES_ADC]);
 	} else {
 		ac97->rates[AC97_RATES_FRONT_DAC] = SNDRV_PCM_RATE_48000;
+		if (ac97->flags & AC97_DOUBLE_RATE)
+			ac97->rates[AC97_RATES_FRONT_DAC] |= SNDRV_PCM_RATE_96000;
 		ac97->rates[AC97_RATES_ADC] = SNDRV_PCM_RATE_48000;
 	}
 	if (ac97->ext_id & AC97_EI_SPDIF) {
@@ -2317,9 +2383,9 @@
 
 static int swap_headphone(ac97_t *ac97, int remove_master)
 {
+	if (ctl_find(ac97, "Headphone Playback Switch", NULL) == NULL)
+		return -ENOENT;
 	if (remove_master) {
-		if (ctl_find(ac97, "Headphone Playback Switch", NULL) == NULL)
-			return 0;
 		snd_ac97_remove_ctl(ac97, "Master Playback", "Switch");
 		snd_ac97_remove_ctl(ac97, "Master Playback", "Volume");
 	} else
@@ -2330,9 +2396,9 @@
 
 static int swap_surround(ac97_t *ac97)
 {
-	/* FIXME: error checks.. */
-	snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Switch");
-	snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Volume");
+	if (snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Switch") ||
+	    snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Volume"))
+		return -ENOENT;
 	return 0;
 }
 
@@ -2363,6 +2429,15 @@
 	return snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&snd_ac97_alc_jack_detect, ac97));
 }
 
+static int tune_inv_eapd(ac97_t *ac97)
+{
+	snd_kcontrol_t *kctl = ctl_find(ac97, "External Amplifier", NULL);
+	if (! kctl)
+		return -ENOENT;
+	set_inv_eapd(ac97, kctl);
+	return 0;
+}
+
 static int apply_quirk(ac97_t *ac97, int quirk)
 {
 	switch (quirk) {
@@ -2378,6 +2453,8 @@
 		return tune_ad_sharing(ac97);
 	case AC97_TUNE_ALC_JACK:
 		return tune_alc_jack(ac97);
+	case AC97_TUNE_INV_EAPD:
+		return tune_inv_eapd(ac97);
 	}
 	return -EINVAL;
 }
@@ -2413,6 +2490,8 @@
 			continue;
 		if ((! quirk->mask && quirk->device == ac97->subsystem_device) ||
 		    quirk->device == (quirk->mask & ac97->subsystem_device)) {
+			if (quirk->codec_id && quirk->codec_id != ac97->id)
+				continue;
 			snd_printdd("ac97 quirk for %s (%04x:%04x)\n", quirk->name, ac97->subsystem_vendor, ac97->subsystem_device);
 			result = apply_quirk(ac97, quirk->type);
 			if (result < 0)
@@ -2433,11 +2512,13 @@
 EXPORT_SYMBOL(snd_ac97_write_cache);
 EXPORT_SYMBOL(snd_ac97_update);
 EXPORT_SYMBOL(snd_ac97_update_bits);
+EXPORT_SYMBOL(snd_ac97_get_short_name);
 EXPORT_SYMBOL(snd_ac97_bus);
 EXPORT_SYMBOL(snd_ac97_mixer);
 EXPORT_SYMBOL(snd_ac97_pcm_assign);
 EXPORT_SYMBOL(snd_ac97_pcm_open);
 EXPORT_SYMBOL(snd_ac97_pcm_close);
+EXPORT_SYMBOL(snd_ac97_pcm_double_rate_rules);
 EXPORT_SYMBOL(snd_ac97_tune_hardware);
 EXPORT_SYMBOL(snd_ac97_set_rate);
 #ifdef CONFIG_PM
diff -Nru a/sound/pci/ac97/ac97_pcm.c b/sound/pci/ac97/ac97_pcm.c
--- a/sound/pci/ac97/ac97_pcm.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ac97/ac97_pcm.c	2004-09-26 10:55:59 -07:00
@@ -93,54 +93,52 @@
   },
 },
 {
-  /* FIXME: double rates */
+  /* double rates */
   {
-  	/* 3&4 front, 7&8 rear, 6&9 center/lfe */
+  	/* 3&4 front, 7&8 front (t+1) */
 	AC97_PCM_FRONT_DAC_RATE,	/* slot 3 */
 	AC97_PCM_FRONT_DAC_RATE,	/* slot 4 */
 	0xff,				/* slot 5 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 6 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 7 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 8 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 9 */
+	0xff,				/* slot 6 */
+	AC97_PCM_FRONT_DAC_RATE,	/* slot 7 */
+	AC97_PCM_FRONT_DAC_RATE,	/* slot 8 */
+	0xff,				/* slot 9 */
 	0xff,				/* slot 10 */
 	0xff,				/* slot 11 */
   },
   {
-  	/* 7&8 front, 6&9 rear, 10&11 center/lfe */
+	/* not specified in the specification */
 	0xff,				/* slot 3 */
 	0xff,				/* slot 4 */
 	0xff,				/* slot 5 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 6 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 7 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 8 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 9 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 10 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 11 */
+	0xff,				/* slot 6 */
+	0xff,				/* slot 7 */
+	0xff,				/* slot 8 */
+	0xff,				/* slot 9 */
+	0xff,				/* slot 10 */
+	0xff,				/* slot 11 */
   },
   {
-  	/* 6&9 front, 10&11 rear, 3&4 center/lfe */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 3 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 4 */
+	0xff,				/* slot 3 */
+	0xff,				/* slot 4 */
 	0xff,				/* slot 5 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 6 */
+	0xff,				/* slot 6 */
 	0xff,				/* slot 7 */
 	0xff,				/* slot 8 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 9 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 10 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 11 */
+	0xff,				/* slot 9 */
+	0xff,				/* slot 10 */
+	0xff,				/* slot 11 */
   },
   {
-  	/* 10&11 front, 3&4 rear, 7&8 center/lfe */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 3 */
-	AC97_PCM_SURR_DAC_RATE,		/* slot 4 */
+	0xff,				/* slot 3 */
+	0xff,				/* slot 4 */
 	0xff,				/* slot 5 */
 	0xff,				/* slot 6 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 7 */
-	AC97_PCM_LFE_DAC_RATE,		/* slot 8 */
+	0xff,				/* slot 7 */
+	0xff,				/* slot 8 */
 	0xff,				/* slot 9 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 10 */
-	AC97_PCM_FRONT_DAC_RATE,	/* slot 11 */
+	0xff,				/* slot 10 */
+	0xff,				/* slot 11 */
   }
 }};
 
@@ -180,6 +178,7 @@
 	if (! (ac97->ext_id & AC97_EI_SPDIF))
 		return -ENODEV;
 
+	/* TODO: double rate support */
 	if (ac97->flags & AC97_CS_SPDIF) {
 		switch (rate) {
 		case 48000: bits = 0; break;
@@ -257,10 +256,19 @@
  *
  * Returns zero if successful, or a negative error code on failure.
  */
-int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned short rate)
+int snd_ac97_set_rate(ac97_t *ac97, int reg, unsigned int rate)
 {
+	int dbl;
 	unsigned int tmp;
 	
+	dbl = rate > 48000;
+	if (dbl) {
+		if (!(ac97->flags & AC97_DOUBLE_RATE))
+			return -EINVAL;
+		if (reg != AC97_PCM_FRONT_DAC_RATE)
+			return -EINVAL;
+	}
+
 	switch (reg) {
 	case AC97_PCM_MIC_ADC_RATE:
 		if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRM) == 0)	/* MIC VRA */
@@ -270,7 +278,7 @@
 	case AC97_PCM_FRONT_DAC_RATE:
 	case AC97_PCM_LR_ADC_RATE:
 		if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRA) == 0)	/* VRA */
-			if (rate != 48000)
+			if (rate != 48000 && rate != 96000)
 				return -EINVAL;
 		break;
 	case AC97_PCM_SURR_DAC_RATE:
@@ -287,9 +295,14 @@
 	default:
 		return -EINVAL;
 	}
-	tmp = ((unsigned int)rate * ac97->bus->clock) / 48000;
+	if (dbl)
+		rate /= 2;
+	tmp = (rate * ac97->bus->clock) / 48000;
 	if (tmp > 65535)
 		return -EINVAL;
+	if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE)
+		snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS,
+				     AC97_EA_DRA, dbl ? AC97_EA_DRA : 0);
 	snd_ac97_update(ac97, reg, tmp & 0xffff);
 	snd_ac97_read(ac97, reg);
 	return 0;
@@ -401,6 +414,9 @@
 		}
 		rates &= pcm->r[dbl].codec[cidx]->rates[idx];
 	}
+	if (!dbl)
+		rates &= ~(SNDRV_PCM_RATE_64000 | SNDRV_PCM_RATE_88200 |
+			   SNDRV_PCM_RATE_96000);
 	return rates;
 }
 
@@ -447,7 +463,6 @@
 			}
 		}
 	}
-	/* FIXME: add double rate allocation */
 	/* first step - exclusive devices */
 	for (i = 0; i < pcms_count; i++) {
 		pcm = &pcms[i];
@@ -498,6 +513,26 @@
 			rpcm->r[0].slots |= tmp;
 			rpcm->rates &= rates;
 		}
+		/* for double rate, we check the first codec only */
+		if (pcm->stream == SNDRV_PCM_STREAM_PLAYBACK &&
+		    bus->codec[0] && (bus->codec[0]->flags & AC97_DOUBLE_RATE) &&
+		    rate_table[pcm->stream][0] == 0) {
+			tmp = (1<<AC97_SLOT_PCM_LEFT) | (1<<AC97_SLOT_PCM_RIGHT) |
+			      (1<<AC97_SLOT_PCM_LEFT_0) | (1<<AC97_SLOT_PCM_RIGHT_0);
+			if ((tmp & pcm->r[1].slots) == tmp) {
+				rpcm->r[1].slots = tmp;
+				rpcm->r[1].rslots[0] = tmp;
+				rpcm->r[1].rate_table[0] = 0;
+				rpcm->r[1].codec[0] = bus->codec[0];
+				if (pcm->exclusive)
+					avail_slots[pcm->stream][0] &= ~tmp;
+				if (bus->no_vra)
+					rates = SNDRV_PCM_RATE_96000;
+				else
+					rates = get_rates(rpcm, 0, tmp, 1);
+				rpcm->rates |= rates;
+			}
+		}
 		if (rpcm->rates == ~0)
 			rpcm->rates = 0; /* not used */
 	}
@@ -519,13 +554,12 @@
 		      enum ac97_pcm_cfg cfg, unsigned short slots)
 {
 	ac97_bus_t *bus;
-	int i, cidx, r = 0, ok_flag;
+	int i, cidx, r, ok_flag;
 	unsigned int reg_ok = 0;
 	unsigned char reg;
 	int err = 0;
 
-	if (rate > 48000)	/* FIXME: add support for double rate */
-		return -EINVAL;
+	r = rate > 48000;
 	bus = pcm->bus;
 	if (cfg == AC97_PCM_CFG_SPDIF) {
 		int err;
@@ -613,4 +647,56 @@
 	pcm->aslots = 0;
 	spin_unlock_irq(&pcm->bus->bus_lock);
 	return 0;
+}
+
+static int double_rate_hw_constraint_rate(snd_pcm_hw_params_t *params,
+					  snd_pcm_hw_rule_t *rule)
+{
+	snd_interval_t *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
+	if (channels->min > 2) {
+		static const snd_interval_t single_rates = {
+			.min = 1,
+			.max = 48000,
+		};
+		snd_interval_t *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
+		return snd_interval_refine(rate, &single_rates);
+	}
+	return 0;
+}
+
+static int double_rate_hw_constraint_channels(snd_pcm_hw_params_t *params,
+					      snd_pcm_hw_rule_t *rule)
+{
+	snd_interval_t *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
+	if (rate->min > 48000) {
+		static const snd_interval_t double_rate_channels = {
+			.min = 2,
+			.max = 2,
+		};
+		snd_interval_t *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
+		return snd_interval_refine(channels, &double_rate_channels);
+	}
+	return 0;
+}
+
+/**
+ * snd_ac97_pcm_double_rate_rules - set double rate constraints
+ * @runtime: the runtime of the ac97 front playback pcm
+ *
+ * Installs the hardware constraint rules to prevent using double rates and
+ * more than two channels at the same time.
+ */
+int snd_ac97_pcm_double_rate_rules(snd_pcm_runtime_t *runtime)
+{
+	int err;
+
+	err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
+				  double_rate_hw_constraint_rate, NULL,
+				  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
+	if (err < 0)
+		return err;
+	err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
+				  double_rate_hw_constraint_channels, NULL,
+				  SNDRV_PCM_HW_PARAM_RATE, -1);
+	return err;
 }
diff -Nru a/sound/pci/ac97/ac97_proc.c b/sound/pci/ac97/ac97_proc.c
--- a/sound/pci/ac97/ac97_proc.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ac97/ac97_proc.c	2004-09-26 10:55:59 -07:00
@@ -75,6 +75,7 @@
 	static const char *spdif_slots[4] = { " SPDIF=3/4", " SPDIF=7/8", " SPDIF=6/9", " SPDIF=res" };
 	static const char *spdif_rates[4] = { " Rate=44.1kHz", " Rate=res", " Rate=48kHz", " Rate=32kHz" };
 	static const char *spdif_rates_cs4205[4] = { " Rate=48kHz", " Rate=44.1kHz", " Rate=res", " Rate=res" };
+	static const char *double_rate_slots[4] = { "10/11", "7/8", "reserved", "reserved" };
 
 	snd_ac97_get_name(NULL, ac97->id, name, 0);
 	snd_iprintf(buffer, "%d-%d/%d: %s\n\n", ac97->addr, ac97->num, subidx, name);
@@ -137,6 +138,9 @@
 		    val & 0x0200 ? "Mic" : "MIX",
 		    val & 0x0100 ? "Mic2" : "Mic1",
 		    val & 0x0080 ? "on" : "off");
+	if (ac97->ext_id & AC97_EI_DRA)
+		snd_iprintf(buffer, "Double rate slots: %s\n",
+			    double_rate_slots[(val >> 10) & 3]);
 
 	ext = snd_ac97_read(ac97, AC97_EXTENDED_ID);
 	if (ext == 0)
diff -Nru a/sound/pci/atiixp.c b/sound/pci/atiixp.c
--- a/sound/pci/atiixp.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/atiixp.c	2004-09-26 10:55:59 -07:00
@@ -1516,7 +1516,7 @@
 	}
 	chip->addr = pci_resource_start(pci, 0);
 	chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
-	if (chip->remap_addr == 0) {
+	if (chip->remap_addr == NULL) {
 		snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
 		snd_atiixp_free(chip);
 		return -EIO;
@@ -1585,8 +1585,10 @@
 
 	snd_atiixp_chip_start(chip);
 
-	sprintf(card->longname, "%s rev %x at 0x%lx, irq %i",
-		card->shortname, revision, chip->addr, chip->irq);
+	snprintf(card->longname, sizeof(card->longname),
+		 "%s rev %x with %s at %#lx, irq %i", card->shortname, revision,
+		 chip->ac97[0] ? snd_ac97_get_short_name(chip->ac97[0]) : "?",
+		 chip->addr, chip->irq);
 
 	snd_card_set_pm_callback(card, snd_atiixp_suspend, snd_atiixp_resume, chip);
 
diff -Nru a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c
--- a/sound/pci/atiixp_modem.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/atiixp_modem.c	2004-09-26 10:55:59 -07:00
@@ -1238,7 +1238,7 @@
 	}
 	chip->addr = pci_resource_start(pci, 0);
 	chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
-	if (chip->remap_addr == 0) {
+	if (chip->remap_addr == NULL) {
 		snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
 		snd_atiixp_free(chip);
 		return -EIO;
diff -Nru a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c
--- a/sound/pci/au88x0/au88x0.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/au88x0/au88x0.c	2004-09-26 10:55:59 -07:00
@@ -216,7 +216,7 @@
 	vortex_core_shutdown(chip);
       core_out:
 	//FIXME: the type of chip->mmio might need to be changed??
-	iounmap((void *)chip->mmio);
+	iounmap(chip->mmio);
       ioremap_out:
 	pci_release_regions(chip->pci_dev);
       regions_out:
@@ -316,7 +316,7 @@
 #endif
 
 	// (5)
-	strcpy(card->driver, "Aureal Vortex");
+	strcpy(card->driver, CARD_NAME_SHORT);
 	strcpy(card->shortname, CARD_NAME_SHORT);
 	sprintf(card->longname, "%s at 0x%lx irq %i",
 		card->shortname, chip->io, chip->irq);
diff -Nru a/sound/pci/au88x0/au88x0.h b/sound/pci/au88x0/au88x0.h
--- a/sound/pci/au88x0/au88x0.h	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/au88x0/au88x0.h	2004-09-26 10:55:59 -07:00
@@ -169,7 +169,7 @@
 
 	/* PCI hardware resources */
 	unsigned long io;
-	unsigned long *mmio;
+	unsigned long __iomem *mmio;
 	unsigned int irq;
 	spinlock_t lock;
 
diff -Nru a/sound/pci/bt87x.c b/sound/pci/bt87x.c
--- a/sound/pci/bt87x.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/bt87x.c	2004-09-26 10:55:59 -07:00
@@ -265,7 +265,7 @@
 				   status, pci_status);
 		}
 	}
-	if (status & INT_RISCI) {
+	if ((status & INT_RISCI) && (chip->reg_control & CTL_ACAP_EN)) {
 		int current_block, irq_block;
 
 		/* assume that exactly one line has been recorded */
diff -Nru a/sound/pci/cs4281.c b/sound/pci/cs4281.c
--- a/sound/pci/cs4281.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/cs4281.c	2004-09-26 10:55:59 -07:00
@@ -464,8 +464,8 @@
 struct snd_cs4281 {
 	int irq;
 
-	unsigned long ba0;		/* virtual (accessible) address */
-	unsigned long ba1;		/* virtual (accessible) address */
+	void __iomem *ba0;		/* virtual (accessible) address */
+	void __iomem *ba1;		/* virtual (accessible) address */
 	unsigned long ba0_addr;
 	unsigned long ba1_addr;
 
@@ -1359,9 +1359,9 @@
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
 	if (chip->ba0)
-		iounmap((void *) chip->ba0);
+		iounmap(chip->ba0);
 	if (chip->ba1)
-		iounmap((void *) chip->ba1);
+		iounmap(chip->ba1);
 	pci_release_regions(chip->pci);
 
 	kfree(chip);
@@ -1423,8 +1423,8 @@
 	}
 	chip->irq = pci->irq;
 
-	chip->ba0 = (unsigned long) ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0));
-	chip->ba1 = (unsigned long) ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1));
+	chip->ba0 = ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0));
+	chip->ba1 = ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1));
 	if (!chip->ba0 || !chip->ba1) {
 		snd_cs4281_free(chip);
 		return -ENOMEM;
@@ -1952,8 +1952,8 @@
 		return err;
 	}
 	if ((err = snd_opl3_create(card,
-				   (chip->ba0 + BA0_B0AP) >> 2,
-				   (chip->ba0 + BA0_B1AP) >> 2,
+				   (unsigned long)(chip->ba0 + BA0_B0AP),
+				   (unsigned long)(chip->ba0 + BA0_B1AP),
 				   OPL3_HW_OPL3_CS4281, 1, &opl3)) < 0) {
 		snd_card_free(card);
 		return err;
diff -Nru a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
--- a/sound/pci/cs46xx/cs46xx_lib.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/cs46xx/cs46xx_lib.c	2004-09-26 10:55:59 -07:00
@@ -203,12 +203,6 @@
 
 	val = snd_cs46xx_codec_read(chip, reg, codec_index);
 
-	/* HACK: voyetra uses EAPD bit in the reverse way.
-	 * we flip the bit to show the mixer status correctly
-	 */
-	if (reg == AC97_POWERDOWN && chip->amplifier_ctrl == amp_voyetra)
-		val ^= 0x8000;
-
 	return val;
 }
 
@@ -289,12 +283,6 @@
 		   codec_index == CS46XX_SECONDARY_CODEC_INDEX,
 		   return);
 
-	/* HACK: voyetra uses EAPD bit in the reverse way.
-	 * we flip the bit to show the mixer status correctly
-	 */
-	if (reg == AC97_POWERDOWN && chip->amplifier_ctrl == amp_voyetra)
-		val ^= 0x8000;
-
 	snd_cs46xx_codec_write(chip, reg, val, codec_index);
 }
 
@@ -308,7 +296,7 @@
                         unsigned long offset,
                         unsigned long len)
 {
-	unsigned long dst;
+	void __iomem *dst;
 	unsigned int bank = offset >> 16;
 	offset = offset & 0xffff;
 
@@ -336,7 +324,7 @@
                          unsigned long offset,
                          unsigned long len) 
 {
-	unsigned long dst;
+	void __iomem *dst;
 	unsigned int bank = offset >> 16;
 	offset = offset & 0xffff;
 
@@ -2405,6 +2393,8 @@
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
 	ac97.private_free = snd_cs46xx_mixer_free_ac97;
+	if (chip->amplifier_ctrl == amp_voyetra)
+		ac97.scaps = AC97_SCAP_INV_EAPD;
 
 	snd_cs46xx_codec_write(chip, AC97_MASTER, 0x8000,
 			       CS46XX_PRIMARY_CODEC_INDEX);
@@ -2902,7 +2892,7 @@
 	for (idx = 0; idx < 5; idx++) {
 		snd_cs46xx_region_t *region = &chip->region.idx[idx];
 		if (region->remap_addr)
-			iounmap((void *) region->remap_addr);
+			iounmap(region->remap_addr);
 		if (region->resource) {
 			release_resource(region->resource);
 			kfree_nocheck(region->resource);
@@ -3868,8 +3858,8 @@
 			snd_cs46xx_free(chip);
 			return -EBUSY;
 		}
-		region->remap_addr = (unsigned long) ioremap_nocache(region->base, region->size);
-		if (region->remap_addr == 0) {
+		region->remap_addr = ioremap_nocache(region->base, region->size);
+		if (region->remap_addr == NULL) {
 			snd_printk("%s ioremap problem\n", region->name);
 			snd_cs46xx_free(chip);
 			return -ENOMEM;
diff -Nru a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
--- a/sound/pci/cs46xx/dsp_spos.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/cs46xx/dsp_spos.c	2004-09-26 10:55:59 -07:00
@@ -514,7 +514,7 @@
 	cs46xx_t *chip = entry->private_data;
 	dsp_spos_instance_t * ins = chip->dsp_spos_instance;
 	int i,j,col;
-	unsigned long dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
+	void __iomem *dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
 
 	down(&chip->spos_mutex);
 	snd_iprintf(buffer, "TASK TREES:\n");
@@ -573,7 +573,7 @@
 	cs46xx_t *chip = entry->private_data;
 	/*dsp_spos_instance_t * ins = chip->dsp_spos_instance; */
 	unsigned int i,col = 0;
-	unsigned long dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
+	void __iomem *dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
 	symbol_entry_t * symbol; 
 
 	for (i = 0;i < DSP_PARAMETER_BYTE_SIZE; i += sizeof(u32),col ++) {
@@ -599,7 +599,7 @@
 {
 	cs46xx_t *chip = entry->private_data;
 	int i,col = 0;
-	unsigned long dst = chip->region.idx[2].remap_addr;
+	void __iomem *dst = chip->region.idx[2].remap_addr;
 
 	snd_iprintf(buffer,"PCMREADER:\n");
 	for (i = PCM_READER_BUF1;i < PCM_READER_BUF1 + 0x30; i += sizeof(u32),col ++) {
@@ -909,7 +909,7 @@
 static int debug_tree;
 static void _dsp_create_task_tree (cs46xx_t *chip,u32 * task_data, u32  dest, int size)
 {
-	unsigned long spdst = chip->region.idx[1].remap_addr + 
+	void __iomem *spdst = chip->region.idx[1].remap_addr + 
 		DSP_PARAMETER_BYTE_OFFSET + dest * sizeof(u32);
 	int i;
 
@@ -923,7 +923,7 @@
 static int debug_scb;
 static void _dsp_create_scb (cs46xx_t *chip,u32 * scb_data, u32  dest)
 {
-	unsigned long spdst = chip->region.idx[1].remap_addr + 
+	void __iomem *spdst = chip->region.idx[1].remap_addr + 
 		DSP_PARAMETER_BYTE_OFFSET + dest * sizeof(u32);
 	int i;
 
diff -Nru a/sound/pci/cs46xx/dsp_spos_scb_lib.c b/sound/pci/cs46xx/dsp_spos_scb_lib.c
--- a/sound/pci/cs46xx/dsp_spos_scb_lib.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c	2004-09-26 10:55:59 -07:00
@@ -71,7 +71,7 @@
 	dsp_spos_instance_t * ins;
 	cs46xx_t *chip = scb_info->chip;
 	int j,col;
-	unsigned long dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
+	void __iomem *dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
 
 	ins = chip->dsp_spos_instance;
 
@@ -162,7 +162,7 @@
 
 static void _dsp_clear_sample_buffer (cs46xx_t *chip, u32 sample_buffer_addr, int dword_count) 
 {
-	unsigned long dst = chip->region.idx[2].remap_addr + sample_buffer_addr;
+	void __iomem *dst = chip->region.idx[2].remap_addr + sample_buffer_addr;
 	int i;
   
 	for (i = 0; i < dword_count ; ++i ) {
diff -Nru a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
--- a/sound/pci/emu10k1/emufx.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/emu10k1/emufx.c	2004-09-26 10:55:59 -07:00
@@ -480,7 +480,7 @@
 static void snd_emu10k1_audigy_write_op(emu10k1_fx8010_code_t *icode, unsigned int *ptr,
 					u32 op, u32 r, u32 a, u32 x, u32 y)
 {
-	snd_assert(*ptr < 512, return);
+	snd_assert(*ptr < 1024, return);
 	set_bit(*ptr, icode->code_valid);
 	icode->code[*ptr    ][0] = ((x & 0x7ff) << 12) | (y & 0x7ff);
 	icode->code[(*ptr)++][1] = ((op & 0x0f) << 24) | ((r & 0x7ff) << 12) | (a & 0x7ff);
@@ -505,7 +505,7 @@
 {
 	int gpr;
 
-	for (gpr = 0; gpr < 0x100; gpr++) {
+	for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) {
 		if (!test_bit(gpr, icode->gpr_valid))
 			continue;
 		snd_emu10k1_ptr_write(emu, emu->gpr_base + gpr, 0, icode->gpr_map[gpr]);
@@ -516,7 +516,7 @@
 {
 	int gpr;
 
-	for (gpr = 0; gpr < 0x100; gpr++) {
+	for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) {
 		set_bit(gpr, icode->gpr_valid);
 		icode->gpr_map[gpr] = snd_emu10k1_ptr_read(emu, emu->gpr_base + gpr, 0);
 	}
@@ -526,11 +526,16 @@
 {
 	int tram;
 
-	for (tram = 0; tram < 0xa0; tram++) {
+	for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) {
 		if (!test_bit(tram, icode->tram_valid))
 			continue;
 		snd_emu10k1_ptr_write(emu, TANKMEMDATAREGBASE + tram, 0, icode->tram_data_map[tram]);
-		snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, icode->tram_addr_map[tram]);
+		if (!emu->audigy)
+			snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, icode->tram_addr_map[tram]);
+		else {
+			snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, icode->tram_addr_map[tram] << 12);
+			snd_emu10k1_ptr_write(emu, A_TANKMEMCTLREGBASE + tram, 0, icode->tram_addr_map[tram] >> 20);
+		}
 	}
 }
 
@@ -539,10 +544,15 @@
 	int tram;
 
 	memset(icode->tram_valid, 0, sizeof(icode->tram_valid));
-	for (tram = 0; tram < 0xa0; tram++) {
+	for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) {
 		set_bit(tram, icode->tram_valid);
 		icode->tram_data_map[tram] = snd_emu10k1_ptr_read(emu, TANKMEMDATAREGBASE + tram, 0);
-		icode->tram_addr_map[tram] = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0);
+		if (!emu->audigy)
+			icode->tram_addr_map[tram] = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0);
+		else {
+			icode->tram_addr_map[tram] = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0) >> 12;
+			icode->tram_addr_map[tram] |= snd_emu10k1_ptr_read(emu, A_TANKMEMCTLREGBASE + tram, 0) << 20;
+		}
 	}
 }
 
@@ -550,7 +560,7 @@
 {
 	u32 pc;
 
-	for (pc = 0; pc < 512; pc++) {
+	for (pc = 0; pc < (emu->audigy ? 1024 : 512); pc++) {
 		if (!test_bit(pc, icode->code_valid))
 			continue;
 		snd_emu10k1_efx_write(emu, pc * 2, icode->code[pc][0]);
@@ -563,7 +573,7 @@
 	u32 pc;
 
 	memset(icode->code_valid, 0, sizeof(icode->code_valid));
-	for (pc = 0; pc < 512; pc++) {
+	for (pc = 0; pc < (emu->audigy ? 1024 : 512); pc++) {
 		set_bit(pc, icode->code_valid);
 		icode->code[pc][0] = snd_emu10k1_efx_read(emu, pc * 2);
 		icode->code[pc][1] = snd_emu10k1_efx_read(emu, pc * 2 + 1);
@@ -962,8 +972,12 @@
 	}
 
 	/* clear free GPRs */
-	for (i = 0; i < 256; i++)
+	for (i = 0; i < 512; i++)
 		set_bit(i, icode->gpr_valid);
+		
+	/* clear TRAM data & address lines */
+	for (i = 0; i < 256; i++)
+		set_bit(i, icode->tram_valid);
 
 	strcpy(icode->name, "Audigy DSP code for ALSA");
 	ptr = 0;
@@ -1311,7 +1325,7 @@
 		goto __err;
 	}
 	/* clear remaining instruction memory */
-	while (ptr < 0x200)
+	while (ptr < 0x400)
 		A_OP(icode, &ptr, 0x0f, 0xc0, 0xc0, 0xcf, 0xc0);
 
 	seg = snd_enter_user();
@@ -2067,8 +2081,6 @@
 		kfree(icode);
 		return res;
 	case SNDRV_EMU10K1_IOCTL_PCM_POKE:
-		if (emu->audigy)
-			return -EINVAL;
 		ipcm = (emu10k1_fx8010_pcm_t *)kmalloc(sizeof(*ipcm), GFP_KERNEL);
 		if (ipcm == NULL)
 			return -ENOMEM;
@@ -2080,8 +2092,6 @@
 		kfree(ipcm);
 		return res;
 	case SNDRV_EMU10K1_IOCTL_PCM_PEEK:
-		if (emu->audigy)
-			return -EINVAL;
 		ipcm = kcalloc(1, sizeof(*ipcm), GFP_KERNEL);
 		if (ipcm == NULL)
 			return -ENOMEM;
@@ -2097,8 +2107,6 @@
 		kfree(ipcm);
 		return res;
 	case SNDRV_EMU10K1_IOCTL_TRAM_SETUP:
-		if (emu->audigy)
-			return -EINVAL;
 		if (!capable(CAP_SYS_ADMIN))
 			return -EPERM;
 		if (get_user(addr, (unsigned int __user *)argp))
diff -Nru a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
--- a/sound/pci/emu10k1/emupcm.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/emu10k1/emupcm.c	2004-09-26 10:55:59 -07:00
@@ -1092,6 +1092,7 @@
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	unsigned int nval[2], bits;
 	int nefx = emu->audigy ? 64 : 32;
+	int nefxb = emu->audigy ? 7 : 6;
 	int change, idx;
 	
 	nval[0] = nval[1] = 0;
@@ -1100,8 +1101,14 @@
 			nval[idx / 32] |= 1 << (idx % 32);
 			bits++;
 		}
-	if (bits != 1 && bits != 2 && bits != 4 && bits != 8)
+		
+	for (idx = 0; idx < nefxb; idx++)
+		if (1 << idx == bits)
+			break;
+	
+	if (idx >= nefxb)
 		return -EINVAL;
+
 	spin_lock_irq(&emu->reg_lock);
 	change = (nval[0] != emu->efx_voices_mask[0]) ||
 		(nval[1] != emu->efx_voices_mask[1]);
diff -Nru a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c
--- a/sound/pci/emu10k1/emuproc.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/emu10k1/emuproc.c	2004-09-26 10:55:59 -07:00
@@ -229,7 +229,7 @@
 
 	snd_iprintf(buffer, "FX8010 Instruction List '%s'\n", emu->fx8010.name);
 	snd_iprintf(buffer, "  Code dump      :\n");
-	for (pc = 0; pc < 512; pc++) {
+	for (pc = 0; pc < (emu->audigy ? 1024 : 512); pc++) {
 		u32 low, high;
 			
 		low = snd_emu10k1_efx_read(emu, pc * 2);
@@ -256,9 +256,13 @@
 }
 
 #define TOTAL_SIZE_GPR		(0x100*4)
+#define A_TOTAL_SIZE_GPR	(0x200*4)
 #define TOTAL_SIZE_TANKMEM_DATA	(0xa0*4)
 #define TOTAL_SIZE_TANKMEM_ADDR (0xa0*4)
+#define A_TOTAL_SIZE_TANKMEM_DATA (0x100*4)
+#define A_TOTAL_SIZE_TANKMEM_ADDR (0x100*4)
 #define TOTAL_SIZE_CODE		(0x200*8)
+#define A_TOTAL_SIZE_CODE	(0x400*8)
 
 static long snd_emu10k1_fx8010_read(snd_info_entry_t *entry, void *file_private_data,
 				    struct file *file, char __user *buf,
@@ -267,12 +271,12 @@
 	long size;
 	emu10k1_t *emu = entry->private_data;
 	unsigned int offset;
+	int tram_addr = 0;
 	
 	if (!strcmp(entry->name, "fx8010_tram_addr")) {
-		if (emu->audigy) return -EINVAL;
 		offset = TANKMEMADDRREGBASE;
+		tram_addr = 1;
 	} else if (!strcmp(entry->name, "fx8010_tram_data")) {
-		if (emu->audigy) return -EINVAL;
 		offset = TANKMEMDATAREGBASE;
 	} else if (!strcmp(entry->name, "fx8010_code")) {
 		offset = emu->audigy ? A_MICROCODEBASE : MICROCODEBASE;
@@ -289,7 +293,11 @@
 		if ((tmp = kmalloc(size + 8, GFP_KERNEL)) == NULL)
 			return -ENOMEM;
 		for (idx = 0; idx < ((pos & 3) + size + 3) >> 2; idx++)
-			tmp[idx] = snd_emu10k1_ptr_read(emu, offset + idx + (pos >> 2), 0);
+			if (tram_addr && emu->audigy) {
+				tmp[idx] = snd_emu10k1_ptr_read(emu, offset + idx + (pos >> 2), 0) >> 11;
+				tmp[idx] |= snd_emu10k1_ptr_read(emu, 0x100 + idx + (pos >> 2), 0) << 20;
+			} else 
+				tmp[idx] = snd_emu10k1_ptr_read(emu, offset + idx + (pos >> 2), 0);
 		if (copy_to_user(buf, ((char *)tmp) + (pos & 3), size))
 			res = -EFAULT;
 		else {
@@ -316,35 +324,35 @@
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
 		entry->mode = S_IFREG | S_IRUGO /*| S_IWUSR*/;
-		entry->size = TOTAL_SIZE_GPR;
+		entry->size = emu->audigy ? A_TOTAL_SIZE_GPR : TOTAL_SIZE_GPR;
 		entry->c.ops = &snd_emu10k1_proc_ops_fx8010;
 	}
-	if (!emu->audigy && ! snd_card_proc_new(emu->card, "fx8010_tram_data", &entry)) {
+	if (! snd_card_proc_new(emu->card, "fx8010_tram_data", &entry)) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
 		entry->mode = S_IFREG | S_IRUGO /*| S_IWUSR*/;
-		entry->size = TOTAL_SIZE_TANKMEM_DATA;
+		entry->size = emu->audigy ? A_TOTAL_SIZE_TANKMEM_DATA : TOTAL_SIZE_TANKMEM_DATA ;
 		entry->c.ops = &snd_emu10k1_proc_ops_fx8010;
 	}
-	if (!emu->audigy && ! snd_card_proc_new(emu->card, "fx8010_tram_addr", &entry)) {
+	if (! snd_card_proc_new(emu->card, "fx8010_tram_addr", &entry)) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
 		entry->mode = S_IFREG | S_IRUGO /*| S_IWUSR*/;
-		entry->size = TOTAL_SIZE_TANKMEM_ADDR;
+		entry->size = emu->audigy ? A_TOTAL_SIZE_TANKMEM_ADDR : TOTAL_SIZE_TANKMEM_ADDR ;
 		entry->c.ops = &snd_emu10k1_proc_ops_fx8010;
 	}
 	if (! snd_card_proc_new(emu->card, "fx8010_code", &entry)) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
 		entry->mode = S_IFREG | S_IRUGO /*| S_IWUSR*/;
-		entry->size = TOTAL_SIZE_CODE;
+		entry->size = emu->audigy ? A_TOTAL_SIZE_CODE : TOTAL_SIZE_CODE;
 		entry->c.ops = &snd_emu10k1_proc_ops_fx8010;
 	}
 	if (! snd_card_proc_new(emu->card, "fx8010_acode", &entry)) {
 		entry->content = SNDRV_INFO_CONTENT_TEXT;
 		entry->private_data = emu;
 		entry->mode = S_IFREG | S_IRUGO /*| S_IWUSR*/;
-		entry->c.text.read_size = 64*1024;
+		entry->c.text.read_size = 128*1024;
 		entry->c.text.read = snd_emu10k1_proc_acode_read;
 	}
 	return 0;
diff -Nru a/sound/pci/ens1370.c b/sound/pci/ens1370.c
--- a/sound/pci/ens1370.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ens1370.c	2004-09-26 10:55:59 -07:00
@@ -372,6 +372,7 @@
 
 struct _snd_ensoniq {
 	spinlock_t reg_lock;
+	struct semaphore src_mutex;
 
 	int irq;
 
@@ -513,6 +514,7 @@
 		r = inl(ES_REG(ensoniq, 1371_SMPRATE));
 		if ((r & ES_1371_SRC_RAM_BUSY) == 0)
 			return r;
+		cond_resched();
 	}
 	snd_printk("wait source ready timeout 0x%lx [0x%x]\n", ES_REG(ensoniq, 1371_SMPRATE), r);
 	return 0;
@@ -696,6 +698,7 @@
 {
 	unsigned int n, truncm, freq, result;
 
+	down(&ensoniq->src_mutex);
 	n = rate / 3000;
 	if ((1 << n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
 		n--;
@@ -719,12 +722,14 @@
 	snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
 	snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC, n << 8);
 	snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC + 1, n << 8);
+	up(&ensoniq->src_mutex);
 }
 
 static void snd_es1371_dac1_rate(ensoniq_t * ensoniq, unsigned int rate)
 {
 	unsigned int freq, r;
 
+	down(&ensoniq->src_mutex);
 	freq = ((rate << 15) + 1500) / 3000;
 	r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE | ES_1371_DIS_P2 | ES_1371_DIS_R1)) | ES_1371_DIS_P1;
 	outl(r, ES_REG(ensoniq, 1371_SMPRATE));
@@ -734,12 +739,14 @@
 	snd_es1371_src_write(ensoniq, ES_SMPREG_DAC1 + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
 	r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE | ES_1371_DIS_P2 | ES_1371_DIS_R1));
 	outl(r, ES_REG(ensoniq, 1371_SMPRATE));
+	up(&ensoniq->src_mutex);
 }
 
 static void snd_es1371_dac2_rate(ensoniq_t * ensoniq, unsigned int rate)
 {
 	unsigned int freq, r;
 
+	down(&ensoniq->src_mutex);
 	freq = ((rate << 15) + 1500) / 3000;
 	r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE | ES_1371_DIS_P1 | ES_1371_DIS_R1)) | ES_1371_DIS_P2;
 	outl(r, ES_REG(ensoniq, 1371_SMPRATE));
@@ -749,6 +756,7 @@
 	snd_es1371_src_write(ensoniq, ES_SMPREG_DAC2 + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
 	r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE | ES_1371_DIS_P1 | ES_1371_DIS_R1));
 	outl(r, ES_REG(ensoniq, 1371_SMPRATE));
+	up(&ensoniq->src_mutex);
 }
 
 #endif /* CHIP1371 */
@@ -846,6 +854,13 @@
 		mode |= 0x01;
 	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->ctrl &= ~ES_DAC1_EN;
+#ifdef CHIP1371
+	/* 48k doesn't need SRC (it breaks AC3-passthru) */
+	if (runtime->rate == 48000)
+		ensoniq->ctrl |= ES_1373_BYPASS_P1;
+	else
+		ensoniq->ctrl &= ~ES_1373_BYPASS_P1;
+#endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
 	outl(runtime->dma_addr, ES_REG(ensoniq, DAC1_FRAME));
@@ -863,11 +878,12 @@
 	case 44100: ensoniq->ctrl |= ES_1370_WTSRSEL(3); break;
 	default: snd_BUG();
 	}
-#else
-	snd_es1371_dac1_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	spin_unlock_irq(&ensoniq->reg_lock);
+#ifndef CHIP1370
+	snd_es1371_dac1_rate(ensoniq, runtime->rate);
+#endif
 	return 0;
 }
 
@@ -901,11 +917,12 @@
 		ensoniq->ctrl |= ES_1370_PCLKDIVO(ES_1370_SRTODIV(runtime->rate));
 		ensoniq->u.es1370.pclkdiv_lock |= ES_MODE_PLAY2;
 	}
-#else
-	snd_es1371_dac2_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	spin_unlock_irq(&ensoniq->reg_lock);
+#ifndef CHIP1370
+	snd_es1371_dac2_rate(ensoniq, runtime->rate);
+#endif
 	return 0;
 }
 
@@ -937,11 +954,12 @@
 		ensoniq->ctrl |= ES_1370_PCLKDIVO(ES_1370_SRTODIV(runtime->rate));
 		ensoniq->u.es1370.pclkdiv_lock |= ES_MODE_CAPTURE;
 	}
-#else
-	snd_es1371_adc_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	spin_unlock_irq(&ensoniq->reg_lock);
+#ifndef CHIP1370
+	snd_es1371_adc_rate(ensoniq, runtime->rate);
+#endif
 	return 0;
 }
 
@@ -1879,6 +1897,7 @@
 	if (ensoniq == NULL)
 		return -ENOMEM;
 	spin_lock_init(&ensoniq->reg_lock);
+	init_MUTEX(&ensoniq->src_mutex);
 	ensoniq->card = card;
 	ensoniq->pci = pci;
 	ensoniq->irq = -1;
diff -Nru a/sound/pci/es1968.c b/sound/pci/es1968.c
--- a/sound/pci/es1968.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/es1968.c	2004-09-26 10:55:59 -07:00
@@ -556,6 +556,11 @@
 	int playback_streams, capture_streams;
 
 	unsigned int clock;		/* clock */
+	/* for clock measurement */
+	unsigned int in_measurement: 1;
+	unsigned int measure_apu;
+	unsigned int measure_lastpos;
+	unsigned int measure_count;
 
 	/* buffer */
 	struct snd_dma_buffer dma;
@@ -580,6 +585,7 @@
 	snd_rawmidi_t *rmidi;
 
 	spinlock_t reg_lock;
+	struct semaphore ac97_mutex;	/* ac97 lock */
 	struct tasklet_struct hwvol_tq;
 
 	/* Maestro Stuff */
@@ -672,6 +678,7 @@
 	while (timeout-- > 0) {
 		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
 			return 0;
+		cond_resched();
 	}
 	snd_printd("es1968: ac97 timeout\n");
 	return 1; /* timeout */
@@ -680,39 +687,35 @@
 static void snd_es1968_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val)
 {
 	es1968_t *chip = ac97->private_data;
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->reg_lock, flags);
 
+	down(&chip->ac97_mutex);
 	snd_es1968_ac97_wait(chip);
 
 	/* Write the bus */
 	outw(val, chip->io_port + ESM_AC97_DATA);
-	mdelay(1);
+	msleep(1);
 	outb(reg, chip->io_port + ESM_AC97_INDEX);
-	mdelay(1);
+	msleep(1);
 
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	up(&chip->ac97_mutex);
 }
 
 static unsigned short snd_es1968_ac97_read(ac97_t *ac97, unsigned short reg)
 {
 	u16 data = 0;
 	es1968_t *chip = ac97->private_data;
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->reg_lock, flags);
 
+	down(&chip->ac97_mutex);
 	snd_es1968_ac97_wait(chip);
 
 	outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
-	mdelay(1);
+	msleep(1);
 
 	if (! snd_es1968_ac97_wait(chip)) {
 		data = inw(chip->io_port + ESM_AC97_DATA);
-		mdelay(1);
+		msleep(1);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	up(&chip->ac97_mutex);
 
 	return data;
 }
@@ -1804,30 +1807,28 @@
 
 	snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
 
+	chip->in_measurement = 1;
+	chip->measure_apu = apu;
 	spin_lock_irq(&chip->reg_lock);
+	snd_es1968_bob_inc(chip, ESM_BOB_FREQ);
 	__apu_set_register(chip, apu, 5, pa & 0xffff);
 	snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
 	do_gettimeofday(&start_time);
 	spin_unlock_irq(&chip->reg_lock);
-#if 0
 	set_current_state(TASK_UNINTERRUPTIBLE);
 	schedule_timeout(HZ / 20); /* 50 msec */
-#else
-	/* FIXME:
-	 * schedule() above may be too inaccurate and the pointer can
-	 * overlap the boundary..
-	 */
-	mdelay(50);
-#endif
 	spin_lock_irq(&chip->reg_lock);
 	offset = __apu_get_register(chip, apu, 5);
 	do_gettimeofday(&stop_time);
 	snd_es1968_trigger_apu(chip, apu, 0); /* stop */
+	snd_es1968_bob_dec(chip);
+	chip->in_measurement = 0;
 	spin_unlock_irq(&chip->reg_lock);
 
 	/* check the current position */
 	offset -= (pa & 0xffff);
 	offset &= 0xfffe;
+	offset += chip->measure_count * (CLOCK_MEASURE_BUFSIZE/2);
 
 	t = stop_time.tv_sec - start_time.tv_sec;
 	t *= 1000000;
@@ -2005,6 +2006,12 @@
 				snd_es1968_update_pcm(chip, es);
 		}
 		spin_unlock(&chip->substream_lock);
+		if (chip->in_measurement) {
+			unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
+			if (curp < chip->measure_lastpos)
+				chip->measure_count++;
+			chip->measure_lastpos = curp;
+		}
 	}
 
 	return IRQ_HANDLED;
@@ -2525,6 +2532,7 @@
 	spin_lock_init(&chip->substream_lock);
 	INIT_LIST_HEAD(&chip->buf_list);
 	INIT_LIST_HEAD(&chip->substream_list);
+	init_MUTEX(&chip->ac97_mutex);
 	init_MUTEX(&chip->memory_mutex);
 	tasklet_init(&chip->hwvol_tq, es1968_update_hw_volume, (unsigned long)chip);
 	chip->card = card;
diff -Nru a/sound/pci/ice1712/Makefile b/sound/pci/ice1712/Makefile
--- a/sound/pci/ice1712/Makefile	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ice1712/Makefile	2004-09-26 10:55:59 -07:00
@@ -5,7 +5,7 @@
 
 snd-ice17xx-ak4xxx-objs := ak4xxx.o
 snd-ice1712-objs := ice1712.o delta.o hoontech.o ews.o
-snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o
+snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o
diff -Nru a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c
--- a/sound/pci/ice1712/delta.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ice1712/delta.c	2004-09-26 10:55:59 -07:00
@@ -526,6 +526,7 @@
 		break;
 	case ICE1712_SUBDEVICE_DELTA1010:
 	case ICE1712_SUBDEVICE_DELTA1010LT:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		ice->num_total_dacs = 8;
 		ice->num_total_adcs = 8;
 		break;
@@ -551,6 +552,7 @@
 			return err;
 		break;
 	case ICE1712_SUBDEVICE_DELTA1010:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		ice->gpio.set_pro_rate = delta_1010_set_rate_val;
 		break;
 	case ICE1712_SUBDEVICE_DELTADIO2496:
@@ -572,6 +574,7 @@
 	switch (ice->eeprom.subvendor) {
 	case ICE1712_SUBDEVICE_DELTA1010:
 	case ICE1712_SUBDEVICE_DELTADIO2496:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		return 0;
 	}
 
@@ -630,6 +633,7 @@
 	/* 1010 and dio specific controls */
 	switch (ice->eeprom.subvendor) {
 	case ICE1712_SUBDEVICE_DELTA1010:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_select, ice));
 		if (err < 0)
 			return err;
@@ -654,6 +658,7 @@
 	case ICE1712_SUBDEVICE_DELTA1010:
 	case ICE1712_SUBDEVICE_DELTADIO2496:
 	case ICE1712_SUBDEVICE_DELTA66:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		err = snd_ice1712_spdif_build_controls(ice);
 		if (err < 0)
 			return err;
@@ -665,6 +670,7 @@
 	case ICE1712_SUBDEVICE_DELTA1010:
 	case ICE1712_SUBDEVICE_DELTADIO2496:
 	case ICE1712_SUBDEVICE_DELTA66:
+	case ICE1712_SUBDEVICE_MEDIASTATION:
 		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta_spdif_in_status, ice));
 		if (err < 0)
 			return err;
@@ -750,6 +756,13 @@
 		.chip_init = snd_ice1712_delta_init,
 		.build_controls = snd_ice1712_delta_add_controls,
 		.no_mpu401 = 1,
+	},
+	{
+		.subvendor = ICE1712_SUBDEVICE_MEDIASTATION,
+		.name = "Lionstracs Mediastation",
+		.model = "mediastation",
+		.chip_init = snd_ice1712_delta_init,
+		.build_controls = snd_ice1712_delta_add_controls,
 	},
 	{ } /* terminator */
 };
diff -Nru a/sound/pci/ice1712/delta.h b/sound/pci/ice1712/delta.h
--- a/sound/pci/ice1712/delta.h	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ice1712/delta.h	2004-09-26 10:55:59 -07:00
@@ -32,7 +32,8 @@
 		"{MidiMan M Audio,Delta 66},"\
 		"{MidiMan M Audio,Delta 44},"\
 		"{MidiMan M Audio,Audiophile 24/96},"\
-		"{Digigram,VX442},"
+		"{Digigram,VX442},"\
+		"{Lionstracs,Mediastation},"
 
 #define ICE1712_SUBDEVICE_DELTA1010	0x121430d6
 #define ICE1712_SUBDEVICE_DELTADIO2496	0x121431d6
@@ -42,6 +43,7 @@
 #define ICE1712_SUBDEVICE_DELTA410	0x121438d6
 #define ICE1712_SUBDEVICE_DELTA1010LT	0x12143bd6
 #define ICE1712_SUBDEVICE_VX442		0x12143cd6
+#define ICE1712_SUBDEVICE_MEDIASTATION	0x694c0100
 
 /* entry point */
 extern struct snd_ice1712_card_info snd_ice1712_delta_cards[];
diff -Nru a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
--- a/sound/pci/ice1712/ice1712.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ice1712/ice1712.c	2004-09-26 10:55:59 -07:00
@@ -2308,28 +2308,47 @@
 {
 	int dev = 0xa0;		/* EEPROM device address */
 	unsigned int i, size;
+	struct snd_ice1712_card_info **tbl, *c;
 
-	if ((inb(ICEREG(ice, I2C_CTRL)) & ICE1712_I2C_EEPROM) == 0) {
-		snd_printk("ICE1712 has not detected EEPROM\n");
-		return -EIO;
-	}
-	if (modelname && *modelname) {
-		struct snd_ice1712_card_info **tbl, *c;
-		for (tbl = card_tables; *tbl; tbl++) {
-			for (c = *tbl; c->subvendor; c++) {
-				if (c->model && !strcmp(modelname, c->model)) {
-					/* use the given subvendor */
-					printk(KERN_INFO "ice1712: Using board model %s\n", c->name);
-					ice->eeprom.subvendor = c->subvendor;
-					break;
-				}
+	if (! modelname || ! *modelname) {
+		ice->eeprom.subvendor = 0;
+		if ((inb(ICEREG(ice, I2C_CTRL)) & ICE1712_I2C_EEPROM) != 0)
+			ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) |
+				(snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | 
+				(snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | 
+				(snd_ice1712_read_i2c(ice, dev, 0x03) << 24);
+		if (ice->eeprom.subvendor == 0 || ice->eeprom.subvendor == (unsigned int)-1) {
+			/* invalid subvendor from EEPROM, try the PCI subststem ID instead */
+			u16 vendor, device;
+			pci_read_config_word(ice->pci, PCI_SUBSYSTEM_VENDOR_ID, &vendor);
+			pci_read_config_word(ice->pci, PCI_SUBSYSTEM_ID, &device);
+			ice->eeprom.subvendor = ((unsigned int)swab16(vendor) << 16) | swab16(device);
+			if (ice->eeprom.subvendor == 0 || ice->eeprom.subvendor == (unsigned int)-1) {
+				printk(KERN_ERR "ice1712: No valid ID is found\n");
+				return -ENXIO;
 			}
 		}
-	} else
-		ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) |
-			(snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | 
-			(snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | 
-			(snd_ice1712_read_i2c(ice, dev, 0x03) << 24);
+	}
+	for (tbl = card_tables; *tbl; tbl++) {
+		for (c = *tbl; c->subvendor; c++) {
+			if (modelname && c->model && ! strcmp(modelname, c->model)) {
+				printk(KERN_INFO "ice1712: Using board model %s\n", c->name);
+				ice->eeprom.subvendor = c->subvendor;
+			} else if (c->subvendor != ice->eeprom.subvendor)
+				continue;
+			if (! c->eeprom_size || ! c->eeprom_data)
+				goto found;
+			/* if the EEPROM is given by the driver, use it */
+			snd_printdd("using the defined eeprom..\n");
+			ice->eeprom.version = 1;
+			ice->eeprom.size = c->eeprom_size + 6;
+			memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size);
+			goto read_skipped;
+		}
+	}
+	printk(KERN_WARNING "ice1712: No matching model found for ID 0x%x\n", ice->eeprom.subvendor);
+
+ found:
 	ice->eeprom.size = snd_ice1712_read_i2c(ice, dev, 0x04);
 	if (ice->eeprom.size < 6)
 		ice->eeprom.size = 32; /* FIXME: any cards without the correct size? */
@@ -2346,6 +2365,7 @@
 	for (i = 0; i < size; i++)
 		ice->eeprom.data[i] = snd_ice1712_read_i2c(ice, dev, i + 6);
 
+ read_skipped:
 	ice->eeprom.gpiomask = ice->eeprom.data[ICE_EEP1_GPIO_MASK];
 	ice->eeprom.gpiostate = ice->eeprom.data[ICE_EEP1_GPIO_STATE];
 	ice->eeprom.gpiodir = ice->eeprom.data[ICE_EEP1_GPIO_DIR];
diff -Nru a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c
--- a/sound/pci/ice1712/ice1724.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ice1712/ice1724.c	2004-09-26 10:55:59 -07:00
@@ -46,6 +46,7 @@
 #include "aureon.h"
 #include "vt1720_mobo.h"
 #include "pontis.h"
+#include "prodigy192.h"
 
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
@@ -57,6 +58,7 @@
 	       AUREON_DEVICE_DESC
 	       VT1720_MOBO_DEVICE_DESC
 	       PONTIS_DEVICE_DESC
+	       PRODIGY192_DEVICE_DESC
 		"{VIA,VT1720},"
 		"{VIA,VT1724},"
 		"{ICEnsemble,Generic ICE1724},"
@@ -1864,6 +1866,7 @@
 	snd_vt1724_aureon_cards,
 	snd_vt1720_mobo_cards,
 	snd_vt1720_pontis_cards,
+	snd_vt1724_prodigy192_cards,
 	NULL,
 };
 
diff -Nru a/sound/pci/ice1712/prodigy192.c b/sound/pci/ice1712/prodigy192.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/prodigy192.c	2004-09-26 10:55:59 -07:00
@@ -0,0 +1,524 @@
+/*
+ *   ALSA driver for ICEnsemble VT1724 (Envy24HT)
+ *
+ *   Lowlevel functions for AudioTrak Prodigy 192 cards
+ *
+ *	Copyright (c) 2003 Takashi Iwai <tiwai@suse.de>
+ *      Copyright (c) 2003 Dimitromanolakis Apostolos <apostol@cs.utoronto.ca>
+ *      Copyright (c) 2004 Kouichi ONO <co2b@ceres.dti.ne.jp>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */      
+
+#include <sound/driver.h>
+#include <asm/io.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+
+#include "ice1712.h"
+#include "envy24ht.h"
+#include "prodigy192.h"
+#include "stac946x.h"
+
+static void stac9460_put(ice1712_t *ice, int reg, unsigned char val)
+{
+	snd_vt1724_write_i2c(ice, PRODIGY192_STAC9460_ADDR, reg, val);
+}
+
+static unsigned char stac9460_get(ice1712_t *ice, int reg)
+{
+	return snd_vt1724_read_i2c(ice, PRODIGY192_STAC9460_ADDR, reg);
+}
+
+/*
+ * DAC mute control
+ */
+static int stac9460_dac_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	uinfo->count = 1;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = 1;
+	return 0;
+}
+
+static int stac9460_dac_mute_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned char val;
+	int idx;
+
+	if (kcontrol->private_value)
+		idx = STAC946X_MASTER_VOLUME;
+	else
+		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + STAC946X_LF_VOLUME;
+	val = stac9460_get(ice, idx);
+	ucontrol->value.integer.value[0] = (~val >> 7) & 0x1;
+	return 0;
+}
+
+static int stac9460_dac_mute_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned char new, old;
+	int idx;
+	int change;
+
+	if (kcontrol->private_value)
+		idx = STAC946X_MASTER_VOLUME;
+	else
+		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + STAC946X_LF_VOLUME;
+	old = stac9460_get(ice, idx);
+	new = (~ucontrol->value.integer.value[0]<< 7 & 0x80) | (old & ~0x80);
+	change = (new != old);
+	if (change)
+		stac9460_put(ice, idx, new);
+
+	return change;
+}
+
+/*
+ * DAC volume attenuation mixer control
+ */
+static int stac9460_dac_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+	uinfo->count = 1;
+	uinfo->value.integer.min = 0;			/* mute */
+	uinfo->value.integer.max = 0x7f;		/* 0dB */
+	return 0;
+}
+
+static int stac9460_dac_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int idx;
+	unsigned char vol;
+
+	if (kcontrol->private_value)
+		idx = STAC946X_MASTER_VOLUME;
+	else
+		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + STAC946X_LF_VOLUME;
+	vol = stac9460_get(ice, idx) & 0x7f;
+	ucontrol->value.integer.value[0] = 0x7f - vol;
+
+	return 0;
+}
+
+static int stac9460_dac_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int idx;
+	unsigned char tmp, ovol, nvol;
+	int change;
+
+	if (kcontrol->private_value)
+		idx = STAC946X_MASTER_VOLUME;
+	else
+		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + STAC946X_LF_VOLUME;
+	nvol = ucontrol->value.integer.value[0];
+	tmp = stac9460_get(ice, idx);
+	ovol = 0x7f - (tmp & 0x7f);
+	change = (ovol != nvol);
+	if (change) {
+		stac9460_put(ice, idx, (0x7f - nvol) | (tmp & 0x80));
+	}
+	return change;
+}
+
+/*
+ * ADC mute control
+ */
+static int stac9460_adc_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	uinfo->count = 2;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = 1;
+	return 0;
+}
+
+static int stac9460_adc_mute_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned char val;
+	int i;
+
+	for (i = 0; i < 2; ++i) {
+		val = stac9460_get(ice, STAC946X_MIC_L_VOLUME + i);
+		ucontrol->value.integer.value[i] = ~val>>7 & 0x1;
+	}
+
+	return 0;
+}
+
+static int stac9460_adc_mute_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned char new, old;
+	int i, reg;
+	int change;
+
+	for (i = 0; i < 2; ++i) {
+		reg = STAC946X_MIC_L_VOLUME + i;
+		old = stac9460_get(ice, reg);
+		new = (~ucontrol->value.integer.value[i]<<7&0x80) | (old&~0x80);
+		change = (new != old);
+		if (change)
+			stac9460_put(ice, reg, new);
+	}
+
+	return change;
+}
+
+/*
+ * ADC gain mixer control
+ */
+static int stac9460_adc_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+	uinfo->count = 2;
+	uinfo->value.integer.min = 0;		/* 0dB */
+	uinfo->value.integer.max = 0x0f;	/* 22.5dB */
+	return 0;
+}
+
+static int stac9460_adc_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int i, reg;
+	unsigned char vol;
+
+	for (i = 0; i < 2; ++i) {
+		reg = STAC946X_MIC_L_VOLUME + i;
+		vol = stac9460_get(ice, reg) & 0x0f;
+		ucontrol->value.integer.value[i] = 0x0f - vol;
+	}
+
+	return 0;
+}
+
+static int stac9460_adc_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int i, reg;
+	unsigned char ovol, nvol;
+	int change;
+
+	for (i = 0; i < 2; ++i) {
+		reg = STAC946X_MIC_L_VOLUME + i;
+		nvol = ucontrol->value.integer.value[i];
+		ovol = 0x0f - stac9460_get(ice, reg);
+		change = ((ovol & 0x0f)  != nvol);
+		if (change)
+			stac9460_put(ice, reg, (0x0f - nvol) | (ovol & ~0x0f));
+	}
+
+	return change;
+}
+
+#if 0
+/*
+ * Headphone Amplifier
+ */
+static int aureon_set_headphone_amp(ice1712_t *ice, int enable)
+{
+	unsigned int tmp, tmp2;
+
+	tmp2 = tmp = snd_ice1712_gpio_read(ice);
+	if (enable)
+		tmp |= AUREON_HP_SEL;
+	else
+		tmp &= ~ AUREON_HP_SEL;
+	if (tmp != tmp2) {
+		snd_ice1712_gpio_write(ice, tmp);
+		return 1;
+	}
+	return 0;
+}
+
+static int aureon_get_headphone_amp(ice1712_t *ice)
+{
+	unsigned int tmp = snd_ice1712_gpio_read(ice);
+
+	return ( tmp & AUREON_HP_SEL )!= 0;
+}
+
+static int aureon_bool_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	uinfo->count = 1;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = 1;
+	return 0;
+}
+
+static int aureon_hpamp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	ucontrol->value.integer.value[0] = aureon_get_headphone_amp(ice);
+	return 0;
+}
+
+
+static int aureon_hpamp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	return aureon_set_headphone_amp(ice,ucontrol->value.integer.value[0]);
+}
+
+/*
+ * Deemphasis
+ */
+static int aureon_deemp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	ucontrol->value.integer.value[0] = (wm_get(ice, WM_DAC_CTRL2) & 0xf) == 0xf;
+	return 0;
+}
+
+static int aureon_deemp_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int temp, temp2;
+	temp2 = temp = wm_get(ice, WM_DAC_CTRL2);
+	if (ucontrol->value.integer.value[0])
+		temp |= 0xf;
+	else
+		temp &= ~0xf;
+	if (temp != temp2) {
+		wm_put(ice, WM_DAC_CTRL2, temp);
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * ADC Oversampling
+ */
+static int aureon_oversampling_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo)
+{
+	static char *texts[2] = { "128x", "64x"	};
+
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+	uinfo->count = 1;
+	uinfo->value.enumerated.items = 2;
+
+	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
+		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
+	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
+
+        return 0;
+}
+
+static int aureon_oversampling_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	ucontrol->value.enumerated.item[0] = (wm_get(ice, WM_MASTER) & 0x8) == 0x8;
+	return 0;
+}
+
+static int aureon_oversampling_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	int temp, temp2;
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	temp2 = temp = wm_get(ice, WM_MASTER);
+
+	if (ucontrol->value.enumerated.item[0])
+		temp |= 0x8;
+	else
+		temp &= ~0x8;
+
+	if (temp != temp2) {
+		wm_put(ice, WM_MASTER, temp);
+		return 1;
+	}
+	return 0;
+}
+#endif
+
+/*
+ * mixers
+ */
+
+static snd_kcontrol_new_t stac_controls[] __devinitdata = {
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Master Playback Switch",
+		.info = stac9460_dac_mute_info,
+		.get = stac9460_dac_mute_get,
+		.put = stac9460_dac_mute_put,
+		.private_value = 1,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Master Playback Volume",
+		.info = stac9460_dac_vol_info,
+		.get = stac9460_dac_vol_get,
+		.put = stac9460_dac_vol_put,
+		.private_value = 1,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "DAC Switch",
+		.count = 6,
+		.info = stac9460_dac_mute_info,
+		.get = stac9460_dac_mute_get,
+		.put = stac9460_dac_mute_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "DAC Volume",
+		.count = 6,
+		.info = stac9460_dac_vol_info,
+		.get = stac9460_dac_vol_get,
+		.put = stac9460_dac_vol_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "ADC Switch",
+		.count = 1,
+		.info = stac9460_adc_mute_info,
+		.get = stac9460_adc_mute_get,
+		.put = stac9460_adc_mute_put,
+
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "ADC Volume",
+		.count = 1,
+		.info = stac9460_adc_vol_info,
+		.get = stac9460_adc_vol_get,
+		.put = stac9460_adc_vol_put,
+	},
+#if 0
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Capture Route",
+		.info = wm_adc_mux_info,
+		.get = wm_adc_mux_get,
+		.put = wm_adc_mux_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Headphone Amplifier Switch",
+		.info = aureon_bool_info,
+		.get = aureon_hpamp_get,
+		.put = aureon_hpamp_put
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "DAC Deemphasis Switch",
+		.info = aureon_bool_info,
+		.get = aureon_deemp_get,
+		.put = aureon_deemp_put
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "ADC Oversampling",
+		.info = aureon_oversampling_info,
+		.get = aureon_oversampling_get,
+		.put = aureon_oversampling_put
+	},
+#endif
+};
+
+static int __devinit prodigy192_add_controls(ice1712_t *ice)
+{
+	unsigned int i;
+	int err;
+
+	for (i = 0; i < ARRAY_SIZE(stac_controls); i++) {
+		err = snd_ctl_add(ice->card, snd_ctl_new1(&stac_controls[i], ice));
+		if (err < 0)
+			return err;
+	}
+	return 0;
+}
+
+
+/*
+ * initialize the chip
+ */
+static int __devinit prodigy192_init(ice1712_t *ice)
+{
+	static unsigned short stac_inits_prodigy[] = {
+		STAC946X_RESET, 0,
+/*		STAC946X_MASTER_VOLUME, 0,
+		STAC946X_LF_VOLUME, 0,
+		STAC946X_RF_VOLUME, 0,
+		STAC946X_LR_VOLUME, 0,
+		STAC946X_RR_VOLUME, 0,
+		STAC946X_CENTER_VOLUME, 0,
+		STAC946X_LFE_VOLUME, 0,*/
+		(unsigned short)-1
+	};
+	unsigned short *p;
+
+	/* prodigy 192 */
+	ice->num_total_dacs = 6;
+	ice->num_total_adcs = 2;
+	
+	/* initialize codec */
+	p = stac_inits_prodigy;
+	for (; *p != (unsigned short)-1; p += 2)
+		stac9460_put(ice, p[0], p[1]);
+
+	return 0;
+}
+
+
+/*
+ * Aureon boards don't provide the EEPROM data except for the vendor IDs.
+ * hence the driver needs to sets up it properly.
+ */
+
+static unsigned char prodigy71_eeprom[] __devinitdata = {
+	0x2b,	/* SYSCONF: clock 512, mpu401, spdif-in/ADC, 4DACs */
+	0x80,	/* ACLINK: I2S */
+	0xf8,	/* I2S: vol, 96k, 24bit, 192k */
+	0xc3,	/* SPDIF: out-en, out-int, spdif-in */
+	0xff,	/* GPIO_DIR */
+	0xff,	/* GPIO_DIR1 */
+	0xbf,	/* GPIO_DIR2 */
+	0x00,	/* GPIO_MASK */
+	0x00,	/* GPIO_MASK1 */
+	0x00,	/* GPIO_MASK2 */
+	0x00,	/* GPIO_STATE */
+	0x00,	/* GPIO_STATE1 */
+	0x00,	/* GPIO_STATE2 */
+};
+
+
+/* entry point */
+struct snd_ice1712_card_info snd_vt1724_prodigy192_cards[] __devinitdata = {
+	{
+		.subvendor = VT1724_SUBDEVICE_PRODIGY192VE,
+		.name = "Audiotrak Prodigy 192",
+		.model = "prodigy192",
+		.chip_init = prodigy192_init,
+		.build_controls = prodigy192_add_controls,
+		.eeprom_size = sizeof(prodigy71_eeprom),
+		.eeprom_data = prodigy71_eeprom,
+	},
+	{ } /* terminator */
+};
diff -Nru a/sound/pci/ice1712/prodigy192.h b/sound/pci/ice1712/prodigy192.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/prodigy192.h	2004-09-26 10:55:59 -07:00
@@ -0,0 +1,11 @@
+#ifndef __SOUND_PRODIGY192_H
+#define __SOUND_PRODIGY192_H
+
+#define PRODIGY192_DEVICE_DESC 	       "{AudioTrak,Prodigy 192},"
+#define PRODIGY192_STAC9460_ADDR	0x54
+
+#define VT1724_SUBDEVICE_PRODIGY192VE	 0x34495345	/* PRODIGY 192 VE */
+
+extern struct snd_ice1712_card_info  snd_vt1724_prodigy192_cards[];
+
+#endif	/* __SOUND_PRODIGY192_H */
diff -Nru a/sound/pci/ice1712/stac946x.h b/sound/pci/ice1712/stac946x.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/stac946x.h	2004-09-26 10:55:59 -07:00
@@ -0,0 +1,25 @@
+#ifndef __SOUND_STAC946X_H
+#define __SOUND_STAC946X_H
+
+#define STAC946X_RESET			0x00
+#define STAC946X_STATUS			0x01
+#define STAC946X_MASTER_VOLUME		0x02
+#define STAC946X_LF_VOLUME		0x03
+#define STAC946X_RF_VOLUME		0x04
+#define STAC946X_LR_VOLUME		0x05
+#define STAC946X_RR_VOLUME		0x06
+#define STAC946X_CENTER_VOLUME		0x07
+#define STAC946X_LFE_VOLUME		0x08
+#define STAC946X_MIC_L_VOLUME		0x09
+#define STAC946X_MIC_R_VOLUME		0x0a
+#define STAC946X_DEEMPHASIS		0x0c
+#define STAC946X_GENERAL_PURPOSE	0x0d
+#define STAC946X_AUDIO_PORT_CONTROL	0x0e
+#define STAC946X_MASTER_CLOCKING	0x0f
+#define STAC946X_POWERDOWN_CTRL1	0x10
+#define STAC946X_POWERDOWN_CTRL2	0x11
+#define STAC946X_REVISION_CODE		0x12
+#define STAC946X_ADDRESS_CONTROL	0x13
+#define STAC946X_ADDRESS		0x14
+
+#endif  /*  __SOUND_STAC946X_H */
diff -Nru a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
--- a/sound/pci/intel8x0.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/intel8x0.c	2004-09-26 10:55:59 -07:00
@@ -33,13 +33,11 @@
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/slab.h>
-#include <linux/gameport.h>
 #include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/ac97_codec.h>
 #include <sound/info.h>
-#include <sound/mpu401.h>
 #include <sound/initval.h>
 /* for 440MX workaround */
 #include <asm/pgtable.h>
@@ -64,23 +62,13 @@
 		"{AMD,AMD8111},"
 	        "{ALI,M5455}}");
 
-#if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
-#define SUPPORT_JOYSTICK 1
-#endif
-#define SUPPORT_MIDI 1
-
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
 static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0};
 static int ac97_quirk[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = AC97_TUNE_DEFAULT};
 static int buggy_irq[SNDRV_CARDS];
-#ifdef SUPPORT_JOYSTICK
-static int joystick[SNDRV_CARDS];
-#endif
-#ifdef SUPPORT_MIDI
-static int mpu_port[SNDRV_CARDS]; /* disabled */
-#endif
+static int xbox[SNDRV_CARDS];
 static int boot_devs;
 
 module_param_array(index, int, boot_devs, 0444);
@@ -95,14 +83,8 @@
 MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
 module_param_array(buggy_irq, bool, boot_devs, 0444);
 MODULE_PARM_DESC(buggy_irq, "Enable workaround for buggy interrupts on some motherboards.");
-#ifdef SUPPORT_JOYSTICK
-module_param_array(joystick, bool, boot_devs, 0444);
-MODULE_PARM_DESC(joystick, "Enable joystick for Intel i8x0 soundcard.");
-#endif
-#ifdef SUPPORT_MIDI
-module_param_array(mpu_port, int, boot_devs, 0444);
-MODULE_PARM_DESC(mpu_port, "MPU401 port # for Intel i8x0 driver.");
-#endif
+module_param_array(xbox, bool, boot_devs, 0444);
+MODULE_PARM_DESC(xbox, "Set to 1 for Xbox, if you have problems with the AC'97 codec detection.");
 
 /*
  *  Direct registers
@@ -406,10 +388,10 @@
 
 	unsigned int mmio;
 	unsigned long addr;
-	void __iomem * remap_addr;
+	void __iomem *remap_addr;
 	unsigned int bm_mmio;
 	unsigned long bmaddr;
-	void __iomem * remap_bmaddr;
+	void __iomem *remap_bmaddr;
 
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -420,18 +402,20 @@
 
 	int multi4: 1,
 	    multi6: 1,
+	    dra: 1,
 	    smp20bit: 1;
 	int in_ac97_init: 1,
 	    in_sdin_init: 1;
+	int in_measurement: 1; /* during ac97 clock measurement */
 	int fix_nocache: 1; /* workaround for 440MX */
 	int buggy_irq: 1; /* workaround for buggy mobos */
+	int xbox: 1;	  /* workaround for Xbox AC'97 detection */
+	int spdif_idx;	/* SPDIF BAR index; *_SPBAR or -1 if use PCMOUT */
 
 	ac97_bus_t *ac97_bus;
 	ac97_t *ac97[3];
 	unsigned int ac97_sdin[3];
 
-	snd_rawmidi_t *rmidi;
-
 	spinlock_t reg_lock;
 	spinlock_t ac97_lock;
 	
@@ -807,7 +791,8 @@
 	}
 
 	ichdev->position += step * ichdev->fragsize1;
-	ichdev->position %= ichdev->size;
+	if (! chip->in_measurement)
+		ichdev->position %= ichdev->size;
 	ichdev->lvi += step;
 	ichdev->lvi &= ICH_REG_LVI_MASK;
 	iputbyte(chip, port + ICH_REG_OFF_LVI, ichdev->lvi);
@@ -954,6 +939,7 @@
 	ichdev_t *ichdev = get_ichdev(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	size_t size = params_buffer_bytes(hw_params);
+	int dbl = params_rate(hw_params) > 48000;
 	int err;
 
 	if (chip->fix_nocache && runtime->dma_area && runtime->dma_bytes < size)
@@ -969,11 +955,11 @@
 	}
 	err = snd_ac97_pcm_open(ichdev->pcm, params_rate(hw_params),
 				params_channels(hw_params),
-				ichdev->pcm->r[0].slots);
+				ichdev->pcm->r[dbl].slots);
 	if (err >= 0) {
 		ichdev->pcm_open_flag = 1;
-		/* FIXME: hack to enable spdif support */
-		if (ichdev->ichd == ICHD_PCMOUT && chip->device_type == DEVICE_SIS)
+		/* Force SPDIF setting */
+		if (ichdev->ichd == ICHD_PCMOUT && chip->spdif_idx < 0)
 			snd_ac97_set_rate(ichdev->pcm->r[0].codec[0], AC97_SPDIF, params_rate(hw_params));
 	}
 	return err;
@@ -994,34 +980,35 @@
 }
 
 static void snd_intel8x0_setup_pcm_out(intel8x0_t *chip,
-				       int channels, int sample_bits)
+				       snd_pcm_runtime_t *runtime)
 {
 	unsigned int cnt;
+	int dbl = runtime->rate > 48000;
 	switch (chip->device_type) {
 	case DEVICE_ALI:
 		cnt = igetdword(chip, ICHREG(ALI_SCR));
 		cnt &= ~ICH_ALI_SC_PCM_246_MASK;
-		if (chip->multi4 && channels == 4)
+		if (runtime->channels == 4 || dbl)
 			cnt |= ICH_ALI_SC_PCM_4;
-		else if (chip->multi6 && channels == 6)
+		else if (runtime->channels == 6)
 			cnt |= ICH_ALI_SC_PCM_6;
 		iputdword(chip, ICHREG(ALI_SCR), cnt);
 		break;
 	case DEVICE_SIS:
 		cnt = igetdword(chip, ICHREG(GLOB_CNT));
 		cnt &= ~ICH_SIS_PCM_246_MASK;
-		if (chip->multi4 && channels == 4)
+		if (runtime->channels == 4 || dbl)
 			cnt |= ICH_SIS_PCM_4;
-		else if (chip->multi6 && channels == 6)
+		else if (runtime->channels == 6)
 			cnt |= ICH_SIS_PCM_6;
 		iputdword(chip, ICHREG(GLOB_CNT), cnt);
 		break;
 	default:
 		cnt = igetdword(chip, ICHREG(GLOB_CNT));
 		cnt &= ~(ICH_PCM_246_MASK | ICH_PCM_20BIT);
-		if (chip->multi4 && channels == 4)
+		if (runtime->channels == 4 || dbl)
 			cnt |= ICH_PCM_4;
-		else if (chip->multi6 && channels == 6)
+		else if (runtime->channels == 6)
 			cnt |= ICH_PCM_6;
 		if (chip->device_type == DEVICE_NFORCE) {
 			/* reset to 2ch once to keep the 6 channel data in alignment,
@@ -1032,7 +1019,7 @@
 				msleep(50); /* grrr... */
 			}
 		} else if (chip->device_type == DEVICE_INTEL_ICH4) {
-			if (sample_bits > 16)
+			if (runtime->sample_bits > 16)
 				cnt |= ICH_PCM_20BIT;
 		}
 		iputdword(chip, ICHREG(GLOB_CNT), cnt);
@@ -1051,8 +1038,7 @@
 	ichdev->fragsize = snd_pcm_lib_period_bytes(substream);
 	spin_lock_irq(&chip->reg_lock);
 	if (ichdev->ichd == ICHD_PCMOUT) {
-		snd_intel8x0_setup_pcm_out(chip, runtime->channels,
-					   runtime->sample_bits);
+		snd_intel8x0_setup_pcm_out(chip, runtime);
 		if (chip->device_type == DEVICE_INTEL_ICH4) {
 			ichdev->pos_shift = (runtime->sample_bits > 16) ? 2 : 1;
 		}
@@ -1168,6 +1154,9 @@
 		runtime->hw.channels_max = 4;
 		snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, &hw_constraints_channels4);
 	}
+	if (chip->dra) {
+		snd_ac97_pcm_double_rate_rules(runtime);
+	}
 	if (chip->smp20bit) {
 		runtime->hw.formats |= SNDRV_PCM_FMTBIT_S32_LE;
 		snd_pcm_hw_constraint_msbits(runtime, 0, 32, 20);
@@ -1662,6 +1651,12 @@
 					 (1 << AC97_SLOT_PCM_SLEFT) |
 					 (1 << AC97_SLOT_PCM_SRIGHT) |
 					 (1 << AC97_SLOT_LFE)
+			},
+			{
+				.slots = (1 << AC97_SLOT_PCM_LEFT) |
+					 (1 << AC97_SLOT_PCM_RIGHT) |
+					 (1 << AC97_SLOT_PCM_LEFT_0) |
+					 (1 << AC97_SLOT_PCM_RIGHT_0)
 			}
 		}
 	},
@@ -1718,6 +1713,12 @@
 static struct ac97_quirk ac97_quirks[] __devinitdata = {
 	{
 		.vendor = 0x0e11,
+		.device = 0x008a,
+		.name = "Compaq Evo W4000",	/* AD1885 */
+		.type = AC97_TUNE_HP_ONLY
+	},
+	{
+		.vendor = 0x0e11,
 		.device = 0x00b8,
 		.name = "Compaq Evo D510C",
 		.type = AC97_TUNE_HP_ONLY
@@ -1764,6 +1765,12 @@
 		.name = "HP xw4200",	/* AD1981B*/
 		.type = AC97_TUNE_HP_ONLY
 	},
+	{
+		.vendor = 0x104d,
+		.device = 0x8197,
+		.name = "Sony S1XP",
+		.type = AC97_TUNE_INV_EAPD
+	},
  	{
 		.vendor = 0x1043,
 		.device = 0x80f3,
@@ -1771,6 +1778,12 @@
 		.type = AC97_TUNE_AD_SHARING
 	},
 	{
+		.vendor = 0x10cf,
+		.device = 0x11c3,
+		.name = "Fujitsu-Siemens E4010",
+		.type = AC97_TUNE_HP_ONLY
+	},
+	{
 		.vendor = 0x10f1,
 		.device = 0x2665,
 		.name = "Fujitsu-Siemens Celsius",	/* AD1981? */
@@ -1871,7 +1884,6 @@
 	int err;
 	unsigned int i, codecs;
 	unsigned int glob_sta = 0;
-	int spdif_idx = -1; /* disabled */
 	ac97_bus_ops_t *ops;
 	static ac97_bus_ops_t standard_bus_ops = {
 		.write = snd_intel8x0_codec_write,
@@ -1882,16 +1894,16 @@
 		.read = snd_intel8x0_ali_codec_read,
 	};
 
+	chip->spdif_idx = -1; /* use PCMOUT (or disabled) */
 	switch (chip->device_type) {
 	case DEVICE_NFORCE:
-		spdif_idx = NVD_SPBAR;
+		chip->spdif_idx = NVD_SPBAR;
 		break;
 	case DEVICE_ALI:
-		spdif_idx = ALID_AC97SPDIFOUT;
+		chip->spdif_idx = ALID_AC97SPDIFOUT;
 		break;
-	default:
-		if (chip->device_type == DEVICE_INTEL_ICH4)
-			spdif_idx = ICHD_SPBAR;
+	case DEVICE_INTEL_ICH4:
+		chip->spdif_idx = ICHD_SPBAR;
 		break;
 	};
 
@@ -1901,6 +1913,8 @@
 	ac97.private_data = chip;
 	ac97.private_free = snd_intel8x0_mixer_free_ac97;
 	ac97.scaps = AC97_SCAP_SKIP_MODEM;
+	if (chip->xbox)
+		ac97.scaps |= AC97_SCAP_DETECT_BY_VENDOR;
 	if (chip->device_type != DEVICE_ALI) {
 		glob_sta = igetdword(chip, ICHREG(GLOB_STA));
 		ops = &standard_bus_ops;
@@ -1944,6 +1958,7 @@
 	/* FIXME: my test board doesn't work well with VRA... */
 	if (chip->device_type == DEVICE_ALI)
 		pbus->no_vra = 1;
+	pbus->dra = 1;
 	chip->ac97_bus = pbus;
 
 	ac97.pci = chip->pci;
@@ -1966,7 +1981,7 @@
 	i = ARRAY_SIZE(ac97_pcm_defs);
 	if (chip->device_type != DEVICE_INTEL_ICH4)
 		i -= 2;		/* do not allocate PCM2IN and MIC2 */
-	if (spdif_idx < 0)
+	if (chip->spdif_idx < 0)
 		i--;		/* do not allocate S/PDIF */
 	err = snd_ac97_pcm_assign(pbus, i, ac97_pcm_defs);
 	if (err < 0)
@@ -1974,8 +1989,8 @@
 	chip->ichd[ICHD_PCMOUT].pcm = &pbus->pcms[0];
 	chip->ichd[ICHD_PCMIN].pcm = &pbus->pcms[1];
 	chip->ichd[ICHD_MIC].pcm = &pbus->pcms[2];
-	if (spdif_idx >= 0)
-		chip->ichd[spdif_idx].pcm = &pbus->pcms[3];
+	if (chip->spdif_idx >= 0)
+		chip->ichd[chip->spdif_idx].pcm = &pbus->pcms[3];
 	if (chip->device_type == DEVICE_INTEL_ICH4) {
 		chip->ichd[ICHD_PCM2IN].pcm = &pbus->pcms[4];
 		chip->ichd[ICHD_MIC2].pcm = &pbus->pcms[5];
@@ -2004,13 +2019,16 @@
 		if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_LFE))
 			chip->multi6 = 1;
 	}
+	if (pbus->pcms[0].r[1].rslots[0]) {
+		chip->dra = 1;
+	}
 	if (chip->device_type == DEVICE_INTEL_ICH4) {
 		if ((igetdword(chip, ICHREG(GLOB_STA)) & ICH_SAMPLE_CAP) == ICH_SAMPLE_16_20)
 			chip->smp20bit = 1;
 	}
 	if (chip->device_type == DEVICE_NFORCE) {
 		/* 48kHz only */
-		chip->ichd[spdif_idx].pcm->rates = SNDRV_PCM_RATE_48000;
+		chip->ichd[chip->spdif_idx].pcm->rates = SNDRV_PCM_RATE_48000;
 	}
 	chip->in_ac97_init = 0;
 	return 0;
@@ -2318,6 +2336,7 @@
 	snd_intel8x0_setup_periods(chip, ichdev);
 	port = ichdev->reg_offset;
 	spin_lock_irq(&chip->reg_lock);
+	chip->in_measurement = 1;
 	/* trigger */
 	if (chip->device_type != DEVICE_ALI)
 		iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE | ICH_STARTBM);
@@ -2327,18 +2346,14 @@
 	}
 	do_gettimeofday(&start_time);
 	spin_unlock_irq(&chip->reg_lock);
-#if 0
 	set_current_state(TASK_UNINTERRUPTIBLE);
 	schedule_timeout(HZ / 20);
-#else
-	/* FIXME: schedule() can take too long time and overlap the boundary.. */
-	mdelay(50);
-#endif
 	spin_lock_irq(&chip->reg_lock);
 	/* check the position */
 	pos = ichdev->fragsize1;
 	pos -= igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << ichdev->pos_shift;
 	pos += ichdev->position;
+	chip->in_measurement = 0;
 	do_gettimeofday(&stop_time);
 	/* stop */
 	if (chip->device_type == DEVICE_ALI) {
@@ -2502,8 +2517,9 @@
 	if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) {	/* ICH4 and Nforce */
 		chip->mmio = 1;
 		chip->addr = pci_resource_start(pci, 2);
-		chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci, 2));
-		if (!chip->remap_addr) {
+		chip->remap_addr = ioremap_nocache(chip->addr,
+						   pci_resource_len(pci, 2));
+		if (chip->remap_addr == NULL) {
 			snd_printk("AC'97 space ioremap problem\n");
 			snd_intel8x0_free(chip);
 			return -EIO;
@@ -2514,8 +2530,9 @@
 	if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) {	/* ICH4 */
 		chip->bm_mmio = 1;
 		chip->bmaddr = pci_resource_start(pci, 3);
-		chip->remap_bmaddr = ioremap_nocache(chip->bmaddr, pci_resource_len(pci, 3));
-		if (!chip->remap_bmaddr) {
+		chip->remap_bmaddr = ioremap_nocache(chip->bmaddr,
+						     pci_resource_len(pci, 3));
+		if (chip->remap_bmaddr == NULL) {
 			snd_printk("Controller space ioremap problem\n");
 			snd_intel8x0_free(chip);
 			return -EIO;
@@ -2679,6 +2696,8 @@
 	}
 	if (buggy_irq[dev])
 		chip->buggy_irq = 1;
+	if (xbox[dev])
+		chip->xbox = 1;
 
 	if ((err = snd_intel8x0_mixer(chip, ac97_clock[dev], ac97_quirk[dev])) < 0) {
 		snd_card_free(card);
@@ -2689,20 +2708,11 @@
 		return err;
 	}
 	
-	if (mpu_port[dev] == 0x300 || mpu_port[dev] == 0x330) {
-		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_INTEL8X0,
-					       mpu_port[dev], 0,
-					       -1, 0, &chip->rmidi)) < 0) {
-			printk(KERN_ERR "intel8x0: no UART401 device at 0x%x, skipping.\n", mpu_port[dev]);
-			mpu_port[dev] = 0;
-		}
-	} else
-		mpu_port[dev] = 0;
-
 	snd_intel8x0_proc_init(chip);
 
-	sprintf(card->longname, "%s at 0x%lx, irq %i",
-		card->shortname, chip->addr, chip->irq);
+	snprintf(card->longname, sizeof(card->longname),
+		 "%s with %s at %#lx, irq %i", card->shortname,
+		 snd_ac97_get_short_name(chip->ac97[0]), chip->addr, chip->irq);
 
 	if (! ac97_clock[dev])
 		intel8x0_measure_ac97_clock(chip);
@@ -2731,129 +2741,18 @@
 };
 
 
-#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
-/*
- * initialize joystick/midi addresses
- */
-
-#ifdef SUPPORT_JOYSTICK
-/* there is only one available device, so we keep it here */
-static struct pci_dev *ich_gameport_pci;
-static struct gameport ich_gameport = { .io = 0x200 };
-#endif
-
-static int __devinit snd_intel8x0_joystick_probe(struct pci_dev *pci,
-						 const struct pci_device_id *id)
-{
-	u16 val;
-	static int dev;
-	if (dev >= SNDRV_CARDS)
-		return -ENODEV;
-	if (!enable[dev]) {
-		dev++;
-		return -ENOENT;
-	}
-
-	pci_read_config_word(pci, 0xe6, &val);
-#ifdef SUPPORT_JOYSTICK
-	val &= ~0x100;
-	if (joystick[dev]) {
-		if (! request_region(ich_gameport.io, 8, "ICH gameport")) {
-			printk(KERN_WARNING "intel8x0: cannot grab gameport 0x%x\n",  ich_gameport.io);
-			joystick[dev] = 0;
-		} else {
-			ich_gameport_pci = pci;
-			gameport_register_port(&ich_gameport);
-			val |= 0x100;
-		}
-	}
-#endif
-#ifdef SUPPORT_MIDI
-	val &= ~0x20;
-	if (mpu_port[dev] > 0) {
-		if (mpu_port[dev] == 0x300 || mpu_port[dev] == 0x330) {
-			u8 b;
-			val |= 0x20;
-			pci_read_config_byte(pci, 0xe2, &b);
-			if (mpu_port[dev] == 0x300)
-				b |= 0x08;
-			else
-				b &= ~0x08;
-			pci_write_config_byte(pci, 0xe2, b);
-		}
-	}
-#endif
-	pci_write_config_word(pci, 0xe6, val);
-	return 0;
-}
-
-static void __devexit snd_intel8x0_joystick_remove(struct pci_dev *pci)
-{
-	u16 val;
-#ifdef SUPPORT_JOYSTICK
-	if (ich_gameport_pci == pci) {
-		gameport_unregister_port(&ich_gameport);
-		release_region(ich_gameport.io, 8);
-		ich_gameport_pci = NULL;
-	}
-#endif
-	/* disable joystick and MIDI */
-	pci_read_config_word(pci, 0xe6, &val);
-	val &= ~0x120;
-	pci_write_config_word(pci, 0xe6, val);
-}
-
-static struct pci_device_id snd_intel8x0_joystick_ids[] = {
-	{ 0x8086, 0x2410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 82801AA */
-	{ 0x8086, 0x2420, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 82901AB */
-	{ 0x8086, 0x2440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICH2 */
-	{ 0x8086, 0x244c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICH2M */
-	{ 0x8086, 0x248c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* ICH3 */
-	// { 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 440MX */
-	// { 0x1039, 0x7012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* SI7012 */
-	{ 0x10de, 0x01b2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* NFORCE */
-	{ 0x10de, 0x006b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* NFORCE2 */
-	{ 0x10de, 0x00db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* NFORCE3 */
-	{ 0, }
-};
-
-static struct pci_driver joystick_driver = {
-	.name = "Intel ICH Joystick",
-	.id_table = snd_intel8x0_joystick_ids,
-	.probe = snd_intel8x0_joystick_probe,
-	.remove = __devexit_p(snd_intel8x0_joystick_remove),
-};
-
-static int have_joystick;
-#endif
-
 static int __init alsa_card_intel8x0_init(void)
 {
 	int err;
 
         if ((err = pci_module_init(&driver)) < 0)
                 return err;
-
-#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
-	if (pci_module_init(&joystick_driver) < 0) {
-		snd_printdd(KERN_INFO "no joystick found\n");
-		have_joystick = 0;
-	} else {
-		snd_printdd(KERN_INFO "joystick(s) found\n");
-		have_joystick = 1;
-	}
-#endif
         return 0;
-
 }
 
 static void __exit alsa_card_intel8x0_exit(void)
 {
 	pci_unregister_driver(&driver);
-#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
-	if (have_joystick)
-		pci_unregister_driver(&joystick_driver);
-#endif
 }
 
 module_init(alsa_card_intel8x0_init)
diff -Nru a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c
--- a/sound/pci/intel8x0m.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/intel8x0m.c	2004-09-26 10:55:59 -07:00
@@ -30,13 +30,11 @@
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/slab.h>
-#include <linux/gameport.h>
 #include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/ac97_codec.h>
 #include <sound/info.h>
-#include <sound/mpu401.h>
 #include <sound/initval.h>
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
@@ -48,8 +46,13 @@
 		"{Intel,82801CA-ICH3},"
 		"{Intel,82801DB-ICH4},"
 		"{Intel,ICH5},"
-	        "{Intel,MX440}}");
-
+	        "{Intel,MX440},"
+		"{SiS,7013},"
+		"{NVidia,NForce Modem},"
+		"{NVidia,NForce2 Modem},"
+		"{NVidia,NForce2s Modem},"
+		"{NVidia,NForce3 Modem},"
+		"{AMD,AMD768}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -233,10 +236,10 @@
 
 	unsigned int mmio;
 	unsigned long addr;
-	unsigned long remap_addr;
+	void __iomem *remap_addr;
 	unsigned int bm_mmio;
 	unsigned long bmaddr;
-	unsigned long remap_bmaddr;
+	void __iomem *remap_bmaddr;
 
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -1066,9 +1069,9 @@
 	if (chip->bdbars.area)
 		snd_dma_free_pages(&chip->bdbars);
 	if (chip->remap_addr)
-		iounmap((void *) chip->remap_addr);
+		iounmap(chip->remap_addr);
 	if (chip->remap_bmaddr)
-		iounmap((void *) chip->remap_bmaddr);
+		iounmap(chip->remap_bmaddr);
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
 	pci_release_regions(chip->pci);
@@ -1193,9 +1196,9 @@
 	if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) {	/* ICH4 and Nforce */
 		chip->mmio = 1;
 		chip->addr = pci_resource_start(pci, 2);
-		chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr,
-								   pci_resource_len(pci, 2));
-		if (chip->remap_addr == 0) {
+		chip->remap_addr = ioremap_nocache(chip->addr,
+						   pci_resource_len(pci, 2));
+		if (chip->remap_addr == NULL) {
 			snd_printk("AC'97 space ioremap problem\n");
 			snd_intel8x0_free(chip);
 			return -EIO;
@@ -1206,9 +1209,9 @@
 	if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) {	/* ICH4 */
 		chip->bm_mmio = 1;
 		chip->bmaddr = pci_resource_start(pci, 3);
-		chip->remap_bmaddr = (unsigned long) ioremap_nocache(chip->bmaddr,
-								     pci_resource_len(pci, 3));
-		if (chip->remap_bmaddr == 0) {
+		chip->remap_bmaddr = ioremap_nocache(chip->bmaddr,
+						     pci_resource_len(pci, 3));
+		if (chip->remap_bmaddr == NULL) {
 			snd_printk("Controller space ioremap problem\n");
 			snd_intel8x0_free(chip);
 			return -EIO;
@@ -1332,15 +1335,7 @@
 	if (card == NULL)
 		return -ENOMEM;
 
-	switch (pci_id->driver_data) {
-	case DEVICE_NFORCE:
-		strcpy(card->driver, "NFORCE-MODEM");
-		break;
-	default:
-		strcpy(card->driver, "ICH-MODEM");
-		break;
-	}
-
+	strcpy(card->driver, "ICH-MODEM");
 	strcpy(card->shortname, "Intel ICH");
 	for (name = shortnames; name->id; name++) {
 		if (pci->device == name->id) {
diff -Nru a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c
--- a/sound/pci/korg1212/korg1212.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/korg1212/korg1212.c	2004-09-26 10:55:59 -07:00
@@ -168,7 +168,7 @@
 #define DOORBELL_VAL_MASK    0x00FF    // the doorbell value is one byte
 
 #define CARD_BOOT_DELAY_IN_MS  10
-
+#define CARD_BOOT_TIMEOUT      10
 #define DSP_BOOT_DELAY_IN_MS   200
 
 #define kNumBuffers		8
@@ -341,7 +341,7 @@
 	unsigned long iomem2;
         unsigned long irqcount;
         unsigned long inIRQ;
-        unsigned long iobase;
+        void __iomem *iobase;
 
 	struct snd_dma_buffer dma_dsp;
         struct snd_dma_buffer dma_play;
@@ -364,16 +364,16 @@
 	u32 RoutingTablePhy;
 	u32 AdatTimeCodePhy;
 
-        u32 * statusRegPtr;	     // address of the interrupt status/control register
-        u32 * outDoorbellPtr;	     // address of the host->card doorbell register
-        u32 * inDoorbellPtr;	     // address of the card->host doorbell register
-        u32 * mailbox0Ptr;	     // address of mailbox 0 on the card
-        u32 * mailbox1Ptr;	     // address of mailbox 1 on the card
-        u32 * mailbox2Ptr;	     // address of mailbox 2 on the card
-        u32 * mailbox3Ptr;	     // address of mailbox 3 on the card
-        u32 * controlRegPtr;	     // address of the EEPROM, PCI, I/O, Init ctrl reg
-        u16 * sensRegPtr;	     // address of the sensitivity setting register
-        u32 * idRegPtr;		     // address of the device and vendor ID registers
+        u32 __iomem * statusRegPtr;	     // address of the interrupt status/control register
+        u32 __iomem * outDoorbellPtr;	     // address of the host->card doorbell register
+        u32 __iomem * inDoorbellPtr;	     // address of the card->host doorbell register
+        u32 __iomem * mailbox0Ptr;	     // address of mailbox 0 on the card
+        u32 __iomem * mailbox1Ptr;	     // address of mailbox 1 on the card
+        u32 __iomem * mailbox2Ptr;	     // address of mailbox 2 on the card
+        u32 __iomem * mailbox3Ptr;	     // address of mailbox 3 on the card
+        u32 __iomem * controlRegPtr;	     // address of the EEPROM, PCI, I/O, Init ctrl reg
+        u16 __iomem * sensRegPtr;	     // address of the sensitivity setting register
+        u32 __iomem * idRegPtr;		     // address of the device and vendor ID registers
 
         size_t periodsize;
 	int channels;
@@ -382,6 +382,9 @@
         snd_pcm_substream_t *playback_substream;
         snd_pcm_substream_t *capture_substream;
 
+	pid_t capture_pid;
+	pid_t playback_pid;
+
  	CardState cardState;
         int running;
         int idleMonitorOn;           // indicates whether the card is in idle monitor mode.
@@ -797,11 +800,12 @@
 
 static void snd_korg1212_EnableCardInterrupts(korg1212_t * korg1212)
 {
-	* korg1212->statusRegPtr = PCI_INT_ENABLE_BIT            |
-                                   PCI_DOORBELL_INT_ENABLE_BIT   |
-                                   LOCAL_INT_ENABLE_BIT          |
-                                   LOCAL_DOORBELL_INT_ENABLE_BIT |
-                                   LOCAL_DMA1_INT_ENABLE_BIT;
+	writel(PCI_INT_ENABLE_BIT            |
+	       PCI_DOORBELL_INT_ENABLE_BIT   |
+	       LOCAL_INT_ENABLE_BIT          |
+	       LOCAL_DOORBELL_INT_ENABLE_BIT |
+	       LOCAL_DMA1_INT_ENABLE_BIT,
+	       korg1212->statusRegPtr);
 }
 
 #if 0 /* not used */
@@ -844,6 +848,20 @@
 
 #endif /* not used */
 
+static inline int snd_korg1212_use_is_exclusive(korg1212_t *korg1212)
+{
+	unsigned long flags;
+	int ret = 1;
+
+	spin_lock_irqsave(&korg1212->lock, flags);
+	if ((korg1212->playback_pid != korg1212->capture_pid) &&
+	    (korg1212->playback_pid >= 0) && (korg1212->capture_pid >= 0)) {
+		ret = 0;
+	}
+	spin_unlock_irqrestore(&korg1212->lock, flags);
+	return ret;
+}
+
 static int snd_korg1212_SetRate(korg1212_t *korg1212, int rate)
 {
         static ClockSourceIndex s44[] = { K1212_CLKIDX_AdatAt44_1K,
@@ -855,6 +873,10 @@
                                           K1212_CLKIDX_LocalAt48K };
         int parm;
 
+        if (!snd_korg1212_use_is_exclusive (korg1212)) {
+                return -EBUSY;
+        }
+
         switch(rate) {
                 case 44100:
                 parm = s44[korg1212->clkSource];
@@ -898,7 +920,7 @@
 
 static void snd_korg1212_DisableCardInterrupts(korg1212_t *korg1212)
 {
-	* korg1212->statusRegPtr = 0;
+	writel(0, korg1212->statusRegPtr);
 }
 
 static int snd_korg1212_WriteADCSensitivity(korg1212_t *korg1212)
@@ -1245,7 +1267,7 @@
 	if (rc) K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n", rc, stateName[korg1212->cardState]);
 #endif
 
-	if (! sleep_on_timeout(&korg1212->wait, HZ * 4))
+	if (! sleep_on_timeout(&korg1212->wait, HZ * CARD_BOOT_TIMEOUT))
 		return -EBUSY; /* timeout */
 
 	snd_korg1212_OnDSPDownloadComplete(korg1212);
@@ -1414,6 +1436,7 @@
         spin_lock_irqsave(&korg1212->lock, flags);
 
         korg1212->playback_substream = substream;
+	korg1212->playback_pid = current->pid;
         korg1212->periodsize = K1212_PERIODS;
 	korg1212->channels = K1212_CHANNELS;
 
@@ -1444,6 +1467,7 @@
         spin_lock_irqsave(&korg1212->lock, flags);
 
         korg1212->capture_substream = substream;
+	korg1212->capture_pid = current->pid;
         korg1212->periodsize = K1212_PERIODS;
 	korg1212->channels = K1212_CHANNELS;
 
@@ -1466,6 +1490,7 @@
 
         spin_lock_irqsave(&korg1212->lock, flags);
 
+	korg1212->playback_pid = -1;
         korg1212->playback_substream = NULL;
         korg1212->periodsize = 0;
 
@@ -1486,6 +1511,7 @@
 
         spin_lock_irqsave(&korg1212->lock, flags);
 
+	korg1212->capture_pid = -1;
         korg1212->capture_substream = NULL;
         korg1212->periodsize = 0;
 
@@ -1522,22 +1548,45 @@
         unsigned long flags;
         korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         int err;
+	pid_t this_pid;
+	pid_t other_pid;
 
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_hw_params [%s]\n", stateName[korg1212->cardState]);
 #endif
 
         spin_lock_irqsave(&korg1212->lock, flags);
+
+	if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+		this_pid = korg1212->playback_pid;
+		other_pid = korg1212->capture_pid;
+	} else {
+		this_pid = korg1212->capture_pid;
+		other_pid = korg1212->playback_pid;
+	}
+
+	if ((other_pid > 0) && (this_pid != other_pid)) {
+
+		/* The other stream is open, and not by the same
+		   task as this one. Make sure that the parameters
+		   that matter are the same.
+		 */
+
+		if ((int)params_rate(params) != korg1212->clkRate) {
+			spin_unlock_irqrestore(&korg1212->lock, flags);
+			_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
+			return -EBUSY;
+		}
+
+        	spin_unlock_irqrestore(&korg1212->lock, flags);
+	        return 0;
+	}
+
         if ((err = snd_korg1212_SetRate(korg1212, params_rate(params))) < 0) {
                 spin_unlock_irqrestore(&korg1212->lock, flags);
                 return err;
         }
-/*
-        if (params_format(params) != SNDRV_PCM_FORMAT_S16_LE) {
-                spin_unlock_irqrestore(&korg1212->lock, flags);
-                return -EINVAL;
-        }
-*/
+
 	korg1212->channels = params_channels(params);
         korg1212->periodsize = K1212_PERIOD_BYTES;
 
@@ -2091,9 +2140,9 @@
                 korg1212->irq = -1;
         }
         
-        if (korg1212->iobase != 0) {
-                iounmap((void *)korg1212->iobase);
-                korg1212->iobase = 0;
+        if (korg1212->iobase != NULL) {
+                iounmap(korg1212->iobase);
+                korg1212->iobase = NULL;
         }
         
 	pci_release_regions(korg1212->pci);
@@ -2183,6 +2232,8 @@
 	korg1212->opencnt = 0;
 	korg1212->playcnt = 0;
 	korg1212->setcnt = 0;
+	korg1212->playback_pid = -1;
+	korg1212->capture_pid = -1;
         snd_korg1212_setCardState(korg1212, K1212_STATE_UNINITIALIZED);
         korg1212->idleMonitorOn = 0;
         korg1212->clkSrcRate = K1212_CLKIDX_LocalAt44_1K;
@@ -2217,9 +2268,9 @@
 		   stateName[korg1212->cardState]);
 #endif
 
-        if ((korg1212->iobase = (unsigned long) ioremap(korg1212->iomem, iomem_size)) == 0) {
-		snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n", korg1212->iobase,
-                           korg1212->iobase + iomem_size - 1);
+        if ((korg1212->iobase = ioremap(korg1212->iomem, iomem_size)) == NULL) {
+		snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n", korg1212->iomem,
+                           korg1212->iomem + iomem_size - 1);
                 return -EBUSY;
         }
 
@@ -2236,16 +2287,16 @@
 
 	pci_set_master(korg1212->pci);
 
-        korg1212->statusRegPtr = (u32 *) (korg1212->iobase + STATUS_REG_OFFSET);
-        korg1212->outDoorbellPtr = (u32 *) (korg1212->iobase + OUT_DOORBELL_OFFSET);
-        korg1212->inDoorbellPtr = (u32 *) (korg1212->iobase + IN_DOORBELL_OFFSET);
-        korg1212->mailbox0Ptr = (u32 *) (korg1212->iobase + MAILBOX0_OFFSET);
-        korg1212->mailbox1Ptr = (u32 *) (korg1212->iobase + MAILBOX1_OFFSET);
-        korg1212->mailbox2Ptr = (u32 *) (korg1212->iobase + MAILBOX2_OFFSET);
-        korg1212->mailbox3Ptr = (u32 *) (korg1212->iobase + MAILBOX3_OFFSET);
-        korg1212->controlRegPtr = (u32 *) (korg1212->iobase + PCI_CONTROL_OFFSET);
-        korg1212->sensRegPtr = (u16 *) (korg1212->iobase + SENS_CONTROL_OFFSET);
-        korg1212->idRegPtr = (u32 *) (korg1212->iobase + DEV_VEND_ID_OFFSET);
+        korg1212->statusRegPtr = (u32 __iomem *) (korg1212->iobase + STATUS_REG_OFFSET);
+        korg1212->outDoorbellPtr = (u32 __iomem *) (korg1212->iobase + OUT_DOORBELL_OFFSET);
+        korg1212->inDoorbellPtr = (u32 __iomem *) (korg1212->iobase + IN_DOORBELL_OFFSET);
+        korg1212->mailbox0Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX0_OFFSET);
+        korg1212->mailbox1Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX1_OFFSET);
+        korg1212->mailbox2Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX2_OFFSET);
+        korg1212->mailbox3Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX3_OFFSET);
+        korg1212->controlRegPtr = (u32 __iomem *) (korg1212->iobase + PCI_CONTROL_OFFSET);
+        korg1212->sensRegPtr = (u16 __iomem *) (korg1212->iobase + SENS_CONTROL_OFFSET);
+        korg1212->idRegPtr = (u32 __iomem *) (korg1212->iobase + DEV_VEND_ID_OFFSET);
 
 #if K1212_DEBUG_LEVEL > 0
         K1212_DEBUG_PRINTK("K1212_DEBUG: card registers:\n"
@@ -2312,7 +2363,7 @@
 
 #if K1212_DEBUG_LEVEL > 0
         K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n",
-		korg1212->recordDataBufsPtr, korg1212->RecDataBufsPhy, korg1212->DataBufsSize);
+		korg1212->recordDataBufsPtr, korg1212->RecDataPhy, korg1212->DataBufsSize);
 #endif
 
 #else // K1212_LARGEALLOC
diff -Nru a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
--- a/sound/pci/mixart/mixart.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/mixart/mixart.c	2004-09-26 10:55:59 -07:00
@@ -1078,7 +1078,7 @@
 	/* release the i/o ports */
 	for (i = 0; i < 2; i++) {
 		if (mgr->mem[i].virt)
-			iounmap((void *)mgr->mem[i].virt);
+			iounmap(mgr->mem[i].virt);
 	}
 	pci_release_regions(mgr->pci);
 
@@ -1312,8 +1312,8 @@
 	}
 	for (i = 0; i < 2; i++) {
 		mgr->mem[i].phys = pci_resource_start(pci, i);
-		mgr->mem[i].virt = (unsigned long)ioremap_nocache(mgr->mem[i].phys,
-								  pci_resource_len(pci, i));
+		mgr->mem[i].virt = ioremap_nocache(mgr->mem[i].phys,
+						   pci_resource_len(pci, i));
 	}
 
 	if (request_irq(pci->irq, snd_mixart_interrupt, SA_INTERRUPT|SA_SHIRQ, CARD_NAME, (void *)mgr)) {
diff -Nru a/sound/pci/mixart/mixart.h b/sound/pci/mixart/mixart.h
--- a/sound/pci/mixart/mixart.h	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/mixart/mixart.h	2004-09-26 10:55:59 -07:00
@@ -53,7 +53,7 @@
 
 struct mem_area {
 	unsigned long phys;
-	unsigned long virt;
+	void __iomem *virt;
 	struct resource *res;
 };
 
diff -Nru a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c
--- a/sound/pci/nm256/nm256.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/nm256/nm256.c	2004-09-26 10:55:59 -07:00
@@ -190,7 +190,7 @@
 	
 	u32 buf;	/* offset from chip->buffer */
 	int bufsize;	/* buffer size in bytes */
-	unsigned long bufptr;		/* mapped pointer */
+	void __iomem *bufptr;		/* mapped pointer */
 	unsigned long bufptr_addr;	/* physical address of the mapped pointer */
 
 	int dma_size;		/* buffer size of the substream in bytes */
@@ -205,11 +205,11 @@
 	
 	snd_card_t *card;
 
-	unsigned long cport;		/* control port */
+	void __iomem *cport;		/* control port */
 	struct resource *res_cport;	/* its resource */
 	unsigned long cport_addr;	/* physical address */
 
-	unsigned long buffer;		/* buffer */
+	void __iomem *buffer;		/* buffer */
 	struct resource *res_buffer;	/* its resource */
 	unsigned long buffer_addr;	/* buffer phyiscal address */
 
@@ -329,7 +329,7 @@
 		return;
 	}
 #endif
-	memcpy_toio((void *)chip->buffer + offset, src, size);
+	memcpy_toio(chip->buffer + offset, src, size);
 }
 
 /*
@@ -887,8 +887,8 @@
 
 	for (i = 0; i < 2; i++) {
 		nm256_stream_t *s = &chip->streams[i];
-		s->bufptr = chip->buffer +  s->buf - chip->buffer_start;
-		s->bufptr_addr = chip->buffer_addr + s->buf - chip->buffer_start;
+		s->bufptr = chip->buffer + (s->buf - chip->buffer_start);
+		s->bufptr_addr = chip->buffer_addr + (s->buf - chip->buffer_start);
 	}
 
 	err = snd_pcm_new(chip->card, chip->card->driver, device,
@@ -1226,13 +1226,13 @@
 snd_nm256_peek_for_sig(nm256_t *chip)
 {
 	/* The signature is located 1K below the end of video RAM.  */
-	unsigned long temp;
+	void __iomem *temp;
 	/* Default buffer end is 5120 bytes below the top of RAM.  */
 	unsigned long pointer_found = chip->buffer_end - 0x1400;
 	u32 sig;
 
-	temp = (unsigned long) ioremap_nocache(chip->buffer_addr + chip->buffer_end - 0x400, 16);
-	if (temp == 0) {
+	temp = ioremap_nocache(chip->buffer_addr + chip->buffer_end - 0x400, 16);
+	if (temp == NULL) {
 		snd_printk("Unable to scan for card signature in video RAM\n");
 		return -EBUSY;
 	}
@@ -1248,7 +1248,7 @@
 		    pointer < chip->buffer_size ||
 		    pointer > chip->buffer_end) {
 			snd_printk("invalid signature found: 0x%x\n", pointer);
-			iounmap((void *)temp);
+			iounmap(temp);
 			return -ENODEV;
 		} else {
 			pointer_found = pointer;
@@ -1256,7 +1256,7 @@
 		}
 	}
 
-	iounmap((void *)temp);
+	iounmap(temp);
 	chip->buffer_end = pointer_found;
 
 	return 0;
@@ -1305,9 +1305,9 @@
 		synchronize_irq(chip->irq);
 
 	if (chip->cport)
-		iounmap((void *) chip->cport);
+		iounmap(chip->cport);
 	if (chip->buffer)
-		iounmap((void *) chip->buffer);
+		iounmap(chip->buffer);
 	if (chip->res_cport) {
 		release_resource(chip->res_cport);
 		kfree_nocheck(chip->res_cport);
@@ -1380,8 +1380,8 @@
 		err = -EBUSY;
 		goto __error;
 	}
-	chip->cport = (unsigned long) ioremap_nocache(chip->cport_addr, NM_PORT2_SIZE);
-	if (chip->cport == 0) {
+	chip->cport = ioremap_nocache(chip->cport_addr, NM_PORT2_SIZE);
+	if (chip->cport == NULL) {
 		snd_printk("unable to map control port %lx\n", chip->cport_addr);
 		err = -ENOMEM;
 		goto __error;
@@ -1445,8 +1445,8 @@
 		err = -EBUSY;
 		goto __error;
 	}
-	chip->buffer = (unsigned long) ioremap_nocache(chip->buffer_addr, chip->buffer_size);
-	if (chip->buffer == 0) {
+	chip->buffer = ioremap_nocache(chip->buffer_addr, chip->buffer_size);
+	if (chip->buffer == NULL) {
 		err = -ENOMEM;
 		snd_printk("unable to map ring buffer at %lx\n", chip->buffer_addr);
 		goto __error;
diff -Nru a/sound/pci/rme32.c b/sound/pci/rme32.c
--- a/sound/pci/rme32.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/rme32.c	2004-09-26 10:55:59 -07:00
@@ -211,7 +211,7 @@
 	spinlock_t lock;
 	int irq;
 	unsigned long port;
-	unsigned long iobase;
+	void __iomem *iobase;
 
 	u32 wcreg;		/* cached write control register value */
 	u32 wcreg_spdif;	/* S/PDIF setup */
@@ -726,9 +726,8 @@
 	/* S/PDIF setup */
 	if ((rme32->wcreg & RME32_WCR_ADAT) == 0) {
 		rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
-		writel(rme32->wcreg |=
-		       rme32->wcreg_spdif_stream,
-		       rme32->iobase + RME32_IO_CONTROL_REGISTER);
+		rme32->wcreg |= rme32->wcreg_spdif_stream;
+		writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 	}
 	spin_unlock_irq(&rme32->lock);
 
@@ -1124,7 +1123,7 @@
 	}
 	
 	/* prefill playback buffer */
-	if (cmd == SNDRV_PCM_TRIGGER_START) {
+	if (cmd == SNDRV_PCM_TRIGGER_START && rme32->fullduplex_mode) {
 		snd_pcm_group_for_each(pos, substream) {
 			s = snd_pcm_group_substream_entry(pos);
 			if (s == rme32->playback_substream) {
@@ -1345,8 +1344,8 @@
 		rme32->irq = -1;
 	}
 	if (rme32->iobase) {
-		iounmap((void *) rme32->iobase);
-		rme32->iobase = 0;
+		iounmap(rme32->iobase);
+		rme32->iobase = NULL;
 	}
 	if (rme32->port) {
 		pci_release_regions(rme32->pci);
@@ -1388,7 +1387,7 @@
 	}
 	rme32->irq = pci->irq;
 
-	if ((rme32->iobase = (unsigned long) ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
+	if ((rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) {
 		snd_printk("unable to remap memory region 0x%lx-0x%lx\n",
 			   rme32->port, rme32->port + RME32_IO_SIZE - 1);
 		return -ENOMEM;
@@ -1637,8 +1636,8 @@
 		val &= ~RME32_WCR_MUTE;
 	else
 		val |= RME32_WCR_MUTE;
-	writel(rme32->wcreg =
-	       val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+	rme32->wcreg = val;
+	writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 	spin_unlock_irq(&rme32->lock);
 	return change;
 }
@@ -1862,7 +1861,8 @@
 	change = val != rme32->wcreg_spdif_stream;
 	rme32->wcreg_spdif_stream = val;
 	rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
-	writel(rme32->wcreg |= val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+	rme32->wcreg |= val;
+	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 	spin_unlock_irq(&rme32->lock);
 	return change;
 }
diff -Nru a/sound/pci/rme96.c b/sound/pci/rme96.c
--- a/sound/pci/rme96.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/rme96.c	2004-09-26 10:55:59 -07:00
@@ -225,7 +225,7 @@
 	spinlock_t    lock;
 	int irq;
 	unsigned long port;
-	unsigned long iobase;
+	void __iomem *iobase;
 	
 	u32 wcreg;    /* cached write control register value */
 	u32 wcreg_spdif;		/* S/PDIF setup */
@@ -1547,8 +1547,8 @@
 		rme96->irq = -1;
 	}
 	if (rme96->iobase) {
-		iounmap((void *)rme96->iobase);
-		rme96->iobase = 0;
+		iounmap(rme96->iobase);
+		rme96->iobase = NULL;
 	}
 	if (rme96->port) {
 		pci_release_regions(rme96->pci);
@@ -1592,7 +1592,7 @@
 	}
 	rme96->irq = pci->irq;
 
-	if ((rme96->iobase = (unsigned long) ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) {
+	if ((rme96->iobase = ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) {
 		snd_printk("unable to remap memory region 0x%lx-0x%lx\n", rme96->port, rme96->port + RME96_IO_SIZE - 1);
 		return -ENOMEM;
 	}
@@ -1859,7 +1859,8 @@
 	spin_lock_irq(&rme96->lock);
 	val = (rme96->wcreg & ~RME96_WCR_SEL) | val;
 	change = val != rme96->wcreg;
-	writel(rme96->wcreg = val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
+	rme96->wcreg = val;
+	writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 	spin_unlock_irq(&rme96->lock);
 	return change;
 }
@@ -2177,7 +2178,8 @@
 	change = val != rme96->wcreg_spdif_stream;
 	rme96->wcreg_spdif_stream = val;
 	rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
-	writel(rme96->wcreg |= val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
+	rme96->wcreg |= val;
+	writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 	spin_unlock_irq(&rme96->lock);
 	return change;
 }
diff -Nru a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
--- a/sound/pci/rme9652/hdsp.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/rme9652/hdsp.c	2004-09-26 10:55:59 -07:00
@@ -471,7 +471,7 @@
 	int                   dev;
 	int                   irq;
 	unsigned long         port;
-        unsigned long         iobase;
+        void __iomem         *iobase;
 	snd_card_t           *card;
 	snd_pcm_t            *pcm;
 	snd_hwdep_t          *hwdep;
@@ -3228,7 +3228,7 @@
 	snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
 		    hdsp->capture_buffer, hdsp->playback_buffer);
 	snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
-		    hdsp->irq, hdsp->port, hdsp->iobase);
+		    hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase);
 	snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register);
 	snd_iprintf(buffer, "Control2 register: 0x%x\n", hdsp->control2_register);
 	snd_iprintf(buffer, "Status register: 0x%x\n", status);
@@ -4445,7 +4445,7 @@
 		int i;
 		
 		if (hdsp->io_type == H9652) {
-			unsigned long rms_low, rms_high;
+			u32 rms_low, rms_high;
 			int doublespeed = 0;
 			if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
 				doublespeed = 1;
@@ -4458,24 +4458,24 @@
 						return -EFAULT;
 					if (copy_to_user_fromio((void __user *)peak_rms->output_peaks+i*4, hdsp->iobase+HDSP_9652_peakBase-2*(doublespeed ? 14 : 26)*4-i*4, 4) != 0)
 						return -EFAULT;
-					rms_low = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+i*8) & 0xFFFFFF00;
-					rms_high = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+i*8+4) & 0xFFFFFF00;
+					rms_low = readl(hdsp->iobase+HDSP_9652_rmsBase+i*8) & 0xFFFFFF00;
+					rms_high = readl(hdsp->iobase+HDSP_9652_rmsBase+i*8+4) & 0xFFFFFF00;
 					rms_high += (rms_low >> 24);
 					rms_low <<= 8;
 					if (copy_to_user((void __user *)peak_rms->input_rms+i*8, &rms_low, 4) != 0)
 						return -EFAULT;
 					if (copy_to_user((void __user *)peak_rms->input_rms+i*8+4, &rms_high, 4) != 0)
 						return -EFAULT;					
-					rms_low = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+(doublespeed ? 14 : 26)*8+i*8) & 0xFFFFFF00;
-					rms_high = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+(doublespeed ? 14 : 26)*8+i*8+4) & 0xFFFFFF00;
+					rms_low = readl(hdsp->iobase+HDSP_9652_rmsBase+(doublespeed ? 14 : 26)*8+i*8) & 0xFFFFFF00;
+					rms_high = readl(hdsp->iobase+HDSP_9652_rmsBase+(doublespeed ? 14 : 26)*8+i*8+4) & 0xFFFFFF00;
 					rms_high += (rms_low >> 24);
 					rms_low <<= 8;
 					if (copy_to_user((void __user *)peak_rms->playback_rms+i*8, &rms_low, 4) != 0)
 						return -EFAULT;
 					if (copy_to_user((void __user *)peak_rms->playback_rms+i*8+4, &rms_high, 4) != 0)
 						return -EFAULT;					
-					rms_low = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+2*(doublespeed ? 14 : 26)*8+i*8) & 0xFFFFFF00;
-					rms_high = *(u32 *)(hdsp->iobase+HDSP_9652_rmsBase+2*(doublespeed ? 14 : 26)*8+i*8+4) & 0xFFFFFF00;
+					rms_low = readl(hdsp->iobase+HDSP_9652_rmsBase+2*(doublespeed ? 14 : 26)*8+i*8) & 0xFFFFFF00;
+					rms_high = readl(hdsp->iobase+HDSP_9652_rmsBase+2*(doublespeed ? 14 : 26)*8+i*8+4) & 0xFFFFFF00;
 					rms_high += (rms_low >> 24);
 					rms_low <<= 8;
 					if (copy_to_user((void __user *)peak_rms->output_rms+i*8, &rms_low, 4) != 0)
@@ -4488,30 +4488,30 @@
 		}
 		if (hdsp->io_type == H9632) {
 			int j;
-			hdsp_9632_meters_t *m;
+			hdsp_9632_meters_t __iomem *m;
 			int doublespeed = 0;
 			if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
 				doublespeed = 1;
-			m = (hdsp_9632_meters_t *)(hdsp->iobase+HDSP_9632_metersBase);
+			m = (hdsp_9632_meters_t __iomem *)(hdsp->iobase+HDSP_9632_metersBase);
 			peak_rms = (hdsp_peak_rms_t __user *)arg;
 			for (i = 0, j = 0; i < 16; ++i, ++j) {
-				if (copy_to_user((void __user *)peak_rms->input_peaks+i*4, &(m->input_peak[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->input_peaks+i*4, &(m->input_peak[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->playback_peaks+i*4, &(m->playback_peak[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->playback_peaks+i*4, &(m->playback_peak[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->output_peaks+i*4, &(m->output_peak[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->output_peaks+i*4, &(m->output_peak[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->input_rms+i*8, &(m->input_rms_low[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->input_rms+i*8, &(m->input_rms_low[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->playback_rms+i*8, &(m->playback_rms_low[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->playback_rms+i*8, &(m->playback_rms_low[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->output_rms+i*8, &(m->output_rms_low[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->output_rms+i*8, &(m->output_rms_low[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->input_rms+i*8+4, &(m->input_rms_high[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->input_rms+i*8+4, &(m->input_rms_high[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->playback_rms+i*8+4, &(m->playback_rms_high[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->playback_rms+i*8+4, &(m->playback_rms_high[j]), 4) != 0)
 					return -EFAULT;
-				if (copy_to_user((void __user *)peak_rms->output_rms+i*8+4, &(m->output_rms_high[j]), 4) != 0)
+				if (copy_to_user_fromio((void __user *)peak_rms->output_rms+i*8+4, &(m->output_rms_high[j]), 4) != 0)
 					return -EFAULT;
 				if (doublespeed && i == 3) i += 4;
 			}
@@ -4523,23 +4523,23 @@
 		}
 		peak_rms = (hdsp_peak_rms_t __user *)arg;
 		for (i = 0; i < 26; ++i) {
-		    if (copy_to_user((void __user *)peak_rms->playback_peaks+i*4, (void *)hdsp->iobase+HDSP_playbackPeakLevel+i*4, 4) != 0)
+		    if (copy_to_user_fromio((void __user *)peak_rms->playback_peaks+i*4, hdsp->iobase+HDSP_playbackPeakLevel+i*4, 4) != 0)
 			    return -EFAULT;
-		    if (copy_to_user((void __user *)peak_rms->input_peaks+i*4, (void *)hdsp->iobase+HDSP_inputPeakLevel+i*4, 4) != 0)
+		    if (copy_to_user_fromio((void __user *)peak_rms->input_peaks+i*4, hdsp->iobase+HDSP_inputPeakLevel+i*4, 4) != 0)
 			    return -EFAULT;
 		}
 		for (i = 0; i < 26; ++i) {
-			if (copy_to_user((void __user *)peak_rms->playback_rms+i*8+4, (void *)hdsp->iobase+HDSP_playbackRmsLevel+i*8, 4) != 0)
+			if (copy_to_user_fromio((void __user *)peak_rms->playback_rms+i*8+4, hdsp->iobase+HDSP_playbackRmsLevel+i*8, 4) != 0)
 				return -EFAULT;
-			if (copy_to_user((void __user *)peak_rms->playback_rms+i*8, (void *)hdsp->iobase+HDSP_playbackRmsLevel+i*8+4, 4) != 0)
+			if (copy_to_user_fromio((void __user *)peak_rms->playback_rms+i*8, hdsp->iobase+HDSP_playbackRmsLevel+i*8+4, 4) != 0)
 				return -EFAULT;
-			if (copy_to_user((void __user *)peak_rms->input_rms+i*8+4, (void *)hdsp->iobase+HDSP_inputRmsLevel+i*8, 4) != 0)
+			if (copy_to_user_fromio((void __user *)peak_rms->input_rms+i*8+4, hdsp->iobase+HDSP_inputRmsLevel+i*8, 4) != 0)
 				return -EFAULT;
-			if (copy_to_user((void __user *)peak_rms->input_rms+i*8, (void *)hdsp->iobase+HDSP_inputRmsLevel+i*8+4, 4) != 0)
+			if (copy_to_user_fromio((void __user *)peak_rms->input_rms+i*8, hdsp->iobase+HDSP_inputRmsLevel+i*8+4, 4) != 0)
 				return -EFAULT;
 		}
 		for (i = 0; i < 28; ++i) {
-		    if (copy_to_user((void __user *)peak_rms->output_peaks+i*4, (void *)hdsp->iobase+HDSP_outputPeakLevel+i*4, 4) != 0)
+		    if (copy_to_user_fromio((void __user *)peak_rms->output_peaks+i*4, hdsp->iobase+HDSP_outputPeakLevel+i*4, 4) != 0)
 			    return -EFAULT;
 		}
 		break;
@@ -4620,7 +4620,7 @@
 	}
 	case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: {
 		hdsp_firmware_t __user *firmware;
-		unsigned long __user *firmware_data;
+		u32 __user *firmware_data;
 		int err;
 		
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
@@ -4638,7 +4638,7 @@
 			return -EIO;
 		}
 
-		if (copy_from_user(hdsp->firmware_cache, firmware_data, sizeof(unsigned long)*24413) != 0) {
+		if (copy_from_user(hdsp->firmware_cache, firmware_data, sizeof(hdsp->firmware_cache)) != 0) {
 			return -EFAULT;
 		}
 		
@@ -4879,7 +4879,7 @@
 	hdsp->midi[1].output = NULL;
 	spin_lock_init(&hdsp->midi[0].lock);
 	spin_lock_init(&hdsp->midi[1].lock);
-	hdsp->iobase = 0;
+	hdsp->iobase = NULL;
 	hdsp->control_register = 0;
 	hdsp->control2_register = 0;
 	hdsp->io_type = Undefined;
@@ -4937,7 +4937,7 @@
 	if ((err = pci_request_regions(pci, "hdsp")) < 0)
 		return err;
 	hdsp->port = pci_resource_start(pci, 0);
-	if ((hdsp->iobase = (unsigned long) ioremap_nocache(hdsp->port, HDSP_IO_EXTENT)) == 0) {
+	if ((hdsp->iobase = ioremap_nocache(hdsp->port, HDSP_IO_EXTENT)) == NULL) {
 		snd_printk("unable to remap region 0x%lx-0x%lx\n", hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
 		return -EBUSY;
 	}
@@ -5021,7 +5021,7 @@
 	snd_hdsp_free_buffers(hdsp);
 	
 	if (hdsp->iobase)
-		iounmap((void *) hdsp->iobase);
+		iounmap(hdsp->iobase);
 
 	if (hdsp->port)
 		pci_release_regions(hdsp->pci);
diff -Nru a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
--- a/sound/pci/rme9652/rme9652.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/rme9652/rme9652.c	2004-09-26 10:55:59 -07:00
@@ -212,7 +212,7 @@
 	spinlock_t lock;
 	int irq;
 	unsigned long port;
-	unsigned long iobase;
+	void __iomem *iobase;
 	
 	int precise_ptr;
 
@@ -1629,7 +1629,7 @@
 	snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
 		    rme9652->capture_buffer, rme9652->playback_buffer);
 	snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
-		    rme9652->irq, rme9652->port, rme9652->iobase);
+		    rme9652->irq, rme9652->port, (unsigned long)rme9652->iobase);
 	snd_iprintf(buffer, "Control register: %x\n", rme9652->control_register);
 
 	snd_iprintf(buffer, "\n");
@@ -1809,7 +1809,7 @@
 	if (rme9652->irq >= 0)
 		free_irq(rme9652->irq, (void *)rme9652);
 	if (rme9652->iobase)
-		iounmap((void *) rme9652->iobase);
+		iounmap(rme9652->iobase);
 	if (rme9652->port)
 		pci_release_regions(rme9652->pci);
 
@@ -2497,8 +2497,8 @@
 	if ((err = pci_request_regions(pci, "rme9652")) < 0)
 		return err;
 	rme9652->port = pci_resource_start(pci, 0);
-	rme9652->iobase = (unsigned long) ioremap_nocache(rme9652->port, RME9652_IO_EXTENT);
-	if (rme9652->iobase == 0) {
+	rme9652->iobase = ioremap_nocache(rme9652->port, RME9652_IO_EXTENT);
+	if (rme9652->iobase == NULL) {
 		snd_printk("unable to remap region 0x%lx-0x%lx\n", rme9652->port, rme9652->port + RME9652_IO_EXTENT - 1);
 		return -EBUSY;
 	}
diff -Nru a/sound/pci/via82xx.c b/sound/pci/via82xx.c
--- a/sound/pci/via82xx.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/via82xx.c	2004-09-26 10:55:59 -07:00
@@ -1547,6 +1547,13 @@
 }
 
 static struct ac97_quirk ac97_quirks[] = {
+	{
+		.vendor = 0x1106,
+		.device = 0x4161,
+		.codec_id = 0x56494161, /* VT1612A */
+		.name = "Soltek SL-75DRV5",
+		.type = AC97_TUNE_NONE
+	},
 	{	/* FIXME: which codec? */
 		.vendor = 0x1106,
 		.device = 0x4161,
@@ -1606,6 +1613,7 @@
 		return err;
 	chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
 	chip->ac97_bus->clock = chip->ac97_clock;
+	chip->ac97_bus->shared_type = AC97_SHARED_TYPE_VIA;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -2235,8 +2243,9 @@
 	for (i = 0; i < chip->num_devs; i++)
 		snd_via82xx_channel_reset(chip, &chip->devs[i]);
 
-	sprintf(card->longname, "%s at 0x%lx, irq %d",
-		card->shortname, chip->port, chip->irq);
+	snprintf(card->longname, sizeof(card->longname),
+		 "%s with %s at %#lx, irq %d", card->shortname,
+		 snd_ac97_get_short_name(chip->ac97), chip->port, chip->irq);
 
 	snd_via82xx_proc_init(chip);
 
diff -Nru a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
--- a/sound/pci/ymfpci/ymfpci_main.c	2004-09-26 10:55:59 -07:00
+++ b/sound/pci/ymfpci/ymfpci_main.c	2004-09-26 10:55:59 -07:00
@@ -2085,7 +2085,7 @@
 	}
 #endif
 	if (chip->reg_area_virt)
-		iounmap((void *)chip->reg_area_virt);
+		iounmap(chip->reg_area_virt);
 	if (chip->work_ptr.area)
 		snd_dma_free_pages(&chip->work_ptr);
 	
@@ -2217,7 +2217,7 @@
 	chip->device_id = pci->device;
 	pci_read_config_byte(pci, PCI_REVISION_ID, (u8 *)&chip->rev);
 	chip->reg_area_phys = pci_resource_start(pci, 0);
-	chip->reg_area_virt = (unsigned long)ioremap_nocache(chip->reg_area_phys, 0x8000);
+	chip->reg_area_virt = ioremap_nocache(chip->reg_area_phys, 0x8000);
 	pci_set_master(pci);
 
 	if ((chip->res_reg_area = request_mem_region(chip->reg_area_phys, 0x8000, "YMFPCI")) == NULL) {
diff -Nru a/sound/pcmcia/Kconfig b/sound/pcmcia/Kconfig
--- a/sound/pcmcia/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/pcmcia/Kconfig	2004-09-26 10:55:59 -07:00
@@ -8,20 +8,32 @@
 	depends on SND && PCMCIA && ISA
 	select SND_VX_LIB
 	help
-	  Say 'Y' or 'M' to include support for Digigram VXpocket soundcard.
+	  Say Y here to include support for Digigram VXpocket
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-vxpocket.
 
 config SND_VXP440
 	tristate "Digigram VXpocket 440"
 	depends on SND && PCMCIA && ISA
 	select SND_VX_LIB
 	help
-	  Say 'Y' or 'M' to include support for Digigram VXpocket 440 soundcard.
+	  Say Y here to include support for Digigram VXpocket 440
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-vxp440.
 
 config SND_PDAUDIOCF
 	tristate "Sound Core PDAudioCF"
 	depends on SND && PCMCIA && ISA
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Sound Core PDAudioCF soundcard.
+	  Say Y here to include support for Sound Core PDAudioCF
+	  soundcards.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-pdaudiocf.
 
 endmenu
diff -Nru a/sound/ppc/Kconfig b/sound/ppc/Kconfig
--- a/sound/ppc/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/ppc/Kconfig	2004-09-26 10:55:59 -07:00
@@ -13,6 +13,11 @@
 	tristate "PowerMac (AWACS, DACA, Burgundy, Tumbler, Keywest)"
 	depends on SND && I2C && INPUT
 	select SND_PCM
+	help
+	  Say Y here to include support for the integrated sound device.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-powermac.
 
 endmenu
 
diff -Nru a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
--- a/sound/ppc/tumbler.c	2004-09-26 10:55:59 -07:00
+++ b/sound/ppc/tumbler.c	2004-09-26 10:55:59 -07:00
@@ -79,7 +79,7 @@
 #ifdef CONFIG_PPC_HAS_FEATURE_CALLS
 	unsigned int addr;
 #else
-	void *addr;
+	void __iomem *addr;
 #endif
 	int active_state;
 } pmac_gpio_t;
@@ -162,7 +162,7 @@
 {
 	if (gp->addr) {
 		iounmap(gp->addr);
-		gp->addr = 0;
+		gp->addr = NULL;
 	}
 }
 #endif /* CONFIG_PPC_HAS_FEATURE_CALLS */
@@ -968,7 +968,7 @@
 #ifdef CONFIG_PPC_HAS_FEATURE_CALLS
 	gp->addr = (*base) & 0x0000ffff;
 #else
-	gp->addr = (void*)ioremap((unsigned long)(*base), 1);
+	gp->addr = ioremap((unsigned long)(*base), 1);
 #endif
 	base = (u32 *)get_property(node, "audio-gpio-active-state", NULL);
 	if (base)
diff -Nru a/sound/usb/Kconfig b/sound/usb/Kconfig
--- a/sound/usb/Kconfig	2004-09-26 10:55:59 -07:00
+++ b/sound/usb/Kconfig	2004-09-26 10:55:59 -07:00
@@ -1,6 +1,6 @@
 # ALSA USB drivers
 
-menu "ALSA USB devices"
+menu "USB devices"
 	depends on SND!=n && USB!=n
 
 config SND_USB_AUDIO
@@ -9,7 +9,11 @@
 	select SND_RAWMIDI
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for USB audio and USB MIDI devices.
+	  Say Y here to include support for USB audio and USB MIDI
+	  devices.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-usb-audio.
 
 config SND_USB_USX2Y
 	tristate "Tascam US-122, US-224 and US-428 USB driver"
@@ -18,8 +22,11 @@
 	select SND_RAWMIDI
 	select SND_PCM
 	help
-	  Say 'Y' or 'M' to include support for Tascam USB Audio/MIDI 
+	  Say Y here to include support for Tascam USB Audio/MIDI
 	  interfaces or controllers US-122, US-224 and US-428.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called snd-usb-usx2y.
 
 endmenu
 
diff -Nru a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
--- a/sound/usb/usbaudio.c	2004-09-26 10:55:59 -07:00
+++ b/sound/usb/usbaudio.c	2004-09-26 10:55:59 -07:00
@@ -2823,6 +2823,56 @@
 	return 0;
 }
 
+/*
+ * Create a stream for an Edirol UA-1000 interface.
+ */
+static int create_ua1000_quirk(snd_usb_audio_t *chip, struct usb_interface *iface)
+{
+	static const struct audioformat ua1000_format = {
+		.format = SNDRV_PCM_FORMAT_S32_LE,
+		.fmt_type = USB_FORMAT_TYPE_I,
+		.altsetting = 1,
+		.altset_idx = 1,
+		.attributes = 0,
+		.rates = SNDRV_PCM_RATE_CONTINUOUS,
+	};
+	struct usb_host_interface *alts;
+	struct usb_interface_descriptor *altsd;
+	struct audioformat *fp;
+	int stream, err;
+
+	if (iface->num_altsetting != 2)
+		return -ENXIO;
+	alts = &iface->altsetting[1];
+	altsd = get_iface_desc(alts);
+	if (alts->extralen != 11 || alts->extra[1] != CS_AUDIO_INTERFACE ||
+	    altsd->bNumEndpoints != 1)
+		return -ENXIO;
+
+	fp = kmalloc(sizeof(*fp), GFP_KERNEL);
+	if (!fp)
+		return -ENOMEM;
+	memcpy(fp, &ua1000_format, sizeof(*fp));
+
+	fp->channels = alts->extra[4];
+	fp->iface = altsd->bInterfaceNumber;
+	fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
+	fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
+	fp->maxpacksize = get_endpoint(alts, 0)->wMaxPacketSize;
+	fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]);
+
+	stream = (fp->endpoint & USB_DIR_IN)
+		? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
+	err = add_audio_endpoint(chip, stream, fp);
+	if (err < 0) {
+		kfree(fp);
+		return err;
+	}
+	/* FIXME: playback must be synchronized to capture */
+	usb_set_interface(chip->dev, fp->iface, 0);
+	return 0;
+}
+
 static int snd_usb_create_quirk(snd_usb_audio_t *chip,
 				struct usb_interface *iface,
 				const snd_usb_audio_quirk_t *quirk);
@@ -2912,6 +2962,8 @@
 		return create_standard_interface_quirk(chip, iface, quirk);
 	case QUIRK_AUDIO_EDIROL_UA700:
 		return create_ua700_quirk(chip, iface);
+	case QUIRK_AUDIO_EDIROL_UA1000:
+		return create_ua1000_quirk(chip, iface);
 	default:
 		snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
 		return -ENXIO;
diff -Nru a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
--- a/sound/usb/usbaudio.h	2004-09-26 10:55:59 -07:00
+++ b/sound/usb/usbaudio.h	2004-09-26 10:55:59 -07:00
@@ -156,6 +156,7 @@
 #define QUIRK_AUDIO_STANDARD_INTERFACE	5
 #define QUIRK_MIDI_STANDARD_INTERFACE	6
 #define QUIRK_AUDIO_EDIROL_UA700	7
+#define QUIRK_AUDIO_EDIROL_UA1000	8
 
 typedef struct snd_usb_audio_quirk snd_usb_audio_quirk_t;
 typedef struct snd_usb_midi_endpoint_info snd_usb_midi_endpoint_info_t;
@@ -187,7 +188,7 @@
 
 /* for QUIRK_AUDIO/MIDI_STANDARD_INTERFACE, data is NULL */
 
-/* for QUIRK_AUDIO_EDIROL_UA700, data is NULL */
+/* for QUIRK_AUDIO_EDIROL_UA700/1000, data is NULL */
 
 /*
  */
diff -Nru a/sound/usb/usbmixer_maps.c b/sound/usb/usbmixer_maps.c
--- a/sound/usb/usbmixer_maps.c	2004-09-26 10:55:59 -07:00
+++ b/sound/usb/usbmixer_maps.c	2004-09-26 10:55:59 -07:00
@@ -91,6 +91,14 @@
 	{ 0 } /* terminator */
 };
 
+/* LineX FM Transmitter entry - needed to bypass controls bug */
+static struct usbmix_name_map linex_map[] = {
+	/* 1: IT pcm */
+	/* 2: OT Speaker */ 
+	{ 3, "Master" }, /* FU: master volume - left / right / mute */
+	{ 0 } /* terminator */
+};
+
 /* Section "justlink_map" below added by James Courtier-Dutton <James@superbug.demon.co.uk>
  * sourced from Maplin Electronics (http://www.maplin.co.uk), part number A56AK
  * Part has 2 connectors that act as a single output. (TOSLINK Optical for digital out, and 3.5mm Jack for Analogue out.)
@@ -120,6 +128,7 @@
 
 static struct usbmix_ctl_map usbmix_ctl_maps[] = {
 	{ 0x41e, 0x3000, extigy_map, 1 },
+	{ 0x8bb, 0x2702, linex_map, 1 },
 	{ 0xc45, 0x1158, justlink_map, 0 },
 	{ 0 } /* terminator */
 };
diff -Nru a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
--- a/sound/usb/usbquirks.h	2004-09-26 10:55:59 -07:00
+++ b/sound/usb/usbquirks.h	2004-09-26 10:55:59 -07:00
@@ -638,37 +638,11 @@
 		.data = (const snd_usb_audio_quirk_t[]) {
 			{
 				.ifnum = 1,
-				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
-				.data = & (const struct audioformat) {
-					.format = SNDRV_PCM_FORMAT_S24,
-					.channels = 12,
-					.iface = 1,
-					.altsetting = 1,
-					.altset_idx = 1,
-					.attributes = 0,
-					.endpoint = 0x81,
-					.ep_attr = 0x01,
-					.rates = SNDRV_PCM_RATE_CONTINUOUS,
-					.rate_min = 48000,
-					.rate_max = 48000,
-				}
+				.type = QUIRK_AUDIO_EDIROL_UA1000
 			},
 			{
 				.ifnum = 2,
-				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
-				.data = & (const struct audioformat) {
-					.format = SNDRV_PCM_FORMAT_S24,
-					.channels = 10,
-					.iface = 2,
-					.altsetting = 1,
-					.altset_idx = 1,
-					.attributes = 0,
-					.endpoint = 0x02,
-					.ep_attr = 0x01,
-					.rates = SNDRV_PCM_RATE_CONTINUOUS,
-					.rate_min = 48000,
-					.rate_max = 48000,
-				}
+				.type = QUIRK_AUDIO_EDIROL_UA1000
 			},
 			{
 				.ifnum = 3,